udp-react-enterprise-component-library 25.14.1-beta.7 → 25.14.1-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Accordion-Cd6gzd60.js → Accordion-DL61AM6M.js} +2 -2
- package/dist/{Accordion-Cd6gzd60.js.map → Accordion-DL61AM6M.js.map} +1 -1
- package/dist/{ActionProvider-BPuiwxd4.js → ActionProvider-DL5qMp-u.js} +2 -2
- package/dist/{ActionProvider-BPuiwxd4.js.map → ActionProvider-DL5qMp-u.js.map} +1 -1
- package/dist/{ActionSplitScreen-Cym0gCOb.js → ActionSplitScreen-x0Bh5GEF.js} +3 -3
- package/dist/{ActionSplitScreen-Cym0gCOb.js.map → ActionSplitScreen-x0Bh5GEF.js.map} +1 -1
- package/dist/{ActionWrapper-CoP91vel.js → ActionWrapper-BRzh3vn0.js} +3 -3
- package/dist/{ActionWrapper-CoP91vel.js.map → ActionWrapper-BRzh3vn0.js.map} +1 -1
- package/dist/{BaseTreeMenu-DmsrGSdA.js → BaseTreeMenu-DHEMztjA.js} +7 -3
- package/dist/BaseTreeMenu-DHEMztjA.js.map +1 -0
- package/dist/{CircleButton-BFASpo5t.js → CircleButton-DBPFjNl1.js} +2 -2
- package/dist/{CircleButton-BFASpo5t.js.map → CircleButton-DBPFjNl1.js.map} +1 -1
- package/dist/{CrudBrowserContainer-Dpgwjt7c.js → CrudBrowserContainer-B8AKH7kQ.js} +9 -4
- package/dist/CrudBrowserContainer-B8AKH7kQ.js.map +1 -0
- package/dist/{EntityHeader-Buq_r4IE.js → EntityHeader-DOoeCEj3.js} +2 -2
- package/dist/{EntityHeader-Buq_r4IE.js.map → EntityHeader-DOoeCEj3.js.map} +1 -1
- package/dist/{FileViewer-C1eQoTDj.js → FileViewer-Bhubf4Uv.js} +2 -2
- package/dist/{FileViewer-C1eQoTDj.js.map → FileViewer-Bhubf4Uv.js.map} +1 -1
- package/dist/{FluentCell-DZ5pFjdC.js → FluentCell-C7lb2y4Z.js} +2 -2
- package/dist/{FluentCell-DZ5pFjdC.js.map → FluentCell-C7lb2y4Z.js.map} +1 -1
- package/dist/{FluentDataTable-C7Ng6Eh3.js → FluentDataTable-C3A36z2b.js} +2 -2
- package/dist/{FluentDataTable-C7Ng6Eh3.js.map → FluentDataTable-C3A36z2b.js.map} +1 -1
- package/dist/{FluentTimeline-ChthjfxZ.js → FluentTimeline-B0VjMqsq.js} +2 -2
- package/dist/{FluentTimeline-ChthjfxZ.js.map → FluentTimeline-B0VjMqsq.js.map} +1 -1
- package/dist/{IconRenderer-8w6JVRET.js → IconRenderer-DiwGfDul.js} +2 -2
- package/dist/{IconRenderer-8w6JVRET.js.map → IconRenderer-DiwGfDul.js.map} +1 -1
- package/dist/{Inquiry-DJ-yrELW.js → Inquiry-UnnTFapw.js} +6 -6
- package/dist/{Inquiry-DJ-yrELW.js.map → Inquiry-UnnTFapw.js.map} +1 -1
- package/dist/{MenuPage-BJsOWc5e.js → MenuPage-D4tvTXC3.js} +4 -4
- package/dist/{MenuPage-0qeyA5lF.js → MenuPage-DJGGAhH5.js} +11 -6
- package/dist/MenuPage-DJGGAhH5.js.map +1 -0
- package/dist/{MttMainTimeline-au5xi1SZ.js → MttMainTimeline-Bme6LQZO.js} +2 -2
- package/dist/{MttMainTimeline-au5xi1SZ.js.map → MttMainTimeline-Bme6LQZO.js.map} +1 -1
- package/dist/{MttSummary-DHB1AW_0.js → MttSummary-CTETqPbU.js} +3 -3
- package/dist/{MttSummary-DHB1AW_0.js.map → MttSummary-CTETqPbU.js.map} +1 -1
- package/dist/{NotesScreen-moR3WUoq.js → NotesScreen-CmMz3GTR.js} +2 -2
- package/dist/{NotesScreen-moR3WUoq.js.map → NotesScreen-CmMz3GTR.js.map} +1 -1
- package/dist/{PageActionWrapper-KtNGraWi.js → PageActionWrapper-HgV0I8Km.js} +2 -2
- package/dist/{PageActionWrapper-KtNGraWi.js.map → PageActionWrapper-HgV0I8Km.js.map} +1 -1
- package/dist/{RecentlyLoadedNodesTable-B5KlS1HR.js → RecentlyLoadedNodesTable-BRxssq07.js} +2 -2
- package/dist/{RecentlyLoadedNodesTable-B5KlS1HR.js.map → RecentlyLoadedNodesTable-BRxssq07.js.map} +1 -1
- package/dist/{RemindersCard-CRstZlRF.js → RemindersCard-BrjYmZVz.js} +2 -2
- package/dist/{RemindersCard-CRstZlRF.js.map → RemindersCard-BrjYmZVz.js.map} +1 -1
- package/dist/{RemindersScreen-C2hcBWnk.js → RemindersScreen-CVTHY97W.js} +2 -2
- package/dist/{RemindersScreen-C2hcBWnk.js.map → RemindersScreen-CVTHY97W.js.map} +1 -1
- package/dist/{Shell-CuYfQQKW.js → Shell-CZIS-LvO.js} +4 -4
- package/dist/{Shell-CuYfQQKW.js.map → Shell-CZIS-LvO.js.map} +1 -1
- package/dist/{TreeUtilities-DVY-2md6.js → TreeUtilities-XLrXtUeL.js} +9 -8
- package/dist/{TreeUtilities-DVY-2md6.js.map → TreeUtilities-XLrXtUeL.js.map} +1 -1
- package/dist/UI/accordion/index.js +2 -2
- package/dist/UI/dataDisplay/FluentDataTable/FluentCell/index.js +2 -2
- package/dist/UI/dataDisplay/FluentDataTable/index.js +3 -3
- package/dist/UI/dataDisplay/entityHeader/index.js +3 -3
- package/dist/UI/dataDisplay/index.js +5 -5
- package/dist/UI/fileViewer/index.js +2 -2
- package/dist/UI/index.js +9 -9
- package/dist/UI/timeline/fluentTimeline/index.js +2 -2
- package/dist/UI/timeline/index.js +2 -2
- package/dist/UI/utilityDisplay/index.js +1 -1
- package/dist/{UdpMaintenanceConfigPage-CC_gwu35.js → UdpMaintenanceConfigPage-DfKk0PmB.js} +1 -1
- package/dist/{UdpMaintenanceConfigPage-yuotrI0g.js → UdpMaintenanceConfigPage-mJ4AkDYp.js} +3 -2
- package/dist/UdpMaintenanceConfigPage-mJ4AkDYp.js.map +1 -0
- package/dist/{UdpMaintenanceEnginePage-o40sezly.js → UdpMaintenanceEnginePage-DAioIeSf.js} +8 -3
- package/dist/UdpMaintenanceEnginePage-DAioIeSf.js.map +1 -0
- package/dist/{UdpMaintenanceEnginePage-b5cm6uW2.js → UdpMaintenanceEnginePage-M0RbzSTX.js} +2 -2
- package/dist/{UdpRoutes-BVVsyngj.js → UdpRoutes-Bjfl5no0.js} +5 -5
- package/dist/{UdpRoutes-BVVsyngj.js.map → UdpRoutes-Bjfl5no0.js.map} +1 -1
- package/dist/{UtilitySideBar-DlCvljVV.js → UtilitySideBar-otYqGPhu.js} +2 -2
- package/dist/UtilitySideBar-otYqGPhu.js.map +1 -0
- package/dist/{WorkflowContainer-DasTFSlY.js → WorkflowContainer-C5zXxhJE.js} +3 -3
- package/dist/{WorkflowContainer-DasTFSlY.js.map → WorkflowContainer-C5zXxhJE.js.map} +1 -1
- package/dist/{WorkflowContainer-C6QfVid-.js → WorkflowContainer-D0Od__D5.js} +4 -4
- package/dist/{WorkflowTreeMenu-Dc9l7jEY.js → WorkflowTreeMenu-BtolZKVF.js} +2 -2
- package/dist/{WorkflowTreeMenu-Dc9l7jEY.js.map → WorkflowTreeMenu-BtolZKVF.js.map} +1 -1
- package/dist/actions/index.js +6 -6
- package/dist/componentSystems/multiThreadTimeline/index.js +5 -5
- package/dist/componentSystems/multiThreadTimeline/mttMainTimeline/index.js +3 -3
- package/dist/componentSystems/multiThreadTimeline/mttSummary/index.js +4 -4
- package/dist/componentSystems/multiThreadTimeline/ui/index.js +3 -3
- package/dist/index.js +146 -62
- package/dist/index.js.map +1 -1
- package/dist/inquiry/dashboard/index.js +3 -3
- package/dist/inquiry/index.js +10 -10
- package/dist/maintenanceEngine/crudBrowser/index.js +1 -1
- package/dist/maintenanceEngine/index.js +1 -1
- package/dist/menuPage/index.js +4 -4
- package/dist/notes/index.js +2 -2
- package/dist/reminders/index.js +3 -3
- package/dist/routes/index.js +1 -1
- package/dist/shell/index.js +12 -12
- package/dist/shell/ui/addUser/index.js +1 -1
- package/dist/shell/ui/appSwitcher/index.js +1 -1
- package/dist/shell/ui/index.js +3 -3
- package/dist/treeMenu/index.js +2 -2
- package/dist/types/UI/charts/types.d.ts +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/menuPage/CustomMenuPage.d.ts +22 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/types/utilities/iconLibrary/index.d.ts +5 -1
- package/dist/types/utilities/tree/TreeUtilities.d.ts +2 -0
- package/dist/udp/pages/index.js +10 -10
- package/dist/{udpPages-WbvmyuOa.js → udpPages-D6t7REhp.js} +7 -7
- package/dist/{udpPages-WbvmyuOa.js.map → udpPages-D6t7REhp.js.map} +1 -1
- package/dist/utilities/DemoJuly/index.js +1 -1
- package/dist/utilities/aggrid/index.js +1 -1
- package/dist/utilities/auth/index.js +1 -1
- package/dist/utilities/catalog/index.js +1 -1
- package/dist/utilities/chatBot/index.js +1 -1
- package/dist/utilities/crud/index.js +1 -1
- package/dist/utilities/customIcons/index.js +1 -1
- package/dist/utilities/entities/index.js +1 -1
- package/dist/utilities/floorplanFunctions/index.js +1 -1
- package/dist/utilities/iconLibrary/index.js +5 -5
- package/dist/utilities/index.js +35 -35
- package/dist/utilities/input/index.js +1 -1
- package/dist/utilities/maintenanceEngine/index.js +1 -1
- package/dist/utilities/menus/index.js +1 -1
- package/dist/utilities/page/index.js +1 -1
- package/dist/utilities/provider/index.js +7 -7
- package/dist/utilities/redirect/index.js +1 -1
- package/dist/utilities/rules/index.js +1 -1
- package/dist/utilities/search/index.js +1 -1
- package/dist/utilities/storage/index.js +1 -1
- package/dist/utilities/style/index.js +1 -1
- package/dist/utilities/tenant/index.js +1 -1
- package/dist/utilities/tree/index.js +2 -2
- package/dist/utilities/uploader/index.js +1 -1
- package/dist/utilities/utilityBar/index.js +1 -1
- package/dist/utilities/workflow/index.js +1 -1
- package/dist/workflow/components/index.js +1 -1
- package/dist/workflow/index.js +6 -6
- package/dist/workflow/menus/index.js +3 -3
- package/export-map.json +7 -5
- package/package.json +2 -2
- package/dist/BaseTreeMenu-DmsrGSdA.js.map +0 -1
- package/dist/CrudBrowserContainer-Dpgwjt7c.js.map +0 -1
- package/dist/MenuPage-0qeyA5lF.js.map +0 -1
- package/dist/UdpMaintenanceConfigPage-yuotrI0g.js.map +0 -1
- package/dist/UdpMaintenanceEnginePage-o40sezly.js.map +0 -1
- package/dist/UtilitySideBar-DlCvljVV.js.map +0 -1
- /package/dist/{DemoJuly-HEFpRiJ1.js → DemoJuly-D7RhIRiO.js} +0 -0
- /package/dist/{addUser-CDUgX71C.js → addUser-CS0LS9_W.js} +0 -0
- /package/dist/{aggrid-D_aCbevC.js → aggrid-C3KMLJBL.js} +0 -0
- /package/dist/{appSwitcher-BXsn0Y7P.js → appSwitcher-DqliMkfh.js} +0 -0
- /package/dist/{auth-DWPlnjpI.js → auth-DLdDsXt6.js} +0 -0
- /package/dist/{catalog-DMuLXcCK.js → catalog-DLo7sqLU.js} +0 -0
- /package/dist/{chatBot-CESOMewn.js → chatBot-dEV9kiqk.js} +0 -0
- /package/dist/{components-DaFrTvLa.js → components-CnnFIob2.js} +0 -0
- /package/dist/{crud-tnZ9W8IE.js → crud-C_ERd-Ed.js} +0 -0
- /package/dist/{customIcons-DbLvDHvX.js → customIcons-BzKpDhOz.js} +0 -0
- /package/dist/{entities-Hs88OmOI.js → entities-Z3wHDYPc.js} +0 -0
- /package/dist/{floorplanFunctions-DI9Q0N4y.js → floorplanFunctions-CyG-A6Ho.js} +0 -0
- /package/dist/{iconLibrary-BzBDlfKa.js → iconLibrary-DkiwUTn0.js} +0 -0
- /package/dist/{input-DVo_b6i8.js → input-Bd3pOKUF.js} +0 -0
- /package/dist/{maintenanceEngine-BbFlaLMV.js → maintenanceEngine-BiIXrgHI.js} +0 -0
- /package/dist/{menus-BZI70wR2.js → menus-CreZRf8_.js} +0 -0
- /package/dist/{menus-DN6GDDqx.js → menus-lneAs-ot.js} +0 -0
- /package/dist/{page-BQMQ1JlA.js → page-DF9Cce_a.js} +0 -0
- /package/dist/{provider-CwOhsp5M.js → provider-CDMCgVZv.js} +0 -0
- /package/dist/{redirect-B0_sESdf.js → redirect-DXdJsOUE.js} +0 -0
- /package/dist/{rules-cVxJYdGG.js → rules-vy1m9JZd.js} +0 -0
- /package/dist/{search-6zyJ3P-2.js → search-By3X_wDu.js} +0 -0
- /package/dist/{storage-ZisRFPrn.js → storage-Dzx9lS99.js} +0 -0
- /package/dist/{style-B_j5O3ww.js → style-DCetPHEb.js} +0 -0
- /package/dist/{tenant-CMcPr3w4.js → tenant-9yY-GOUj.js} +0 -0
- /package/dist/{tree-BLeqwXve.js → tree-n0-Yv6Oq.js} +0 -0
- /package/dist/{ui-CQsw5PPh.js → ui-C4SYLrHn.js} +0 -0
- /package/dist/{uploader-nV12FZ_U.js → uploader-DSBUHOEF.js} +0 -0
- /package/dist/{utilityBar-BCRqW4jk.js → utilityBar-BgOu4S_x.js} +0 -0
- /package/dist/{workflow-Cou_j4_8.js → workflow-Cy4leS9X.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MttSummary-DHB1AW_0.js","names":["uuid","apiMutate","data","filterListGroup","Link","item"],"sources":["../src/componentSystems/multiThreadTimeline/timeline.ts","../src/componentSystems/multiThreadTimeline/mttSummary/MttSummary.jsx"],"sourcesContent":["interface Event {\n id: string | undefined;\n eventTypeID: string | undefined;\n primaryContextID: string | undefined;\n secondaryContextID: string | undefined;\n date: string | undefined;\n transactionType: string | undefined;\n description: string | undefined;\n shortDescription: string | undefined;\n status: number | undefined;\n data1: '';\n}\n\ninterface Thread {\n id: string | undefined;\n name: string | undefined;\n inSummary: boolean;\n queryID: string | undefined;\n iconID: string | undefined;\n mttConfigID: string | undefined;\n events: Array<Event> | undefined;\n}\n\nexport interface Timeline {\n threads: Array<Thread> | undefined;\n}\n\nexport const createTimeline = (threads: Array<any>): Timeline => {\n return { threads };\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { apiMutate } from '../../../utilities/useAxiosMutate';\nimport { IconRenderer } from '../../../UI/templates/ui/renderers/IconRenderer';\nimport { LayoutUnit } from '../../../layout/LayoutUnit';\nimport { createTimeline } from '../timeline.ts';\nimport { SummaryToken } from '../ui/SummaryToken';\nimport {\n CardContent,\n LinearProgress,\n Typography,\n makeStyles\n} from '@material-ui/core';\nimport Skeleton from '@material-ui/lab/Skeleton';\nimport { TimelineTopRowFilter } from '../ui/TimelineTopRowFilter';\nimport { DateWrapper } from '../ui/DateWrapper';\nimport { CircleButton } from '../ui/CircleButton';\nimport { RedEyeIcon } from '@fluentui/react-icons';\nimport { Link } from 'react-router-dom';\nimport { formatDataWithTimelineCategoryName } from '../functions/mttFunctions';\nimport { MttYearTag } from '../ui/MttYearTag';\nimport PropTypes from 'prop-types';\nimport { v4 as uuid } from 'uuid';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n wrapper: {\n background: theme.palette.common.white,\n borderRadius: theme.spacing(0.5),\n overflow: 'hidden'\n },\n launch: {\n marginLeft: theme.spacing(8)\n }\n}));\n\nexport const MttSummary = (props) => {\n const {\n timelineApiMethodInstanceId,\n insightPath = '/mtt-main',\n params\n } = props;\n const [data, setData] = useState([]);\n const [timelineThreads, setTimelineThreads] = useState(null);\n const [timeline, setTimeline] = useState(null);\n const [loading, setLoading] = useState(false);\n const [filters, setFilters] = useState([]);\n const [allFilters, setAllFilters] = useState([]);\n const [compact, setCompact] = useState(true);\n const [filterListGroup, setFilterListGroup] = useState();\n const [filterKey, setFilterKey] = useState(uuid());\n\n const classes = useStyles();\n const preloadLength = 11;\n\n const executeQueryInstance = useCallback(\n async (apiMethodInstanceId, data = {}) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryInstance/${apiMethodInstanceId}`,\n {\n method: 'post'\n },\n { data: data }\n ),\n []\n );\n\n const summaryThreads = useMemo(() => {\n if (!timeline?.threads?.length) {\n return [];\n }\n\n setData(\n formatDataWithTimelineCategoryName(\n timeline.threads.filter((thread) => thread.inSummary)\n )\n );\n return timeline.threads.filter((thread) => thread.inSummary);\n }, [timeline]);\n\n const summaryEvents = useMemo(() => {\n if (!summaryThreads.length) {\n return [];\n }\n return summaryThreads.map((st) => st.events).flat();\n }, [summaryThreads]);\n\n // Get Filter Array\n let filterItems = [];\n summaryThreads &&\n summaryThreads.map((item) => {\n filterItems.push(item.name);\n });\n\n const addFilter = (filter) => {\n if (filters.includes(filter)) {\n const updatedFilter = filters.filter((e) => e !== filter);\n setFilters(updatedFilter);\n } else {\n setFilters([...filters, filter]);\n }\n };\n\n const clearFilters = useCallback(() => {\n setFilters([]);\n }, []);\n\n useEffect(() => {\n const fetchTimelineThreads = async () => {\n const timelineResponse = await executeQueryInstance(\n timelineApiMethodInstanceId\n );\n\n if (timelineResponse?.status === 200) {\n setTimelineThreads(timelineResponse?.data?.pageList || []);\n }\n };\n fetchTimelineThreads();\n }, [executeQueryInstance, timelineApiMethodInstanceId]);\n\n useEffect(() => {\n const fetchThreadEvents = async () => {\n if (!timelineThreads) {\n return null;\n }\n setLoading(true);\n const promises = [];\n const threadList = [];\n timelineThreads.forEach((thread) => {\n promises.push(executeQueryInstance(thread.queryID, { ...params }));\n });\n await Promise.all(\n promises.map((p) =>\n p.catch((e) => {\n setLoading(false);\n return e;\n })\n )\n ).then((responses) => {\n responses.forEach((response, index) => {\n if (response.status === 200) {\n const timelineThread = timelineThreads[index];\n if (response?.data?.pageList) {\n response.data.pageList.forEach(\n (evt) => (evt.threadId = timelineThread.name)\n );\n const thread = {\n ...timelineThread,\n events: response.data.pageList\n };\n threadList.push(thread);\n }\n }\n });\n setLoading(false);\n });\n setTimeline(createTimeline(threadList));\n // setData(formatDataWithTimelineCategoryName(threadList))\n };\n fetchThreadEvents();\n }, [executeQueryInstance, timelineThreads, params]);\n\n useEffect(() => {\n const filterList =\n summaryEvents &&\n summaryEvents.map((item) => {\n return item.threadId;\n });\n setAllFilters(filterList);\n setFilters(filterList);\n }, [summaryEvents]);\n\n useEffect(() => {\n const filterListGroup = [];\n summaryEvents &&\n summaryEvents.map((item) => {\n filterListGroup.push({\n name: item.threadId,\n icon: item.icon,\n color: item.color\n });\n });\n\n const key = 'name';\n\n const arrayUniqueByKey = [\n ...new Map(filterListGroup.map((item) => [item[key], item])).values()\n ];\n\n setFilterKey(uuid());\n setFilterListGroup(arrayUniqueByKey);\n }, [summaryEvents]);\n\n const mappedToDetails =\n data &&\n data\n .map((item) => item.dates)\n .flat()\n .map((item) => item.details)\n .flat();\n\n // for Skeleton preloading\n const summaryLength = summaryThreads.length || preloadLength;\n\n const getMembers = (members) => {\n let events = [];\n\n return members\n .map((mem) => {\n const m = { ...mem };\n if (m.events && m.events.length) {\n events = [...events, ...m.events];\n }\n delete m.events;\n return m;\n })\n .concat(events.length ? getMembers(events) : events);\n };\n\n getMembers(summaryThreads);\n\n const dataConvertedFilter =\n mappedToDetails &&\n mappedToDetails.filter((item) => filters?.includes(item.threadId));\n\n // Feed dataConvertedFilter into the grouping function (this should filter the array of objects before they are grouped)\n\n function groupByMonth(object) {\n let finalObject = [];\n object.forEach((el) => {\n let foundFlag = false;\n finalObject.forEach((foEl) => {\n if (\n foEl.month === el.date.split('/')[0] &&\n foEl.year === el.date.split('/')[2]\n ) {\n foEl.details.push(el);\n foundFlag = true;\n }\n });\n if (!foundFlag) {\n finalObject.push({\n month: el.date.split('/')[0],\n year: el.date.split('/')[2],\n details: [el]\n });\n }\n });\n\n return finalObject;\n }\n\n const SkeletonLoading = () => {\n return (\n <div style={{ marginRight: 48 }}>\n <LayoutUnit unit='nudge' />\n <div style={{ display: 'flex', justifyContent: 'center' }}>\n <Skeleton variant='circle' width={30} height={30} />\n </div>\n <LayoutUnit unit='nudge' />\n <div style={{ display: 'flex', justifyContent: 'center' }}>\n <Skeleton variant='rect' width={1} height={25} />\n </div>\n <Skeleton variant='text' />\n <Skeleton variant='text' />\n <LayoutUnit unit='sm' />\n <Skeleton variant='rect' width={80} height={6} />\n </div>\n );\n };\n\n const preLoading = [...Array(summaryLength).keys()].slice(1);\n\n const dataToSort = data && groupByMonth(dataConvertedFilter);\n\n const sorted = dataToSort.sort(\n (a, b) => a.year - b.year || a.month - b.month\n );\n\n const getYears = [];\n data &&\n dataToSort.map((item) => {\n getYears.push({ year: item.year });\n });\n\n const uniqueYears = [...new Set(getYears.map((item) => item.year))];\n\n return (\n <div>\n <div className={classes.wrapper}>\n {loading && <LinearProgress color='secondary' />}\n <CardContent>\n <div\n style={{\n display: 'flex',\n position: 'relative'\n }}\n >\n <div style={{ flex: 1 }}>\n <Typography variant='h6'>Timeline Summary</Typography>\n <LayoutUnit unit='md' />\n </div>\n\n <div style={{ display: 'flex' }}>\n <div key={filterKey}>\n <TimelineTopRowFilter\n compact={compact}\n setCompact={setCompact}\n onClose={() => setCompact(!compact)}\n filterCall={(type) => addFilter(type)}\n clear={clearFilters}\n filterList={filterItems && filterItems}\n filterListGroup={filterListGroup && filterListGroup}\n />\n </div>\n <div className={classes.launch}>\n <CircleButton\n component={Link}\n to={{\n pathname: insightPath,\n state: {\n timelineApiMethodInstanceId: timelineApiMethodInstanceId\n }\n }}\n >\n <RedEyeIcon />\n </CircleButton>\n </div>\n </div>\n </div>\n <div\n style={{ display: 'flex', overflow: 'scroll', direction: 'rtl' }}\n >\n <div style={{ direction: 'ltr', display: 'flex' }}>\n {loading &&\n preLoading.map((item) => {\n return <SkeletonLoading key={item} />;\n })}\n\n {uniqueYears.map((uniqueYear, index) => (\n <div style={{ display: 'flex' }}>\n {!loading && (\n <MttYearTag year count={12}>\n {uniqueYear}\n </MttYearTag>\n )}\n {summaryEvents &&\n data &&\n sorted.map((item) => {\n if (item.year === uniqueYears[index]) {\n return (\n <DateWrapper\n months={Number(item.month)}\n count={item.details.length}\n >\n {item.details.map((item) => {\n return (\n <div key={item.id}>\n <SummaryToken\n showMonth\n months={[item.date]}\n summary\n icon={\n <IconRenderer\n //noBorder\n removeMargin\n value={{\n color: { hex: '#' + item.color },\n //name: item.icon ? item.icon : 'MessageIcon',\n name: item.icon\n }}\n />\n }\n showToken\n status={\n item.data1 &&\n item.data1.toString().trim() !== ''\n ? null\n : Number(item.data2)\n }\n timelineItem={item.transactionType}\n title={item.shortDescription}\n date={item.date}\n dot={false}\n relative\n amount={item.data1}\n month={Number(item.date.charAt(0))}\n user={item.data3}\n balance={item.data4}\n hidebackground\n />\n </div>\n );\n })}\n </DateWrapper>\n );\n } else return null;\n })}\n </div>\n ))}\n </div>\n </div>\n </CardContent>\n </div>\n </div>\n );\n};\n\nMttSummary.propTypes = {\n timelineApiMethodInstanceId: PropTypes.string.isRequired\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MttSummary-CTETqPbU.js","names":["uuid","apiMutate","data","filterListGroup","Link","item"],"sources":["../src/componentSystems/multiThreadTimeline/timeline.ts","../src/componentSystems/multiThreadTimeline/mttSummary/MttSummary.jsx"],"sourcesContent":["interface Event {\n id: string | undefined;\n eventTypeID: string | undefined;\n primaryContextID: string | undefined;\n secondaryContextID: string | undefined;\n date: string | undefined;\n transactionType: string | undefined;\n description: string | undefined;\n shortDescription: string | undefined;\n status: number | undefined;\n data1: '';\n}\n\ninterface Thread {\n id: string | undefined;\n name: string | undefined;\n inSummary: boolean;\n queryID: string | undefined;\n iconID: string | undefined;\n mttConfigID: string | undefined;\n events: Array<Event> | undefined;\n}\n\nexport interface Timeline {\n threads: Array<Thread> | undefined;\n}\n\nexport const createTimeline = (threads: Array<any>): Timeline => {\n return { threads };\n};\n","import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { apiMutate } from '../../../utilities/useAxiosMutate';\nimport { IconRenderer } from '../../../UI/templates/ui/renderers/IconRenderer';\nimport { LayoutUnit } from '../../../layout/LayoutUnit';\nimport { createTimeline } from '../timeline.ts';\nimport { SummaryToken } from '../ui/SummaryToken';\nimport {\n CardContent,\n LinearProgress,\n Typography,\n makeStyles\n} from '@material-ui/core';\nimport Skeleton from '@material-ui/lab/Skeleton';\nimport { TimelineTopRowFilter } from '../ui/TimelineTopRowFilter';\nimport { DateWrapper } from '../ui/DateWrapper';\nimport { CircleButton } from '../ui/CircleButton';\nimport { RedEyeIcon } from '@fluentui/react-icons';\nimport { Link } from 'react-router-dom';\nimport { formatDataWithTimelineCategoryName } from '../functions/mttFunctions';\nimport { MttYearTag } from '../ui/MttYearTag';\nimport PropTypes from 'prop-types';\nimport { v4 as uuid } from 'uuid';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n wrapper: {\n background: theme.palette.common.white,\n borderRadius: theme.spacing(0.5),\n overflow: 'hidden'\n },\n launch: {\n marginLeft: theme.spacing(8)\n }\n}));\n\nexport const MttSummary = (props) => {\n const {\n timelineApiMethodInstanceId,\n insightPath = '/mtt-main',\n params\n } = props;\n const [data, setData] = useState([]);\n const [timelineThreads, setTimelineThreads] = useState(null);\n const [timeline, setTimeline] = useState(null);\n const [loading, setLoading] = useState(false);\n const [filters, setFilters] = useState([]);\n const [allFilters, setAllFilters] = useState([]);\n const [compact, setCompact] = useState(true);\n const [filterListGroup, setFilterListGroup] = useState();\n const [filterKey, setFilterKey] = useState(uuid());\n\n const classes = useStyles();\n const preloadLength = 11;\n\n const executeQueryInstance = useCallback(\n async (apiMethodInstanceId, data = {}) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryInstance/${apiMethodInstanceId}`,\n {\n method: 'post'\n },\n { data: data }\n ),\n []\n );\n\n const summaryThreads = useMemo(() => {\n if (!timeline?.threads?.length) {\n return [];\n }\n\n setData(\n formatDataWithTimelineCategoryName(\n timeline.threads.filter((thread) => thread.inSummary)\n )\n );\n return timeline.threads.filter((thread) => thread.inSummary);\n }, [timeline]);\n\n const summaryEvents = useMemo(() => {\n if (!summaryThreads.length) {\n return [];\n }\n return summaryThreads.map((st) => st.events).flat();\n }, [summaryThreads]);\n\n // Get Filter Array\n let filterItems = [];\n summaryThreads &&\n summaryThreads.map((item) => {\n filterItems.push(item.name);\n });\n\n const addFilter = (filter) => {\n if (filters.includes(filter)) {\n const updatedFilter = filters.filter((e) => e !== filter);\n setFilters(updatedFilter);\n } else {\n setFilters([...filters, filter]);\n }\n };\n\n const clearFilters = useCallback(() => {\n setFilters([]);\n }, []);\n\n useEffect(() => {\n const fetchTimelineThreads = async () => {\n const timelineResponse = await executeQueryInstance(\n timelineApiMethodInstanceId\n );\n\n if (timelineResponse?.status === 200) {\n setTimelineThreads(timelineResponse?.data?.pageList || []);\n }\n };\n fetchTimelineThreads();\n }, [executeQueryInstance, timelineApiMethodInstanceId]);\n\n useEffect(() => {\n const fetchThreadEvents = async () => {\n if (!timelineThreads) {\n return null;\n }\n setLoading(true);\n const promises = [];\n const threadList = [];\n timelineThreads.forEach((thread) => {\n promises.push(executeQueryInstance(thread.queryID, { ...params }));\n });\n await Promise.all(\n promises.map((p) =>\n p.catch((e) => {\n setLoading(false);\n return e;\n })\n )\n ).then((responses) => {\n responses.forEach((response, index) => {\n if (response.status === 200) {\n const timelineThread = timelineThreads[index];\n if (response?.data?.pageList) {\n response.data.pageList.forEach(\n (evt) => (evt.threadId = timelineThread.name)\n );\n const thread = {\n ...timelineThread,\n events: response.data.pageList\n };\n threadList.push(thread);\n }\n }\n });\n setLoading(false);\n });\n setTimeline(createTimeline(threadList));\n // setData(formatDataWithTimelineCategoryName(threadList))\n };\n fetchThreadEvents();\n }, [executeQueryInstance, timelineThreads, params]);\n\n useEffect(() => {\n const filterList =\n summaryEvents &&\n summaryEvents.map((item) => {\n return item.threadId;\n });\n setAllFilters(filterList);\n setFilters(filterList);\n }, [summaryEvents]);\n\n useEffect(() => {\n const filterListGroup = [];\n summaryEvents &&\n summaryEvents.map((item) => {\n filterListGroup.push({\n name: item.threadId,\n icon: item.icon,\n color: item.color\n });\n });\n\n const key = 'name';\n\n const arrayUniqueByKey = [\n ...new Map(filterListGroup.map((item) => [item[key], item])).values()\n ];\n\n setFilterKey(uuid());\n setFilterListGroup(arrayUniqueByKey);\n }, [summaryEvents]);\n\n const mappedToDetails =\n data &&\n data\n .map((item) => item.dates)\n .flat()\n .map((item) => item.details)\n .flat();\n\n // for Skeleton preloading\n const summaryLength = summaryThreads.length || preloadLength;\n\n const getMembers = (members) => {\n let events = [];\n\n return members\n .map((mem) => {\n const m = { ...mem };\n if (m.events && m.events.length) {\n events = [...events, ...m.events];\n }\n delete m.events;\n return m;\n })\n .concat(events.length ? getMembers(events) : events);\n };\n\n getMembers(summaryThreads);\n\n const dataConvertedFilter =\n mappedToDetails &&\n mappedToDetails.filter((item) => filters?.includes(item.threadId));\n\n // Feed dataConvertedFilter into the grouping function (this should filter the array of objects before they are grouped)\n\n function groupByMonth(object) {\n let finalObject = [];\n object.forEach((el) => {\n let foundFlag = false;\n finalObject.forEach((foEl) => {\n if (\n foEl.month === el.date.split('/')[0] &&\n foEl.year === el.date.split('/')[2]\n ) {\n foEl.details.push(el);\n foundFlag = true;\n }\n });\n if (!foundFlag) {\n finalObject.push({\n month: el.date.split('/')[0],\n year: el.date.split('/')[2],\n details: [el]\n });\n }\n });\n\n return finalObject;\n }\n\n const SkeletonLoading = () => {\n return (\n <div style={{ marginRight: 48 }}>\n <LayoutUnit unit='nudge' />\n <div style={{ display: 'flex', justifyContent: 'center' }}>\n <Skeleton variant='circle' width={30} height={30} />\n </div>\n <LayoutUnit unit='nudge' />\n <div style={{ display: 'flex', justifyContent: 'center' }}>\n <Skeleton variant='rect' width={1} height={25} />\n </div>\n <Skeleton variant='text' />\n <Skeleton variant='text' />\n <LayoutUnit unit='sm' />\n <Skeleton variant='rect' width={80} height={6} />\n </div>\n );\n };\n\n const preLoading = [...Array(summaryLength).keys()].slice(1);\n\n const dataToSort = data && groupByMonth(dataConvertedFilter);\n\n const sorted = dataToSort.sort(\n (a, b) => a.year - b.year || a.month - b.month\n );\n\n const getYears = [];\n data &&\n dataToSort.map((item) => {\n getYears.push({ year: item.year });\n });\n\n const uniqueYears = [...new Set(getYears.map((item) => item.year))];\n\n return (\n <div>\n <div className={classes.wrapper}>\n {loading && <LinearProgress color='secondary' />}\n <CardContent>\n <div\n style={{\n display: 'flex',\n position: 'relative'\n }}\n >\n <div style={{ flex: 1 }}>\n <Typography variant='h6'>Timeline Summary</Typography>\n <LayoutUnit unit='md' />\n </div>\n\n <div style={{ display: 'flex' }}>\n <div key={filterKey}>\n <TimelineTopRowFilter\n compact={compact}\n setCompact={setCompact}\n onClose={() => setCompact(!compact)}\n filterCall={(type) => addFilter(type)}\n clear={clearFilters}\n filterList={filterItems && filterItems}\n filterListGroup={filterListGroup && filterListGroup}\n />\n </div>\n <div className={classes.launch}>\n <CircleButton\n component={Link}\n to={{\n pathname: insightPath,\n state: {\n timelineApiMethodInstanceId: timelineApiMethodInstanceId\n }\n }}\n >\n <RedEyeIcon />\n </CircleButton>\n </div>\n </div>\n </div>\n <div\n style={{ display: 'flex', overflow: 'scroll', direction: 'rtl' }}\n >\n <div style={{ direction: 'ltr', display: 'flex' }}>\n {loading &&\n preLoading.map((item) => {\n return <SkeletonLoading key={item} />;\n })}\n\n {uniqueYears.map((uniqueYear, index) => (\n <div style={{ display: 'flex' }}>\n {!loading && (\n <MttYearTag year count={12}>\n {uniqueYear}\n </MttYearTag>\n )}\n {summaryEvents &&\n data &&\n sorted.map((item) => {\n if (item.year === uniqueYears[index]) {\n return (\n <DateWrapper\n months={Number(item.month)}\n count={item.details.length}\n >\n {item.details.map((item) => {\n return (\n <div key={item.id}>\n <SummaryToken\n showMonth\n months={[item.date]}\n summary\n icon={\n <IconRenderer\n //noBorder\n removeMargin\n value={{\n color: { hex: '#' + item.color },\n //name: item.icon ? item.icon : 'MessageIcon',\n name: item.icon\n }}\n />\n }\n showToken\n status={\n item.data1 &&\n item.data1.toString().trim() !== ''\n ? null\n : Number(item.data2)\n }\n timelineItem={item.transactionType}\n title={item.shortDescription}\n date={item.date}\n dot={false}\n relative\n amount={item.data1}\n month={Number(item.date.charAt(0))}\n user={item.data3}\n balance={item.data4}\n hidebackground\n />\n </div>\n );\n })}\n </DateWrapper>\n );\n } else return null;\n })}\n </div>\n ))}\n </div>\n </div>\n </CardContent>\n </div>\n </div>\n );\n};\n\nMttSummary.propTypes = {\n timelineApiMethodInstanceId: PropTypes.string.isRequired\n};\n"],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ import { UdpEnums } from "./unitySystemEnums-BIMR5AWe.js";
|
|
|
7
7
|
import { useShellStore } from "./shellStore-Bqwtbs_K.js";
|
|
8
8
|
import { useActionState } from "./useActions-CKdp6TpD.js";
|
|
9
9
|
import { getSearchObject } from "./SearchUtilities-CzmJ6hI2.js";
|
|
10
|
-
import { constructBusinessObjectArrFromTree } from "./TreeUtilities-
|
|
10
|
+
import { constructBusinessObjectArrFromTree } from "./TreeUtilities-XLrXtUeL.js";
|
|
11
11
|
import { LayoutUnit } from "./LayoutUnit-fGVQwt6Y.js";
|
|
12
12
|
import { CkRichEditor } from "./CkRichEditor-BzyNk5CH.js";
|
|
13
13
|
import { executeQueryAdHoc, executeQueryWithParameters, getBaseMethod } from "./methodUtils-Bgi0VCWP.js";
|
|
@@ -364,4 +364,4 @@ const NotesScreen = (props) => {
|
|
|
364
364
|
|
|
365
365
|
//#endregion
|
|
366
366
|
export { NotesScreen };
|
|
367
|
-
//# sourceMappingURL=NotesScreen-
|
|
367
|
+
//# sourceMappingURL=NotesScreen-CmMz3GTR.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotesScreen-moR3WUoq.js","names":["note","existingNoteObj"],"sources":["../src/notes/NotesScreen.jsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport { CkRichEditor } from '../UI/inputs/richEditors/CkRichEditor';\nimport { makeStyles, TextField, LinearProgress } from '@material-ui/core';\nimport { Field, Form } from '../utilities/form';\nimport { FluentTextFieldAutoComplete } from '../UI/inputs/textField/FluentTextFieldAutoComplete';\nimport { useTranslation } from 'react-i18next';\nimport { useActionState } from '../hooks/useActions';\nimport { constructBusinessObjectArrFromTree } from '../utilities/tree/TreeUtilities';\nimport { LayoutUnit } from '../layout/LayoutUnit';\nimport { UdpEnums } from '../enums/unitySystemEnums';\nimport { useHandleAxiosSnackbar } from '../utilities/apiHelpers';\nimport { useUser } from '../utilities/auth/useUser';\nimport { differenceWith } from 'lodash';\nimport {\n executeQueryAdHoc,\n getBaseMethod,\n executeQueryWithParameters\n} from '../udp/utilities/methodUtils';\nimport { ShortcutContentFinder } from '../udp/ShortcutContent/ShortcutContentFinder';\nimport { AmbientCard } from '../UI/surfaces/cards/AmbientCard';\nimport { useShellStore } from '../stores/shellStore';\nimport { getSearchObject } from '../utilities/search/SearchUtilities';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n editor: {\n '& .ck-editor__main > .ck-editor__editable_inline': {\n backgroundColor:\n theme?.getThemeData()?.mode === 'dark'\n ? theme.palette.grey[800]\n : theme.palette.grey[100]\n }\n },\n row: {\n display: 'flex',\n justifyContent: 'space-between'\n },\n input: {\n height: 34,\n padding: 0\n },\n formTextInput: {\n fontSize: 14\n },\n labelRoot: {\n fontSize: 14\n }\n}));\n\nexport const NotesScreen = (props) => {\n const {\n formRef,\n onSubmit,\n shortcutContentFinderEnabled,\n id,\n viewOnly,\n reloadNotes\n } = props;\n const [note, setNote] = useState('');\n const [typeOptions, setTypeOptions] = useState([]);\n const [templateOptions, setTemplateOptions] = useState([]);\n const [noteId, setNoteId] = useState(id || '');\n const [existingNoteFiledFor, setExistingNoteFiledFor] = useState([]);\n const [existingNoteObj, setExistingNoteObj] = useState(null);\n const [loading, setLoading] = useState(false);\n const classes = useStyles(props);\n const { t } = useTranslation();\n const actionState = useActionState();\n const shellHidden = useShellStore((state) => state.shellHidden);\n const { menuListState, catalogPromotedEntities } = actionState;\n const { handleSuccessSnackbar, handleErrorSnackbar } =\n useHandleAxiosSnackbar();\n const user = useUser();\n const editorRef = useRef(null);\n\n const selectedMenu = useMemo(() => {\n if (menuListState.menuList.length) {\n return menuListState.menuList[menuListState.selectedMenuIndex] || null;\n }\n return null;\n }, [menuListState]);\n\n const noteGetFullApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Note,\n 'unityBaseGetFullMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const noteTypeSearchApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Note_Type,\n 'unityBaseSearchMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const noteTemplateSearchApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Note_Template,\n 'unityBaseSearchMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const createNoteApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Note,\n 'unityBaseCreateMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const updateNoteApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Note,\n 'unityBaseUpdateMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const createNoteFiledForApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Note_Filed_For,\n 'unityBaseCreateMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const deleteNoteFiledForApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Note_Filed_For,\n 'unityBaseDeleteMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const disabled = useMemo(() => {\n return viewOnly;\n }, [viewOnly]);\n\n const handleSaveNote = useCallback(\n async (values) => {\n let response = null;\n const data = {\n requestBody: {\n tenantId: user?.currentTenantId,\n typeCode: values?.type?.code,\n subject: values?.subject,\n content: values?.note,\n unityUserId: user?.id,\n userDisplayName: `${user?.firstName} ${user?.familyName}`\n }\n };\n if (noteId) {\n if (updateNoteApiMethod) {\n // Set the url parameter for updating note\n data['{iD}'] = noteId;\n response = await executeQueryWithParameters(\n { data },\n updateNoteApiMethod.apiMethodId\n ).catch((e) => handleErrorSnackbar(e, 'Could not Update Note'));\n } else {\n handleErrorSnackbar(null, 'Update Note Method Not Promoted');\n }\n } else {\n if (createNoteApiMethod) {\n response = await executeQueryWithParameters(\n { data },\n createNoteApiMethod.apiMethodId\n ).catch((e) => handleErrorSnackbar(e, 'Could not Save Note'));\n } else {\n handleErrorSnackbar(null, 'Create Note Method Not Promoted');\n }\n }\n\n if (response?.status === 200) {\n if (!noteId) {\n setNoteId(response.data.id || '');\n handleSuccessSnackbar('Note Saved');\n } else {\n handleSuccessSnackbar('Note Updated');\n }\n if (reloadNotes) {\n reloadNotes();\n }\n return response.data.id || noteId;\n }\n\n return noteId;\n },\n [\n createNoteApiMethod,\n updateNoteApiMethod,\n noteId,\n setNoteId,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n user,\n reloadNotes\n ]\n );\n\n const noteFiledForToComparator = (nftc1, nftc2) => {\n return nftc1?.value === nftc2?.value;\n };\n\n const handleNoteFiledFor = useCallback(\n async (values, notedIdToFileFor) => {\n // Get the noteFiledFor objects to delete\n const noteFiledForToDelete = differenceWith(\n existingNoteFiledFor,\n values?.fileTo,\n noteFiledForToComparator\n );\n\n // Get the noteFiledFor objects to create\n const noteFiledForToCreate = differenceWith(\n values?.fileTo,\n existingNoteFiledFor,\n noteFiledForToComparator\n );\n\n if (notedIdToFileFor) {\n if (deleteNoteFiledForApiMethod) {\n const deletedPromises = [];\n noteFiledForToDelete.forEach((nftd) => {\n const data = {};\n data['{noteID}'] = notedIdToFileFor;\n data['{entityBusinessKey}'] = nftd.value;\n deletedPromises.push(\n executeQueryWithParameters(\n { data },\n deleteNoteFiledForApiMethod.apiMethodId\n )\n );\n });\n\n await Promise.all(deletedPromises.map((p) => p.catch((e) => e))).then(\n (responses) => {\n if (responses.length !== deletedPromises.length) {\n console.warn(`Not all Note Filed For deleted`);\n }\n }\n );\n } else {\n handleErrorSnackbar(\n null,\n 'Delete Note Filed For Method Not Promoted'\n );\n }\n\n if (createNoteFiledForApiMethod) {\n const createdPromises = [];\n noteFiledForToCreate.forEach((nftc) => {\n const data = {\n requestBody: {\n noteId: notedIdToFileFor,\n entityBusinessKey: nftc.value\n }\n };\n createdPromises.push(\n executeQueryWithParameters(\n { data },\n createNoteFiledForApiMethod.apiMethodId\n )\n );\n });\n await Promise.all(createdPromises.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 matchingNoteFiledFor = noteFiledForToCreate.find(\n (nftc) => nftc.value === entityBusinessKey\n );\n if (!matchingNoteFiledFor) {\n console.warn(\n `Note Filed For not created for all file to entities`\n );\n }\n }\n });\n }\n );\n setExistingNoteFiledFor(values?.fileTo);\n } else {\n handleErrorSnackbar(\n null,\n 'Create Note Filed For Method Not Promoted'\n );\n }\n }\n },\n [\n createNoteFiledForApiMethod,\n deleteNoteFiledForApiMethod,\n handleErrorSnackbar,\n existingNoteFiledFor,\n setExistingNoteFiledFor\n ]\n );\n\n const handleOnSubmit = useCallback(\n async (values) => {\n if (onSubmit) {\n onSubmit({ note, ...values });\n } else {\n const notedIdToFileFor = await handleSaveNote({ note, ...values });\n await handleNoteFiledFor({ note, ...values }, notedIdToFileFor);\n }\n },\n [note, onSubmit, handleSaveNote, handleNoteFiledFor]\n );\n\n const handleTextEditorChange = (note) => {\n setNote(note);\n };\n\n const onTemplateChange = useCallback(\n (value) => {\n formRef?.current?.form?.change('subject', value?.subject || '');\n const type = typeOptions.find((option) => option.code === value.typeCode);\n formRef?.current?.form?.change('type', type || null);\n setNote(value?.content || '');\n },\n [setNote, formRef, typeOptions]\n );\n\n const handleShortcutOnSelect = useCallback(\n (shortcutContent) => {\n editorRef?.current?.model?.change((writer) => {\n const insertPosition =\n editorRef?.current?.model?.document?.selection?.getFirstPosition();\n writer.remove(\n editorRef?.current?.model?.document?.selection?.getFirstRange()\n );\n writer.insertText(shortcutContent, insertPosition);\n });\n\n setNote(editorRef?.current?.getData());\n },\n [editorRef, setNote]\n );\n\n const fileToOptions = useMemo(() => {\n let options = [];\n if (selectedMenu) {\n options = constructBusinessObjectArrFromTree(selectedMenu);\n }\n return options;\n }, [selectedMenu]);\n\n useEffect(() => {\n // TODO: use getAll noteTypes\n const getTypeOptions = async () => {\n let options = [];\n if (noteTypeSearchApiMethod) {\n const filterElements = [];\n const searchObject = getSearchObject(filterElements, 1, 200, true);\n const data = { data: searchObject };\n const typesResponse = await executeQueryAdHoc(\n data,\n noteTypeSearchApiMethod.apiMethodId\n );\n if (typesResponse?.status === 200) {\n options = typesResponse.data?.pageList;\n }\n }\n setTypeOptions(options);\n };\n getTypeOptions();\n }, [noteTypeSearchApiMethod, setTypeOptions, user]);\n\n useEffect(() => {\n // TODO: use getAll noteTemplates\n const getTemplateOptions = async () => {\n let options = [];\n if (noteTemplateSearchApiMethod) {\n const filterElements = [];\n const searchObject = getSearchObject(filterElements, 1, 200, true);\n const data = { data: searchObject };\n const templatesResponse = await executeQueryAdHoc(\n data,\n noteTemplateSearchApiMethod.apiMethodId\n );\n if (templatesResponse?.status === 200) {\n options = templatesResponse.data?.pageList;\n }\n }\n setTemplateOptions(options);\n };\n getTemplateOptions();\n }, [noteTemplateSearchApiMethod, setTemplateOptions, user]);\n\n useEffect(() => {\n const getExistingNote = async () => {\n let existingNoteObj = null;\n const data = {};\n if (noteGetFullApiMethod) {\n setLoading(true);\n data['{iD}'] = id;\n const noteResponse = await executeQueryWithParameters(\n { data },\n noteGetFullApiMethod.apiMethodId\n ).catch((e) => {\n console.error(e);\n setLoading(false);\n });\n if (noteResponse?.status === 200) {\n existingNoteObj = noteResponse.data;\n }\n }\n setExistingNoteObj(existingNoteObj);\n setNote(existingNoteObj?.content);\n setLoading(false);\n };\n if (id) {\n getExistingNote();\n }\n }, [id, noteGetFullApiMethod]);\n\n useEffect(() => {\n if (!existingNoteObj || !fileToOptions?.length) {\n return;\n }\n const initialFileTos = fileToOptions.filter((option) => {\n return existingNoteObj.noteFiledFor.find(\n (nff) => option.value === nff.entityBusinessKey\n );\n });\n setExistingNoteFiledFor(initialFileTos);\n formRef?.current?.form?.change('fileTo', initialFileTos);\n }, [existingNoteObj, fileToOptions, formRef]);\n\n useEffect(() => {\n if (!existingNoteObj || !typeOptions?.length) {\n return;\n }\n const initialType = typeOptions.find(\n (option) => option.code === existingNoteObj.typeCode\n );\n formRef?.current?.form?.change('type', initialType || null);\n }, [existingNoteObj, typeOptions, formRef]);\n\n useEffect(() => {\n if (!existingNoteObj) {\n return;\n }\n formRef?.current?.form?.change('subject', existingNoteObj?.subject || '');\n }, [existingNoteObj, formRef]);\n\n return (\n <div className={classes.root}>\n {loading && <LinearProgress color='secondary' />}\n <AmbientCard fullWidth={true} header={true}>\n <Form onSubmit={handleOnSubmit} ref={formRef}>\n <Field\n component={FluentTextFieldAutoComplete}\n label={t('File To')}\n name='fileTo'\n id='fileTo'\n fullWidth\n variant='outlined'\n margin='dense'\n size='small'\n options={fileToOptions || []}\n optionKey={'label'}\n required={true}\n limitTags={!viewOnly ? 2 : -1}\n isMultiple={true}\n disabled={disabled}\n />\n <div className={classes.row}>\n <div style={{ width: '100%' }}>\n <Field\n component={FluentTextFieldAutoComplete}\n label={t('Type')}\n name='type'\n id='type'\n fullWidth\n variant='outlined'\n margin='dense'\n size='small'\n options={typeOptions || []}\n optionKey={'name'}\n required={true}\n disabled={disabled}\n />\n </div>\n {!viewOnly && (\n <div style={{ width: '100%', marginLeft: 8 }}>\n <Field\n component={FluentTextFieldAutoComplete}\n label={t('Template')}\n name='template'\n id='template'\n fullWidth\n variant='outlined'\n margin='dense'\n size='small'\n options={templateOptions || []}\n optionKey={'name'}\n additionalOnChangeAction={onTemplateChange}\n />\n </div>\n )}\n </div>\n <Field\n component={TextField}\n label={t('Subject')}\n name='subject'\n id='subject'\n fullWidth\n variant='outlined'\n size='small'\n margin='dense'\n required\n disabled={disabled}\n InputProps={{\n classes: {\n root: classes?.input,\n input: classes?.formTextInput\n }\n }}\n InputLabelProps={{\n classes: {\n root: classes?.labelRoot\n }\n }}\n />\n <LayoutUnit unit='nudge' />\n <CkRichEditor\n handleChange={handleTextEditorChange}\n classes={{ editor: classes.editor }}\n data={note}\n editorRef={editorRef}\n isUsingRef={true}\n readOnly={disabled}\n />\n </Form>\n </AmbientCard>\n <LayoutUnit unit='nudge' />\n {shortcutContentFinderEnabled && (\n <AmbientCard\n fullWidth={true}\n header={true}\n lastChildBottomPadding={'0px'}\n cardContentHeight={`calc(100vh - ${shellHidden ? '568px' : '623px'})`}\n >\n <ShortcutContentFinder onSelect={handleShortcutOnSelect} />\n </AmbientCard>\n )}\n </div>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NotesScreen-CmMz3GTR.js","names":["note","existingNoteObj"],"sources":["../src/notes/NotesScreen.jsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport { CkRichEditor } from '../UI/inputs/richEditors/CkRichEditor';\nimport { makeStyles, TextField, LinearProgress } from '@material-ui/core';\nimport { Field, Form } from '../utilities/form';\nimport { FluentTextFieldAutoComplete } from '../UI/inputs/textField/FluentTextFieldAutoComplete';\nimport { useTranslation } from 'react-i18next';\nimport { useActionState } from '../hooks/useActions';\nimport { constructBusinessObjectArrFromTree } from '../utilities/tree/TreeUtilities';\nimport { LayoutUnit } from '../layout/LayoutUnit';\nimport { UdpEnums } from '../enums/unitySystemEnums';\nimport { useHandleAxiosSnackbar } from '../utilities/apiHelpers';\nimport { useUser } from '../utilities/auth/useUser';\nimport { differenceWith } from 'lodash';\nimport {\n executeQueryAdHoc,\n getBaseMethod,\n executeQueryWithParameters\n} from '../udp/utilities/methodUtils';\nimport { ShortcutContentFinder } from '../udp/ShortcutContent/ShortcutContentFinder';\nimport { AmbientCard } from '../UI/surfaces/cards/AmbientCard';\nimport { useShellStore } from '../stores/shellStore';\nimport { getSearchObject } from '../utilities/search/SearchUtilities';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n editor: {\n '& .ck-editor__main > .ck-editor__editable_inline': {\n backgroundColor:\n theme?.getThemeData()?.mode === 'dark'\n ? theme.palette.grey[800]\n : theme.palette.grey[100]\n }\n },\n row: {\n display: 'flex',\n justifyContent: 'space-between'\n },\n input: {\n height: 34,\n padding: 0\n },\n formTextInput: {\n fontSize: 14\n },\n labelRoot: {\n fontSize: 14\n }\n}));\n\nexport const NotesScreen = (props) => {\n const {\n formRef,\n onSubmit,\n shortcutContentFinderEnabled,\n id,\n viewOnly,\n reloadNotes\n } = props;\n const [note, setNote] = useState('');\n const [typeOptions, setTypeOptions] = useState([]);\n const [templateOptions, setTemplateOptions] = useState([]);\n const [noteId, setNoteId] = useState(id || '');\n const [existingNoteFiledFor, setExistingNoteFiledFor] = useState([]);\n const [existingNoteObj, setExistingNoteObj] = useState(null);\n const [loading, setLoading] = useState(false);\n const classes = useStyles(props);\n const { t } = useTranslation();\n const actionState = useActionState();\n const shellHidden = useShellStore((state) => state.shellHidden);\n const { menuListState, catalogPromotedEntities } = actionState;\n const { handleSuccessSnackbar, handleErrorSnackbar } =\n useHandleAxiosSnackbar();\n const user = useUser();\n const editorRef = useRef(null);\n\n const selectedMenu = useMemo(() => {\n if (menuListState.menuList.length) {\n return menuListState.menuList[menuListState.selectedMenuIndex] || null;\n }\n return null;\n }, [menuListState]);\n\n const noteGetFullApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Note,\n 'unityBaseGetFullMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const noteTypeSearchApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Note_Type,\n 'unityBaseSearchMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const noteTemplateSearchApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Note_Template,\n 'unityBaseSearchMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const createNoteApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Note,\n 'unityBaseCreateMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const updateNoteApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Note,\n 'unityBaseUpdateMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const createNoteFiledForApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Note_Filed_For,\n 'unityBaseCreateMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const deleteNoteFiledForApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Note_Filed_For,\n 'unityBaseDeleteMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const disabled = useMemo(() => {\n return viewOnly;\n }, [viewOnly]);\n\n const handleSaveNote = useCallback(\n async (values) => {\n let response = null;\n const data = {\n requestBody: {\n tenantId: user?.currentTenantId,\n typeCode: values?.type?.code,\n subject: values?.subject,\n content: values?.note,\n unityUserId: user?.id,\n userDisplayName: `${user?.firstName} ${user?.familyName}`\n }\n };\n if (noteId) {\n if (updateNoteApiMethod) {\n // Set the url parameter for updating note\n data['{iD}'] = noteId;\n response = await executeQueryWithParameters(\n { data },\n updateNoteApiMethod.apiMethodId\n ).catch((e) => handleErrorSnackbar(e, 'Could not Update Note'));\n } else {\n handleErrorSnackbar(null, 'Update Note Method Not Promoted');\n }\n } else {\n if (createNoteApiMethod) {\n response = await executeQueryWithParameters(\n { data },\n createNoteApiMethod.apiMethodId\n ).catch((e) => handleErrorSnackbar(e, 'Could not Save Note'));\n } else {\n handleErrorSnackbar(null, 'Create Note Method Not Promoted');\n }\n }\n\n if (response?.status === 200) {\n if (!noteId) {\n setNoteId(response.data.id || '');\n handleSuccessSnackbar('Note Saved');\n } else {\n handleSuccessSnackbar('Note Updated');\n }\n if (reloadNotes) {\n reloadNotes();\n }\n return response.data.id || noteId;\n }\n\n return noteId;\n },\n [\n createNoteApiMethod,\n updateNoteApiMethod,\n noteId,\n setNoteId,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n user,\n reloadNotes\n ]\n );\n\n const noteFiledForToComparator = (nftc1, nftc2) => {\n return nftc1?.value === nftc2?.value;\n };\n\n const handleNoteFiledFor = useCallback(\n async (values, notedIdToFileFor) => {\n // Get the noteFiledFor objects to delete\n const noteFiledForToDelete = differenceWith(\n existingNoteFiledFor,\n values?.fileTo,\n noteFiledForToComparator\n );\n\n // Get the noteFiledFor objects to create\n const noteFiledForToCreate = differenceWith(\n values?.fileTo,\n existingNoteFiledFor,\n noteFiledForToComparator\n );\n\n if (notedIdToFileFor) {\n if (deleteNoteFiledForApiMethod) {\n const deletedPromises = [];\n noteFiledForToDelete.forEach((nftd) => {\n const data = {};\n data['{noteID}'] = notedIdToFileFor;\n data['{entityBusinessKey}'] = nftd.value;\n deletedPromises.push(\n executeQueryWithParameters(\n { data },\n deleteNoteFiledForApiMethod.apiMethodId\n )\n );\n });\n\n await Promise.all(deletedPromises.map((p) => p.catch((e) => e))).then(\n (responses) => {\n if (responses.length !== deletedPromises.length) {\n console.warn(`Not all Note Filed For deleted`);\n }\n }\n );\n } else {\n handleErrorSnackbar(\n null,\n 'Delete Note Filed For Method Not Promoted'\n );\n }\n\n if (createNoteFiledForApiMethod) {\n const createdPromises = [];\n noteFiledForToCreate.forEach((nftc) => {\n const data = {\n requestBody: {\n noteId: notedIdToFileFor,\n entityBusinessKey: nftc.value\n }\n };\n createdPromises.push(\n executeQueryWithParameters(\n { data },\n createNoteFiledForApiMethod.apiMethodId\n )\n );\n });\n await Promise.all(createdPromises.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 matchingNoteFiledFor = noteFiledForToCreate.find(\n (nftc) => nftc.value === entityBusinessKey\n );\n if (!matchingNoteFiledFor) {\n console.warn(\n `Note Filed For not created for all file to entities`\n );\n }\n }\n });\n }\n );\n setExistingNoteFiledFor(values?.fileTo);\n } else {\n handleErrorSnackbar(\n null,\n 'Create Note Filed For Method Not Promoted'\n );\n }\n }\n },\n [\n createNoteFiledForApiMethod,\n deleteNoteFiledForApiMethod,\n handleErrorSnackbar,\n existingNoteFiledFor,\n setExistingNoteFiledFor\n ]\n );\n\n const handleOnSubmit = useCallback(\n async (values) => {\n if (onSubmit) {\n onSubmit({ note, ...values });\n } else {\n const notedIdToFileFor = await handleSaveNote({ note, ...values });\n await handleNoteFiledFor({ note, ...values }, notedIdToFileFor);\n }\n },\n [note, onSubmit, handleSaveNote, handleNoteFiledFor]\n );\n\n const handleTextEditorChange = (note) => {\n setNote(note);\n };\n\n const onTemplateChange = useCallback(\n (value) => {\n formRef?.current?.form?.change('subject', value?.subject || '');\n const type = typeOptions.find((option) => option.code === value.typeCode);\n formRef?.current?.form?.change('type', type || null);\n setNote(value?.content || '');\n },\n [setNote, formRef, typeOptions]\n );\n\n const handleShortcutOnSelect = useCallback(\n (shortcutContent) => {\n editorRef?.current?.model?.change((writer) => {\n const insertPosition =\n editorRef?.current?.model?.document?.selection?.getFirstPosition();\n writer.remove(\n editorRef?.current?.model?.document?.selection?.getFirstRange()\n );\n writer.insertText(shortcutContent, insertPosition);\n });\n\n setNote(editorRef?.current?.getData());\n },\n [editorRef, setNote]\n );\n\n const fileToOptions = useMemo(() => {\n let options = [];\n if (selectedMenu) {\n options = constructBusinessObjectArrFromTree(selectedMenu);\n }\n return options;\n }, [selectedMenu]);\n\n useEffect(() => {\n // TODO: use getAll noteTypes\n const getTypeOptions = async () => {\n let options = [];\n if (noteTypeSearchApiMethod) {\n const filterElements = [];\n const searchObject = getSearchObject(filterElements, 1, 200, true);\n const data = { data: searchObject };\n const typesResponse = await executeQueryAdHoc(\n data,\n noteTypeSearchApiMethod.apiMethodId\n );\n if (typesResponse?.status === 200) {\n options = typesResponse.data?.pageList;\n }\n }\n setTypeOptions(options);\n };\n getTypeOptions();\n }, [noteTypeSearchApiMethod, setTypeOptions, user]);\n\n useEffect(() => {\n // TODO: use getAll noteTemplates\n const getTemplateOptions = async () => {\n let options = [];\n if (noteTemplateSearchApiMethod) {\n const filterElements = [];\n const searchObject = getSearchObject(filterElements, 1, 200, true);\n const data = { data: searchObject };\n const templatesResponse = await executeQueryAdHoc(\n data,\n noteTemplateSearchApiMethod.apiMethodId\n );\n if (templatesResponse?.status === 200) {\n options = templatesResponse.data?.pageList;\n }\n }\n setTemplateOptions(options);\n };\n getTemplateOptions();\n }, [noteTemplateSearchApiMethod, setTemplateOptions, user]);\n\n useEffect(() => {\n const getExistingNote = async () => {\n let existingNoteObj = null;\n const data = {};\n if (noteGetFullApiMethod) {\n setLoading(true);\n data['{iD}'] = id;\n const noteResponse = await executeQueryWithParameters(\n { data },\n noteGetFullApiMethod.apiMethodId\n ).catch((e) => {\n console.error(e);\n setLoading(false);\n });\n if (noteResponse?.status === 200) {\n existingNoteObj = noteResponse.data;\n }\n }\n setExistingNoteObj(existingNoteObj);\n setNote(existingNoteObj?.content);\n setLoading(false);\n };\n if (id) {\n getExistingNote();\n }\n }, [id, noteGetFullApiMethod]);\n\n useEffect(() => {\n if (!existingNoteObj || !fileToOptions?.length) {\n return;\n }\n const initialFileTos = fileToOptions.filter((option) => {\n return existingNoteObj.noteFiledFor.find(\n (nff) => option.value === nff.entityBusinessKey\n );\n });\n setExistingNoteFiledFor(initialFileTos);\n formRef?.current?.form?.change('fileTo', initialFileTos);\n }, [existingNoteObj, fileToOptions, formRef]);\n\n useEffect(() => {\n if (!existingNoteObj || !typeOptions?.length) {\n return;\n }\n const initialType = typeOptions.find(\n (option) => option.code === existingNoteObj.typeCode\n );\n formRef?.current?.form?.change('type', initialType || null);\n }, [existingNoteObj, typeOptions, formRef]);\n\n useEffect(() => {\n if (!existingNoteObj) {\n return;\n }\n formRef?.current?.form?.change('subject', existingNoteObj?.subject || '');\n }, [existingNoteObj, formRef]);\n\n return (\n <div className={classes.root}>\n {loading && <LinearProgress color='secondary' />}\n <AmbientCard fullWidth={true} header={true}>\n <Form onSubmit={handleOnSubmit} ref={formRef}>\n <Field\n component={FluentTextFieldAutoComplete}\n label={t('File To')}\n name='fileTo'\n id='fileTo'\n fullWidth\n variant='outlined'\n margin='dense'\n size='small'\n options={fileToOptions || []}\n optionKey={'label'}\n required={true}\n limitTags={!viewOnly ? 2 : -1}\n isMultiple={true}\n disabled={disabled}\n />\n <div className={classes.row}>\n <div style={{ width: '100%' }}>\n <Field\n component={FluentTextFieldAutoComplete}\n label={t('Type')}\n name='type'\n id='type'\n fullWidth\n variant='outlined'\n margin='dense'\n size='small'\n options={typeOptions || []}\n optionKey={'name'}\n required={true}\n disabled={disabled}\n />\n </div>\n {!viewOnly && (\n <div style={{ width: '100%', marginLeft: 8 }}>\n <Field\n component={FluentTextFieldAutoComplete}\n label={t('Template')}\n name='template'\n id='template'\n fullWidth\n variant='outlined'\n margin='dense'\n size='small'\n options={templateOptions || []}\n optionKey={'name'}\n additionalOnChangeAction={onTemplateChange}\n />\n </div>\n )}\n </div>\n <Field\n component={TextField}\n label={t('Subject')}\n name='subject'\n id='subject'\n fullWidth\n variant='outlined'\n size='small'\n margin='dense'\n required\n disabled={disabled}\n InputProps={{\n classes: {\n root: classes?.input,\n input: classes?.formTextInput\n }\n }}\n InputLabelProps={{\n classes: {\n root: classes?.labelRoot\n }\n }}\n />\n <LayoutUnit unit='nudge' />\n <CkRichEditor\n handleChange={handleTextEditorChange}\n classes={{ editor: classes.editor }}\n data={note}\n editorRef={editorRef}\n isUsingRef={true}\n readOnly={disabled}\n />\n </Form>\n </AmbientCard>\n <LayoutUnit unit='nudge' />\n {shortcutContentFinderEnabled && (\n <AmbientCard\n fullWidth={true}\n header={true}\n lastChildBottomPadding={'0px'}\n cardContentHeight={`calc(100vh - ${shellHidden ? '568px' : '623px'})`}\n >\n <ShortcutContentFinder onSelect={handleShortcutOnSelect} />\n </AmbientCard>\n )}\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { apiMutate as apiMutate$1 } from "./useAxiosMutate-BNEb4J04.js";
|
|
|
2
2
|
import { useActionStore } from "./inquiryStore-COAx0QBg.js";
|
|
3
3
|
import { useShellStore } from "./shellStore-Bqwtbs_K.js";
|
|
4
4
|
import { useActionState } from "./useActions-CKdp6TpD.js";
|
|
5
|
-
import { ActionSplitScreen } from "./ActionSplitScreen-
|
|
5
|
+
import { ActionSplitScreen } from "./ActionSplitScreen-x0Bh5GEF.js";
|
|
6
6
|
import { PageSubHeaderActionsTarget } from "./PageSubHeaderAction-Cw7gmU2W.js";
|
|
7
7
|
import React, { useCallback, useEffect, useMemo, useState } from "react";
|
|
8
8
|
import { ConfigService } from "udp-react-stencil-component-library";
|
|
@@ -52,4 +52,4 @@ const PageActionWrapper = (props) => {
|
|
|
52
52
|
|
|
53
53
|
//#endregion
|
|
54
54
|
export { PageActionWrapper };
|
|
55
|
-
//# sourceMappingURL=PageActionWrapper-
|
|
55
|
+
//# sourceMappingURL=PageActionWrapper-HgV0I8Km.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageActionWrapper-
|
|
1
|
+
{"version":3,"file":"PageActionWrapper-HgV0I8Km.js","names":["apiMutate"],"sources":["../src/actions/PageActionWrapper.jsx"],"sourcesContent":["import React, { useCallback, useState, useEffect, useMemo } from 'react';\nimport { useSnackbar } from 'notistack';\nimport { ActionSplitScreen } from './ActionSplitScreen';\nimport { useActionState } from '../hooks/useActions';\nimport { apiMutate } from '../utilities/useAxiosMutate';\nimport { PageSubHeaderActionsTarget } from '../utilities/page/PageSubHeaderAction';\nimport { useActionStore } from '../stores/actionStore';\nimport { useShellStore } from '../stores/shellStore';\nimport { ConfigService } from 'udp-react-stencil-component-library';\n\nexport const PageActionWrapper = (props) => {\n const {\n children,\n forPageContainer = false,\n splitScreenStateKey = 'pageSplitScreen'\n } = props;\n const [actionPanel, setActionPanel] = useState(null);\n const { enqueueSnackbar } = useSnackbar();\n const actionState = useActionState();\n const selectedNode = useActionStore((state) => state.selectedNode);\n const currentContainerId = useShellStore((state) => state.currentContainerId);\n\n const action = useMemo(() => {\n let selectedAction = null;\n if (actionState) {\n if (actionState.pageSplitScreen?.action) {\n selectedAction = actionState.pageSplitScreen.action;\n }\n }\n\n return selectedAction;\n }, [actionState]);\n\n const executeAction = useCallback(\n async (data, id) =>\n apiMutate(\n ConfigService.integrationV1ApiUrl,\n `apimethod/executeQueryWithParameters/${id}`,\n {\n method: 'post'\n },\n data\n ),\n []\n );\n\n useEffect(() => {\n if (action && actionState) {\n setActionPanel(\n actionState?.actionPanels[currentContainerId || 0]?.find((ap) =>\n ap.panelActions.find((pa) => pa.actionId === action.actionId)\n )\n );\n }\n }, [action, actionState, currentContainerId]);\n\n return (\n <>\n <PageSubHeaderActionsTarget />\n <ActionSplitScreen\n body={children}\n open={actionState?.[splitScreenStateKey]?.open}\n action={actionState?.[splitScreenStateKey]?.action}\n type={actionState?.[splitScreenStateKey]?.type}\n params={actionState?.[splitScreenStateKey]?.params}\n executeAction={executeAction}\n actionPanel={actionPanel}\n enqueueSnackbar={enqueueSnackbar}\n selectedNodeObj={selectedNode?.nodeObj}\n menuNodeList={actionState?.menuListState?.menuList}\n forPage={true}\n forPageContainer={forPageContainer}\n selectedNode={\n actionState?.inquiryParams[currentContainerId || 0]?.selectedNode\n }\n selectedNodeParent={\n actionState?.inquiryParams[currentContainerId || 0]\n ?.selectedNodeParent\n }\n refreshTree={\n actionState?.inquiryParams[currentContainerId || 0]?.refreshTree\n }\n />\n </>\n );\n};\n"],"mappings":";;;;;;;;;;;AAUA,MAAa,qBAAqB,UAAU;CAC1C,MAAM,EACJ,UACA,mBAAmB,OACnB,sBAAsB,sBACpB;CACJ,MAAM,CAAC,aAAa,kBAAkB,SAAS,KAAK;CACpD,MAAM,EAAE,oBAAoB,aAAa;CACzC,MAAM,cAAc,gBAAgB;CACpC,MAAM,eAAe,gBAAgB,UAAU,MAAM,aAAa;CAClE,MAAM,qBAAqB,eAAe,UAAU,MAAM,mBAAmB;CAE7E,MAAM,SAAS,cAAc;EAC3B,IAAI,iBAAiB;AACrB,MAAI,aACF;OAAI,YAAY,iBAAiB,OAC/B,kBAAiB,YAAY,gBAAgB;;AAIjD,SAAO;IACN,CAAC,YAAY,CAAC;CAEjB,MAAM,gBAAgB,YACpB,OAAO,MAAM,OACXA,YACE,cAAc,qBACd,wCAAwC,MACxC,EACE,QAAQ,QACT,EACD,KACD,EACH,EAAE,CACH;AAED,iBAAgB;AACd,MAAI,UAAU,YACZ,gBACE,aAAa,aAAa,sBAAsB,IAAI,MAAM,OACxD,GAAG,aAAa,MAAM,OAAO,GAAG,aAAa,OAAO,SAAS,CAC9D,CACF;IAEF;EAAC;EAAQ;EAAa;EAAmB,CAAC;AAE7C,QACE,0DACE,oCAAC,iCAA6B,EAC9B,oCAAC;EACC,MAAM;EACN,MAAM,cAAc,sBAAsB;EAC1C,QAAQ,cAAc,sBAAsB;EAC5C,MAAM,cAAc,sBAAsB;EAC1C,QAAQ,cAAc,sBAAsB;EAC7B;EACF;EACI;EACjB,iBAAiB,cAAc;EAC/B,cAAc,aAAa,eAAe;EAC1C,SAAS;EACS;EAClB,cACE,aAAa,cAAc,sBAAsB,IAAI;EAEvD,oBACE,aAAa,cAAc,sBAAsB,IAC7C;EAEN,aACE,aAAa,cAAc,sBAAsB,IAAI;GAEvD,CACD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AgTable, useAgGridApi } from "./AgTable-BapmVuyC.js";
|
|
2
2
|
import { getSanitizedName } from "./entityUtilities-D7_FeTEd.js";
|
|
3
3
|
import { AmbientCard } from "./AmbientCard-Cp-eNzrW.js";
|
|
4
|
-
import { IconRenderer } from "./IconRenderer-
|
|
4
|
+
import { IconRenderer } from "./IconRenderer-DiwGfDul.js";
|
|
5
5
|
import { formatDateToLocaleString } from "./DateUtilities-DHTEYbE8.js";
|
|
6
6
|
import React, { useCallback, useEffect, useMemo, useState } from "react";
|
|
7
7
|
import { LinearProgress, Typography } from "@material-ui/core";
|
|
@@ -105,4 +105,4 @@ const RecentlyLoadedNodesTable = (props) => {
|
|
|
105
105
|
|
|
106
106
|
//#endregion
|
|
107
107
|
export { RecentlyLoadedNodesTable };
|
|
108
|
-
//# sourceMappingURL=RecentlyLoadedNodesTable-
|
|
108
|
+
//# sourceMappingURL=RecentlyLoadedNodesTable-BRxssq07.js.map
|
package/dist/{RecentlyLoadedNodesTable-B5KlS1HR.js.map → RecentlyLoadedNodesTable-BRxssq07.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecentlyLoadedNodesTable-
|
|
1
|
+
{"version":3,"file":"RecentlyLoadedNodesTable-BRxssq07.js","names":[],"sources":["../src/inquiry/dashboard/RecentlyLoadedNodesTable.jsx"],"sourcesContent":["import React, { useCallback, useMemo, useEffect, useState } from 'react';\nimport { Typography, LinearProgress } from '@material-ui/core';\nimport { AmbientCard } from '../../UI/surfaces/cards/AmbientCard';\nimport { AgTable, useAgGridApi } from '../../utilities/aggrid/AgTable.tsx';\nimport { formatDateToLocaleString } from '../../utilities/input/DateUtilities';\nimport { DateTime } from 'luxon';\nimport { IconRenderer } from '../../UI/templates/ui/renderers/IconRenderer';\nimport { getSanitizedName } from '../../utilities/entities/entityUtilities';\n\nconst defaultColDef = {\n resizable: true,\n editable: false,\n sortable: true,\n filter: true\n};\n\nexport const RecentlyLoadedNodesTable = (props) => {\n const {\n recentlyLoadedNodes,\n loading,\n onLoadedNodeClick,\n tableHeight,\n tree,\n columnDefs,\n hideTitle = false\n } = props;\n\n const { gridApi, gridColumnApi, onGridReady } = useAgGridApi();\n const [selectedRow, setSelectedRow] = useState();\n\n useEffect(() => {\n if (!gridColumnApi) return;\n\n gridApi?.sizeColumnsToFit();\n setSelectedRow(\n gridApi?.getSelectedRows().length && gridApi.getSelectedRows()[0]\n );\n }, [gridColumnApi, gridApi]);\n\n const handleRowSelected = useCallback(\n (event) => {\n if (!event.node.selected) return;\n\n if (!gridApi) return;\n\n const selectedRowData =\n gridApi.getSelectedRows().length && gridApi.getSelectedRows()[0];\n\n if (!selectedRowData) return;\n\n setSelectedRow(selectedRowData);\n\n if (selectedRowData?.nodeInfo) {\n // if the row is a node\n onLoadedNodeClick(selectedRowData.nodeInfo);\n }\n },\n [gridApi, onLoadedNodeClick]\n );\n\n const getterRowData = useCallback((params) => {\n return params.data?.iconData;\n }, []);\n\n const columnDefinitions = useMemo(\n () =>\n columnDefs\n ? columnDefs\n : [\n tree?.treeStructure && {\n headerName: '',\n cellRenderer: 'iconRenderer',\n valueGetter: getterRowData,\n maxWidth: 60,\n resizable: false,\n suppressMenu: true,\n sortable: false,\n cellStyle: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center'\n }\n },\n {\n headerName: 'Name',\n field: 'name',\n minWidth: 120,\n maxWidth: 300\n },\n {\n headerName: 'Type',\n field: 'type',\n valueGetter: (params) => getSanitizedName(params.data?.type),\n minWidth: 80\n },\n {\n headerName: 'Date Loaded',\n field: 'dateLoaded',\n minWidth: 80\n },\n {\n headerName: '',\n field: 'nodeInfo',\n maxWidth: 0,\n cellStyle: {\n display: 'none'\n }\n }\n ],\n [columnDefs, getterRowData, tree]\n );\n\n const recentlyLoadedNodesValues = useMemo(\n () =>\n recentlyLoadedNodes?.map((loadedNode) => {\n const matchingNode = tree?.treeStructure?.find(\n (node) =>\n node.properties.catalogReturnObject ===\n loadedNode?.nodeDetails?.catalogReturnObject\n );\n\n return {\n iconData: matchingNode?.properties?.defaultIcon || {\n name: 'PictureTileIcon'\n },\n name: loadedNode?.nodeDetails?.nodeLabel,\n type: loadedNode?.nodeDetails?.catalogReturnObject,\n dateLoaded: formatDateToLocaleString(\n loadedNode?.dateLoaded,\n DateTime.DATETIME_MED\n ),\n nodeInfo: loadedNode\n };\n }),\n [recentlyLoadedNodes, tree]\n );\n\n return (\n <AmbientCard\n title={!hideTitle ? 'Recently Loaded' : ' '}\n fullWidth\n noAdornment\n >\n {loading || !tree ? (\n <LinearProgress />\n ) : recentlyLoadedNodes?.length ? (\n <AgTable\n columnDefs={columnDefinitions}\n defaultColDef={defaultColDef}\n rowData={recentlyLoadedNodesValues || []}\n onGridReady={onGridReady}\n getRowNodeId={(row) => row.name}\n onRowSelected={handleRowSelected}\n rowSelection='single'\n frameworkComponents={{ iconRenderer: IconRenderer }}\n height={tableHeight}\n />\n ) : (\n <Typography>No Data Recently Loaded.</Typography>\n )}\n </AmbientCard>\n );\n};\n"],"mappings":";;;;;;;;;;AASA,MAAM,gBAAgB;CACpB,WAAW;CACX,UAAU;CACV,UAAU;CACV,QAAQ;CACT;AAED,MAAa,4BAA4B,UAAU;CACjD,MAAM,EACJ,qBACA,SACA,mBACA,aACA,MACA,YACA,YAAY,UACV;CAEJ,MAAM,EAAE,SAAS,eAAe,gBAAgB,cAAc;CAC9D,MAAM,CAAC,aAAa,kBAAkB,UAAU;AAEhD,iBAAgB;AACd,MAAI,CAAC,cAAe;AAEpB,WAAS,kBAAkB;AAC3B,iBACE,SAAS,iBAAiB,CAAC,UAAU,QAAQ,iBAAiB,CAAC,GAChE;IACA,CAAC,eAAe,QAAQ,CAAC;CAE5B,MAAM,oBAAoB,aACvB,UAAU;AACT,MAAI,CAAC,MAAM,KAAK,SAAU;AAE1B,MAAI,CAAC,QAAS;EAEd,MAAM,kBACJ,QAAQ,iBAAiB,CAAC,UAAU,QAAQ,iBAAiB,CAAC;AAEhE,MAAI,CAAC,gBAAiB;AAEtB,iBAAe,gBAAgB;AAE/B,MAAI,iBAAiB,SAEnB,mBAAkB,gBAAgB,SAAS;IAG/C,CAAC,SAAS,kBAAkB,CAC7B;CAED,MAAM,gBAAgB,aAAa,WAAW;AAC5C,SAAO,OAAO,MAAM;IACnB,EAAE,CAAC;CAEN,MAAM,oBAAoB,cAEtB,aACI,aACA;EACE,MAAM,iBAAiB;GACrB,YAAY;GACZ,cAAc;GACd,aAAa;GACb,UAAU;GACV,WAAW;GACX,cAAc;GACd,UAAU;GACV,WAAW;IACT,SAAS;IACT,YAAY;IACZ,gBAAgB;IACjB;GACF;EACD;GACE,YAAY;GACZ,OAAO;GACP,UAAU;GACV,UAAU;GACX;EACD;GACE,YAAY;GACZ,OAAO;GACP,cAAc,WAAW,iBAAiB,OAAO,MAAM,KAAK;GAC5D,UAAU;GACX;EACD;GACE,YAAY;GACZ,OAAO;GACP,UAAU;GACX;EACD;GACE,YAAY;GACZ,OAAO;GACP,UAAU;GACV,WAAW,EACT,SAAS,QACV;GACF;EACF,EACP;EAAC;EAAY;EAAe;EAAK,CAClC;CAED,MAAM,4BAA4B,cAE9B,qBAAqB,KAAK,eAAe;AAOvC,SAAO;GACL,WAPmB,MAAM,eAAe,MACvC,SACC,KAAK,WAAW,wBAChB,YAAY,aAAa,oBAC5B,GAGyB,YAAY,eAAe,EACjD,MAAM,mBACP;GACD,MAAM,YAAY,aAAa;GAC/B,MAAM,YAAY,aAAa;GAC/B,YAAY,yBACV,YAAY,YACZ,SAAS,aACV;GACD,UAAU;GACX;GACD,EACJ,CAAC,qBAAqB,KAAK,CAC5B;AAED,QACE,oCAAC;EACC,OAAO,CAAC,YAAY,oBAAoB;EACxC;EACA;IAEC,WAAW,CAAC,OACX,oCAAC,qBAAiB,GAChB,qBAAqB,SACvB,oCAAC;EACC,YAAY;EACG;EACf,SAAS,6BAA6B,EAAE;EAC3B;EACb,eAAe,QAAQ,IAAI;EAC3B,eAAe;EACf,cAAa;EACb,qBAAqB,EAAE,cAAc,cAAc;EACnD,QAAQ;GACR,GAEF,oCAAC,kBAAW,2BAAqC,CAEvC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SplitScreenTypeEnums } from "./unitySystemEnums-BIMR5AWe.js";
|
|
2
2
|
import { UnityFluentIcon } from "./UnityFluentIcon-fuqAQh0C.js";
|
|
3
3
|
import { useActions } from "./useActions-CKdp6TpD.js";
|
|
4
|
-
import { getIconFromName } from "./TreeUtilities-
|
|
4
|
+
import { getIconFromName } from "./TreeUtilities-XLrXtUeL.js";
|
|
5
5
|
import { getUnityIconFromName } from "./UnityIconLibrary-DnCuEr5M.js";
|
|
6
6
|
import { StatusChip } from "./StatusChip-Bw-0wE_B.js";
|
|
7
7
|
import React, { useCallback, useMemo, useState } from "react";
|
|
@@ -135,4 +135,4 @@ const RemindersCard = (props) => {
|
|
|
135
135
|
|
|
136
136
|
//#endregion
|
|
137
137
|
export { CompleteReminderSwitch, RemindersCard };
|
|
138
|
-
//# sourceMappingURL=RemindersCard-
|
|
138
|
+
//# sourceMappingURL=RemindersCard-BrjYmZVz.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemindersCard-CRstZlRF.js","names":[],"sources":["../src/reminders/CompleteReminderSwitch.jsx","../src/reminders/RemindersCard.jsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport { Switch } from '@material-ui/core';\n\nexport const CompleteReminderSwitch = (props) => {\n const { checked, onChange, ...otherProps } = props;\n const [switchChecked, setSwitchChecked] = useState(checked);\n\n const handleOnChange = useCallback(\n (event) => {\n setSwitchChecked(event.target.checked);\n onChange && onChange(event);\n },\n [onChange]\n );\n\n return (\n <Switch checked={switchChecked} onChange={handleOnChange} {...otherProps} />\n );\n};\n","import React, { useCallback, useMemo } from 'react';\nimport {\n Typography,\n LinearProgress,\n makeStyles,\n List,\n ListItem,\n Checkbox,\n ListItemText,\n ListItemSecondaryAction,\n Divider,\n FormControlLabel\n} from '@material-ui/core';\nimport { StatusChip } from '../UI/dataDisplay/StatusChip';\nimport { UnityFluentIcon } from '../utilities/iconLibrary/UnityFluentIcon';\nimport { getUnityIconFromName } from '../utilities/iconLibrary/UnityIconLibrary';\nimport { getIconFromName } from '../utilities/tree/TreeUtilities';\nimport { useActions } from '../hooks/useActions';\nimport { SplitScreenTypeEnums } from '../enums/unitySystemEnums';\nimport { CompleteReminderSwitch } from './CompleteReminderSwitch';\nimport { executeQueryWithParameters } from '../udp/utilities/methodUtils';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n item: {\n display: 'flex',\n '& .MuiListItem-container': {\n width: '100%'\n },\n '& .MuiListItem-container > .MuiListItem-button': {\n paddingLeft: 0,\n paddingRight: 0\n }\n }\n}));\n\nexport const RemindersCard = (props) => {\n const {\n reminders,\n setReminders,\n loading,\n getNodeToLoad,\n onLoadedNodeClick,\n getIcon = () => {},\n updateRemindersAcknowledgement\n } = props;\n const classes = useStyles(props);\n const { openSplitScreen } = useActions();\n\n const handleSwitchChange = useCallback(\n async (event, reminder) => {\n const updatedReminder = { ...reminder };\n updatedReminder.checked = event.target.checked;\n await updateRemindersAcknowledgement([updatedReminder]);\n },\n [updateRemindersAcknowledgement]\n );\n\n const getCompleteSwitch = useCallback(\n (reminder) => (\n <FormControlLabel\n control={\n <CompleteReminderSwitch\n size='small'\n checked={reminder?.acknowledged || false}\n onChange={(event) => handleSwitchChange(event, reminder)}\n />\n }\n label='Complete'\n style={{ marginRight: 8 }}\n />\n ),\n [handleSwitchChange]\n );\n\n const getStatusLabel = useCallback((date) => {\n const day = 1000 * 60 * 60 * 24;\n const reminderDate = new Date(date).getTime();\n if (reminderDate >= Date.now() - day * 7) {\n // Less than or equal 7 days past reminder date\n return Math.floor((Date.now() - reminderDate) / (1000 * 3600 * 24));\n } else if (\n reminderDate < Date.now() - day * 7 &&\n reminderDate >= Date.now() - day * 30\n ) {\n // Greater than 7 days but less than or equal to 30 days past reminder date\n return Math.floor((Date.now() - reminderDate) / (1000 * 3600 * 24));\n } else if (\n reminderDate < Date.now() - day * 30 &&\n reminderDate >= Date.now() - day * 180\n ) {\n // Greater 30 days but less than or equal to 180 days past reminder date\n return Math.floor((Date.now() - reminderDate) / (1000 * 3600 * 24));\n } else if (reminderDate < Date.now() - day * 180) {\n // Greater than 180 days past reminder date\n return Math.floor((Date.now() - reminderDate) / (1000 * 3600 * 24));\n }\n }, []);\n\n const getStatusColor = useCallback((date) => {\n const day = 1000 * 60 * 60 * 24;\n const reminderDate = new Date(date).getTime();\n if (reminderDate >= Date.now() - day * 7) {\n // Less than or equal 7 days past reminder date\n return '';\n } else if (\n reminderDate < Date.now() - day * 7 &&\n reminderDate >= Date.now() - day * 30\n ) {\n // Greater than 7 days but less than or equal to 30 days past reminder date\n return 'info';\n } else if (\n reminderDate < Date.now() - day * 30 &&\n reminderDate >= Date.now() - day * 180\n ) {\n // Greater 30 days but less than or equal to 180 days past reminder date\n return 'warning';\n } else if (reminderDate < Date.now() - day * 180) {\n // Greater than 180 days past reminder date\n return 'error';\n }\n }, []);\n\n const handleReminderCheck = useCallback(\n (evt, reminder) => {\n const updatedReminders = [...reminders];\n const matchingReminders = updatedReminders.filter(\n (r) => r.id === reminder.id\n );\n matchingReminders?.forEach(\n (matchingReminder) => (matchingReminder.checked = evt.target.checked)\n );\n setReminders(updatedReminders);\n },\n [reminders, setReminders]\n );\n\n const handleReminderClick = useCallback(\n (nodeToLoad, reminder) => {\n onLoadedNodeClick(nodeToLoad);\n\n openSplitScreen({\n open: true,\n action: null,\n type: SplitScreenTypeEnums.Reminders,\n params: {\n id: reminder?.id || '',\n additionalInputs: reminder ? getCompleteSwitch(reminder) : null\n }\n });\n },\n [onLoadedNodeClick, openSplitScreen, getCompleteSwitch]\n );\n\n return loading ? (\n <LinearProgress />\n ) : reminders?.length ? (\n <List className={classes.root}>\n {reminders.map((reminder) => {\n const icon = getIcon(reminder);\n const nodeToLoad = getNodeToLoad(reminder);\n return (\n <>\n <div className={classes.item} key={reminder.id}>\n <Checkbox\n id='udpRecord-RemindersCard-Checkbox'\n udprecordid='udpRecord-RemindersCard-Checkbox'\n edge='start'\n checked={reminder.checked || reminder.acknowledged}\n disableRipple\n size='small'\n onChange={(evt) => handleReminderCheck(evt, reminder)}\n disabled={reminder.acknowledged}\n />\n <ListItem\n id='udpRecord-ReminderCard-Item'\n udprecordid='udpRecord-ReminderCard-Item'\n key={reminder.id}\n dense\n subject={reminder.subject}\n removePadding={true}\n button\n onClick={() => handleReminderClick(nodeToLoad, reminder)}\n >\n <ListItemText>\n <div style={{ display: 'block' }}>\n <Typography\n style={{ lineHeight: '0.9rem', fontSize: '0.8rem' }}\n >\n {reminder.subject}\n </Typography>\n </div>\n <Typography\n style={{\n lineHeight: '0.8rem',\n fontSize: '0.7rem',\n fontWeight: 400,\n color: 'rgba(0, 0, 0, 0.54)'\n }}\n >\n {new Date(reminder.reminderDate).toDateString()}\n </Typography>\n </ListItemText>\n <ListItemSecondaryAction>\n <StatusChip\n status={getStatusColor(reminder.reminderDate)}\n label={getStatusLabel(reminder.reminderDate)}\n icon={\n <UnityFluentIcon\n type={icon?.type}\n icon={\n icon?.type === 'unity'\n ? getUnityIconFromName(icon?.name || '')\n : getIconFromName(icon?.name || '')\n }\n />\n }\n />\n </ListItemSecondaryAction>\n </ListItem>\n </div>\n <Divider style={{ height: 1 }} />\n </>\n );\n })}\n </List>\n ) : (\n <Typography>All Reminders Completed</Typography>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RemindersCard-BrjYmZVz.js","names":[],"sources":["../src/reminders/CompleteReminderSwitch.jsx","../src/reminders/RemindersCard.jsx"],"sourcesContent":["import React, { useCallback, useState } from 'react';\nimport { Switch } from '@material-ui/core';\n\nexport const CompleteReminderSwitch = (props) => {\n const { checked, onChange, ...otherProps } = props;\n const [switchChecked, setSwitchChecked] = useState(checked);\n\n const handleOnChange = useCallback(\n (event) => {\n setSwitchChecked(event.target.checked);\n onChange && onChange(event);\n },\n [onChange]\n );\n\n return (\n <Switch checked={switchChecked} onChange={handleOnChange} {...otherProps} />\n );\n};\n","import React, { useCallback, useMemo } from 'react';\nimport {\n Typography,\n LinearProgress,\n makeStyles,\n List,\n ListItem,\n Checkbox,\n ListItemText,\n ListItemSecondaryAction,\n Divider,\n FormControlLabel\n} from '@material-ui/core';\nimport { StatusChip } from '../UI/dataDisplay/StatusChip';\nimport { UnityFluentIcon } from '../utilities/iconLibrary/UnityFluentIcon';\nimport { getUnityIconFromName } from '../utilities/iconLibrary/UnityIconLibrary';\nimport { getIconFromName } from '../utilities/tree/TreeUtilities';\nimport { useActions } from '../hooks/useActions';\nimport { SplitScreenTypeEnums } from '../enums/unitySystemEnums';\nimport { CompleteReminderSwitch } from './CompleteReminderSwitch';\nimport { executeQueryWithParameters } from '../udp/utilities/methodUtils';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n item: {\n display: 'flex',\n '& .MuiListItem-container': {\n width: '100%'\n },\n '& .MuiListItem-container > .MuiListItem-button': {\n paddingLeft: 0,\n paddingRight: 0\n }\n }\n}));\n\nexport const RemindersCard = (props) => {\n const {\n reminders,\n setReminders,\n loading,\n getNodeToLoad,\n onLoadedNodeClick,\n getIcon = () => {},\n updateRemindersAcknowledgement\n } = props;\n const classes = useStyles(props);\n const { openSplitScreen } = useActions();\n\n const handleSwitchChange = useCallback(\n async (event, reminder) => {\n const updatedReminder = { ...reminder };\n updatedReminder.checked = event.target.checked;\n await updateRemindersAcknowledgement([updatedReminder]);\n },\n [updateRemindersAcknowledgement]\n );\n\n const getCompleteSwitch = useCallback(\n (reminder) => (\n <FormControlLabel\n control={\n <CompleteReminderSwitch\n size='small'\n checked={reminder?.acknowledged || false}\n onChange={(event) => handleSwitchChange(event, reminder)}\n />\n }\n label='Complete'\n style={{ marginRight: 8 }}\n />\n ),\n [handleSwitchChange]\n );\n\n const getStatusLabel = useCallback((date) => {\n const day = 1000 * 60 * 60 * 24;\n const reminderDate = new Date(date).getTime();\n if (reminderDate >= Date.now() - day * 7) {\n // Less than or equal 7 days past reminder date\n return Math.floor((Date.now() - reminderDate) / (1000 * 3600 * 24));\n } else if (\n reminderDate < Date.now() - day * 7 &&\n reminderDate >= Date.now() - day * 30\n ) {\n // Greater than 7 days but less than or equal to 30 days past reminder date\n return Math.floor((Date.now() - reminderDate) / (1000 * 3600 * 24));\n } else if (\n reminderDate < Date.now() - day * 30 &&\n reminderDate >= Date.now() - day * 180\n ) {\n // Greater 30 days but less than or equal to 180 days past reminder date\n return Math.floor((Date.now() - reminderDate) / (1000 * 3600 * 24));\n } else if (reminderDate < Date.now() - day * 180) {\n // Greater than 180 days past reminder date\n return Math.floor((Date.now() - reminderDate) / (1000 * 3600 * 24));\n }\n }, []);\n\n const getStatusColor = useCallback((date) => {\n const day = 1000 * 60 * 60 * 24;\n const reminderDate = new Date(date).getTime();\n if (reminderDate >= Date.now() - day * 7) {\n // Less than or equal 7 days past reminder date\n return '';\n } else if (\n reminderDate < Date.now() - day * 7 &&\n reminderDate >= Date.now() - day * 30\n ) {\n // Greater than 7 days but less than or equal to 30 days past reminder date\n return 'info';\n } else if (\n reminderDate < Date.now() - day * 30 &&\n reminderDate >= Date.now() - day * 180\n ) {\n // Greater 30 days but less than or equal to 180 days past reminder date\n return 'warning';\n } else if (reminderDate < Date.now() - day * 180) {\n // Greater than 180 days past reminder date\n return 'error';\n }\n }, []);\n\n const handleReminderCheck = useCallback(\n (evt, reminder) => {\n const updatedReminders = [...reminders];\n const matchingReminders = updatedReminders.filter(\n (r) => r.id === reminder.id\n );\n matchingReminders?.forEach(\n (matchingReminder) => (matchingReminder.checked = evt.target.checked)\n );\n setReminders(updatedReminders);\n },\n [reminders, setReminders]\n );\n\n const handleReminderClick = useCallback(\n (nodeToLoad, reminder) => {\n onLoadedNodeClick(nodeToLoad);\n\n openSplitScreen({\n open: true,\n action: null,\n type: SplitScreenTypeEnums.Reminders,\n params: {\n id: reminder?.id || '',\n additionalInputs: reminder ? getCompleteSwitch(reminder) : null\n }\n });\n },\n [onLoadedNodeClick, openSplitScreen, getCompleteSwitch]\n );\n\n return loading ? (\n <LinearProgress />\n ) : reminders?.length ? (\n <List className={classes.root}>\n {reminders.map((reminder) => {\n const icon = getIcon(reminder);\n const nodeToLoad = getNodeToLoad(reminder);\n return (\n <>\n <div className={classes.item} key={reminder.id}>\n <Checkbox\n id='udpRecord-RemindersCard-Checkbox'\n udprecordid='udpRecord-RemindersCard-Checkbox'\n edge='start'\n checked={reminder.checked || reminder.acknowledged}\n disableRipple\n size='small'\n onChange={(evt) => handleReminderCheck(evt, reminder)}\n disabled={reminder.acknowledged}\n />\n <ListItem\n id='udpRecord-ReminderCard-Item'\n udprecordid='udpRecord-ReminderCard-Item'\n key={reminder.id}\n dense\n subject={reminder.subject}\n removePadding={true}\n button\n onClick={() => handleReminderClick(nodeToLoad, reminder)}\n >\n <ListItemText>\n <div style={{ display: 'block' }}>\n <Typography\n style={{ lineHeight: '0.9rem', fontSize: '0.8rem' }}\n >\n {reminder.subject}\n </Typography>\n </div>\n <Typography\n style={{\n lineHeight: '0.8rem',\n fontSize: '0.7rem',\n fontWeight: 400,\n color: 'rgba(0, 0, 0, 0.54)'\n }}\n >\n {new Date(reminder.reminderDate).toDateString()}\n </Typography>\n </ListItemText>\n <ListItemSecondaryAction>\n <StatusChip\n status={getStatusColor(reminder.reminderDate)}\n label={getStatusLabel(reminder.reminderDate)}\n icon={\n <UnityFluentIcon\n type={icon?.type}\n icon={\n icon?.type === 'unity'\n ? getUnityIconFromName(icon?.name || '')\n : getIconFromName(icon?.name || '')\n }\n />\n }\n />\n </ListItemSecondaryAction>\n </ListItem>\n </div>\n <Divider style={{ height: 1 }} />\n </>\n );\n })}\n </List>\n ) : (\n <Typography>All Reminders Completed</Typography>\n );\n};\n"],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ import { useActionStore } from "./inquiryStore-COAx0QBg.js";
|
|
|
8
8
|
import { useShellStore } from "./shellStore-Bqwtbs_K.js";
|
|
9
9
|
import { useActionState } from "./useActions-CKdp6TpD.js";
|
|
10
10
|
import { getSearchObject } from "./SearchUtilities-CzmJ6hI2.js";
|
|
11
|
-
import { constructBusinessObjectArrFromTree } from "./TreeUtilities-
|
|
11
|
+
import { constructBusinessObjectArrFromTree } from "./TreeUtilities-XLrXtUeL.js";
|
|
12
12
|
import { LayoutUnit } from "./LayoutUnit-fGVQwt6Y.js";
|
|
13
13
|
import { CkRichEditor } from "./CkRichEditor-BzyNk5CH.js";
|
|
14
14
|
import { executeQueryAdHoc, executeQueryWithParameters, getBaseMethod } from "./methodUtils-Bgi0VCWP.js";
|
|
@@ -439,4 +439,4 @@ const RemindersScreen = (props) => {
|
|
|
439
439
|
|
|
440
440
|
//#endregion
|
|
441
441
|
export { RemindersScreen };
|
|
442
|
-
//# sourceMappingURL=RemindersScreen-
|
|
442
|
+
//# sourceMappingURL=RemindersScreen-CVTHY97W.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemindersScreen-C2hcBWnk.js","names":["reminder","existingReminderObj"],"sources":["../src/reminders/RemindersScreen.jsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport { CkRichEditor } from '../UI/inputs/richEditors/CkRichEditor';\nimport { makeStyles, TextField, LinearProgress } from '@material-ui/core';\nimport { Field, Form } from '../utilities/form';\nimport { FluentTextFieldAutoComplete } from '../UI/inputs/textField/FluentTextFieldAutoComplete';\nimport { useTranslation } from 'react-i18next';\nimport { useActionState } from '../hooks/useActions';\nimport { constructBusinessObjectArrFromTree } from '../utilities/tree/TreeUtilities';\nimport { LayoutUnit } from '../layout/LayoutUnit';\nimport { UdpEnums } from '../enums/unitySystemEnums';\nimport { useHandleAxiosSnackbar } from '../utilities/apiHelpers';\nimport { useUser } from '../utilities/auth/useUser';\nimport { differenceWith } from 'lodash';\nimport {\n executeQueryAdHoc,\n getBaseMethod,\n executeQueryWithParameters\n} from '../udp/utilities/methodUtils';\nimport { ShortcutContentFinder } from '../udp/ShortcutContent/ShortcutContentFinder';\nimport { AmbientCard } from '../UI/surfaces/cards/AmbientCard';\nimport { useShellStore } from '../stores/shellStore';\nimport { FluentDatePicker } from '../UI/inputs/pickers/FluentDatePicker';\nimport { useActionStore } from '../stores/actionStore';\nimport { FILE_TO_TYPES } from '../constants/reminderConstants';\nimport { getSearchObject } from '../utilities/search/SearchUtilities';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n editor: {\n '& .ck-editor__main > .ck-editor__editable_inline': {\n backgroundColor:\n theme?.getThemeData()?.mode === 'dark'\n ? theme.palette.grey[800]\n : theme.palette.grey[100]\n }\n },\n row: {\n display: 'flex',\n justifyContent: 'space-between'\n },\n input: {\n height: 34,\n padding: 0\n },\n formTextInput: {\n fontSize: 14\n },\n labelRoot: {\n fontSize: 14\n }\n}));\n\nexport const RemindersScreen = (props) => {\n const {\n formRef,\n onSubmit,\n shortcutContentFinderEnabled,\n id,\n viewOnly,\n reloadReminders\n } = props;\n const [reminder, setReminder] = useState('');\n const [typeOptions, setTypeOptions] = useState([]);\n const [templateOptions, setTemplateOptions] = useState([]);\n const [reminderId, setReminderId] = useState(id || '');\n const [existingReminderFiledFor, setExistingReminderFiledFor] = useState([]);\n const [existingReminderObj, setExistingReminderObj] = useState(null);\n const [loading, setLoading] = useState(false);\n const classes = useStyles(props);\n const { t } = useTranslation();\n const actionState = useActionState();\n const shellHidden = useShellStore((state) => state.shellHidden);\n const { menuListState, catalogPromotedEntities } = actionState;\n const { handleSuccessSnackbar, handleErrorSnackbar } =\n useHandleAxiosSnackbar();\n const user = useUser();\n const editorRef = useRef(null);\n const selectedNode = useActionStore((state) => state.selectedNode);\n\n const selectedMenu = useMemo(() => {\n if (menuListState.menuList.length) {\n return menuListState.menuList[menuListState.selectedMenuIndex] || null;\n }\n return null;\n }, [menuListState]);\n\n const reminderGetFullApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder,\n 'unityBaseGetFullMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const reminderTypeSearchApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder_Type,\n 'unityBaseSearchMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const reminderTemplateSearchApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder_Template,\n 'unityBaseSearchMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const createReminderApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder,\n 'unityBaseCreateMethod',\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 createReminderFiledForApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder_Filed_For,\n 'unityBaseCreateMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const updateReminderFiledForApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder_Filed_For,\n 'unityBaseUpdateMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const deleteReminderFiledForApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder_Filed_For,\n 'unityBaseDeleteMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const disabled = useMemo(() => {\n return viewOnly;\n }, [viewOnly]);\n\n const handleSaveReminder = useCallback(\n async (values) => {\n let response = null;\n const reminderDate = new Date(values?.reminderDate?.setHours(0, 0, 0, 0));\n const data = {\n requestBody: {\n tenantId: user?.currentTenantId,\n typeCode: values?.type?.code,\n subject: values?.subject,\n content: values?.reminder,\n unityUserId: user?.id,\n userDisplayName: `${user?.firstName} ${user?.familyName}`,\n reminderDate: reminderDate.toDateString()\n }\n };\n if (reminderId) {\n if (updateReminderApiMethod) {\n // Set the url parameter for updating reminder\n data['{iD}'] = reminderId;\n response = await executeQueryWithParameters(\n { data },\n updateReminderApiMethod.apiMethodId\n ).catch((e) => handleErrorSnackbar(e, 'Could not Update Reminder'));\n } else {\n handleErrorSnackbar(null, 'Update Reminder Method Not Promoted');\n }\n } else {\n if (createReminderApiMethod) {\n response = await executeQueryWithParameters(\n { data },\n createReminderApiMethod.apiMethodId\n ).catch((e) => handleErrorSnackbar(e, 'Could not Save Reminder'));\n } else {\n handleErrorSnackbar(null, 'Create Reminder Method Not Promoted');\n }\n }\n\n if (response?.status === 200) {\n if (!reminderId) {\n setReminderId(response.data.id || '');\n handleSuccessSnackbar('Reminder Saved');\n } else {\n handleSuccessSnackbar('Reminder Updated');\n }\n if (reloadReminders) {\n reloadReminders();\n }\n return response.data.id || reminderId;\n }\n\n return reminderId;\n },\n [\n createReminderApiMethod,\n updateReminderApiMethod,\n reminderId,\n setReminderId,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n user,\n reloadReminders\n ]\n );\n\n const reminderFiledForToComparator = (nftc1, nftc2) => {\n return nftc1?.value === nftc2?.value;\n };\n\n const handleReminderFiledFor = useCallback(\n async (values, reminderdIdToFileFor) => {\n // Get the reminderFiledFor objects to delete\n const reminderFiledForToDelete = differenceWith(\n existingReminderFiledFor,\n values?.fileTo,\n reminderFiledForToComparator\n );\n\n // Get the reminderFiledFor objects to create\n const reminderFiledForToCreate = differenceWith(\n values?.fileTo,\n existingReminderFiledFor,\n reminderFiledForToComparator\n );\n\n if (reminderdIdToFileFor) {\n if (deleteReminderFiledForApiMethod) {\n const deletedPromises = [];\n reminderFiledForToDelete.forEach((nftd) => {\n const data = {};\n data['{reminderID}'] = reminderdIdToFileFor;\n data['{entityBusinessKey}'] = nftd.value;\n\n deletedPromises.push(\n executeQueryWithParameters(\n { data },\n deleteReminderFiledForApiMethod.apiMethodId\n )\n );\n });\n\n await Promise.all(deletedPromises.map((p) => p.catch((e) => e))).then(\n (responses) => {\n if (responses.length !== deletedPromises.length) {\n console.warn(`Not all Reminder Filed For deleted`);\n }\n }\n );\n } else {\n handleErrorSnackbar(\n null,\n 'Delete Reminder Filed For Method Not Promoted'\n );\n }\n\n if (createReminderFiledForApiMethod) {\n const createdPromises = [];\n reminderFiledForToCreate.forEach((nftc) => {\n const data = {\n requestBody: {\n reminderId: reminderdIdToFileFor,\n entityBusinessKey: nftc.value,\n domainObject: nftc.domainObject,\n type: values?.fileToType?.value || 1\n }\n };\n createdPromises.push(\n executeQueryWithParameters(\n { data },\n createReminderFiledForApiMethod.apiMethodId\n )\n );\n });\n await Promise.all(createdPromises.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 matchingReminderFiledFor =\n reminderFiledForToCreate.find(\n (nftc) => nftc.value === entityBusinessKey\n );\n if (!matchingReminderFiledFor) {\n console.warn(\n `Reminder Filed For not created for all file to entities`\n );\n }\n }\n });\n }\n );\n setExistingReminderFiledFor(values?.fileTo);\n } else {\n handleErrorSnackbar(\n null,\n 'Create Reminder Filed For Method Not Promoted'\n );\n }\n\n if (updateReminderFiledForApiMethod) {\n const updatedPromises = [];\n values?.fileTo?.forEach((nftu) => {\n const data = {\n requestBody: {\n reminderId: reminderdIdToFileFor,\n entityBusinessKey: nftu.value,\n domainObject: nftu.domainObject,\n type: values?.fileToType?.value || 1\n }\n };\n data['{reminderID}'] = reminderdIdToFileFor;\n data['{entityBusinessKey}'] = nftu.value;\n updatedPromises.push(\n executeQueryWithParameters(\n { data },\n updateReminderFiledForApiMethod.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 matchingReminderFiledFor = values?.fileTo?.find(\n (nftu) => nftu.value === entityBusinessKey\n );\n if (!matchingReminderFiledFor) {\n console.warn(\n `Reminder Filed For not updated for all file to entities`\n );\n }\n }\n });\n }\n );\n setExistingReminderFiledFor(values?.fileTo);\n } else {\n handleErrorSnackbar(\n null,\n 'Update Reminder Filed For Method Not Promoted'\n );\n }\n }\n },\n [\n createReminderFiledForApiMethod,\n updateReminderFiledForApiMethod,\n deleteReminderFiledForApiMethod,\n handleErrorSnackbar,\n existingReminderFiledFor,\n setExistingReminderFiledFor\n ]\n );\n\n const handleOnSubmit = useCallback(\n async (values) => {\n if (onSubmit) {\n onSubmit({ reminder, ...values });\n } else {\n const reminderdIdToFileFor = await handleSaveReminder({\n reminder,\n ...values\n });\n await handleReminderFiledFor(\n { reminder, ...values },\n reminderdIdToFileFor\n );\n }\n },\n [reminder, onSubmit, handleSaveReminder, handleReminderFiledFor]\n );\n\n const handleTextEditorChange = (reminder) => {\n setReminder(reminder);\n };\n\n const onTemplateChange = useCallback(\n (value) => {\n formRef?.current?.form?.change('subject', value?.subject || '');\n const type = typeOptions.find((option) => option.code === value.typeCode);\n formRef?.current?.form?.change('type', type || null);\n formRef?.current?.form?.change(\n 'reminderDate',\n value.reminderDate === '0001-01-01T00:00:00'\n ? new Date()\n : new Date(value.reminderDate)\n );\n setReminder(value?.content || '');\n },\n [setReminder, formRef, typeOptions]\n );\n\n const handleShortcutOnSelect = useCallback(\n (shortcutContent) => {\n editorRef?.current?.model?.change((writer) => {\n const insertPosition =\n editorRef?.current?.model?.document?.selection?.getFirstPosition();\n writer.remove(\n editorRef?.current?.model?.document?.selection?.getFirstRange()\n );\n writer.insertText(shortcutContent, insertPosition);\n });\n\n setReminder(editorRef?.current?.getData());\n },\n [editorRef, setReminder]\n );\n\n const fileToOptions = useMemo(() => {\n let options = [];\n if (selectedMenu) {\n options = constructBusinessObjectArrFromTree(selectedMenu);\n }\n return options;\n }, [selectedMenu]);\n\n useEffect(() => {\n // TODO: update to use getAll reminderTypes\n const getTypeOptions = async () => {\n let options = [];\n if (reminderTypeSearchApiMethod) {\n const filterElements = [];\n const searchObject = getSearchObject(filterElements, 1, 200, true);\n const data = { data: searchObject };\n const typesResponse = await executeQueryAdHoc(\n data,\n reminderTypeSearchApiMethod.apiMethodId\n );\n if (typesResponse?.status === 200) {\n options = typesResponse.data?.pageList || [];\n }\n }\n setTypeOptions(options);\n };\n getTypeOptions();\n }, [reminderTypeSearchApiMethod, setTypeOptions, user]);\n\n useEffect(() => {\n // TODO: update to use getAll reminderTemplates\n const getTemplateOptions = async () => {\n let options = [];\n if (reminderTemplateSearchApiMethod) {\n const filterElements = [];\n const searchObject = getSearchObject(filterElements, 1, 200, true);\n const data = { data: searchObject };\n const templatesResponse = await executeQueryAdHoc(\n data,\n reminderTemplateSearchApiMethod.apiMethodId\n );\n if (templatesResponse?.status === 200) {\n options = templatesResponse.data?.pageList || [];\n }\n }\n setTemplateOptions(options);\n };\n getTemplateOptions();\n }, [reminderTemplateSearchApiMethod, setTemplateOptions, user]);\n\n useEffect(() => {\n const getExistingReminder = async () => {\n let existingReminderObj = null;\n const data = {};\n if (reminderGetFullApiMethod) {\n setLoading(true);\n data['{iD}'] = id;\n const reminderResponse = await executeQueryWithParameters(\n { data },\n reminderGetFullApiMethod.apiMethodId\n ).catch((e) => {\n console.error(e);\n setLoading(false);\n });\n if (reminderResponse?.status === 200) {\n existingReminderObj = reminderResponse.data;\n }\n }\n setExistingReminderObj(existingReminderObj);\n setReminder(existingReminderObj?.content);\n setLoading(false);\n };\n if (id) {\n getExistingReminder();\n }\n }, [id, reminderGetFullApiMethod]);\n\n useEffect(() => {\n if (!existingReminderObj || !fileToOptions?.length) {\n return;\n }\n const initialFileTos = fileToOptions.filter((option) => {\n return existingReminderObj.reminderFiledFor.find(\n (nff) => option.value === nff.entityBusinessKey\n );\n });\n setExistingReminderFiledFor(initialFileTos);\n formRef?.current?.form?.change('fileTo', initialFileTos);\n }, [existingReminderObj, fileToOptions, formRef]);\n\n useEffect(() => {\n if (!existingReminderObj || !typeOptions?.length) {\n return;\n }\n const initialType = typeOptions.find(\n (option) => option.code === existingReminderObj.typeCode\n );\n formRef?.current?.form?.change('type', initialType || null);\n }, [existingReminderObj, typeOptions, formRef]);\n\n useEffect(() => {\n if (!existingReminderObj) {\n return;\n }\n formRef?.current?.form?.change(\n 'subject',\n existingReminderObj?.subject || ''\n );\n }, [existingReminderObj, formRef]);\n\n useEffect(() => {\n if (!existingReminderObj?.reminderDate) {\n return;\n }\n formRef?.current?.form?.change(\n 'reminderDate',\n new Date(existingReminderObj.reminderDate)\n );\n }, [existingReminderObj, formRef]);\n\n useEffect(() => {\n if (!existingReminderObj) {\n return;\n }\n const matchingReminderFiledFor = existingReminderObj.reminderFiledFor?.find(\n (rff) =>\n rff.domainObject === selectedNode?.properties?.catalogReturnObject\n );\n const initialFileToType = FILE_TO_TYPES.find(\n (option) => option.value === matchingReminderFiledFor?.type\n );\n formRef?.current?.form?.change('fileToType', initialFileToType || null);\n }, [existingReminderObj, typeOptions, formRef, selectedNode]);\n\n return (\n <div className={classes.root}>\n {loading && <LinearProgress color='secondary' />}\n <AmbientCard fullWidth={true} header={true}>\n <Form onSubmit={handleOnSubmit} ref={formRef}>\n <Field\n component={FluentTextFieldAutoComplete}\n label={t('File To')}\n name='fileTo'\n id='fileTo'\n fullWidth\n variant='outlined'\n margin='dense'\n size='small'\n options={fileToOptions || []}\n optionKey={'label'}\n required={true}\n limitTags={!viewOnly ? 2 : -1}\n isMultiple={true}\n disabled={disabled}\n />\n <Field\n component={FluentTextFieldAutoComplete}\n label={t('File To Type')}\n name='fileToType'\n id='fileToType'\n fullWidth\n variant='outlined'\n margin='dense'\n size='small'\n options={FILE_TO_TYPES || []}\n optionKey={'label'}\n required={true}\n disabled={disabled}\n />\n <div className={classes.row}>\n <div style={{ width: '100%' }}>\n <Field\n component={FluentTextFieldAutoComplete}\n label={t('Type')}\n name='type'\n id='type'\n fullWidth\n variant='outlined'\n margin='dense'\n size='small'\n options={typeOptions || []}\n optionKey={'name'}\n required={true}\n disabled={disabled}\n />\n </div>\n {!viewOnly && (\n <div style={{ width: '100%', marginLeft: 8 }}>\n <Field\n component={FluentTextFieldAutoComplete}\n label={t('Template')}\n name='template'\n id='template'\n fullWidth\n variant='outlined'\n margin='dense'\n size='small'\n options={templateOptions || []}\n optionKey={'name'}\n additionalOnChangeAction={onTemplateChange}\n />\n </div>\n )}\n </div>\n <Field\n component={FluentDatePicker}\n label={t('Reminder Date')}\n name='reminderDate'\n id='reminderDate'\n fullWidth\n variant='outlined'\n size='small'\n margin='dense'\n required\n disabled={disabled}\n />\n <Field\n component={TextField}\n label={t('Subject')}\n name='subject'\n id='subject'\n fullWidth\n variant='outlined'\n size='small'\n margin='dense'\n required\n disabled={disabled}\n InputProps={{\n classes: {\n root: classes?.input,\n input: classes?.formTextInput\n }\n }}\n InputLabelProps={{\n classes: {\n root: classes?.labelRoot\n }\n }}\n />\n <LayoutUnit unit='nudge' />\n <CkRichEditor\n handleChange={handleTextEditorChange}\n classes={{ editor: classes.editor }}\n data={reminder}\n editorRef={editorRef}\n isUsingRef={true}\n readOnly={disabled}\n />\n </Form>\n </AmbientCard>\n <LayoutUnit unit='nudge' />\n {shortcutContentFinderEnabled && (\n <AmbientCard\n fullWidth={true}\n header={true}\n lastChildBottomPadding={'0px'}\n cardContentHeight={`calc(100vh - ${shellHidden ? '568px' : '623px'})`}\n >\n <ShortcutContentFinder onSelect={handleShortcutOnSelect} />\n </AmbientCard>\n )}\n </div>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RemindersScreen-CVTHY97W.js","names":["reminder","existingReminderObj"],"sources":["../src/reminders/RemindersScreen.jsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n} from 'react';\nimport { CkRichEditor } from '../UI/inputs/richEditors/CkRichEditor';\nimport { makeStyles, TextField, LinearProgress } from '@material-ui/core';\nimport { Field, Form } from '../utilities/form';\nimport { FluentTextFieldAutoComplete } from '../UI/inputs/textField/FluentTextFieldAutoComplete';\nimport { useTranslation } from 'react-i18next';\nimport { useActionState } from '../hooks/useActions';\nimport { constructBusinessObjectArrFromTree } from '../utilities/tree/TreeUtilities';\nimport { LayoutUnit } from '../layout/LayoutUnit';\nimport { UdpEnums } from '../enums/unitySystemEnums';\nimport { useHandleAxiosSnackbar } from '../utilities/apiHelpers';\nimport { useUser } from '../utilities/auth/useUser';\nimport { differenceWith } from 'lodash';\nimport {\n executeQueryAdHoc,\n getBaseMethod,\n executeQueryWithParameters\n} from '../udp/utilities/methodUtils';\nimport { ShortcutContentFinder } from '../udp/ShortcutContent/ShortcutContentFinder';\nimport { AmbientCard } from '../UI/surfaces/cards/AmbientCard';\nimport { useShellStore } from '../stores/shellStore';\nimport { FluentDatePicker } from '../UI/inputs/pickers/FluentDatePicker';\nimport { useActionStore } from '../stores/actionStore';\nimport { FILE_TO_TYPES } from '../constants/reminderConstants';\nimport { getSearchObject } from '../utilities/search/SearchUtilities';\n\nconst useStyles = makeStyles((theme) => ({\n root: {},\n editor: {\n '& .ck-editor__main > .ck-editor__editable_inline': {\n backgroundColor:\n theme?.getThemeData()?.mode === 'dark'\n ? theme.palette.grey[800]\n : theme.palette.grey[100]\n }\n },\n row: {\n display: 'flex',\n justifyContent: 'space-between'\n },\n input: {\n height: 34,\n padding: 0\n },\n formTextInput: {\n fontSize: 14\n },\n labelRoot: {\n fontSize: 14\n }\n}));\n\nexport const RemindersScreen = (props) => {\n const {\n formRef,\n onSubmit,\n shortcutContentFinderEnabled,\n id,\n viewOnly,\n reloadReminders\n } = props;\n const [reminder, setReminder] = useState('');\n const [typeOptions, setTypeOptions] = useState([]);\n const [templateOptions, setTemplateOptions] = useState([]);\n const [reminderId, setReminderId] = useState(id || '');\n const [existingReminderFiledFor, setExistingReminderFiledFor] = useState([]);\n const [existingReminderObj, setExistingReminderObj] = useState(null);\n const [loading, setLoading] = useState(false);\n const classes = useStyles(props);\n const { t } = useTranslation();\n const actionState = useActionState();\n const shellHidden = useShellStore((state) => state.shellHidden);\n const { menuListState, catalogPromotedEntities } = actionState;\n const { handleSuccessSnackbar, handleErrorSnackbar } =\n useHandleAxiosSnackbar();\n const user = useUser();\n const editorRef = useRef(null);\n const selectedNode = useActionStore((state) => state.selectedNode);\n\n const selectedMenu = useMemo(() => {\n if (menuListState.menuList.length) {\n return menuListState.menuList[menuListState.selectedMenuIndex] || null;\n }\n return null;\n }, [menuListState]);\n\n const reminderGetFullApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder,\n 'unityBaseGetFullMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const reminderTypeSearchApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder_Type,\n 'unityBaseSearchMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const reminderTemplateSearchApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder_Template,\n 'unityBaseSearchMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const createReminderApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder,\n 'unityBaseCreateMethod',\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 createReminderFiledForApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder_Filed_For,\n 'unityBaseCreateMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const updateReminderFiledForApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder_Filed_For,\n 'unityBaseUpdateMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const deleteReminderFiledForApiMethod = useMemo(() => {\n return getBaseMethod(\n UdpEnums.Udp_Reminder_Filed_For,\n 'unityBaseDeleteMethod',\n catalogPromotedEntities\n );\n }, [catalogPromotedEntities]);\n\n const disabled = useMemo(() => {\n return viewOnly;\n }, [viewOnly]);\n\n const handleSaveReminder = useCallback(\n async (values) => {\n let response = null;\n const reminderDate = new Date(values?.reminderDate?.setHours(0, 0, 0, 0));\n const data = {\n requestBody: {\n tenantId: user?.currentTenantId,\n typeCode: values?.type?.code,\n subject: values?.subject,\n content: values?.reminder,\n unityUserId: user?.id,\n userDisplayName: `${user?.firstName} ${user?.familyName}`,\n reminderDate: reminderDate.toDateString()\n }\n };\n if (reminderId) {\n if (updateReminderApiMethod) {\n // Set the url parameter for updating reminder\n data['{iD}'] = reminderId;\n response = await executeQueryWithParameters(\n { data },\n updateReminderApiMethod.apiMethodId\n ).catch((e) => handleErrorSnackbar(e, 'Could not Update Reminder'));\n } else {\n handleErrorSnackbar(null, 'Update Reminder Method Not Promoted');\n }\n } else {\n if (createReminderApiMethod) {\n response = await executeQueryWithParameters(\n { data },\n createReminderApiMethod.apiMethodId\n ).catch((e) => handleErrorSnackbar(e, 'Could not Save Reminder'));\n } else {\n handleErrorSnackbar(null, 'Create Reminder Method Not Promoted');\n }\n }\n\n if (response?.status === 200) {\n if (!reminderId) {\n setReminderId(response.data.id || '');\n handleSuccessSnackbar('Reminder Saved');\n } else {\n handleSuccessSnackbar('Reminder Updated');\n }\n if (reloadReminders) {\n reloadReminders();\n }\n return response.data.id || reminderId;\n }\n\n return reminderId;\n },\n [\n createReminderApiMethod,\n updateReminderApiMethod,\n reminderId,\n setReminderId,\n handleErrorSnackbar,\n handleSuccessSnackbar,\n user,\n reloadReminders\n ]\n );\n\n const reminderFiledForToComparator = (nftc1, nftc2) => {\n return nftc1?.value === nftc2?.value;\n };\n\n const handleReminderFiledFor = useCallback(\n async (values, reminderdIdToFileFor) => {\n // Get the reminderFiledFor objects to delete\n const reminderFiledForToDelete = differenceWith(\n existingReminderFiledFor,\n values?.fileTo,\n reminderFiledForToComparator\n );\n\n // Get the reminderFiledFor objects to create\n const reminderFiledForToCreate = differenceWith(\n values?.fileTo,\n existingReminderFiledFor,\n reminderFiledForToComparator\n );\n\n if (reminderdIdToFileFor) {\n if (deleteReminderFiledForApiMethod) {\n const deletedPromises = [];\n reminderFiledForToDelete.forEach((nftd) => {\n const data = {};\n data['{reminderID}'] = reminderdIdToFileFor;\n data['{entityBusinessKey}'] = nftd.value;\n\n deletedPromises.push(\n executeQueryWithParameters(\n { data },\n deleteReminderFiledForApiMethod.apiMethodId\n )\n );\n });\n\n await Promise.all(deletedPromises.map((p) => p.catch((e) => e))).then(\n (responses) => {\n if (responses.length !== deletedPromises.length) {\n console.warn(`Not all Reminder Filed For deleted`);\n }\n }\n );\n } else {\n handleErrorSnackbar(\n null,\n 'Delete Reminder Filed For Method Not Promoted'\n );\n }\n\n if (createReminderFiledForApiMethod) {\n const createdPromises = [];\n reminderFiledForToCreate.forEach((nftc) => {\n const data = {\n requestBody: {\n reminderId: reminderdIdToFileFor,\n entityBusinessKey: nftc.value,\n domainObject: nftc.domainObject,\n type: values?.fileToType?.value || 1\n }\n };\n createdPromises.push(\n executeQueryWithParameters(\n { data },\n createReminderFiledForApiMethod.apiMethodId\n )\n );\n });\n await Promise.all(createdPromises.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 matchingReminderFiledFor =\n reminderFiledForToCreate.find(\n (nftc) => nftc.value === entityBusinessKey\n );\n if (!matchingReminderFiledFor) {\n console.warn(\n `Reminder Filed For not created for all file to entities`\n );\n }\n }\n });\n }\n );\n setExistingReminderFiledFor(values?.fileTo);\n } else {\n handleErrorSnackbar(\n null,\n 'Create Reminder Filed For Method Not Promoted'\n );\n }\n\n if (updateReminderFiledForApiMethod) {\n const updatedPromises = [];\n values?.fileTo?.forEach((nftu) => {\n const data = {\n requestBody: {\n reminderId: reminderdIdToFileFor,\n entityBusinessKey: nftu.value,\n domainObject: nftu.domainObject,\n type: values?.fileToType?.value || 1\n }\n };\n data['{reminderID}'] = reminderdIdToFileFor;\n data['{entityBusinessKey}'] = nftu.value;\n updatedPromises.push(\n executeQueryWithParameters(\n { data },\n updateReminderFiledForApiMethod.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 matchingReminderFiledFor = values?.fileTo?.find(\n (nftu) => nftu.value === entityBusinessKey\n );\n if (!matchingReminderFiledFor) {\n console.warn(\n `Reminder Filed For not updated for all file to entities`\n );\n }\n }\n });\n }\n );\n setExistingReminderFiledFor(values?.fileTo);\n } else {\n handleErrorSnackbar(\n null,\n 'Update Reminder Filed For Method Not Promoted'\n );\n }\n }\n },\n [\n createReminderFiledForApiMethod,\n updateReminderFiledForApiMethod,\n deleteReminderFiledForApiMethod,\n handleErrorSnackbar,\n existingReminderFiledFor,\n setExistingReminderFiledFor\n ]\n );\n\n const handleOnSubmit = useCallback(\n async (values) => {\n if (onSubmit) {\n onSubmit({ reminder, ...values });\n } else {\n const reminderdIdToFileFor = await handleSaveReminder({\n reminder,\n ...values\n });\n await handleReminderFiledFor(\n { reminder, ...values },\n reminderdIdToFileFor\n );\n }\n },\n [reminder, onSubmit, handleSaveReminder, handleReminderFiledFor]\n );\n\n const handleTextEditorChange = (reminder) => {\n setReminder(reminder);\n };\n\n const onTemplateChange = useCallback(\n (value) => {\n formRef?.current?.form?.change('subject', value?.subject || '');\n const type = typeOptions.find((option) => option.code === value.typeCode);\n formRef?.current?.form?.change('type', type || null);\n formRef?.current?.form?.change(\n 'reminderDate',\n value.reminderDate === '0001-01-01T00:00:00'\n ? new Date()\n : new Date(value.reminderDate)\n );\n setReminder(value?.content || '');\n },\n [setReminder, formRef, typeOptions]\n );\n\n const handleShortcutOnSelect = useCallback(\n (shortcutContent) => {\n editorRef?.current?.model?.change((writer) => {\n const insertPosition =\n editorRef?.current?.model?.document?.selection?.getFirstPosition();\n writer.remove(\n editorRef?.current?.model?.document?.selection?.getFirstRange()\n );\n writer.insertText(shortcutContent, insertPosition);\n });\n\n setReminder(editorRef?.current?.getData());\n },\n [editorRef, setReminder]\n );\n\n const fileToOptions = useMemo(() => {\n let options = [];\n if (selectedMenu) {\n options = constructBusinessObjectArrFromTree(selectedMenu);\n }\n return options;\n }, [selectedMenu]);\n\n useEffect(() => {\n // TODO: update to use getAll reminderTypes\n const getTypeOptions = async () => {\n let options = [];\n if (reminderTypeSearchApiMethod) {\n const filterElements = [];\n const searchObject = getSearchObject(filterElements, 1, 200, true);\n const data = { data: searchObject };\n const typesResponse = await executeQueryAdHoc(\n data,\n reminderTypeSearchApiMethod.apiMethodId\n );\n if (typesResponse?.status === 200) {\n options = typesResponse.data?.pageList || [];\n }\n }\n setTypeOptions(options);\n };\n getTypeOptions();\n }, [reminderTypeSearchApiMethod, setTypeOptions, user]);\n\n useEffect(() => {\n // TODO: update to use getAll reminderTemplates\n const getTemplateOptions = async () => {\n let options = [];\n if (reminderTemplateSearchApiMethod) {\n const filterElements = [];\n const searchObject = getSearchObject(filterElements, 1, 200, true);\n const data = { data: searchObject };\n const templatesResponse = await executeQueryAdHoc(\n data,\n reminderTemplateSearchApiMethod.apiMethodId\n );\n if (templatesResponse?.status === 200) {\n options = templatesResponse.data?.pageList || [];\n }\n }\n setTemplateOptions(options);\n };\n getTemplateOptions();\n }, [reminderTemplateSearchApiMethod, setTemplateOptions, user]);\n\n useEffect(() => {\n const getExistingReminder = async () => {\n let existingReminderObj = null;\n const data = {};\n if (reminderGetFullApiMethod) {\n setLoading(true);\n data['{iD}'] = id;\n const reminderResponse = await executeQueryWithParameters(\n { data },\n reminderGetFullApiMethod.apiMethodId\n ).catch((e) => {\n console.error(e);\n setLoading(false);\n });\n if (reminderResponse?.status === 200) {\n existingReminderObj = reminderResponse.data;\n }\n }\n setExistingReminderObj(existingReminderObj);\n setReminder(existingReminderObj?.content);\n setLoading(false);\n };\n if (id) {\n getExistingReminder();\n }\n }, [id, reminderGetFullApiMethod]);\n\n useEffect(() => {\n if (!existingReminderObj || !fileToOptions?.length) {\n return;\n }\n const initialFileTos = fileToOptions.filter((option) => {\n return existingReminderObj.reminderFiledFor.find(\n (nff) => option.value === nff.entityBusinessKey\n );\n });\n setExistingReminderFiledFor(initialFileTos);\n formRef?.current?.form?.change('fileTo', initialFileTos);\n }, [existingReminderObj, fileToOptions, formRef]);\n\n useEffect(() => {\n if (!existingReminderObj || !typeOptions?.length) {\n return;\n }\n const initialType = typeOptions.find(\n (option) => option.code === existingReminderObj.typeCode\n );\n formRef?.current?.form?.change('type', initialType || null);\n }, [existingReminderObj, typeOptions, formRef]);\n\n useEffect(() => {\n if (!existingReminderObj) {\n return;\n }\n formRef?.current?.form?.change(\n 'subject',\n existingReminderObj?.subject || ''\n );\n }, [existingReminderObj, formRef]);\n\n useEffect(() => {\n if (!existingReminderObj?.reminderDate) {\n return;\n }\n formRef?.current?.form?.change(\n 'reminderDate',\n new Date(existingReminderObj.reminderDate)\n );\n }, [existingReminderObj, formRef]);\n\n useEffect(() => {\n if (!existingReminderObj) {\n return;\n }\n const matchingReminderFiledFor = existingReminderObj.reminderFiledFor?.find(\n (rff) =>\n rff.domainObject === selectedNode?.properties?.catalogReturnObject\n );\n const initialFileToType = FILE_TO_TYPES.find(\n (option) => option.value === matchingReminderFiledFor?.type\n );\n formRef?.current?.form?.change('fileToType', initialFileToType || null);\n }, [existingReminderObj, typeOptions, formRef, selectedNode]);\n\n return (\n <div className={classes.root}>\n {loading && <LinearProgress color='secondary' />}\n <AmbientCard fullWidth={true} header={true}>\n <Form onSubmit={handleOnSubmit} ref={formRef}>\n <Field\n component={FluentTextFieldAutoComplete}\n label={t('File To')}\n name='fileTo'\n id='fileTo'\n fullWidth\n variant='outlined'\n margin='dense'\n size='small'\n options={fileToOptions || []}\n optionKey={'label'}\n required={true}\n limitTags={!viewOnly ? 2 : -1}\n isMultiple={true}\n disabled={disabled}\n />\n <Field\n component={FluentTextFieldAutoComplete}\n label={t('File To Type')}\n name='fileToType'\n id='fileToType'\n fullWidth\n variant='outlined'\n margin='dense'\n size='small'\n options={FILE_TO_TYPES || []}\n optionKey={'label'}\n required={true}\n disabled={disabled}\n />\n <div className={classes.row}>\n <div style={{ width: '100%' }}>\n <Field\n component={FluentTextFieldAutoComplete}\n label={t('Type')}\n name='type'\n id='type'\n fullWidth\n variant='outlined'\n margin='dense'\n size='small'\n options={typeOptions || []}\n optionKey={'name'}\n required={true}\n disabled={disabled}\n />\n </div>\n {!viewOnly && (\n <div style={{ width: '100%', marginLeft: 8 }}>\n <Field\n component={FluentTextFieldAutoComplete}\n label={t('Template')}\n name='template'\n id='template'\n fullWidth\n variant='outlined'\n margin='dense'\n size='small'\n options={templateOptions || []}\n optionKey={'name'}\n additionalOnChangeAction={onTemplateChange}\n />\n </div>\n )}\n </div>\n <Field\n component={FluentDatePicker}\n label={t('Reminder Date')}\n name='reminderDate'\n id='reminderDate'\n fullWidth\n variant='outlined'\n size='small'\n margin='dense'\n required\n disabled={disabled}\n />\n <Field\n component={TextField}\n label={t('Subject')}\n name='subject'\n id='subject'\n fullWidth\n variant='outlined'\n size='small'\n margin='dense'\n required\n disabled={disabled}\n InputProps={{\n classes: {\n root: classes?.input,\n input: classes?.formTextInput\n }\n }}\n InputLabelProps={{\n classes: {\n root: classes?.labelRoot\n }\n }}\n />\n <LayoutUnit unit='nudge' />\n <CkRichEditor\n handleChange={handleTextEditorChange}\n classes={{ editor: classes.editor }}\n data={reminder}\n editorRef={editorRef}\n isUsingRef={true}\n readOnly={disabled}\n />\n </Form>\n </AmbientCard>\n <LayoutUnit unit='nudge' />\n {shortcutContentFinderEnabled && (\n <AmbientCard\n fullWidth={true}\n header={true}\n lastChildBottomPadding={'0px'}\n cardContentHeight={`calc(100vh - ${shellHidden ? '568px' : '623px'})`}\n >\n <ShortcutContentFinder onSelect={handleShortcutOnSelect} />\n </AmbientCard>\n )}\n </div>\n );\n};\n"],"mappings":"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"}
|