InAppNotificationSubstance.tsx 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import React from 'react';
  2. import { useTranslation } from 'next-i18next';
  3. import InAppNotificationList from '~/components/InAppNotification/InAppNotificationList';
  4. import { InAppNotificationStatuses } from '~/interfaces/in-app-notification';
  5. import { useSWRxInAppNotifications } from '~/stores/in-app-notification';
  6. type InAppNotificationFormsProps = {
  7. onChangeUnopendNotificationsVisible: () => void
  8. }
  9. export const InAppNotificationForms = (props: InAppNotificationFormsProps): JSX.Element => {
  10. const { onChangeUnopendNotificationsVisible } = props;
  11. const { t } = useTranslation('commons');
  12. return (
  13. <div className="my-2">
  14. <div className="form-check form-switch">
  15. <label className="form-check-label" htmlFor="flexSwitchCheckDefault">{t('in_app_notification.only_unread')}</label>
  16. <input
  17. id="flexSwitchCheckDefault"
  18. className="form-check-input"
  19. type="checkbox"
  20. role="switch"
  21. onChange={onChangeUnopendNotificationsVisible}
  22. />
  23. </div>
  24. </div>
  25. );
  26. };
  27. type InAppNotificationContentProps = {
  28. isUnopendNotificationsVisible: boolean
  29. }
  30. export const InAppNotificationContent = (props: InAppNotificationContentProps): JSX.Element => {
  31. const { isUnopendNotificationsVisible } = props;
  32. const { t } = useTranslation('commons');
  33. // TODO: Infinite scroll implemented (https://redmine.weseek.co.jp/issues/138057)
  34. const { data: inAppNotificationData, mutate: mutateInAppNotificationData } = useSWRxInAppNotifications(
  35. 6,
  36. undefined,
  37. isUnopendNotificationsVisible ? InAppNotificationStatuses.STATUS_UNOPENED : undefined,
  38. { keepPreviousData: true },
  39. );
  40. return (
  41. <>
  42. {inAppNotificationData != null && inAppNotificationData.docs.length === 0
  43. // no items
  44. ? t('in_app_notification.no_notification')
  45. // render list-group
  46. : (
  47. <InAppNotificationList
  48. inAppNotificationData={inAppNotificationData}
  49. onUnopenedNotificationOpend={mutateInAppNotificationData}
  50. />
  51. )
  52. }
  53. </>
  54. );
  55. };