udp-react-enterprise-component-library 25.18.3-beta.6 → 25.18.3-beta.7

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.
@@ -9,7 +9,7 @@ import { t as useTenant } from "./useTenant-CGaZEBEJ.js";
9
9
  import { t as SearchMethodUdpGrid } from "./SearchMethodUdpGrid-BMHWSjf5.js";
10
10
  import { t as CustomMenuPage_default } from "./menuPage-DoZR4-kk.js";
11
11
  import React, { useCallback, useEffect, useMemo, useRef, useState } from "react";
12
- import { TextField } from "@material-ui/core";
12
+ import { FormControlLabel, Switch, TextField } from "@material-ui/core";
13
13
  import { useSnackbar } from "notistack";
14
14
  import { useHistory, useLocation } from "react-router-dom";
15
15
  import { useTranslation } from "react-i18next";
@@ -34,6 +34,12 @@ const formatDateTime = (dateString) => {
34
34
  hour12: true
35
35
  });
36
36
  };
37
+ const toUtcIsoAtLocalEndOfDay = (yyyyMmDd) => {
38
+ if (!yyyyMmDd) return null;
39
+ const [y, m, d] = String(yyyyMmDd).split("-").map((x) => Number(x));
40
+ if (!y || !m || !d) return null;
41
+ return new Date(y, m - 1, d, 23, 59, 59, 0).toISOString();
42
+ };
37
43
  const filterConfigByUrlField = {
38
44
  form_name: {
39
45
  agGridField: "form_Name",
@@ -183,7 +189,7 @@ const gridOptions = {
183
189
  resizable: true
184
190
  }
185
191
  };
186
- const UdpFormsSubmissionGrid = ({ isManagerMode = false, generic1 = void 0, generic2 = void 0, generic3 = void 0, formsRendererUrlPath = void 0, allFormTitle = void 0, menuTitle = void 0 }) => {
192
+ const UdpFormsSubmissionGrid = ({ isManagerMode = false, generic1 = void 0, generic2 = void 0, generic3 = void 0, formsRendererUrlPath = void 0, allFormTitle = void 0, menuTitle = void 0, onSideSheetPrimaryAction = void 0 }) => {
187
193
  const user = useUser();
188
194
  const tenant = useTenant();
189
195
  const history = useHistory();
@@ -200,6 +206,8 @@ const UdpFormsSubmissionGrid = ({ isManagerMode = false, generic1 = void 0, gene
200
206
  const handleGridApiCallback = useCallback((api) => {
201
207
  setGridApi(api);
202
208
  }, []);
209
+ const [containsDueDate, setContainsDueDate] = useState(false);
210
+ const [dueDateValue, setDueDateValue] = useState(null);
203
211
  const initialFilterModel = useMemo(() => {
204
212
  return mapUrlFiltersToAgGridModel(formSubmissionUrlSearchObjs);
205
213
  }, [formSubmissionUrlSearchObjs]);
@@ -393,31 +401,29 @@ const UdpFormsSubmissionGrid = ({ isManagerMode = false, generic1 = void 0, gene
393
401
  generic2,
394
402
  generic3
395
403
  ]);
396
- const generateFormRendererUrlPath = useCallback((formId, formVersion) => {
404
+ useCallback((formId, formVersion) => {
397
405
  return `${formsRendererUrlPath ? formsRendererUrlPath : "page/" + UdpPageEnums.Udp_Form_Renderer_Page}?udpf_formId=${encodeURIComponent(formId)}&udpf_version=${encodeURIComponent(formVersion)}`;
398
- }, [
399
- generic1,
400
- generic2,
401
- generic3,
402
- formsRendererUrlPath
403
- ]);
406
+ }, [formsRendererUrlPath]);
407
+ const generateFormRendererUrlPathUsingSubmissionId = useCallback((submissionId) => {
408
+ return `${formsRendererUrlPath ? formsRendererUrlPath : "page/" + UdpPageEnums.Udp_Form_Renderer_Page}?udpf_submissionId=${encodeURIComponent(submissionId)}`;
409
+ }, [formsRendererUrlPath]);
404
410
  const getGridHeaderConfig = useCallback((formId, formVersion, formTitle) => {
405
411
  const config = { title: formTitle };
406
412
  if (!isManagerMode) config.primaryActionButton = {
407
413
  label: t("Submit New Form"),
408
414
  onClick: () => {
409
- if (formId && formVersion) {
410
- const urlPath = generateFormRendererUrlPath(formId, formVersion);
411
- history.push(urlPath);
412
- } else setIsSidesheetOpen(true);
415
+ if (formId && formVersion) setSelectedUdpFormInSideSheet({
416
+ value: `${formId}|${formVersion}`,
417
+ label: formTitle
418
+ });
419
+ setIsSidesheetOpen(true);
413
420
  }
414
421
  };
415
422
  return config;
416
423
  }, [
417
424
  history,
418
425
  t,
419
- isManagerMode,
420
- generateFormRendererUrlPath
426
+ isManagerMode
421
427
  ]);
422
428
  const columnDefs = useMemo(() => [
423
429
  {
@@ -516,25 +522,55 @@ const UdpFormsSubmissionGrid = ({ isManagerMode = false, generic1 = void 0, gene
516
522
  t,
517
523
  formsRendererUrlPath
518
524
  ]);
519
- const handleSidesheetPrimaryClick = useCallback(() => {
520
- const [id, versionStr] = (selectedUdpFormInSideSheet.value || "").split("|");
521
- const version = Number(versionStr || 0);
522
- if (!id || !version) {
523
- console.warn("Invalid selection:", selectedUdpFormInSideSheet);
525
+ const handleSidesheetPrimaryClick = async () => {
526
+ try {
527
+ const [id, versionStr] = (selectedUdpFormInSideSheet?.value || "").split("|");
528
+ const version = Number(versionStr || 0);
529
+ if (!id || !version) {
530
+ console.warn("Invalid selection:", selectedUdpFormInSideSheet);
531
+ setIsSidesheetOpen(false);
532
+ return;
533
+ }
534
+ const fd = new FormData();
535
+ fd.append("FormId", id);
536
+ fd.append("FormVersion", String(version));
537
+ fd.append("Status", String(UdpFormsSubmissionStatusEnum.Created));
538
+ fd.append("Data", JSON.stringify({}));
539
+ if (dueDateValue) fd.append("DueDate", toUtcIsoAtLocalEndOfDay(dueDateValue));
540
+ if (generic1 !== void 0) fd.append("Generic1", String(generic1));
541
+ if (generic2 !== void 0) fd.append("Generic2", String(generic2));
542
+ if (generic3 !== void 0) fd.append("Generic3", String(generic3));
543
+ const newSubmissionId = (await apiMutate(ConfigService.productV1ApiUrl, `UdpFormSubmission`, {
544
+ method: "POST",
545
+ data: fd
546
+ }, {}))?.data?.id;
524
547
  setIsSidesheetOpen(false);
525
- return;
548
+ const urlPath = generateFormRendererUrlPathUsingSubmissionId(newSubmissionId);
549
+ history.push(urlPath);
550
+ } catch (e) {
551
+ console.error("handleSidesheetPrimaryClick error:", e);
552
+ enqueueSnackbar(t("Error creating a new form."), {
553
+ variant: "error",
554
+ anchorOrigin: {
555
+ vertical: "top",
556
+ horizontal: "center"
557
+ }
558
+ });
526
559
  }
527
- setIsSidesheetOpen(false);
528
- const urlPath = generateFormRendererUrlPath(id, version);
529
- history.push(urlPath);
530
- }, [
531
- selectedUdpFormInSideSheet,
532
- history,
533
- generateFormRendererUrlPath
534
- ]);
560
+ };
561
+ const handleSideSheetDueDateToggleChange = useCallback((checked) => {
562
+ setContainsDueDate(checked);
563
+ if (!checked) setDueDateValue(null);
564
+ }, []);
565
+ const handleDueDateChange = useCallback((e) => {
566
+ const next = e?.target?.value;
567
+ setDueDateValue(next);
568
+ }, []);
535
569
  const handleSideSheetClosed = () => {
536
570
  setSelectedUdpFormInSideSheet({});
537
571
  setIsSidesheetOpen(false);
572
+ setContainsDueDate(false);
573
+ setDueDateValue(null);
538
574
  };
539
575
  const selectableItems = useMemo(() => {
540
576
  const map = /* @__PURE__ */ new Map();
@@ -567,29 +603,46 @@ const UdpFormsSubmissionGrid = ({ isManagerMode = false, generic1 = void 0, gene
567
603
  const getMainGridContent = ({ selectedNode, menuItemsList, idMap, classes }) => {
568
604
  if (!selectedNode) return /* @__PURE__ */ React.createElement(PageLoading, null);
569
605
  const formId = parseIdAndVersion(selectedNode.id);
570
- const formTitle = `${innerMenuItemList.find((form) => form.formId == formId)?.name}` || "Unknown Form";
606
+ const found = innerMenuItemList.find((form) => form.formId == formId);
607
+ const formTitle = `${found?.name}` || "Unknown Form";
571
608
  const newestFormVersion = formDataRaw.filter((formObj) => formObj.id == formId).reduce((acc, curr) => {
572
609
  return Math.max(acc, curr.version);
573
- }, 0);
610
+ }, null);
574
611
  return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(SideSheet, {
575
612
  open: isSidesheetOpen,
576
613
  title: t("Submit New Form"),
577
614
  position: "right",
578
615
  width: "30%",
579
616
  buttonLabel: t("New"),
580
- buttonOneDisabled: !selectedUdpFormInSideSheet.value,
617
+ buttonOneDisabled: !selectedUdpFormInSideSheet?.value || containsDueDate && !dueDateValue,
581
618
  onSubmit: handleSidesheetPrimaryClick,
582
619
  onClose: handleSideSheetClosed
583
- }, /* @__PURE__ */ React.createElement(Autocomplete, {
620
+ }, /* @__PURE__ */ React.createElement(FormControlLabel, {
621
+ control: /* @__PURE__ */ React.createElement(Switch, {
622
+ size: "small",
623
+ onChange: (e) => handleSideSheetDueDateToggleChange(Boolean(e?.target?.checked))
624
+ }),
625
+ label: "Set a Due Date",
626
+ style: { marginLeft: 0 }
627
+ }), containsDueDate ? /* @__PURE__ */ React.createElement(TextField, {
628
+ label: t("Due Date"),
629
+ type: "date",
630
+ variant: "outlined",
631
+ size: "small",
632
+ InputLabelProps: { shrink: true },
633
+ value: dueDateValue,
634
+ onChange: handleDueDateChange,
635
+ helperText: t("Set a due date at the end-of-day based on your local time.")
636
+ }) : null, !(found?.id && newestFormVersion) && /* @__PURE__ */ React.createElement(Autocomplete, {
584
637
  options: selectorOptions,
585
638
  getOptionLabel: (selectedOption) => selectedOption.label,
586
639
  onChange: handleSelectedUdpFormInSideSheetChange,
587
- value: selectedUdpFormInSideSheet.value,
640
+ value: selectedUdpFormInSideSheet,
588
641
  disableClearable: true,
589
642
  size: "small",
590
643
  renderInput: (params) => /* @__PURE__ */ React.createElement(TextField, {
591
644
  ...params,
592
- label: "Choose a Form",
645
+ label: t("Choose a Form"),
593
646
  variant: "outlined"
594
647
  })
595
648
  })), /* @__PURE__ */ React.createElement(SearchMethodUdpGrid, {
@@ -696,4 +749,4 @@ const UdpFormsSubmissionGrid = ({ isManagerMode = false, generic1 = void 0, gene
696
749
 
697
750
  //#endregion
698
751
  export { UdpFormsSubmissionGrid as t };
699
- //# sourceMappingURL=UdpFormsSubmissionGrid-C40IFoeD.js.map
752
+ //# sourceMappingURL=UdpFormsSubmissionGrid-DH_T7FWK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UdpFormsSubmissionGrid-DH_T7FWK.js","names":["CustomMenuPage"],"sources":["../src/udp/pages/UdpFormsSubmissionGrid/UdpFormsSubmissionGrid.jsx"],"sourcesContent":["import React, {\n useMemo,\n useState,\n useEffect,\n useCallback,\n useRef\n} from 'react';\nimport { useUser } from '../../../utilities/auth/useUser';\nimport { useTenant } from '../../../utilities/tenant/useTenant';\nimport { useHistory, useLocation } from 'react-router-dom';\nimport { useSnackbar } from 'notistack';\nimport { CustomMenuPage } from '../../../menuPage';\nimport { useTranslation } from 'react-i18next';\nimport { apiMutate } from '../../../utilities';\nimport { ConfigService } from '../../../configService';\nimport { SearchMethodUdpGrid } from '../../../UI/templates/newGrid';\nimport { LoadingIndicator } from '../../../UI/loading/LoadingIndicator';\nimport { UdpPageEnums } from '../../../enums';\nimport { StatusCellRenderer } from '../../../UI/templates/ui/renderers';\nimport { SqlFilterOperators } from '../../../enums/aggridEnums';\nimport { SideSheet } from '../../../UI/surfaces/SideSheet';\nimport { Autocomplete } from '@material-ui/lab';\nimport { TextField, FormControlLabel, Switch} from '@material-ui/core';\nimport { PageLoading } from '../../../UI';\nimport { parseSearchParamsIntoFilterObjects } from '../../../utilities/search';\n\n\n\n// ============================================================================\n// Submission status enum\n// Used to map numeric submission status values returned from the backend\n// ============================================================================\nconst UdpFormsSubmissionStatusEnum = Object.freeze({\n InProgress: 1,\n Submitted: 2,\n Created: 3\n});\n\n// ============================================================================\n// Date formatter helper\n// Normalizes backend date strings and formats them for display\n// Handles both ISO strings and \"YYYY-MM-DD HH:mm:ss.sss\" formats\n// ============================================================================\nconst formatDateTime = (dateString) => {\n let normalizedDateString = dateString;\n\n // Check if the string is in the 'YYYY-MM-DD HH:mm:ss.sss' format\n // (i.e., contains a space instead of 'T').\n // If the input is already ISO (e.g. '2025-12-10T20:23:23.055Z'),\n // it passes straight through.\n // This format is assumed to be missing timezone info and treated as UTC.\n if (dateString.includes(' ')) {\n // Replace the space with 'T' to normalize to ISO-like format\n normalizedDateString = dateString.replace(' ', 'T');\n }\n\n // Ensure UTC timezone is explicitly specified\n if (!dateString.toUpperCase().endsWith('Z')) {\n normalizedDateString = normalizedDateString + 'Z';\n }\n\n const date = new Date(normalizedDateString);\n\n // Localized, user-friendly date/time display\n return date.toLocaleString(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n hour12: true\n });\n};\n\nconst toUtcIsoAtLocalEndOfDay = (yyyyMmDd) => {\n if (!yyyyMmDd) return null;\n const [y, m, d] = String(yyyyMmDd)\n .split('-')\n .map((x) => Number(x));\n if (!y || !m || !d) return null;\n\n // local time end-of-day (23:59:59.000), then serialize as UTC ISO\n const local = new Date(y, m - 1, d, 23, 59, 59, 0);\n return local.toISOString();\n};\n\n// ============================================================================\n// URL filter field → ag-Grid filter configuration mapping\n// Used when converting URL search params into ag-Grid filter models\n// ============================================================================\nconst filterConfigByUrlField = {\n form_name: { agGridField: 'form_Name', filterType: 'text' },\n formsubmission_formversion: {\n agGridField: 'formSubmission_FormVersion',\n filterType: 'number'\n },\n form_description: { agGridField: 'form_Description', filterType: 'text' },\n formsubmission_userdisplayname: {\n agGridField: 'formSubmission_UserDisplayName',\n filterType: 'text'\n },\n formsubmission_status: {\n agGridField: 'formSubmission_Status',\n filterType: 'number'\n },\n formsubmission_initialcreatedon: {\n agGridField: 'formSubmission_InitialCreatedOn',\n filterType: 'date'\n },\n formsubmission_lastmodifiedon: {\n agGridField: 'formSubmission_LastModifiedOn',\n filterType: 'date'\n },\n formsubmission_submittedon: {\n agGridField: 'formSubmission_SubmittedOn',\n filterType: 'date'\n },\n formsubmission_duedate: {\n agGridField: 'formSubmission_DueDate',\n filterType: 'date'\n },\n formsubmission_isoverdue: {\n agGridField: 'formSubmission_IsOverdue',\n filterType: 'text'\n }\n};\n\n/**\n * Maps your internal filter object structure (from URL processing)\n * to the ag-Grid Filter Model structure.\n * * @param {Array<{searchField: string, searchOperator: number, searchValue: string}>} filterObjects\n * @returns {object} ag-Grid Filter Model\n */\n/**\n * Maps your internal filter object structure (from URL processing)\n * to the ag-Grid Filter Model structure.\n * @param {Array<{searchField: string, searchOperator: number, searchValue: string}>} filterObjects\n * @returns {object} ag-Grid Filter Model\n */\nconst mapUrlFiltersToAgGridModel = (filterObjects) => {\n if (!filterObjects || filterObjects.length === 0) {\n return null;\n }\n\n const agGridModel = {};\n\n filterObjects.forEach((filter) => {\n const { searchField, searchOperator, searchValue } = filter;\n\n const searchKey = searchField.toLocaleLowerCase();\n const config = filterConfigByUrlField[searchKey];\n\n if (!config) {\n console.warn(\n `No configuration found for URL filter field: ${searchField}. Filter ignored.`\n );\n return;\n }\n\n const agGridField = config.agGridField;\n const filterType = config.filterType;\n\n let type = 'equals';\n switch (searchOperator) {\n case SqlFilterOperators.EQUALS:\n type = 'equals';\n break;\n case SqlFilterOperators.NOT_EQUALS:\n type = 'notEqual';\n break;\n case SqlFilterOperators.GREATER_THAN:\n type = 'greaterThan';\n break;\n case SqlFilterOperators.LESS_THAN:\n type = 'lessThan';\n break;\n case SqlFilterOperators.LIKE:\n type = 'contains';\n break;\n default:\n type = 'equals';\n }\n\n let filterValue = searchValue;\n\n if (\n !filterValue ||\n filterValue.toLowerCase() === 'undefined' ||\n filterValue.toLowerCase() === 'null'\n ) {\n console.warn(\n `Skipping filter for ${agGridField} due to invalid value: ${searchValue}`\n );\n return;\n }\n\n if (filterType == 'date') {\n agGridModel[agGridField] = {\n filterType,\n type,\n dateFrom: filterValue\n };\n } else if (\n filterType == 'text' &&\n agGridField.toLocaleLowerCase() == 'formsubmission_isoverdue'\n ) {\n agGridModel[agGridField] = {\n filterType,\n type: filterValue\n };\n } else {\n agGridModel[agGridField] = {\n filterType,\n type,\n filter: filterValue\n };\n }\n });\n\n return agGridModel;\n};\n\n// ============================================================================\n// Helper for CustomMenuPage to parse form submission ID and version from node ID\n// ============================================================================\nconst parseIdAndVersion = (input) => {\n const formSubmissionId = input.replace(/^form-submission-/, '');\n // Check for \"all forms\" special case\n if (formSubmissionId.includes('all-forms-key')) {\n return null;\n }\n return formSubmissionId;\n};\n\n// ============================================================================\n// Maps a submission status enum value to a human-readable status label\n// Used in grid cell renderer\n// ============================================================================\nconst getSubmissionStatusLabel = (node) => {\n const formStatus = node?.data?.formSubmission_Status;\n switch (formStatus) {\n case UdpFormsSubmissionStatusEnum.InProgress:\n return 'InProgress';\n case UdpFormsSubmissionStatusEnum.Created:\n return 'Created';\n case UdpFormsSubmissionStatusEnum.Submitted:\n return 'Submitted';\n default:\n return '';\n }\n};\n\n// ============================================================================\n// Maps overdue flag to a display label\n// Used in grid cell renderer\n// ============================================================================\nconst getOverdueStatusLabel = (node) => {\n const overdueStatus = node?.data?.formSubmission_IsOverdue;\n switch (overdueStatus) {\n case true:\n return 'Overdue';\n default:\n return '';\n }\n};\n\n// ============================================================================\n// Filters form submissions by tenant ID\n// ============================================================================\nconst filterSubmissionByTenantId = (submissions, tenantId) => {\n return submissions.filter(\n (submission) => submission.form_TenantId === tenantId\n );\n};\n\n// ============================================================================\n// Map of status labels to status types\n// Used in grid configs\n// ============================================================================\nconst gridFunctions = [\n { name: 'agGridSizeColumnsToFit' },\n { name: 'agGridAutoSizeColumns' },\n { name: 'agGridResetColumns' },\n { name: 'agGridHideShowColumns' }\n];\n\n// ============================================================================\n// Map of status labels to status types\n// Used in grid configs\n// ============================================================================\nconst statusMappingConfig = {\n Created: 'info',\n InProgress: 'warning',\n Submitted: 'success',\n Overdue: 'error'\n};\n\n// ============================================================================\n// Map of status labels to status types\n// Grid options config\n// ============================================================================\nconst gridOptions = {\n pagination: true,\n defaultColDef: {\n sortable: true,\n filter: true,\n resizable: true\n }\n};\n\nexport const UdpFormsSubmissionGrid = ({\n isManagerMode = false,\n generic1 = undefined,\n generic2 = undefined,\n generic3 = undefined,\n formsRendererUrlPath = undefined,\n allFormTitle = undefined,\n menuTitle = undefined,\n onSideSheetPrimaryAction = undefined\n}) => {\n const user = useUser();\n const tenant = useTenant();\n const history = useHistory();\n const location = useLocation();\n const { t } = useTranslation();\n const { enqueueSnackbar, closeSnackbar } = useSnackbar();\n\n // Component states\n const [innerMenuItemList, setInnerMenuItemList] = useState([]);\n const [formSubmissionViewDataRaw, setFormSubmissionViewDataRaw] = useState([]);\n const [formDataRaw, setFormDataRaw] = useState([]);\n const [isSidesheetOpen, setIsSidesheetOpen] = useState(false);\n const [selectedUdpFormInSideSheet, setSelectedUdpFormInSideSheet] = useState({});\n const [formSubmissionUrlSearchObjs, setFormSubmissionUrlSearchObjs] = useState([]);\n const [gridApi, setGridApi] = useState(null);\n const handleGridApiCallback = useCallback((api) => { setGridApi(api) }, []);\n const [containsDueDate, setContainsDueDate] = useState(false);\n const [dueDateValue, setDueDateValue] = useState(null); \n\n const initialFilterModel = useMemo(() => {\n return mapUrlFiltersToAgGridModel(formSubmissionUrlSearchObjs);\n }, [formSubmissionUrlSearchObjs]);\n\n useEffect(() => {\n if (gridApi && initialFilterModel) {\n gridApi.setFilterModel(initialFilterModel);\n gridApi.onFilterChanged();\n }\n }, [gridApi, initialFilterModel]);\n\n const consolidateAndSortFormsByFormId = useCallback(\n (forms, submissions = []) => {\n const resultMap = new Map();\n for (const item of forms) {\n const {\n id: formId,\n version: formVersion,\n name: formName,\n description: formDescription,\n initialCreatedOn: initialCreatedOn\n } = item;\n if (!formId || formVersion == null) continue;\n\n const key = String(formId);\n const existing = resultMap.get(key);\n\n // normalize version and timestamp\n const versionNum = Number(formVersion) || 0;\n const ts = initialCreatedOn ? new Date(initialCreatedOn).getTime() : 0;\n\n // robust comparison (coerce to string)\n const submissionCount = (submissions || []).filter(\n (sub) => String(sub?.formSubmission_FormId) === key\n ).length;\n\n if (!existing) {\n resultMap.set(key, {\n id: key,\n formId,\n formVersion: versionNum,\n name: formName || t('Untitled Form'),\n submissionCount,\n description: formDescription || '',\n mostRecentCreatedOn: ts\n });\n } else {\n // keep metadata (name/description/formVersion) from the highest version seen\n if (versionNum > (existing.formVersion || 0)) {\n existing.formVersion = versionNum;\n if (formName) existing.name = formName;\n if (formDescription) existing.description = formDescription;\n }\n }\n }\n\n const sortedOptions = Array.from(resultMap.values()).sort((a, b) =>\n b.name.localeCompare(a.name)\n );\n return sortedOptions;\n },\n [t]\n );\n\n const consolidateAndSortFormSubmissionsByFormId = useCallback(\n (submissions) => {\n const resultMap = new Map();\n for (const item of submissions) {\n const {\n formSubmission_FormId: formId,\n formSubmission_FormVersion: formVersion,\n form_Name: formName,\n form_Description: formDescription,\n formSubmission_InitialCreatedOn: initialCreatedOn\n } = item;\n if (!formId || formVersion == null) continue;\n\n const key = `${formId}`;\n const existing = resultMap.get(key);\n\n // normalize version and timestamp\n const versionNum = Number(formVersion) || 0;\n const ts = initialCreatedOn ? new Date(initialCreatedOn).getTime() : 0;\n\n if (!existing) {\n resultMap.set(key, {\n id: key,\n formId,\n formVersion: versionNum,\n name: formName || t('Untitled Form'),\n submissionCount: 1,\n description: formDescription || '',\n mostRecentCreatedOn: ts\n });\n } else {\n existing.submissionCount += 1;\n existing.mostRecentCreatedOn = Math.max(\n existing.mostRecentCreatedOn || 0,\n ts\n );\n\n // keep metadata (name/description/formVersion) from the highest version seen\n if (versionNum > (existing.formVersion || 0)) {\n existing.formVersion = versionNum;\n if (formName) existing.name = formName;\n if (formDescription) existing.description = formDescription;\n }\n }\n }\n\n const sortedOptions = Array.from(resultMap.values()).sort(\n (a, b) => b.mostRecentCreatedOn - a.mostRecentCreatedOn\n );\n return sortedOptions;\n },\n [t]\n );\n\n const fetchSubmissions = useCallback(async () => {\n try {\n if (!tenant?.activeTenant?.tenantId) return;\n\n const filterElements = [];\n\n filterElements.push({\n searchField: 'Form_TenantId',\n searchOperator: '=',\n searchValue: tenant.activeTenant.tenantId\n });\n\n if (!isManagerMode) {\n filterElements.push({\n searchField: 'FormSubmission_UnityUserId',\n searchOperator: '=',\n searchValue: user.id\n });\n }\n\n if (generic1 !== undefined) {\n filterElements.push({\n searchField: 'formSubmission_generic1',\n searchOperator: '=',\n searchValue: generic1\n });\n }\n\n if (generic2 !== undefined) {\n filterElements.push({\n searchField: 'formSubmission_generic2',\n searchOperator: '=',\n searchValue: generic2\n });\n }\n\n if (generic3 !== undefined) {\n filterElements.push({\n searchField: 'formSubmission_generic3',\n searchOperator: '=',\n searchValue: generic3\n });\n }\n\n const formSubmissionViewSearchResponse = await apiMutate(\n ConfigService.productV1ApiUrl,\n `UdpFormWithSubmissionsView/search`,\n {\n method: 'POST',\n data: {\n eagerLoad: false,\n getAll: true,\n filterElements\n }\n },\n {}\n );\n\n const submissions = formSubmissionViewSearchResponse?.data.pageList || [];\n const processedSubmissions = filterSubmissionByTenantId(\n submissions,\n tenant.activeTenant.tenantId\n );\n setFormSubmissionViewDataRaw(processedSubmissions);\n } catch (e) {\n console.error('fetchSubmissions error:', e);\n }\n }, [\n user,\n tenant,\n isManagerMode,\n consolidateAndSortFormSubmissionsByFormId,\n t,\n generic1,\n generic2,\n generic3\n ]);\n\n const fetchForms = useCallback(async () => {\n try {\n if (!tenant?.activeTenant?.tenantId) return;\n\n const filterElements = [];\n\n filterElements.push({\n searchField: 'tenantId',\n searchOperator: '=',\n searchValue: tenant.activeTenant.tenantId\n });\n\n const formResponse = await apiMutate(\n ConfigService.productV1ApiUrl,\n `UdpForm/search`,\n {\n method: 'POST',\n data: {\n eagerLoad: false,\n getAll: true,\n filterElements\n }\n },\n {}\n );\n\n const forms = formResponse?.data.pageList || [];\n setFormDataRaw(forms);\n } catch (e) {\n console.error('fetchForms error:', e);\n }\n }, [user, tenant, consolidateAndSortFormSubmissionsByFormId]);\n\n const getSearchMethodConfig = useCallback(\n (formId) => {\n if (!tenant?.activeTenant?.tenantId) return;\n\n const filterElements = [];\n\n if (!isManagerMode) {\n filterElements.push({\n searchField: 'formSubmission_unityUserId',\n searchOperator: '=',\n searchValue: user.id || ''\n });\n }\n\n if (formId) {\n filterElements.push({\n searchField: 'formSubmission_formId',\n searchOperator: '=',\n searchValue: formId\n });\n }\n\n if (generic1 !== undefined) {\n filterElements.push({\n searchField: 'formSubmission_generic1',\n searchOperator: '=',\n searchValue: generic1\n });\n }\n\n if (generic2 !== undefined) {\n filterElements.push({\n searchField: 'formSubmission_generic2',\n searchOperator: '=',\n searchValue: generic2\n });\n }\n\n if (generic3 !== undefined) {\n filterElements.push({\n searchField: 'formSubmission_generic3',\n searchOperator: '=',\n searchValue: generic3\n });\n }\n\n filterElements.push({\n searchField: 'form_tenantId',\n searchOperator: '=',\n searchValue: tenant?.activeTenant?.tenantId || ''\n });\n\n return {\n requestUrl: `${ConfigService.productV1ApiUrl}/UdpFormWithSubmissionsView/search`,\n customSearchObject: {\n eagerLoad: false,\n filterElements,\n orderElements: [\n {\n sortColumn: 'initialCreatedOn',\n sortDirection: 'DESC'\n }\n ]\n }\n // logicalSearchOperator: 1,\n // groupingType: '',\n // groupProperty: [],\n // groupOperationList: [],\n // type: 'advanced',\n // pageNumber: 1,\n // pageSize: 20,\n };\n },\n [user, isManagerMode, tenant, generic1, generic2, generic3]\n );\n\n const generateFormRendererUrlPathUsingFormIdAndFormVersion = useCallback(\n (formId, formVersion) => {\n const baseRoute = formsRendererUrlPath\n ? formsRendererUrlPath\n : 'page/' + UdpPageEnums.Udp_Form_Renderer_Page;\n\n return `${baseRoute}?udpf_formId=${encodeURIComponent(\n formId\n )}&udpf_version=${encodeURIComponent(formVersion)}`;\n },\n [formsRendererUrlPath]\n );\n\n const generateFormRendererUrlPathUsingSubmissionId = useCallback(\n (submissionId) => {\n const baseRoute = formsRendererUrlPath\n ? formsRendererUrlPath\n : 'page/' + UdpPageEnums.Udp_Form_Renderer_Page;\n\n return `${baseRoute}?udpf_submissionId=${encodeURIComponent(\n submissionId\n )}`;\n },\n [formsRendererUrlPath]\n );\n\n const getGridHeaderConfig = useCallback(\n (formId, formVersion, formTitle) => {\n const config = {\n title: formTitle\n };\n\n if (!isManagerMode) {\n config.primaryActionButton = {\n label: t('Submit New Form'),\n onClick: () => {\n if (formId && formVersion) {\n setSelectedUdpFormInSideSheet({ value: `${formId}|${formVersion}`, label: formTitle });\n } \n setIsSidesheetOpen(true);\n }\n };\n }\n\n return config;\n },\n [history, t, isManagerMode]\n );\n\n const columnDefs = useMemo(\n () => [\n { headerName: 'Form ID', field: 'formSubmission_FormId', hide: true },\n {\n headerName: t('Name'),\n field: 'form_Name',\n type: 'text',\n sortable: true\n },\n {\n headerName: t('Version'),\n field: 'formSubmission_FormVersion',\n type: 'number',\n sortable: true\n },\n {\n headerName: t('Description'),\n field: 'form_Description',\n type: 'text',\n sortable: true,\n hide: true\n },\n {\n headerName: t('Submitted By'),\n field: 'formSubmission_UserDisplayName',\n type: 'text',\n sortable: true\n },\n {\n headerName: t('Status'),\n filter: true,\n field: 'formSubmission_Status',\n cellRenderer: 'statusRenderer',\n cellRendererParams: {\n statusMappingConfig: statusMappingConfig,\n getStatusValue: getSubmissionStatusLabel\n }\n },\n {\n headerName: t('Overdue Status'),\n field: 'formSubmission_IsOverdue',\n cellDataType: 'boolean',\n sortable: true,\n cellRenderer: 'statusRenderer',\n cellRendererParams: {\n statusMappingConfig: statusMappingConfig,\n getStatusValue: getOverdueStatusLabel\n }\n },\n {\n headerName: t('Created On'),\n field: 'formSubmission_InitialCreatedOn',\n valueFormatter: (p) => (p.value ? formatDateTime(p.value) : ''),\n sortable: true,\n cellDataType: 'dateTimeString'\n },\n {\n headerName: t('Last Modified On'),\n field: 'formSubmission_LastModifiedOn',\n valueFormatter: (p) => (p.value ? formatDateTime(p.value) : ''),\n sortable: true,\n cellDataType: 'dateTimeString'\n },\n {\n headerName: t('Submitted On'),\n field: 'formSubmission_SubmittedOn',\n valueFormatter: (p) => (p.value ? formatDateTime(p.value) : ''),\n sortable: true,\n cellDataType: 'dateTimeString'\n },\n {\n headerName: t('Due On'),\n field: 'formSubmission_DueDate',\n valueFormatter: (p) => (p.value ? formatDateTime(p.value) : ''),\n sortable: true,\n cellDataType: 'dateTimeString'\n },\n {\n field: 'actions',\n cellRenderer: 'actionsRenderer',\n cellRendererParams: {\n actionList: [\n {\n id: 0,\n iconName: 'view',\n title: t('Open This Submission'),\n handleOnClick: (e, params) => {\n history.push(\n `${\n formsRendererUrlPath\n ? formsRendererUrlPath\n : '/page/' + UdpPageEnums.Udp_Form_Renderer_Page\n }?udpf_submissionId=${params?.data?.formSubmission_Id}`\n );\n }\n }\n ]\n }\n }\n ],\n [history, t, formsRendererUrlPath]\n );\n\n // ============================================================================\n // Side Sheet Helpers and Handlers\n // ============================================================================\n // const handleSidesheetPrimaryClick = useCallback(async () => {\n const handleSidesheetPrimaryClick = async () => {\n try {\n // selectedUdpFormInSideSheet format is { value: \"formId|formVersion\", label: \"...\" }\n const raw = selectedUdpFormInSideSheet?.value || '';\n const [id, versionStr] = raw.split('|');\n const version = Number(versionStr || 0);\n if (!id || !version) {\n console.warn('Invalid selection:', selectedUdpFormInSideSheet);\n setIsSidesheetOpen(false);\n return;\n }\n\n const fd = new FormData();\n fd.append('FormId', id);\n fd.append('FormVersion', String(version));\n fd.append('Status', String(UdpFormsSubmissionStatusEnum.Created));\n fd.append('Data', JSON.stringify({}));\n if (dueDateValue) {\n fd.append('DueDate', toUtcIsoAtLocalEndOfDay(dueDateValue));\n }\n if (generic1 !== undefined) {\n fd.append('Generic1', String(generic1));\n }\n if (generic2 !== undefined) {\n fd.append('Generic2', String(generic2));\n }\n if (generic3 !== undefined) {\n fd.append('Generic3', String(generic3));\n }\n\n const formSubmissionViewSearchResponse = await apiMutate(\n ConfigService.productV1ApiUrl,\n `UdpFormSubmission`,\n {\n method: 'POST',\n data: fd\n },\n {}\n );\n\n const newSubmissionId = formSubmissionViewSearchResponse?.data?.id;\n setIsSidesheetOpen(false);\n const urlPath = generateFormRendererUrlPathUsingSubmissionId(newSubmissionId);\n history.push(urlPath);\n } catch (e) {\n console.error('handleSidesheetPrimaryClick error:', e);\n enqueueSnackbar(t('Error creating a new form.'), { variant: 'error' , anchorOrigin: { vertical: 'top', horizontal: 'center' }});\n }\n // }, [selectedUdpFormInSideSheet, history, generateFormRendererUrlPathUsingSubmissionId, dueDateValue]);\n };\n\n const handleSideSheetDueDateToggleChange = useCallback((checked) => {\n setContainsDueDate(checked);\n if (!checked) setDueDateValue(null); // hide + clear datapoint\n }, []);\n\n const handleDueDateChange = useCallback((e) => {\n const next = e?.target?.value;\n setDueDateValue(next);\n }, []);\n\n const handleSideSheetClosed = () => {\n setSelectedUdpFormInSideSheet({});\n setIsSidesheetOpen(false);\n setContainsDueDate(false);\n setDueDateValue(null);\n };\n\n const selectableItems = useMemo(() => {\n const map = new Map();\n\n for (const f of formDataRaw || []) {\n const formType = f.form_Type ?? f.formType ?? f.type;\n if (Number(formType) !== 1) continue;\n\n const formId = f.id ?? f.form_Id ?? f.formId ?? String(f?.Id ?? '');\n const version = Number(f.version ?? f.form_Version ?? f.formVersion ?? 0);\n const name =\n f.name ??\n f.form_Name ??\n f.formName ??\n f.Form_Name ??\n f.displayName ??\n t('Untitled Form');\n const description = f.description ?? f.form_Description ?? '';\n\n const existing = map.get(formId);\n if (!existing || version > existing.version) {\n map.set(formId, { id: formId, name, version, description });\n }\n }\n\n return Array.from(map.values()).sort((a, b) => b.version - a.version);\n }, [formDataRaw, t]);\n\n const selectorOptions = useMemo(() => {\n return (selectableItems || []).map((s) => ({\n value: `${s.id}|${s.version}`,\n label: s.version ? `${s.name} (v${s.version})` : s.name\n }));\n }, [selectableItems]);\n\n const handleSelectedUdpFormInSideSheetChange = (event, newValue) => {\n if (newValue !== null) {\n setSelectedUdpFormInSideSheet(newValue);\n }\n };\n\n const getMainGridContent = ({\n selectedNode,\n menuItemsList,\n idMap,\n classes\n }) => {\n if (!selectedNode) {\n return <PageLoading />;\n }\n const formId = parseIdAndVersion(selectedNode.id);\n const found = innerMenuItemList.find((form) => form.formId == formId);\n const formTitle = `${found?.name}` || 'Unknown Form';\n const newestFormVersion = formDataRaw\n .filter((formObj) => formObj.id == formId)\n .reduce((acc, curr) => {\n return Math.max(acc, curr.version);\n }, null);\n\n return (\n <>\n <SideSheet\n open={isSidesheetOpen}\n title={t('Submit New Form')}\n position='right'\n width={'30%'}\n buttonLabel={t('New')}\n // Disable primary action when there is no selected form OR when\n // the user requested a due date but didn't pick one.\n buttonOneDisabled={!selectedUdpFormInSideSheet?.value || (containsDueDate && !dueDateValue)}\n onSubmit={handleSidesheetPrimaryClick}\n onClose={handleSideSheetClosed}\n >\n <FormControlLabel\n control={\n <Switch\n size='small'\n onChange={(e) => handleSideSheetDueDateToggleChange(Boolean(e?.target?.checked))}\n />\n }\n label='Set a Due Date'\n style={{ marginLeft: 0 }}\n />\n {containsDueDate ? (\n <TextField\n label={t('Due Date')}\n type='date'\n variant='outlined'\n size='small'\n InputLabelProps={{ shrink: true }}\n value={dueDateValue}\n onChange={handleDueDateChange}\n helperText={t('Set a due date at the end-of-day based on your local time.')}\n />\n ) : null}\n \n {/* // Only show form selector when the user is not in a specific form context */}\n {!(found?.id && newestFormVersion) && (\n <Autocomplete\n options={selectorOptions}\n getOptionLabel={(selectedOption) => selectedOption.label}\n onChange={handleSelectedUdpFormInSideSheetChange}\n // Autocomplete expects the selected option object as value\n value={selectedUdpFormInSideSheet}\n disableClearable={true}\n size='small'\n renderInput={(params) => (\n <TextField\n {...params}\n label={t('Choose a Form')}\n variant='outlined'\n />\n )}\n />\n )}\n \n </SideSheet>\n\n <SearchMethodUdpGrid\n searchMethodConfig={getSearchMethodConfig(formId)}\n columnDefs={columnDefs}\n gridOptions={gridOptions}\n gridHeaderConfig={getGridHeaderConfig(\n formId,\n newestFormVersion,\n formTitle\n )}\n gridFunctions={gridFunctions}\n gridApiCallback={handleGridApiCallback} // Pass the setter/ref handler\n />\n </>\n );\n };\n\n useEffect(() => {\n if (!tenant?.activeTenant?.tenantId) return;\n\n const urlSearchObjs = parseSearchParamsIntoFilterObjects();\n setFormSubmissionUrlSearchObjs(urlSearchObjs); // THIS LINE TRIGGERS initialFilterModel\n\n let cancelled = false;\n (async () => {\n try {\n // replicate fetchSubmissions logic but using local urlSearchObjs (avoids depending on the state)\n let filterElements = [];\n\n filterElements.push({\n searchField: 'Form_TenantId',\n searchOperator: '=',\n searchValue: tenant.activeTenant.tenantId\n });\n\n if (!isManagerMode) {\n filterElements.push({\n searchField: 'FormSubmission_UnityUserId',\n searchOperator: '=',\n searchValue: user.id\n });\n }\n\n if (generic1 !== undefined) {\n filterElements.push({\n searchField: 'formSubmission_generic1',\n searchOperator: '=',\n searchValue: generic1\n });\n }\n\n if (generic2 !== undefined) {\n filterElements.push({\n searchField: 'formSubmission_generic2',\n searchOperator: '=',\n searchValue: generic2\n });\n }\n\n if (generic3 !== undefined) {\n filterElements.push({\n searchField: 'formSubmission_generic3',\n searchOperator: '=',\n searchValue: generic3\n });\n }\n\n const formSubmissionViewSearchResponse = await apiMutate(\n ConfigService.productV1ApiUrl,\n `UdpFormWithSubmissionsView/search`,\n {\n method: 'POST',\n data: {\n eagerLoad: false,\n getAll: true,\n filterElements\n }\n },\n {}\n );\n\n if (cancelled) return;\n\n const submissions = formSubmissionViewSearchResponse?.data.pageList || [];\n const processedSubmissions = submissions.filter((submission) =>\n submission.form_TenantId === tenant.activeTenant.tenantId\n );\n setFormSubmissionViewDataRaw(processedSubmissions);\n await fetchForms();\n } catch (err) {\n console.error('fetching submissions/forms failed', err);\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, [\n location.search,\n tenant?.activeTenant?.tenantId,\n generic1,\n generic2,\n generic3,\n isManagerMode,\n user?.id,\n fetchForms\n ]);\n\n // derive menu items from fetched submissions (separate effect to avoid refetch loop)\n useEffect(() => {\n const innerMenuList = consolidateAndSortFormsByFormId(\n formDataRaw || [],\n formSubmissionViewDataRaw || []\n );\n\n innerMenuList.unshift({\n id: 'all-forms-key',\n name:\n allFormTitle ??\n t(\n isManagerMode\n ? t('All Form Submissions')\n : t('All My Form Submissions')\n ),\n submissionCount: formSubmissionViewDataRaw?.length || 0\n });\n setInnerMenuItemList(innerMenuList);\n }, [\n formSubmissionViewDataRaw,\n isManagerMode,\n consolidateAndSortFormsByFormId,\n formDataRaw,\n t,\n allFormTitle\n ]);\n\n return (\n <div>\n <CustomMenuPage\n menuTitle={menuTitle ?? t('Forms')}\n items={innerMenuItemList}\n idPrefix='form-submission'\n showItemCount={true}\n itemCountAccessor={(item) => item?.submissionCount ?? 0}\n mainContent={({ selectedNode, menuItemsList, idMap, classes }) => {\n return (\n <div>\n {getMainGridContent({\n selectedNode,\n menuItemsList,\n idMap,\n classes\n })}\n </div>\n );\n }}\n />\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAgCA,MAAM,+BAA+B,OAAO,OAAO;CACjD,YAAY;CACZ,WAAW;CACX,SAAS;CACV,CAAC;AAOF,MAAM,kBAAkB,eAAe;CACrC,IAAI,uBAAuB;AAO3B,KAAI,WAAW,SAAS,IAAI,CAE1B,wBAAuB,WAAW,QAAQ,KAAK,IAAI;AAIrD,KAAI,CAAC,WAAW,aAAa,CAAC,SAAS,IAAI,CACzC,wBAAuB,uBAAuB;AAMhD,QAHa,IAAI,KAAK,qBAAqB,CAG/B,eAAe,QAAW;EACpC,MAAM;EACN,OAAO;EACP,KAAK;EACL,MAAM;EACN,QAAQ;EACR,QAAQ;EACT,CAAC;;AAGJ,MAAM,2BAA2B,aAAa;AAC5C,KAAI,CAAC,SAAU,QAAO;CACtB,MAAM,CAAC,GAAG,GAAG,KAAK,OAAO,SAAS,CAC/B,MAAM,IAAI,CACV,KAAK,MAAM,OAAO,EAAE,CAAC;AACxB,KAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAG,QAAO;AAI3B,QADc,IAAI,KAAK,GAAG,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,EAAE,CACrC,aAAa;;AAO5B,MAAM,yBAAyB;CAC7B,WAAW;EAAE,aAAa;EAAa,YAAY;EAAQ;CAC3D,4BAA4B;EAC1B,aAAa;EACb,YAAY;EACb;CACD,kBAAkB;EAAE,aAAa;EAAoB,YAAY;EAAQ;CACzE,gCAAgC;EAC9B,aAAa;EACb,YAAY;EACb;CACD,uBAAuB;EACrB,aAAa;EACb,YAAY;EACb;CACD,iCAAiC;EAC/B,aAAa;EACb,YAAY;EACb;CACD,+BAA+B;EAC7B,aAAa;EACb,YAAY;EACb;CACD,4BAA4B;EAC1B,aAAa;EACb,YAAY;EACb;CACD,wBAAwB;EACtB,aAAa;EACb,YAAY;EACb;CACD,0BAA0B;EACxB,aAAa;EACb,YAAY;EACb;CACF;;;;;;;;;;;;;AAcD,MAAM,8BAA8B,kBAAkB;AACpD,KAAI,CAAC,iBAAiB,cAAc,WAAW,EAC7C,QAAO;CAGT,MAAM,cAAc,EAAE;AAEtB,eAAc,SAAS,WAAW;EAChC,MAAM,EAAE,aAAa,gBAAgB,gBAAgB;EAGrD,MAAM,SAAS,uBADG,YAAY,mBAAmB;AAGjD,MAAI,CAAC,QAAQ;AACX,WAAQ,KACN,gDAAgD,YAAY,mBAC7D;AACD;;EAGF,MAAM,cAAc,OAAO;EAC3B,MAAM,aAAa,OAAO;EAE1B,IAAI,OAAO;AACX,UAAQ,gBAAR;GACE,KAAK,mBAAmB;AACtB,WAAO;AACP;GACF,KAAK,mBAAmB;AACtB,WAAO;AACP;GACF,KAAK,mBAAmB;AACtB,WAAO;AACP;GACF,KAAK,mBAAmB;AACtB,WAAO;AACP;GACF,KAAK,mBAAmB;AACtB,WAAO;AACP;GACF,QACE,QAAO;;EAGX,IAAI,cAAc;AAElB,MACE,CAAC,eACD,YAAY,aAAa,KAAK,eAC9B,YAAY,aAAa,KAAK,QAC9B;AACA,WAAQ,KACN,uBAAuB,YAAY,yBAAyB,cAC7D;AACD;;AAGF,MAAI,cAAc,OAChB,aAAY,eAAe;GACzB;GACA;GACA,UAAU;GACX;WAED,cAAc,UACd,YAAY,mBAAmB,IAAI,2BAEnC,aAAY,eAAe;GACzB;GACA,MAAM;GACP;MAED,aAAY,eAAe;GACzB;GACA;GACA,QAAQ;GACT;GAEH;AAEF,QAAO;;AAMT,MAAM,qBAAqB,UAAU;CACnC,MAAM,mBAAmB,MAAM,QAAQ,qBAAqB,GAAG;AAE/D,KAAI,iBAAiB,SAAS,gBAAgB,CAC5C,QAAO;AAET,QAAO;;AAOT,MAAM,4BAA4B,SAAS;AAEzC,SADmB,MAAM,MAAM,uBAC/B;EACE,KAAK,6BAA6B,WAChC,QAAO;EACT,KAAK,6BAA6B,QAChC,QAAO;EACT,KAAK,6BAA6B,UAChC,QAAO;EACT,QACE,QAAO;;;AAQb,MAAM,yBAAyB,SAAS;AAEtC,SADsB,MAAM,MAAM,0BAClC;EACE,KAAK,KACH,QAAO;EACT,QACE,QAAO;;;AAOb,MAAM,8BAA8B,aAAa,aAAa;AAC5D,QAAO,YAAY,QAChB,eAAe,WAAW,kBAAkB,SAC9C;;AAOH,MAAM,gBAAgB;CACpB,EAAE,MAAM,0BAA0B;CAClC,EAAE,MAAM,yBAAyB;CACjC,EAAE,MAAM,sBAAsB;CAC9B,EAAE,MAAM,yBAAyB;CAClC;AAMD,MAAM,sBAAsB;CAC1B,SAAS;CACT,YAAY;CACZ,WAAW;CACX,SAAS;CACV;AAMD,MAAM,cAAc;CAClB,YAAY;CACZ,eAAe;EACb,UAAU;EACV,QAAQ;EACR,WAAW;EACZ;CACF;AAED,MAAa,0BAA0B,EACrC,gBAAgB,OAChB,WAAW,QACX,WAAW,QACX,WAAW,QACX,uBAAuB,QACvB,eAAe,QACf,YAAY,QACZ,2BAA2B,aACvB;CACJ,MAAM,OAAO,SAAS;CACtB,MAAM,SAAS,WAAW;CAC1B,MAAM,UAAU,YAAY;CAC5B,MAAM,WAAW,aAAa;CAC9B,MAAM,EAAE,MAAM,gBAAgB;CAC9B,MAAM,EAAE,iBAAiB,kBAAkB,aAAa;CAGxD,MAAM,CAAC,mBAAmB,wBAAwB,SAAS,EAAE,CAAC;CAC9D,MAAM,CAAC,2BAA2B,gCAAgC,SAAS,EAAE,CAAC;CAC9E,MAAM,CAAC,aAAa,kBAAkB,SAAS,EAAE,CAAC;CAClD,MAAM,CAAC,iBAAiB,sBAAsB,SAAS,MAAM;CAC7D,MAAM,CAAC,4BAA4B,iCAAiC,SAAS,EAAE,CAAC;CAChF,MAAM,CAAC,6BAA6B,kCAAkC,SAAS,EAAE,CAAC;CAClF,MAAM,CAAC,SAAS,cAAc,SAAS,KAAK;CAC5C,MAAM,wBAAwB,aAAa,QAAQ;AAAE,aAAW,IAAI;IAAI,EAAE,CAAC;CAC3E,MAAM,CAAC,iBAAiB,sBAAsB,SAAS,MAAM;CAC7D,MAAM,CAAC,cAAc,mBAAmB,SAAS,KAAK;CAEtD,MAAM,qBAAqB,cAAc;AACvC,SAAO,2BAA2B,4BAA4B;IAC7D,CAAC,4BAA4B,CAAC;AAEjC,iBAAgB;AACd,MAAI,WAAW,oBAAoB;AACjC,WAAQ,eAAe,mBAAmB;AAC1C,WAAQ,iBAAiB;;IAE1B,CAAC,SAAS,mBAAmB,CAAC;CAEjC,MAAM,kCAAkC,aACrC,OAAO,cAAc,EAAE,KAAK;EAC3B,MAAM,4BAAY,IAAI,KAAK;AAC3B,OAAK,MAAM,QAAQ,OAAO;GACxB,MAAM,EACJ,IAAI,QACJ,SAAS,aACT,MAAM,UACN,aAAa,iBACK,qBAChB;AACJ,OAAI,CAAC,UAAU,eAAe,KAAM;GAEpC,MAAM,MAAM,OAAO,OAAO;GAC1B,MAAM,WAAW,UAAU,IAAI,IAAI;GAGnC,MAAM,aAAa,OAAO,YAAY,IAAI;GAC1C,MAAM,KAAK,mBAAmB,IAAI,KAAK,iBAAiB,CAAC,SAAS,GAAG;GAGrE,MAAM,mBAAmB,eAAe,EAAE,EAAE,QACzC,QAAQ,OAAO,KAAK,sBAAsB,KAAK,IACjD,CAAC;AAEF,OAAI,CAAC,SACH,WAAU,IAAI,KAAK;IACjB,IAAI;IACJ;IACA,aAAa;IACb,MAAM,YAAY,EAAE,gBAAgB;IACpC;IACA,aAAa,mBAAmB;IAChC,qBAAqB;IACtB,CAAC;YAGE,cAAc,SAAS,eAAe,IAAI;AAC5C,aAAS,cAAc;AACvB,QAAI,SAAU,UAAS,OAAO;AAC9B,QAAI,gBAAiB,UAAS,cAAc;;;AAQlD,SAHsB,MAAM,KAAK,UAAU,QAAQ,CAAC,CAAC,MAAM,GAAG,MAC5D,EAAE,KAAK,cAAc,EAAE,KAAK,CAC7B;IAGH,CAAC,EAAE,CACJ;CAED,MAAM,4CAA4C,aAC/C,gBAAgB;EACf,MAAM,4BAAY,IAAI,KAAK;AAC3B,OAAK,MAAM,QAAQ,aAAa;GAC9B,MAAM,EACJ,uBAAuB,QACvB,4BAA4B,aAC5B,WAAW,UACX,kBAAkB,iBAClB,iCAAiC,qBAC/B;AACJ,OAAI,CAAC,UAAU,eAAe,KAAM;GAEpC,MAAM,MAAM,GAAG;GACf,MAAM,WAAW,UAAU,IAAI,IAAI;GAGnC,MAAM,aAAa,OAAO,YAAY,IAAI;GAC1C,MAAM,KAAK,mBAAmB,IAAI,KAAK,iBAAiB,CAAC,SAAS,GAAG;AAErE,OAAI,CAAC,SACH,WAAU,IAAI,KAAK;IACjB,IAAI;IACJ;IACA,aAAa;IACb,MAAM,YAAY,EAAE,gBAAgB;IACpC,iBAAiB;IACjB,aAAa,mBAAmB;IAChC,qBAAqB;IACtB,CAAC;QACG;AACL,aAAS,mBAAmB;AAC5B,aAAS,sBAAsB,KAAK,IAClC,SAAS,uBAAuB,GAChC,GACD;AAGD,QAAI,cAAc,SAAS,eAAe,IAAI;AAC5C,cAAS,cAAc;AACvB,SAAI,SAAU,UAAS,OAAO;AAC9B,SAAI,gBAAiB,UAAS,cAAc;;;;AAQlD,SAHsB,MAAM,KAAK,UAAU,QAAQ,CAAC,CAAC,MAClD,GAAG,MAAM,EAAE,sBAAsB,EAAE,oBACrC;IAGH,CAAC,EAAE,CACJ;AAEwB,aAAY,YAAY;AAC/C,MAAI;AACF,OAAI,CAAC,QAAQ,cAAc,SAAU;GAErC,MAAM,iBAAiB,EAAE;AAEzB,kBAAe,KAAK;IAClB,aAAa;IACb,gBAAgB;IAChB,aAAa,OAAO,aAAa;IAClC,CAAC;AAEF,OAAI,CAAC,cACH,gBAAe,KAAK;IAClB,aAAa;IACb,gBAAgB;IAChB,aAAa,KAAK;IACnB,CAAC;AAGJ,OAAI,aAAa,OACf,gBAAe,KAAK;IAClB,aAAa;IACb,gBAAgB;IAChB,aAAa;IACd,CAAC;AAGJ,OAAI,aAAa,OACf,gBAAe,KAAK;IAClB,aAAa;IACb,gBAAgB;IAChB,aAAa;IACd,CAAC;AAGJ,OAAI,aAAa,OACf,gBAAe,KAAK;IAClB,aAAa;IACb,gBAAgB;IAChB,aAAa;IACd,CAAC;AAsBJ,gCAJ6B,4BAfY,MAAM,UAC7C,cAAc,iBACd,qCACA;IACE,QAAQ;IACR,MAAM;KACJ,WAAW;KACX,QAAQ;KACR;KACD;IACF,EACD,EAAE,CACH,GAEqD,KAAK,YAAY,EAAE,EAGvE,OAAO,aAAa,SACrB,CACiD;WAC3C,GAAG;AACV,WAAQ,MAAM,2BAA2B,EAAE;;IAE5C;EACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;CAEF,MAAM,aAAa,YAAY,YAAY;AACzC,MAAI;AACF,OAAI,CAAC,QAAQ,cAAc,SAAU;GAErC,MAAM,iBAAiB,EAAE;AAEzB,kBAAe,KAAK;IAClB,aAAa;IACb,gBAAgB;IAChB,aAAa,OAAO,aAAa;IAClC,CAAC;AAiBF,mBAfqB,MAAM,UACzB,cAAc,iBACd,kBACA;IACE,QAAQ;IACR,MAAM;KACJ,WAAW;KACX,QAAQ;KACR;KACD;IACF,EACD,EAAE,CACH,GAE2B,KAAK,YAAY,EAAE,CAC1B;WACd,GAAG;AACV,WAAQ,MAAM,qBAAqB,EAAE;;IAEtC;EAAC;EAAM;EAAQ;EAA0C,CAAC;CAE7D,MAAM,wBAAwB,aAC3B,WAAW;AACV,MAAI,CAAC,QAAQ,cAAc,SAAU;EAErC,MAAM,iBAAiB,EAAE;AAEzB,MAAI,CAAC,cACH,gBAAe,KAAK;GAClB,aAAa;GACb,gBAAgB;GAChB,aAAa,KAAK,MAAM;GACzB,CAAC;AAGJ,MAAI,OACF,gBAAe,KAAK;GAClB,aAAa;GACb,gBAAgB;GAChB,aAAa;GACd,CAAC;AAGJ,MAAI,aAAa,OACf,gBAAe,KAAK;GAClB,aAAa;GACb,gBAAgB;GAChB,aAAa;GACd,CAAC;AAGJ,MAAI,aAAa,OACf,gBAAe,KAAK;GAClB,aAAa;GACb,gBAAgB;GAChB,aAAa;GACd,CAAC;AAGJ,MAAI,aAAa,OACf,gBAAe,KAAK;GAClB,aAAa;GACb,gBAAgB;GAChB,aAAa;GACd,CAAC;AAGJ,iBAAe,KAAK;GAClB,aAAa;GACb,gBAAgB;GAChB,aAAa,QAAQ,cAAc,YAAY;GAChD,CAAC;AAEF,SAAO;GACL,YAAY,GAAG,cAAc,gBAAgB;GAC7C,oBAAoB;IAClB,WAAW;IACX;IACA,eAAe,CACb;KACE,YAAY;KACZ,eAAe;KAChB,CACF;IACF;GAQF;IAEH;EAAC;EAAM;EAAe;EAAQ;EAAU;EAAU;EAAS,CAC5D;AAE4D,cAC1D,QAAQ,gBAAgB;AAKvB,SAAO,GAJW,uBACd,uBACA,UAAU,aAAa,uBAEP,eAAe,mBACjC,OACD,CAAC,gBAAgB,mBAAmB,YAAY;IAEnD,CAAC,qBAAqB,CACvB;CAED,MAAM,+CAA+C,aAClD,iBAAiB;AAKhB,SAAO,GAJW,uBACd,uBACA,UAAU,aAAa,uBAEP,qBAAqB,mBACvC,aACD;IAEH,CAAC,qBAAqB,CACvB;CAED,MAAM,sBAAsB,aACzB,QAAQ,aAAa,cAAc;EAClC,MAAM,SAAS,EACb,OAAO,WACR;AAED,MAAI,CAAC,cACH,QAAO,sBAAsB;GAC3B,OAAO,EAAE,kBAAkB;GAC3B,eAAe;AACb,QAAI,UAAU,YACZ,+BAA8B;KAAE,OAAO,GAAG,OAAO,GAAG;KAAe,OAAO;KAAW,CAAC;AAExF,uBAAmB,KAAK;;GAE3B;AAGH,SAAO;IAET;EAAC;EAAS;EAAG;EAAc,CAC5B;CAED,MAAM,aAAa,cACX;EACJ;GAAE,YAAY;GAAW,OAAO;GAAyB,MAAM;GAAM;EACrE;GACE,YAAY,EAAE,OAAO;GACrB,OAAO;GACP,MAAM;GACN,UAAU;GACX;EACD;GACE,YAAY,EAAE,UAAU;GACxB,OAAO;GACP,MAAM;GACN,UAAU;GACX;EACD;GACE,YAAY,EAAE,cAAc;GAC5B,OAAO;GACP,MAAM;GACN,UAAU;GACV,MAAM;GACP;EACD;GACE,YAAY,EAAE,eAAe;GAC7B,OAAO;GACP,MAAM;GACN,UAAU;GACX;EACD;GACE,YAAY,EAAE,SAAS;GACvB,QAAQ;GACR,OAAO;GACP,cAAc;GACd,oBAAoB;IACG;IACrB,gBAAgB;IACjB;GACF;EACD;GACE,YAAY,EAAE,iBAAiB;GAC/B,OAAO;GACP,cAAc;GACd,UAAU;GACV,cAAc;GACd,oBAAoB;IACG;IACrB,gBAAgB;IACjB;GACF;EACD;GACE,YAAY,EAAE,aAAa;GAC3B,OAAO;GACP,iBAAiB,MAAO,EAAE,QAAQ,eAAe,EAAE,MAAM,GAAG;GAC5D,UAAU;GACV,cAAc;GACf;EACD;GACE,YAAY,EAAE,mBAAmB;GACjC,OAAO;GACP,iBAAiB,MAAO,EAAE,QAAQ,eAAe,EAAE,MAAM,GAAG;GAC5D,UAAU;GACV,cAAc;GACf;EACD;GACE,YAAY,EAAE,eAAe;GAC7B,OAAO;GACP,iBAAiB,MAAO,EAAE,QAAQ,eAAe,EAAE,MAAM,GAAG;GAC5D,UAAU;GACV,cAAc;GACf;EACD;GACE,YAAY,EAAE,SAAS;GACvB,OAAO;GACP,iBAAiB,MAAO,EAAE,QAAQ,eAAe,EAAE,MAAM,GAAG;GAC5D,UAAU;GACV,cAAc;GACf;EACD;GACE,OAAO;GACP,cAAc;GACd,oBAAoB,EAClB,YAAY,CACV;IACE,IAAI;IACJ,UAAU;IACV,OAAO,EAAE,uBAAuB;IAChC,gBAAgB,GAAG,WAAW;AAC5B,aAAQ,KACN,GACE,uBACI,uBACA,WAAW,aAAa,uBAC7B,qBAAqB,QAAQ,MAAM,oBACrC;;IAEJ,CACF,EACF;GACF;EACF,EACD;EAAC;EAAS;EAAG;EAAqB,CACnC;CAMD,MAAM,8BAA8B,YAAY;AAC9C,MAAI;GAGF,MAAM,CAAC,IAAI,eADC,4BAA4B,SAAS,IACpB,MAAM,IAAI;GACvC,MAAM,UAAU,OAAO,cAAc,EAAE;AACvC,OAAI,CAAC,MAAM,CAAC,SAAS;AACnB,YAAQ,KAAK,sBAAsB,2BAA2B;AAC9D,uBAAmB,MAAM;AACzB;;GAGF,MAAM,KAAK,IAAI,UAAU;AACzB,MAAG,OAAO,UAAU,GAAG;AACvB,MAAG,OAAO,eAAe,OAAO,QAAQ,CAAC;AACzC,MAAG,OAAO,UAAU,OAAO,6BAA6B,QAAQ,CAAC;AACjE,MAAG,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC,CAAC;AACrC,OAAI,aACF,IAAG,OAAO,WAAW,wBAAwB,aAAa,CAAC;AAE7D,OAAI,aAAa,OACf,IAAG,OAAO,YAAY,OAAO,SAAS,CAAC;AAEzC,OAAI,aAAa,OACf,IAAG,OAAO,YAAY,OAAO,SAAS,CAAC;AAEzC,OAAI,aAAa,OACf,IAAG,OAAO,YAAY,OAAO,SAAS,CAAC;GAazC,MAAM,mBAVmC,MAAM,UAC7C,cAAc,iBACd,qBACA;IACE,QAAQ;IACR,MAAM;IACP,EACD,EAAE,CACH,GAEyD,MAAM;AAChE,sBAAmB,MAAM;GACzB,MAAM,UAAU,6CAA6C,gBAAgB;AAC7E,WAAQ,KAAK,QAAQ;WACd,GAAG;AACV,WAAQ,MAAM,sCAAsC,EAAE;AACtD,mBAAgB,EAAE,6BAA6B,EAAE;IAAE,SAAS;IAAU,cAAc;KAAE,UAAU;KAAO,YAAY;KAAU;IAAC,CAAC;;;CAKnI,MAAM,qCAAqC,aAAa,YAAY;AAClE,qBAAmB,QAAQ;AAC3B,MAAI,CAAC,QAAS,iBAAgB,KAAK;IAClC,EAAE,CAAC;CAEN,MAAM,sBAAsB,aAAa,MAAM;EAC7C,MAAM,OAAO,GAAG,QAAQ;AACxB,kBAAgB,KAAK;IACpB,EAAE,CAAC;CAEN,MAAM,8BAA8B;AAClC,gCAA8B,EAAE,CAAC;AACjC,qBAAmB,MAAM;AACzB,qBAAmB,MAAM;AACzB,kBAAgB,KAAK;;CAGvB,MAAM,kBAAkB,cAAc;EACpC,MAAM,sBAAM,IAAI,KAAK;AAErB,OAAK,MAAM,KAAK,eAAe,EAAE,EAAE;GACjC,MAAM,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE;AAChD,OAAI,OAAO,SAAS,KAAK,EAAG;GAE5B,MAAM,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,OAAO,GAAG,MAAM,GAAG;GACnE,MAAM,UAAU,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE;GACzE,MAAM,OACJ,EAAE,QACF,EAAE,aACF,EAAE,YACF,EAAE,aACF,EAAE,eACF,EAAE,gBAAgB;GACpB,MAAM,cAAc,EAAE,eAAe,EAAE,oBAAoB;GAE3D,MAAM,WAAW,IAAI,IAAI,OAAO;AAChC,OAAI,CAAC,YAAY,UAAU,SAAS,QAClC,KAAI,IAAI,QAAQ;IAAE,IAAI;IAAQ;IAAM;IAAS;IAAa,CAAC;;AAI/D,SAAO,MAAM,KAAK,IAAI,QAAQ,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,QAAQ;IACpE,CAAC,aAAa,EAAE,CAAC;CAEpB,MAAM,kBAAkB,cAAc;AACpC,UAAQ,mBAAmB,EAAE,EAAE,KAAK,OAAO;GACzC,OAAO,GAAG,EAAE,GAAG,GAAG,EAAE;GACpB,OAAO,EAAE,UAAU,GAAG,EAAE,KAAK,KAAK,EAAE,QAAQ,KAAK,EAAE;GACpD,EAAE;IACF,CAAC,gBAAgB,CAAC;CAErB,MAAM,0CAA0C,OAAO,aAAa;AAClE,MAAI,aAAa,KACf,+BAA8B,SAAS;;CAI3C,MAAM,sBAAsB,EAC1B,cACA,eACA,OACA,cACI;AACJ,MAAI,CAAC,aACH,QAAO,oCAAC,kBAAc;EAExB,MAAM,SAAS,kBAAkB,aAAa,GAAG;EACjD,MAAM,QAAQ,kBAAkB,MAAM,SAAS,KAAK,UAAU,OAAO;EACrE,MAAM,YAAY,GAAG,OAAO,UAAU;EACtC,MAAM,oBAAoB,YACvB,QAAQ,YAAY,QAAQ,MAAM,OAAO,CACzC,QAAQ,KAAK,SAAS;AACrB,UAAO,KAAK,IAAI,KAAK,KAAK,QAAQ;KACjC,KAAK;AAEV,SACE,0DACE,oCAAC;GACC,MAAM;GACN,OAAO,EAAE,kBAAkB;GAC3B,UAAS;GACT,OAAO;GACP,aAAa,EAAE,MAAM;GAGrB,mBAAmB,CAAC,4BAA4B,SAAU,mBAAmB,CAAC;GAC9E,UAAU;GACV,SAAS;KAET,oCAAC;GACC,SACE,oCAAC;IACC,MAAK;IACL,WAAW,MAAM,mCAAmC,QAAQ,GAAG,QAAQ,QAAQ,CAAC;KAChF;GAEJ,OAAM;GACN,OAAO,EAAE,YAAY,GAAG;IACxB,EACC,kBACC,oCAAC;GACC,OAAO,EAAE,WAAW;GACpB,MAAK;GACL,SAAQ;GACR,MAAK;GACL,iBAAiB,EAAE,QAAQ,MAAM;GACjC,OAAO;GACP,UAAU;GACV,YAAY,EAAE,6DAA6D;IAC3E,GACF,MAGH,EAAE,OAAO,MAAM,sBACd,oCAAC;GACC,SAAS;GACT,iBAAiB,mBAAmB,eAAe;GACnD,UAAU;GAEV,OAAO;GACP,kBAAkB;GAClB,MAAK;GACL,cAAc,WACZ,oCAAC;IACC,GAAI;IACJ,OAAO,EAAE,gBAAgB;IACzB,SAAQ;KACR;IAEJ,CAGM,EAEZ,oCAAC;GACC,oBAAoB,sBAAsB,OAAO;GACrC;GACC;GACb,kBAAkB,oBAChB,QACA,mBACA,UACD;GACc;GACf,iBAAiB;IACjB,CACD;;AAIP,iBAAgB;AACd,MAAI,CAAC,QAAQ,cAAc,SAAU;AAGrC,iCADsB,oCAAoC,CACb;EAE7C,IAAI,YAAY;AAChB,GAAC,YAAY;AACX,OAAI;IAEF,IAAI,iBAAiB,EAAE;AAEvB,mBAAe,KAAK;KAClB,aAAa;KACb,gBAAgB;KAChB,aAAa,OAAO,aAAa;KAClC,CAAC;AAEF,QAAI,CAAC,cACH,gBAAe,KAAK;KAClB,aAAa;KACb,gBAAgB;KAChB,aAAa,KAAK;KACnB,CAAC;AAGJ,QAAI,aAAa,OACf,gBAAe,KAAK;KAClB,aAAa;KACb,gBAAgB;KAChB,aAAa;KACd,CAAC;AAGJ,QAAI,aAAa,OACf,gBAAe,KAAK;KAClB,aAAa;KACb,gBAAgB;KAChB,aAAa;KACd,CAAC;AAGJ,QAAI,aAAa,OACf,gBAAe,KAAK;KAClB,aAAa;KACb,gBAAgB;KAChB,aAAa;KACd,CAAC;IAGJ,MAAM,mCAAmC,MAAM,UAC7C,cAAc,iBACd,qCACA;KACE,QAAQ;KACR,MAAM;MACJ,WAAW;MACX,QAAQ;MACR;MACD;KACF,EACD,EAAE,CACH;AAED,QAAI,UAAW;AAMf,kCAJoB,kCAAkC,KAAK,YAAY,EAAE,EAChC,QAAQ,eAC/C,WAAW,kBAAkB,OAAO,aAAa,SAClD,CACiD;AAClD,UAAM,YAAY;YACX,KAAK;AACZ,YAAQ,MAAM,qCAAqC,IAAI;;MAEvD;AAEJ,eAAa;AACX,eAAY;;IAEb;EACD,SAAS;EACT,QAAQ,cAAc;EACtB;EACA;EACA;EACA;EACA,MAAM;EACN;EACD,CAAC;AAGF,iBAAgB;EACd,MAAM,gBAAgB,gCACpB,eAAe,EAAE,EACjB,6BAA6B,EAAE,CAChC;AAED,gBAAc,QAAQ;GACpB,IAAI;GACJ,MACE,gBACA,EACE,gBACI,EAAE,uBAAuB,GACzB,EAAE,0BAA0B,CACjC;GACH,iBAAiB,2BAA2B,UAAU;GACvD,CAAC;AACF,uBAAqB,cAAc;IAClC;EACD;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;AAEF,QACE,oCAAC,aACC,oCAACA;EACC,WAAW,aAAa,EAAE,QAAQ;EAClC,OAAO;EACP,UAAS;EACT,eAAe;EACf,oBAAoB,SAAS,MAAM,mBAAmB;EACtD,cAAc,EAAE,cAAc,eAAe,OAAO,cAAc;AAChE,UACE,oCAAC,aACE,mBAAmB;IAClB;IACA;IACA;IACA;IACD,CAAC,CACE;;GAGV,CACE"}
package/dist/index.js CHANGED
@@ -296,7 +296,7 @@ import { t as WorkflowContainer } from "./WorkflowContainer-Cs6LBgWw.js";
296
296
  import { t as TimelineCalendar } from "./TimelineCalendar-CZ5vmO43.js";
297
297
  import { t as CustomMenuPage_default } from "./menuPage-DoZR4-kk.js";
298
298
  import { t as StatusCellRenderer } from "./StatusCellRenderer-E7SYy9Qk.js";
299
- import { t as UdpFormsSubmissionGrid } from "./UdpFormsSubmissionGrid-C40IFoeD.js";
299
+ import { t as UdpFormsSubmissionGrid } from "./UdpFormsSubmissionGrid-DH_T7FWK.js";
300
300
  import { n as FieldType, t as FieldArrayCard } from "./FieldArrayCard-vX6wT9RN.js";
301
301
  import { n as ApprovalIcon, t as RejectIcon } from "./RejectIcon-BxDdz-WJ.js";
302
302
  import { t as MyExportsPage } from "./MyExportsPage-CvYXdQux.js";
@@ -5,6 +5,7 @@ export declare const TableColumnDefs: (actionList: any) => ({
5
5
  wrapText: boolean;
6
6
  autoHeight: boolean;
7
7
  sortable: boolean;
8
+ filter?: undefined;
8
9
  pinned?: undefined;
9
10
  cellRenderer?: undefined;
10
11
  // minWidth: 50,
@@ -13,7 +14,6 @@ export declare const TableColumnDefs: (actionList: any) => ({
13
14
  maxWidth?: undefined;
14
15
  suppressMenu?: undefined;
15
16
  cellStyle?: undefined;
16
- filter?: undefined;
17
17
  } | {
18
18
  field?: undefined;
19
19
  wrapText?: undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"TableColumnDefs.d.ts","sourceRoot":"","sources":["../../../../../src/maintenanceEngine/tableBrowser/TableColumnDefs.js"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe;;;;;;;;;IAsBtB,gBAAgB;;;;;;;;;;;;;;;IAAhB,gBAAgB;;;;;;;;;;;;;IAarB,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;;;;;CAOnC,CAAC"}
1
+ {"version":3,"file":"TableColumnDefs.d.ts","sourceRoot":"","sources":["../../../../../src/maintenanceEngine/tableBrowser/TableColumnDefs.js"],"names":[],"mappings":"AAGA,eAAO,MAAM,eAAe;;;;;;;;;;IAsBtB,gBAAgB;;;;;;;;;;;;;;IAAhB,gBAAgB;;;;;;;;;;;;;IAarB,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;;;;;CAOnC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- export declare const UdpFormsSubmissionGrid: ({ isManagerMode, generic1, generic2, generic3, formsRendererUrlPath, allFormTitle, menuTitle, }: {
2
+ export declare const UdpFormsSubmissionGrid: ({ isManagerMode, generic1, generic2, generic3, formsRendererUrlPath, allFormTitle, menuTitle, onSideSheetPrimaryAction }: {
3
3
  allFormTitle?: any;
4
4
  formsRendererUrlPath?: any;
5
5
  generic1?: any;
@@ -7,5 +7,6 @@ export declare const UdpFormsSubmissionGrid: ({ isManagerMode, generic1, generic
7
7
  generic3?: any;
8
8
  isManagerMode?: boolean;
9
9
  menuTitle?: any;
10
+ onSideSheetPrimaryAction?: any;
10
11
  }) => React.JSX.Element;
11
12
  //# sourceMappingURL=UdpFormsSubmissionGrid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UdpFormsSubmissionGrid.d.ts","sourceRoot":"","sources":["../../../../../../src/udp/pages/UdpFormsSubmissionGrid/UdpFormsSubmissionGrid.jsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAqSjF,eAAO,MAAM,sBAAsB;;;;;;;;uBAkuBlC,CAAC"}
1
+ {"version":3,"file":"UdpFormsSubmissionGrid.d.ts","sourceRoot":"","sources":["../../../../../../src/udp/pages/UdpFormsSubmissionGrid/UdpFormsSubmissionGrid.jsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAgTf,eAAO,MAAM,sBAAsB;;;;;;;;;uBAi0BlC,CAAC"}
@@ -1,8 +1,8 @@
1
1
  import { GridExcelStyleEnums } from '../../enums/unitySystemEnums';
2
2
  export declare const useDateStringColumnDef: (includeTime?: boolean, timeZone?: any, includeTimeZoneOffset?: boolean) => {
3
+ filter?: undefined;
3
4
  valueFormatter?: undefined;
4
5
  cellClass?: undefined;
5
- filter?: undefined;
6
6
  filterParams?: undefined;
7
7
  } | {
8
8
  valueFormatter: (params: any) => string;