InAppNotification.tsx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import { type JSX, Suspense, useState } from 'react';
  2. import dynamic from 'next/dynamic';
  3. import { useTranslation } from 'react-i18next';
  4. import ItemsTreeContentSkeleton from '../../ItemsTree/ItemsTreeContentSkeleton';
  5. import { InAppNotificationForms } from './InAppNotificationForms';
  6. export type FilterType = 'all' | 'news' | 'notifications';
  7. const InAppNotificationContent = dynamic(
  8. () =>
  9. import('./InAppNotificationContent').then(
  10. (mod) => mod.InAppNotificationContent,
  11. ),
  12. { ssr: false },
  13. );
  14. export const InAppNotification = (): JSX.Element => {
  15. const { t } = useTranslation();
  16. const [isUnopendNotificationsVisible, setUnopendNotificationsVisible] =
  17. useState(false);
  18. const [activeFilter, setActiveFilter] = useState<FilterType>('all');
  19. return (
  20. <div className="px-3">
  21. <div className="grw-sidebar-content-header py-4 d-flex">
  22. <h3 className="fs-6 fw-bold mb-0">{t('In-App Notification')}</h3>
  23. </div>
  24. <InAppNotificationForms
  25. isUnopendNotificationsVisible={isUnopendNotificationsVisible}
  26. onChangeUnopendNotificationsVisible={() => {
  27. setUnopendNotificationsVisible(!isUnopendNotificationsVisible);
  28. }}
  29. activeFilter={activeFilter}
  30. onChangeFilter={setActiveFilter}
  31. />
  32. <Suspense fallback={<ItemsTreeContentSkeleton />}>
  33. <InAppNotificationContent
  34. isUnopendNotificationsVisible={isUnopendNotificationsVisible}
  35. activeFilter={activeFilter}
  36. />
  37. </Suspense>
  38. </div>
  39. );
  40. };