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.
- package/dist/{UdpFormsSubmissionGrid-C40IFoeD.js → UdpFormsSubmissionGrid-DH_T7FWK.js} +89 -36
- package/dist/UdpFormsSubmissionGrid-DH_T7FWK.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/types/src/maintenanceEngine/tableBrowser/TableColumnDefs.d.ts +1 -1
- package/dist/types/src/maintenanceEngine/tableBrowser/TableColumnDefs.d.ts.map +1 -1
- package/dist/types/src/udp/pages/UdpFormsSubmissionGrid/UdpFormsSubmissionGrid.d.ts +2 -1
- package/dist/types/src/udp/pages/UdpFormsSubmissionGrid/UdpFormsSubmissionGrid.d.ts.map +1 -1
- package/dist/types/src/udp/utilities/useDateStringColumnDef.d.ts +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/udp/pages/UdpFormsSubmissionGrid/index.js +1 -1
- package/export-map.json +1 -1
- package/package.json +1 -1
- package/dist/UdpFormsSubmissionGrid-C40IFoeD.js.map +0 -1
|
@@ -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
|
-
|
|
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
|
-
|
|
400
|
-
|
|
401
|
-
|
|
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
|
-
|
|
411
|
-
|
|
412
|
-
}
|
|
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 =
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
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
|
-
|
|
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
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
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
|
|
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
|
-
},
|
|
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
|
|
617
|
+
buttonOneDisabled: !selectedUdpFormInSideSheet?.value || containsDueDate && !dueDateValue,
|
|
581
618
|
onSubmit: handleSidesheetPrimaryClick,
|
|
582
619
|
onClose: handleSideSheetClosed
|
|
583
|
-
}, /* @__PURE__ */ React.createElement(
|
|
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
|
|
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-
|
|
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":"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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-
|
|
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
|
|
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,
|
|
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;
|