udp-react-enterprise-component-library 25.18.1-beta.75 → 25.18.1-beta.76

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.
Files changed (24) hide show
  1. package/dist/UI/forms/index.js +1 -1
  2. package/dist/UI/index.js +1 -1
  3. package/dist/{UdpTransactionsPage-DXt_i8vP.js → UdpTransactionsPage-Dr3XbvFa.js} +111 -16
  4. package/dist/UdpTransactionsPage-Dr3XbvFa.js.map +1 -0
  5. package/dist/{forms-lyNriVSn.js → forms-sRKithEr.js} +15 -7
  6. package/dist/{forms-lyNriVSn.js.map → forms-sRKithEr.js.map} +1 -1
  7. package/dist/index.js +2 -2
  8. package/dist/types/src/UI/forms/UdpTransactionEmailForm.d.ts +6 -1
  9. package/dist/types/src/UI/forms/UdpTransactionEmailForm.d.ts.map +1 -1
  10. package/dist/types/src/hooks/useUdpGridFilterModel.d.ts +2 -0
  11. package/dist/types/src/hooks/useUdpGridFilterModel.d.ts.map +1 -0
  12. package/dist/types/src/maintenanceEngine/tableBrowser/TableColumnDefs.d.ts +1 -1
  13. package/dist/types/src/maintenanceEngine/tableBrowser/TableColumnDefs.d.ts.map +1 -1
  14. package/dist/types/src/udp/pages/UdpTransactionsPage/UdpTransactionGrid.d.ts.map +1 -1
  15. package/dist/types/src/udp/pages/UdpTransactionsPage/UdpTransactionSidesheet.d.ts.map +1 -1
  16. package/dist/types/src/udp/pages/UdpTransactionsPage/UdpTransactionsPage.d.ts.map +1 -1
  17. package/dist/types/src/udp/pages/UdpTransactionsPage/components/UdpTransactionCustomPage.d.ts.map +1 -1
  18. package/dist/types/src/udp/pages/UdpTransactionsPage/sidesheets/EditTransaction.d.ts.map +1 -1
  19. package/dist/types/tsconfig.tsbuildinfo +1 -1
  20. package/dist/udp/pages/UdpPages/index.js +1 -1
  21. package/dist/udp/pages/UdpTransactionsPage/index.js +1 -1
  22. package/export-map.json +1 -1
  23. package/package.json +1 -1
  24. package/dist/UdpTransactionsPage-DXt_i8vP.js.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { n as UdpCrudFormFields, t as CrudForm } from "../../CrudForm-C9xMnPoA.js";
2
- import { n as PaymentReversalForm, r as LoginForm, t as UdpTransactionEmailForm } from "../../forms-lyNriVSn.js";
2
+ import { n as PaymentReversalForm, r as LoginForm, t as UdpTransactionEmailForm } from "../../forms-sRKithEr.js";
3
3
  import { t as VirtualForm } from "../../VirtualForm-Cw3gjug-.js";
4
4
 
5
5
  export { CrudForm, LoginForm, PaymentReversalForm, UdpCrudFormFields, UdpTransactionEmailForm, VirtualForm };
package/dist/UI/index.js CHANGED
@@ -38,7 +38,7 @@ import { t as FormControl } from "../FormControl-CkybPp4U.js";
38
38
  import { t as IndicatorChip } from "../IndicatorChip-Dmaib9uq.js";
39
39
  import { t as InputAdornment } from "../InputAdornment-CLuALIhc.js";
40
40
  import { n as UdpCrudFormFields, t as CrudForm } from "../CrudForm-C9xMnPoA.js";
41
- import { n as PaymentReversalForm, r as LoginForm, t as UdpTransactionEmailForm } from "../forms-lyNriVSn.js";
41
+ import { n as PaymentReversalForm, r as LoginForm, t as UdpTransactionEmailForm } from "../forms-sRKithEr.js";
42
42
  import { t as Box } from "../Box-Colr5GEl.js";
