{"version":3,"file":"RemindersWidget.mjs","names":["React","forwardRef","useCallback","useEffect","useMemo","useState","WidgetCard","RemindersCard","FluentButton","CircularProgress","makeStyles","FormControlLabel","Switch","useTranslation","useUser","getSearchIdentifiers","getSearchObject","executeQueryAdHoc","executeQueryWithParameters","getBaseMethod","LogicalSearchOperatorEnums","UdpEnums","UdpReminderFiledForType","useActionState","useHandleAxiosSnackbar","FluentIconButton","SortIcon","Alert","v4","uuid","useStyles","theme","root","actions","display","alignItems","width","justifyContent","actionButton","marginRight","spacing","position","fabProgress","top","left","zIndex","RemindersWidget","props","ref","children","params","setParam","other","onLoadedNodeClick","hideWidgetName","tree","catalogObjects","sortDirection","setSortDirection","reminders","setReminders","loading","setLoading","allRemindersRequested","setAllRemindersRequested","buttonProgress","setButtonProgress","alertWarnings","setAlertWarnings","classes","actionState","catalogPromotedEntities","handleErrorSnackbar","t","user","reminderFiledForSearchApiMethod","Udp_Reminder_Filed_For","updateReminderApiMethod","Udp_Reminder","currentSortDirection","getNodeToLoad","reminder","nodeToLoad","domainObject","entityBusinessKey","treeStructureId","apiMethodId","matchingNode","treeStructure","find","node","properties","catalogReturnObject","id","parentId","apiMethodInstance","associatedInquiryTree","searchIdentifiers","filterElements","searchValue","split","values","forEach","searchIdentifier","index","searchField","charAt","toUpperCase","slice","push","searchOperator","queryPayload","And","nodeDetails","getIcon","defaultIcon","sortByDate","reminderList","direction","sortedReminders","sort","a","b","Date","reminderDate","getReminders","allRequested","rffSearchApiMethod","remindersList","warnings","groupId","System","User","filterGroups","logicalSearchOperator","parentGroupId","Or","searchObject","data","severity","message","defaultValue","response","catch","e","status","pageList","length","map","item","filedToType","type","treeDomains","filter","includes","updateRemindersAcknowledgement","updatedPromises","acknowledged","checked","requestBody","Promise","all","p","then","responses","matchingReminder","nftu","value","console","warn","handleAcknowledgeClick","acknowledgedReminders","r","handleSwitchChange","event","target","stopPropagation","warning"],"sources":["../../../../../src/UI/widgets/library/RemindersWidget/RemindersWidget.jsx"],"sourcesContent":["import React, {\n  forwardRef,\n  useCallback,\n  useEffect,\n  useMemo,\n  useState\n} from 'react';\nimport WidgetCard from '../../WidgetCard';\nimport { RemindersCard } from '../../../../reminders/RemindersCard';\nimport { FluentButton } from '../../../inputs/buttons/FluentButton';\nimport {\n  CircularProgress,\n  makeStyles,\n  FormControlLabel,\n  Switch\n} from '@material-ui/core';\nimport { useTranslation } from 'react-i18next';\nimport { useUser } from '../../../../utilities/auth/useUser';\nimport {\n  getSearchIdentifiers,\n  getSearchObject\n} from '../../../../utilities/search/SearchUtilities';\nimport {\n  executeQueryAdHoc,\n  executeQueryWithParameters,\n  getBaseMethod\n} from '../../../../udp/utilities/methodUtils';\nimport {\n  LogicalSearchOperatorEnums,\n  UdpEnums,\n  UdpReminderFiledForType\n} from '../../../../enums/unitySystemEnums';\nimport { useActionState } from '../../../../hooks/useActions';\nimport { useHandleAxiosSnackbar } from '../../../../utilities/apiHelpers';\nimport { FluentIconButton } from '../../../inputs/buttons/FluentIconButton';\nimport { SortIcon } from '@fluentui/react-icons';\nimport { Alert } from '@material-ui/lab';\nimport { v4 as uuid } from 'uuid';\n\n// export const layout = {\n//   w: { default: 2, min: 0, max: 4 },\n//   h: { default: 2, min: 0, max: 4 }\n// };\n\nconst useStyles = makeStyles((theme) => ({\n  root: {},\n  actions: {\n    display: 'flex',\n    alignItems: 'center',\n    width: '100%',\n    justifyContent: 'flex-end'\n  },\n  actionButton: {\n    marginRight: theme.spacing(0.25),\n    position: 'relative'\n  },\n  fabProgress: {\n    position: 'absolute',\n    top: 4,\n    left: '35%',\n    zIndex: 1\n  }\n}));\n\nexport const RemindersWidget = (props, ref) => {\n  const { children, params, setParam, ...other } = props;\n  const { onLoadedNodeClick, hideWidgetName, tree, catalogObjects } = params;\n\n  const [sortDirection, setSortDirection] = useState(null);\n  const [reminders, setReminders] = useState(null);\n  const [loading, setLoading] = useState(false);\n  const [allRemindersRequested, setAllRemindersRequested] = useState(false);\n  const [buttonProgress, setButtonProgress] = useState(false);\n  const [alertWarnings, setAlertWarnings] = useState([]);\n\n  const classes = useStyles(props);\n  const actionState = useActionState();\n  const { catalogPromotedEntities } = actionState;\n  const { handleErrorSnackbar } = useHandleAxiosSnackbar();\n  const { t } = useTranslation();\n  const user = useUser();\n\n  const reminderFiledForSearchApiMethod = useMemo(() => {\n    return getBaseMethod(\n      UdpEnums.Udp_Reminder_Filed_For,\n      'unityBaseSearchMethod',\n      catalogPromotedEntities\n    );\n  }, [catalogPromotedEntities]);\n\n  const updateReminderApiMethod = useMemo(() => {\n    return getBaseMethod(\n      UdpEnums.Udp_Reminder,\n      'unityBaseUpdateMethod',\n      catalogPromotedEntities\n    );\n  }, [catalogPromotedEntities]);\n\n  const currentSortDirection = useMemo(() => {\n    if (sortDirection === 'asc') {\n      return 'desc';\n    } else if (sortDirection === 'desc') {\n      return 'asc';\n    } else {\n      return null;\n    }\n  }, [sortDirection]);\n\n  const getNodeToLoad = useCallback(\n    (reminder) => {\n      const nodeToLoad = {};\n      const domainObject = reminder?.domainObject;\n      const entityBusinessKey = reminder?.entityBusinessKey || '';\n      let treeStructureId = '';\n      let apiMethodId = '';\n      const matchingNode = tree?.treeStructure?.find(\n        (node) => node.properties?.catalogReturnObject === domainObject\n      );\n\n      if (matchingNode) {\n        treeStructureId = matchingNode.id;\n        if (!matchingNode.parentId) {\n          apiMethodId = tree.apiMethodInstance.apiMethodId;\n        } else {\n          const associatedInquiryTree =\n            matchingNode.properties?.associatedInquiryTree;\n          if (associatedInquiryTree) {\n            apiMethodId =\n              associatedInquiryTree.apiMethodInstance?.apiMethodId || '';\n          }\n        }\n      }\n      nodeToLoad.apiMethodId = apiMethodId;\n\n      const searchIdentifiers = getSearchIdentifiers(\n        catalogObjects,\n        domainObject\n      );\n      const filterElements = [];\n      const searchValue = entityBusinessKey.split('|')?.[1];\n      const values = searchValue.split(',');\n\n      searchIdentifiers.forEach((searchIdentifier, index) => {\n        const searchField = searchIdentifier\n          ? searchIdentifier.charAt(0).toUpperCase() + searchIdentifier.slice(1)\n          : '';\n        filterElements.push({\n          searchField: searchField,\n          searchOperator: '=',\n          searchValue: values[index]\n        });\n      });\n\n      nodeToLoad.queryPayload = getSearchObject(\n        filterElements,\n        1,\n        50,\n        true,\n        LogicalSearchOperatorEnums.And\n      );\n\n      nodeToLoad.nodeDetails = {\n        catalogReturnObject: domainObject,\n        treeStructureId: treeStructureId\n      };\n\n      return nodeToLoad;\n    },\n    [tree, catalogObjects]\n  );\n\n  const getIcon = useCallback(\n    (reminder) => {\n      const domainObject = reminder?.domainObject;\n      const matchingNode = tree?.treeStructure?.find(\n        (node) => node.properties?.catalogReturnObject === domainObject\n      );\n      return matchingNode?.properties?.defaultIcon || {};\n    },\n    [tree]\n  );\n\n  const sortByDate = useCallback((reminderList, direction) => {\n    const sortedReminders = [...reminderList];\n    if (direction === 'asc') {\n      sortedReminders.sort(\n        (a, b) => new Date(b.reminderDate) - new Date(a.reminderDate)\n      );\n    } else if (direction === 'desc') {\n      sortedReminders.sort(\n        (a, b) => new Date(a.reminderDate) - new Date(b.reminderDate)\n      );\n    }\n    setReminders(sortedReminders);\n  }, []);\n\n  const sort = useCallback(() => {\n    sortByDate(reminders, sortDirection || 'desc');\n    if (sortDirection === 'desc' || !sortDirection) {\n      setSortDirection('asc');\n    } else if (sortDirection === 'asc') {\n      setSortDirection('desc');\n    }\n  }, [reminders, sortByDate, sortDirection]);\n\n  const getReminders = useCallback(\n    async (allRequested = false, rffSearchApiMethod) => {\n      let remindersList = [];\n      const warnings = [];\n\n      if (!reminders) {\n        setLoading(true);\n      }\n\n      let filterElements = [\n        {\n          searchField: 'Reminder.Acknowledged',\n          searchValue: false,\n          searchOperator: '=',\n          groupId: 1\n        },\n        {\n          searchField: 'Reminder.ReminderDate',\n          searchValue: new Date(),\n          searchOperator: '<=',\n          groupId: 1\n        },\n        {\n          searchField: 'Type',\n          searchValue: UdpReminderFiledForType.System,\n          searchOperator: '=',\n          groupId: 2\n        },\n        {\n          searchField: 'Type',\n          searchValue: UdpReminderFiledForType.User,\n          searchOperator: '=',\n          groupId: 3\n        },\n\n        {\n          searchField: 'Reminder.UnityUserID',\n          searchValue: user.id,\n          searchOperator: '=',\n          groupId: 3\n        }\n      ];\n\n      let filterGroups = [\n        {\n          groupId: 1,\n          logicalSearchOperator: LogicalSearchOperatorEnums.And,\n          parentGroupId: null\n        },\n        {\n          groupId: 2,\n          logicalSearchOperator: LogicalSearchOperatorEnums.Or,\n          parentGroupId: null\n        },\n        {\n          groupId: 3,\n          logicalSearchOperator: LogicalSearchOperatorEnums.And,\n          parentGroupId: 2\n        }\n      ];\n\n      if (allRequested) {\n        filterElements = [\n          {\n            searchField: 'Type',\n            searchValue: UdpReminderFiledForType.System,\n            searchOperator: '=',\n            groupId: 2\n          },\n          {\n            searchField: 'Type',\n            searchValue: UdpReminderFiledForType.User,\n            searchOperator: '=',\n            groupId: 3\n          },\n          {\n            searchField: 'Reminder.UnityUserID',\n            searchValue: user.id,\n            searchOperator: '=',\n            groupId: 3\n          }\n        ];\n\n        filterGroups = [\n          {\n            groupId: 2,\n            logicalSearchOperator: LogicalSearchOperatorEnums.Or,\n            parentGroupId: null\n          },\n          {\n            groupId: 3,\n            logicalSearchOperator: LogicalSearchOperatorEnums.And,\n            parentGroupId: 2\n          }\n        ];\n      }\n\n      const searchObject = getSearchObject(\n        filterElements,\n        1,\n        200,\n        true,\n        LogicalSearchOperatorEnums.And,\n        filterGroups\n      );\n      const data = { data: searchObject };\n\n      if (rffSearchApiMethod) {\n        if (!rffSearchApiMethod.apiMethodId) {\n          warnings.push({\n            id: uuid(),\n            severity: 'warning',\n            message: t('ui.widgets.reminders.searchMethodNotPromoted', {\n              defaultValue: 'Search ReminderFiledFor Method Not Promoted'\n            })\n          });\n        } else {\n          const response = await executeQueryAdHoc(\n            data,\n            rffSearchApiMethod.apiMethodId\n          ).catch((e) => {\n            setLoading(false);\n          });\n\n          if (response?.status === 200) {\n            const pageList = response.data.pageList;\n            if (pageList?.length) {\n              remindersList = pageList.map((item) => ({\n                ...item.reminder,\n                domainObject: item.domainObject,\n                filedToType: item.type,\n                entityBusinessKey: item.entityBusinessKey\n              }));\n            }\n          } else {\n            warnings.push({\n              id: uuid(),\n              severity: 'error',\n              message: t('ui.widgets.reminders.retrieveError', {\n                defaultValue: 'Could not retrieve reminders'\n              })\n            });\n          }\n        }\n      }\n      // Filter for reminders that belong to any of the domains within the tree\n      const treeDomains = tree?.treeStructure.map(\n        (node) => node.properties?.catalogReturnObject\n      );\n      if (treeDomains.length) {\n        remindersList = remindersList.filter((reminder) =>\n          treeDomains.includes(reminder.domainObject)\n        );\n      } else {\n        remindersList = [];\n      }\n      setAlertWarnings(warnings);\n      setLoading(false);\n      sortByDate(remindersList, currentSortDirection);\n    },\n    [t, user, reminders, sortByDate, currentSortDirection, tree]\n  );\n\n  const updateRemindersAcknowledgement = useCallback(\n    async (reminders) => {\n      if (updateReminderApiMethod) {\n        const updatedPromises = [];\n        reminders.forEach((reminder) => {\n          reminder.acknowledged = reminder.checked;\n          const data = {\n            requestBody: {\n              ...reminder\n            }\n          };\n          data['{iD}'] = reminder.id;\n          updatedPromises.push(\n            executeQueryWithParameters(\n              { data },\n              updateReminderApiMethod.apiMethodId\n            )\n          );\n        });\n        await Promise.all(updatedPromises.map((p) => p.catch((e) => e))).then(\n          (responses) => {\n            responses.forEach((response) => {\n              if (response.status === 200) {\n                const entityBusinessKey = response.data.entityBusinessKey;\n                const matchingReminder = reminders?.find(\n                  (nftu) => nftu.value === entityBusinessKey\n                );\n                if (!matchingReminder) {\n                  console.warn(`Reminder not updated for all file to entities`);\n                }\n              }\n            });\n          }\n        );\n      } else {\n        handleErrorSnackbar(\n          null,\n          t('ui.widgets.reminders.updateMethodNotPromoted', {\n            defaultValue: 'Update Reminder Method Not Promoted'\n          })\n        );\n      }\n    },\n    [updateReminderApiMethod, handleErrorSnackbar, t]\n  );\n\n  const handleAcknowledgeClick = useCallback(async () => {\n    const acknowledgedReminders = reminders?.filter((r) => r.checked);\n    if (acknowledgedReminders.length) {\n      setButtonProgress(true);\n      await updateRemindersAcknowledgement(acknowledgedReminders);\n      setButtonProgress(false);\n      getReminders(allRemindersRequested, reminderFiledForSearchApiMethod);\n    }\n  }, [\n    reminders,\n    getReminders,\n    updateRemindersAcknowledgement,\n    allRemindersRequested,\n    reminderFiledForSearchApiMethod\n  ]);\n\n  const handleSwitchChange = useCallback(\n    (event) => {\n      // Only show the spinner if the effect will actually fetch (and therefore\n      // clear loading); otherwise it would stick on until the method resolves.\n      if (reminderFiledForSearchApiMethod) {\n        setLoading(true);\n      }\n      setAllRemindersRequested(event.target.checked);\n    },\n    [reminderFiledForSearchApiMethod]\n  );\n\n  // getReminders is intentionally omitted from deps because it changes identity\n  // on every fetch (depends on `reminders`), which would cause an infinite loop.\n  useEffect(() => {\n    if (reminderFiledForSearchApiMethod) {\n      getReminders(allRemindersRequested, reminderFiledForSearchApiMethod);\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [reminderFiledForSearchApiMethod, allRemindersRequested]);\n\n  return (\n    <WidgetCard\n      ref={ref}\n      // title={'Reminders'}\n      hideWidgetName={hideWidgetName}\n      headerActions={\n        <div className={classes.actions}>\n          <FormControlLabel\n            control={\n              <Switch\n                id='udpRecord-RemindersWidget-Switch'\n                udprecordid='udpRecord-RemindersWidget-Switch'\n                size='small'\n                onChange={handleSwitchChange}\n                onMouseDown={(e) => e.stopPropagation()}\n              />\n            }\n            label={t('common.all', { defaultValue: 'All' })}\n            style={{ marginRight: 8 }}\n          />\n          <FluentIconButton\n            id='udpRecord-RemindersWidget-Sort'\n            udprecordid='udpRecord-RemindersWidget-Sort'\n            icon={SortIcon}\n            onClick={sort}\n            style={{ marginRight: 4 }}\n            onMouseDown={(e) => e.stopPropagation()}\n          />\n          <div className={classes.actionButton}>\n            <FluentButton\n              id='udpRecord-RemindersWidget-Complete'\n              udprecordid='udpRecord-RemindersWidget-Complete'\n              variant='contained'\n              color='secondary'\n              onClick={handleAcknowledgeClick}\n              onMouseDown={(e) => e.stopPropagation()}\n            >\n              {buttonProgress && (\n                <CircularProgress\n                  size={24}\n                  color='primary'\n                  className={classes.fabProgress}\n                />\n              )}\n              {t('ui.widgets.reminders.complete', {\n                defaultValue: 'Complete'\n              })}\n            </FluentButton>\n          </div>\n        </div>\n      }\n      {...other}\n    >\n      {alertWarnings.length ? (\n        alertWarnings.map((warning) => (\n          <Alert key={warning.id} severity={warning.severity || 'warning'}>\n            {warning.message || ''}\n          </Alert>\n        ))\n      ) : (\n        <RemindersCard\n          reminders={reminders}\n          setReminders={setReminders}\n          loading={loading}\n          onLoadedNodeClick={onLoadedNodeClick}\n          getNodeToLoad={getNodeToLoad}\n          getIcon={getIcon}\n          updateRemindersAcknowledgement={updateRemindersAcknowledgement}\n        />\n      )}\n\n      {children}\n    </WidgetCard>\n  );\n};\n\nexport default forwardRef(RemindersWidget);\n"],"mappings":"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"}