in-app-notification.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import useSWR, { SWRConfiguration, SWRResponse } from 'swr';
  2. import { SupportedTargetModel } from '~/interfaces/activity';
  3. import type { InAppNotificationStatuses, IInAppNotification, PaginateResult } from '~/interfaces/in-app-notification';
  4. import * as userSerializers from '~/models/serializers/in-app-notification-snapshot/user';
  5. import loggerFactory from '~/utils/logger';
  6. import { apiv3Get } from '../client/util/apiv3-client';
  7. const logger = loggerFactory('growi:cli:InAppNotification');
  8. type inAppNotificationPaginateResult = PaginateResult<IInAppNotification>
  9. export const useSWRxInAppNotifications = (
  10. limit: number,
  11. offset?: number,
  12. status?: InAppNotificationStatuses,
  13. config?: SWRConfiguration,
  14. ): SWRResponse<PaginateResult<IInAppNotification>, Error> => {
  15. return useSWR(
  16. ['/in-app-notification/list', limit, offset, status],
  17. ([endpoint]) => apiv3Get(endpoint, { limit, offset, status }).then((response) => {
  18. const inAppNotificationPaginateResult = response.data as inAppNotificationPaginateResult;
  19. inAppNotificationPaginateResult.docs.forEach((doc) => {
  20. try {
  21. if (doc.targetModel === SupportedTargetModel.MODEL_USER) {
  22. doc.parsedSnapshot = userSerializers.parseSnapshot(doc.snapshot);
  23. }
  24. }
  25. catch (err) {
  26. logger.warn('Failed to parse snapshot', err);
  27. }
  28. });
  29. return inAppNotificationPaginateResult;
  30. }),
  31. config,
  32. );
  33. };
  34. export const useSWRxInAppNotificationStatus = (
  35. ): SWRResponse<number, Error> => {
  36. return useSWR(
  37. '/in-app-notification/status',
  38. endpoint => apiv3Get(endpoint).then(response => response.data.count),
  39. );
  40. };