index.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import type { FC } from 'react';
  2. import type { HasObjectId } from '@growi/core';
  3. import type { IInAppNotification } from '~/interfaces/in-app-notification';
  4. import { useAuditLogBulkExportJobModelNotification } from './AuditLogBulkExportJobModelNotification';
  5. import { usePageBulkExportJobModelNotification } from './PageBulkExportJobModelNotification';
  6. import { usePageModelNotification } from './PageModelNotification';
  7. import { useUserModelNotification } from './UserModelNotification';
  8. export interface ModelNotificationUtils {
  9. Notification: FC;
  10. publishOpen?: () => void;
  11. clickLink?: string;
  12. // Whether actions from clicking notification is disabled or not.
  13. // User can still open the notification when true.
  14. isDisabled?: boolean;
  15. }
  16. export const useModelNotification = (
  17. notification: IInAppNotification & HasObjectId,
  18. ): ModelNotificationUtils | null => {
  19. const pageModelNotificationUtils = usePageModelNotification(notification);
  20. const userModelNotificationUtils = useUserModelNotification(notification);
  21. const pageBulkExportResultModelNotificationUtils =
  22. usePageBulkExportJobModelNotification(notification);
  23. const auditLogBulkExportJobModelNotificationUtils =
  24. useAuditLogBulkExportJobModelNotification(notification);
  25. const modelNotificationUtils =
  26. pageModelNotificationUtils ??
  27. userModelNotificationUtils ??
  28. pageBulkExportResultModelNotificationUtils ??
  29. auditLogBulkExportJobModelNotificationUtils;
  30. return modelNotificationUtils;
  31. };