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

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,11 +34,21 @@ 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",
40
46
  filterType: "text"
41
47
  },
48
+ formsubmission_formid: {
49
+ agGridField: "formSubmission_FormId",
50
+ filterType: "text"
51
+ },
42
52
  formsubmission_formversion: {
43
53
  agGridField: "formSubmission_FormVersion",
44
54
  filterType: "number"
@@ -183,7 +193,7 @@ const gridOptions = {
183
193
  resizable: true
184
194
  }
185
195
  };
186
- const UdpFormsSubmissionGrid = ({ isManagerMode = false, generic1 = void 0, generic2 = void 0, generic3 = void 0, formsRendererUrlPath = void 0, allFormTitle = void 0, menuTitle = void 0 }) => {
196
+ 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
197
  const user = useUser();
188
198
  const tenant = useTenant();
189
199
  const history = useHistory();
@@ -200,6 +210,8 @@ const UdpFormsSubmissionGrid = ({ isManagerMode = false, generic1 = void 0, gene
200
210
  const handleGridApiCallback = useCallback((api) => {
201
211
  setGridApi(api);
202
212
  }, []);
213
+ const [containsDueDate, setContainsDueDate] = useState(false);
214
+ const [dueDateValue, setDueDateValue] = useState(null);
203
215
  const initialFilterModel = useMemo(() => {
204
216
  return mapUrlFiltersToAgGridModel(formSubmissionUrlSearchObjs);
205
217
  }, [formSubmissionUrlSearchObjs]);
@@ -393,31 +405,29 @@ const UdpFormsSubmissionGrid = ({ isManagerMode = false, generic1 = void 0, gene
393
405
  generic2,
394
406
  generic3
395
407
  ]);
396
- const generateFormRendererUrlPath = useCallback((formId, formVersion) => {
408
+ useCallback((formId, formVersion) => {
397
409
  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
- ]);
410
+ }, [formsRendererUrlPath]);
411
+ const generateFormRendererUrlPathUsingSubmissionId = useCallback((submissionId) => {
412
+ return `${formsRendererUrlPath ? formsRendererUrlPath : "page/" + UdpPageEnums.Udp_Form_Renderer_Page}?udpf_submissionId=${encodeURIComponent(submissionId)}`;
413
+ }, [formsRendererUrlPath]);
404
414
  const getGridHeaderConfig = useCallback((formId, formVersion, formTitle) => {
405
415
  const config = { title: formTitle };
406
416
  if (!isManagerMode) config.primaryActionButton = {
407
417
  label: t("Submit New Form"),
408
418
  onClick: () => {
409
- if (formId && formVersion) {
410
- const urlPath = generateFormRendererUrlPath(formId, formVersion);
411
- history.push(urlPath);
412
- } else setIsSidesheetOpen(true);
419
+ if (formId && formVersion) setSelectedUdpFormInSideSheet({
420
+ value: `${formId}|${formVersion}`,
421
+ label: formTitle
422
+ });
423
+ setIsSidesheetOpen(true);
413
424
  }
414
425
  };
415
426
  return config;
416
427
  }, [
417
428
  history,
418
429
  t,
419
- isManagerMode,
420
- generateFormRendererUrlPath
430
+ isManagerMode
421
431
  ]);
422
432
  const columnDefs = useMemo(() => [
423
433
  {
@@ -516,25 +526,55 @@ const UdpFormsSubmissionGrid = ({ isManagerMode = false, generic1 = void 0, gene
516
526
  t,
517
527
  formsRendererUrlPath
518
528
  ]);
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);
529
+ const handleSidesheetPrimaryClick = async () => {
530
+ try {
531
+ const [id, versionStr] = (selectedUdpFormInSideSheet?.value || "").split("|");
532
+ const version = Number(versionStr || 0);
533
+ if (!id || !version) {
534
+ console.warn("Invalid selection:", selectedUdpFormInSideSheet);
535
+ setIsSidesheetOpen(false);
536
+ return;
537
+ }
538
+ const fd = new FormData();
539
+ fd.append("FormId", id);
540
+ fd.append("FormVersion", String(version));
541
+ fd.append("Status", String(UdpFormsSubmissionStatusEnum.Created));
542
+ fd.append("Data", JSON.stringify({}));
543
+ if (dueDateValue) fd.append("DueDate", toUtcIsoAtLocalEndOfDay(dueDateValue));
544
+ if (generic1 !== void 0) fd.append("Generic1", String(generic1));
545
+ if (generic2 !== void 0) fd.append("Generic2", String(generic2));
546
+ if (generic3 !== void 0) fd.append("Generic3", String(generic3));
547
+ const newSubmissionId = (await apiMutate(ConfigService.productV1ApiUrl, `UdpFormSubmission`, {
548
+ method: "POST",
549
+ data: fd
550
+ }, {}))?.data?.id;
524
551
  setIsSidesheetOpen(false);
525
- return;
552
+ const urlPath = generateFormRendererUrlPathUsingSubmissionId(newSubmissionId);
553
+ history.push(urlPath);
554
+ } catch (e) {
555
+ console.error("handleSidesheetPrimaryClick error:", e);
556
+ enqueueSnackbar(t("Error creating a new form."), {
557
+ variant: "error",
558
+ anchorOrigin: {
559
+ vertical: "top",
560
+ horizontal: "center"
561
+ }
562
+ });
526
563
  }
527
- setIsSidesheetOpen(false);
528
- const urlPath = generateFormRendererUrlPath(id, version);
529
- history.push(urlPath);
530
- }, [
531
- selectedUdpFormInSideSheet,
532
- history,
533
- generateFormRendererUrlPath
534
- ]);
564
+ };
565
+ const handleSideSheetDueDateToggleChange = useCallback((checked) => {
566
+ setContainsDueDate(checked);
567
+ if (!checked) setDueDateValue(null);
568
+ }, []);
569
+ const handleDueDateChange = useCallback((e) => {
570
+ const next = e?.target?.value;
571
+ setDueDateValue(next);
572
+ }, []);
535
573
  const handleSideSheetClosed = () => {
536
574
  setSelectedUdpFormInSideSheet({});
537
575
  setIsSidesheetOpen(false);
576
+ setContainsDueDate(false);
577
+ setDueDateValue(null);
538
578
  };
539
579
  const selectableItems = useMemo(() => {
540
580
  const map = /* @__PURE__ */ new Map();
@@ -567,29 +607,46 @@ const UdpFormsSubmissionGrid = ({ isManagerMode = false, generic1 = void 0, gene
567
607
  const getMainGridContent = ({ selectedNode, menuItemsList, idMap, classes }) => {
568
608
  if (!selectedNode) return /* @__PURE__ */ React.createElement(PageLoading, null);
569
609
  const formId = parseIdAndVersion(selectedNode.id);
570
- const formTitle = `${innerMenuItemList.find((form) => form.formId == formId)?.name}` || "Unknown Form";
610
+ const found = innerMenuItemList.find((form) => form.formId == formId);
611
+ const formTitle = `${found?.name}` || "Unknown Form";
571
612
  const newestFormVersion = formDataRaw.filter((formObj) => formObj.id == formId).reduce((acc, curr) => {
572
613
  return Math.max(acc, curr.version);
573
- }, 0);
614
+ }, null);
574
615
  return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(SideSheet, {
575
616
  open: isSidesheetOpen,
576
617
  title: t("Submit New Form"),
577
618
  position: "right",
578
619
  width: "30%",
579
620
  buttonLabel: t("New"),
580
- buttonOneDisabled: !selectedUdpFormInSideSheet.value,
621
+ buttonOneDisabled: !selectedUdpFormInSideSheet?.value || containsDueDate && !dueDateValue,
581
622
  onSubmit: handleSidesheetPrimaryClick,
582
623
  onClose: handleSideSheetClosed
583
- }, /* @__PURE__ */ React.createElement(Autocomplete, {
624
+ }, /* @__PURE__ */ React.createElement(FormControlLabel, {
625
+ control: /* @__PURE__ */ React.createElement(Switch, {
626
+ size: "small",
627
+ onChange: (e) => handleSideSheetDueDateToggleChange(Boolean(e?.target?.checked))
628
+ }),
629
+ label: "Set a Due Date",
630
+ style: { marginLeft: 0 }
631
+ }), containsDueDate ? /* @__PURE__ */ React.createElement(TextField, {
632
+ label: t("Due Date"),
633
+ type: "date",
634
+ variant: "outlined",
635
+ size: "small",
636
+ InputLabelProps: { shrink: true },
637
+ value: dueDateValue,
638
+ onChange: handleDueDateChange,
639
+ helperText: t("Set a due date at the end-of-day based on your local time.")
640
+ }) : null, !(found?.id && newestFormVersion) && /* @__PURE__ */ React.createElement(Autocomplete, {
584
641
  options: selectorOptions,
585
642
  getOptionLabel: (selectedOption) => selectedOption.label,
586
643
  onChange: handleSelectedUdpFormInSideSheetChange,
587
- value: selectedUdpFormInSideSheet.value,
644
+ value: selectedUdpFormInSideSheet,
588
645
  disableClearable: true,
589
646
  size: "small",
590
647
  renderInput: (params) => /* @__PURE__ */ React.createElement(TextField, {
591
648
  ...params,
592
- label: "Choose a Form",
649
+ label: t("Choose a Form"),
593
650
  variant: "outlined"
594
651
  })
595
652
  })), /* @__PURE__ */ React.createElement(SearchMethodUdpGrid, {
@@ -696,4 +753,4 @@ const UdpFormsSubmissionGrid = ({ isManagerMode = false, generic1 = void 0, gene
696
753
 
697
754
  //#endregion
698
755
  export { UdpFormsSubmissionGrid as t };
699
- //# sourceMappingURL=UdpFormsSubmissionGrid-C40IFoeD.js.map
756
+ //# sourceMappingURL=UdpFormsSubmissionGrid-DFUaQDgZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UdpFormsSubmissionGrid-DFUaQDgZ.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_formid: {\n agGridField: 'formSubmission_FormId',\n filterType: 'text'\n },\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 = 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 };\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":"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"}
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-DFUaQDgZ.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";
@@ -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;AAoTf,eAAO,MAAM,sBAAsB;;;;;;;;;uBA+zBlC,CAAC"}