43
43
  import { t as Grid } from "../Grid-D1-yWIw5.js";
44
44
  import { t as VirtualForm } from "../VirtualForm-Cw3gjug-.js";
@@ -1,6 +1,7 @@
1
1
  import { t as __exportAll } from "./chunk-BN_g-Awi.js";
2
2
  import { t as Form } from "./Form-DbOA5j38.js";
3
3
  import { t as Field } from "./Field-Cda5rJe2.js";
4
+ import { a as FormSpy } from "./form-Dj1zVw6K.js";
4
5
  import { t as FluentButton } from "./FluentButton-BexKrnAp.js";
5
6
  import { t as ConfigService$1 } from "./configService-C4uoG3wj.js";
6
7
  import { i as useHandleAxiosSnackbar } from "./apiHelpers-WIR8pqy0.js";
@@ -40,12 +41,14 @@ import { t as Attachments } from "./uploader-BdeUKdYW.js";
40
41
  import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from "react";
41
42
  import { CircularProgress, FormControlLabel, LinearProgress, Switch, makeStyles } from "@material-ui/core";
42
43
  import { useSnackbar } from "notistack";
44
+ import { useLocation } from "react-router-dom";
43
45
  import { AddIcon, ContactIcon, DocumentIcon, FileImageIcon, PDFIcon, ViewIcon, WordDocumentIcon } from "@fluentui/react-icons";
44
46
  import { useTranslation } from "react-i18next";
45
47
  import { create } from "zustand";
46
48
  import { devtools } from "zustand/middleware";
47
49
  import jsonLogic from "json-logic-js";
48
50
  import { ConfigService, UdpAttachmentItem, UdpTimelineConnector, UdpTimelineDot, UdpTimelineItem, UdpTimelineSeparator } from "udp-react-stencil-component-library";
51
+ import "date-fns";
49
52
  import "./udp/pages/UdpTransactionsPage/sidesheets/WorkflowActions.css";
50
53
  import "./udp/pages/UdpTransactionsPage/sidesheets/EditTransaction.css";
51
54
  import "./udp/pages/UdpTransactionsPage/components/EditTransactionDetailsFooterItem.css";
@@ -175,7 +178,7 @@ const useTransactionEngine = (transactionTypeId) => {
175
178
  //#endregion
176
179
  //#region src/udp/pages/UdpTransactionsPage/UdpTransactionGrid.jsx
177
180
  const UdpTransactionGrid = (props) => {
178
- const { transactionTypeId, domainName, transactionTypeLoading, handleGridApiCallback, openAddTransaction, openViewTransaction, openEditTransaction, openAttachmentTransaction, openWorkflowActionTransaction, openCreateRevision, searchMethodObject, domainColumnFormatters = {}, refreshGridData, gridApi, initialFilterModel } = props;
181
+ const { transactionTypeId, domainName, transactionTypeLoading, handleGridApiCallback, openAddTransaction, openViewTransaction, openEditTransaction, openAttachmentTransaction, openWorkflowActionTransaction, openCreateRevision, searchMethodObject, domainColumnFormatters = {}, refreshGridData, gridApi, initialFilterModel, initialGridOptions = {} } = props;
179
182
  const [dialogOpen, setDialogOpen] = useState(false);
180
183
  const [selectedTransaction, setSelectedTransaction] = useState(null);
181
184
  const { t } = useTranslation();
@@ -382,9 +385,10 @@ const UdpTransactionGrid = (props) => {
382
385
  const gridOptions = useMemo(() => {
383
386
  return {
384
387
  pagination: true,
385
- rowSelection: "none"
388
+ rowSelection: "none",
389
+ ...initialGridOptions
386
390
  };
387
- }, []);
391
+ }, [initialGridOptions]);
388
392
  const searchMethodConfig = useMemo(() => {
389
393
  let combinedSearchObject = {
390
394
  eagerLoad: true,
@@ -420,6 +424,7 @@ const UdpTransactionGrid = (props) => {
420
424
  gridApi.onFilterChanged();
421
425
  }
422
426
  }, [gridApi, initialFilterModel]);
427
+ console.log(gridApi?.getFilterModel());
423
428
  return /* @__PURE__ */ React.createElement(React.Fragment, null, transactionTypeLoading && /* @__PURE__ */ React.createElement(LinearProgress$1, null), /* @__PURE__ */ React.createElement(SearchMethodUdpGrid, {
424
429
  gridHeaderConfig: headerConfig,
425
430
  gridFunctions,
@@ -624,7 +629,7 @@ var AttachmentTransaction_default = AttachmentTransaction;
624
629
  //#endregion
625
630
  //#region src/udp/pages/UdpTransactionsPage/components/UdpTransactionCustomPage.jsx
626
631
  const UdpTransactionCustomPage = (props) => {
627
- const { pageId, transactionTypeId, transactionUiActionType, formRef, transaction, transactionTypeTransactionActionId } = props;
632
+ const { pageId, transactionTypeId, transactionUiActionType, formRef, transaction, transactionTypeTransactionActionId, setHasUnsavedChanges } = props;
628
633
  const { getUiActionRenderPageId, getHiddenFields, getRequiredFields } = useTransactionEngine(transactionTypeId);
629
634
  const { handleErrorSnackbar, handleSuccessSnackbar } = useHandleAxiosSnackbar();
630
635
  const { t } = useTranslation();
@@ -659,6 +664,11 @@ const UdpTransactionCustomPage = (props) => {
659
664
  else handleErrorSnackbar(new Error(t(`Error ${errorMessagePart} Transaction. Please try again later.`)));
660
665
  } catch (error) {
661
666
  handleErrorSnackbar(error);
667
+ } finally {
668
+ if (setHasUnsavedChanges) {
669
+ formRef.current?.form?.restart(values);
670
+ setHasUnsavedChanges(false);
671
+ }
662
672
  }
663
673
  }, [
664
674
  executeCreateTransactionAction,
@@ -669,7 +679,9 @@ const UdpTransactionCustomPage = (props) => {
669
679
  transactionUiActionType,
670
680
  executeSubmitCustomAction,
671
681
  t,
672
- transactionTypeTransactionActionId
682
+ transactionTypeTransactionActionId,
683
+ setHasUnsavedChanges,
684
+ formRef
673
685
  ]);
674
686
  const isFieldRequired = useCallback((fieldName) => {
675
687
  return getRequiredFields(transaction)?.includes(fieldName);
@@ -689,7 +701,9 @@ const UdpTransactionCustomPage = (props) => {
689
701
  return /* @__PURE__ */ React.createElement(Form, {
690
702
  onSubmit,
691
703
  ref: formRef
692
- }, /* @__PURE__ */ React.createElement(PageContainer, {
704
+ }, /* @__PURE__ */ React.createElement(FormSpy, { subscription: { dirty: true } }, ({ dirty }) => {
705
+ if (setHasUnsavedChanges) setHasUnsavedChanges(dirty);
706
+ }), /* @__PURE__ */ React.createElement(PageContainer, {
693
707
  pageId: transactionPageId,
694
708
  updateLocationState: false,
695
709
  widgetParams: {
@@ -1442,7 +1456,7 @@ var EditTransactionDetailsForm_default = EditTransactionDetailsForm;
1442
1456
  //#endregion
1443
1457
  //#region src/udp/pages/UdpTransactionsPage/sidesheets/EditTransaction.jsx
1444
1458
  const EditTransaction = (props) => {
1445
- const { transaction: initialTransaction, transactionTypeId, transactionIsClosed, openInnerSidesheetState, setOpenInnerSidesheetState, refreshGridData, closeSideSheet, setSidesheetLoading } = props;
1459
+ const { transaction: initialTransaction, transactionTypeId, transactionIsClosed, openInnerSidesheetState, setOpenInnerSidesheetState, refreshGridData, closeSideSheet, setSidesheetLoading, setHasUnsavedChanges } = props;
1446
1460
  const { t } = useTranslation();
1447
1461
  const [selectedTab, setSelectedTab] = useState(0);
1448
1462
  const [transaction, setTransaction] = useState(initialTransaction);
@@ -1723,7 +1737,8 @@ const EditTransaction = (props) => {
1723
1737
  transactionTypeId,
1724
1738
  transactionUiActionType: TransactionUiActionTypeEnums.Render_Transaction_Details_Page,
1725
1739
  formRef,
1726
- transaction
1740
+ transaction,
1741
+ setHasUnsavedChanges
1727
1742
  }) : /* @__PURE__ */ React.createElement(EditTransactionDetailsForm_default, {
1728
1743
  transaction,
1729
1744
  formRef
@@ -1780,6 +1795,8 @@ const UdpTransactionSidesheet = (props) => {
1780
1795
  notes: false
1781
1796
  });
1782
1797
  const [dialogOpen, setDialogOpen] = useState(false);
1798
+ const [unsavedChangesDialogOpen, setUnsavedChangesDialogOpen] = useState(false);
1799
+ const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false);
1783
1800
  const { handleSuccessSnackbar, handleErrorSnackbar } = useHandleAxiosSnackbar();
1784
1801
  const { hasClosedStatus, checkIfTransactionIsClosed, getTransactionTypeLabel, getUiActionRenderPageId } = useTransactionEngine(transactionTypeId);
1785
1802
  const { t } = useTranslation();
@@ -1790,6 +1807,9 @@ const UdpTransactionSidesheet = (props) => {
1790
1807
  const handleDialogClose = () => {
1791
1808
  setDialogOpen(false);
1792
1809
  };
1810
+ const handleUnsavedChangesDialogClose = () => {
1811
+ setUnsavedChangesDialogOpen(false);
1812
+ };
1793
1813
  const executeCloseTransaction = useCallback(async () => {
1794
1814
  if ((await apiMutate(ConfigService$1.productV1ApiUrl, `udpTransaction/${transaction?.transactionId}/closeTransaction`, { method: "post" }))?.status === 200) {
1795
1815
  handleSidesheet("edit", false);
@@ -1829,7 +1849,7 @@ const UdpTransactionSidesheet = (props) => {
1829
1849
  ]);
1830
1850
  const handleCreateRevision = useCallback(async () => {
1831
1851
  setSidesheetLoading(true);
1832
- formRef.current?.form?.submit();
1852
+ await formRef.current?.form?.submit();
1833
1853
  setSidesheetLoading(false);
1834
1854
  handleSidesheet("createRevision", false);
1835
1855
  refreshGridData();
@@ -1838,6 +1858,14 @@ const UdpTransactionSidesheet = (props) => {
1838
1858
  refreshGridData,
1839
1859
  formRef
1840
1860
  ]);
1861
+ const handleNextStepsAction = useCallback(() => {
1862
+ if (!hasUnsavedChanges) setEditTransactionOpenInnerSidesheetState({ workflowAction: true });
1863
+ else setUnsavedChangesDialogOpen(true);
1864
+ }, [hasUnsavedChanges]);
1865
+ const handleConfirmUnsavedChangesDialog = useCallback(() => {
1866
+ setUnsavedChangesDialogOpen(false);
1867
+ setEditTransactionOpenInnerSidesheetState({ workflowAction: true });
1868
+ }, []);
1841
1869
  const pdfViewPageId = useMemo(() => {
1842
1870
  return getUiActionRenderPageId(TransactionUiActionTypeEnums.Render_View_Pdf_Page);
1843
1871
  }, [getUiActionRenderPageId]);
@@ -1918,7 +1946,7 @@ const UdpTransactionSidesheet = (props) => {
1918
1946
  width: sidesheetWidth,
1919
1947
  buttonLabel: "Next Steps",
1920
1948
  buttonOneDisabled: transactionIsClosed,
1921
- onSubmit: () => setEditTransactionOpenInnerSidesheetState({ workflowAction: true }),
1949
+ onSubmit: handleNextStepsAction,
1922
1950
  buttonTwoLabel: "Close " + domainName,
1923
1951
  buttonTwoDisabled: transactionIsClosed || !hasClosedStatus,
1924
1952
  buttonTwoAction: () => setDialogOpen(true),
@@ -1930,7 +1958,8 @@ const UdpTransactionSidesheet = (props) => {
1930
1958
  setOpenInnerSidesheetState: setEditTransactionOpenInnerSidesheetState,
1931
1959
  refreshGridData,
1932
1960
  closeSideSheet: () => handleSidesheet("edit", false),
1933
- setSidesheetLoading
1961
+ setSidesheetLoading,
1962
+ setHasUnsavedChanges
1934
1963
  })
1935
1964
  },
1936
1965
  {
@@ -1965,7 +1994,8 @@ const UdpTransactionSidesheet = (props) => {
1965
1994
  transactionIsClosed,
1966
1995
  viewTransactionPage,
1967
1996
  pdfViewPageId,
1968
- sidesheetWidth
1997
+ sidesheetWidth,
1998
+ handleNextStepsAction
1969
1999
  ]);
1970
2000
  return /* @__PURE__ */ React.createElement(React.Fragment, null, openStates && sidesheetList.map((item) => {
1971
2001
  return /* @__PURE__ */ React.createElement(SideSheet, {
@@ -1984,7 +2014,7 @@ const UdpTransactionSidesheet = (props) => {
1984
2014
  buttonTwoDisabled: item?.buttonTwoDisabled,
1985
2015
  progress: sidesheetLoading,
1986
2016
  variant: "indeterminate"
1987
- }, sidesheetLoading && /* @__PURE__ */ React.createElement(LinearProgress$1, null), /* @__PURE__ */ React.createElement("div", null, item.children));
2017
+ }, /* @__PURE__ */ React.createElement("div", null, item.children));
1988
2018
  }), /* @__PURE__ */ React.createElement(FluentDialog, {
1989
2019
  title: t(`Close Transaction`),
1990
2020
  message: `Are you sure you want to close transaction for ${transaction?.entityBusinessKey || ""}?`,
@@ -1995,6 +2025,16 @@ const UdpTransactionSidesheet = (props) => {
1995
2025
  open: dialogOpen,
1996
2026
  handleClose: handleDialogClose,
1997
2027
  loading: closingTransactionLoading
2028
+ }), /* @__PURE__ */ React.createElement(FluentDialog, {
2029
+ title: t(`Unsaved Changes`),
2030
+ message: `You have unsaved changes. Are you sure you want to go to next steps?`,
2031
+ labelOne: t("Confirm"),
2032
+ actionOne: handleConfirmUnsavedChangesDialog,
2033
+ labelTwo: t("Cancel"),
2034
+ actionTwo: handleUnsavedChangesDialogClose,
2035
+ open: unsavedChangesDialogOpen,
2036
+ handleClose: handleUnsavedChangesDialogClose,
2037
+ loading: closingTransactionLoading
1998
2038
  }));
1999
2039
  };
2000
2040
  var UdpTransactionSidesheet_default = UdpTransactionSidesheet;
@@ -2063,10 +2103,63 @@ const useTransactionType = (options = {}) => {
2063
2103
  };
2064
2104
  };
2065
2105
 
2106
+ //#endregion
2107
+ //#region src/hooks/useUdpGridFilterModel.js
2108
+ const useUdpGridFilterModel = () => {
2109
+ const { search } = useLocation();
2110
+ const searchParams = useMemo(() => new URLSearchParams(search), [search]);
2111
+ return useMemo(() => {
2112
+ const constructedFilterModel = {};
2113
+ searchParams.forEach((value, key) => {
2114
+ if (key.startsWith("udp_search-")) {
2115
+ const paramBody = key.replace("udp_search-", "");
2116
+ const lastHyphenIndex = paramBody.lastIndexOf("-");
2117
+ if (lastHyphenIndex !== -1) {
2118
+ const field = paramBody.substring(0, lastHyphenIndex);
2119
+ const operator = paramBody.substring(lastHyphenIndex + 1).replace(/_([a-z])/g, (_, char) => char.toUpperCase());
2120
+ const { filterType, filterKey, parsedValue } = parseFilterValue(value);
2121
+ if (constructedFilterModel[field]) constructedFilterModel[field].conditions.push({
2122
+ filterType,
2123
+ type: operator,
2124
+ [filterKey]: parsedValue
2125
+ });
2126
+ else constructedFilterModel[field] = {
2127
+ filterType,
2128
+ operator: "OR",
2129
+ conditions: [{
2130
+ filterType,
2131
+ type: operator,
2132
+ [filterKey]: parsedValue
2133
+ }]
2134
+ };
2135
+ }
2136
+ }
2137
+ });
2138
+ return constructedFilterModel;
2139
+ }, [searchParams]);
2140
+ };
2141
+ const parseFilterValue = (value) => {
2142
+ if (!isNaN(Date.parse(value)) && (value.includes("-") || value.includes("/"))) return {
2143
+ filterType: "date",
2144
+ filterKey: "dateFrom",
2145
+ parsedValue: value
2146
+ };
2147
+ if (!isNaN(value) && !isNaN(parseFloat(value))) return {
2148
+ filterType: "number",
2149
+ filterKey: "filter",
2150
+ parsedValue: Number(value)
2151
+ };
2152
+ return {
2153
+ filterType: "text",
2154
+ filterKey: "filter",
2155
+ parsedValue: value
2156
+ };
2157
+ };
2158
+
2066
2159
  //#endregion
2067
2160
  //#region src/udp/pages/UdpTransactionsPage/UdpTransactionsPage.jsx
2068
2161
  const UdpTransactionsPage = (props) => {
2069
- const { transactionTypeId = "", domainName: initialDomainName = "", domainFieldType, domainFieldValue, searchMethodObject, domainColumnFormatters, initialFilterModel } = props;
2162
+ const { transactionTypeId = "", domainName: initialDomainName = "", domainFieldType, domainFieldValue, searchMethodObject, domainColumnFormatters, gridOptions } = props;
2070
2163
  const [sidesheetState, setSidesheetState] = useState({
2071
2164
  workflowAction: false,
2072
2165
  addTransaction: false,
@@ -2084,6 +2177,7 @@ const UdpTransactionsPage = (props) => {
2084
2177
  domainFieldValue
2085
2178
  });
2086
2179
  useTransactionEngine(transactionType?.transactionTypeId);
2180
+ const filterModel = useUdpGridFilterModel();
2087
2181
  const handleSidesheet = (actionType, openStatus, transaction, width = 800) => {
2088
2182
  if (actionType == "add") setSidesheetState({
2089
2183
  addTransaction: openStatus,
@@ -2150,7 +2244,8 @@ const UdpTransactionsPage = (props) => {
2150
2244
  gridApi?.refreshServerSide();
2151
2245
  },
2152
2246
  gridApi,
2153
- initialFilterModel
2247
+ initialFilterModel: filterModel,
2248
+ initialGridOptions: gridOptions
2154
2249
  }), /* @__PURE__ */ React.createElement(UdpTransactionSidesheet_default, {
2155
2250
  openStates: sidesheetState,
2156
2251
  handleSidesheet,
@@ -2171,4 +2266,4 @@ var UdpTransactionsPage_exports = /* @__PURE__ */ __exportAll({ default: () => U
2171
2266
 
2172
2267
  //#endregion
2173
2268
  export { UdpTransactionsPage_default as n, UdpTransactionsPage_exports as t };
2174
- //# sourceMappingURL=UdpTransactionsPage-DXt_i8vP.js.map
2269
+ //# sourceMappingURL=UdpTransactionsPage-Dr3XbvFa.js.map