@pega/react-sdk-components 0.25.10 → 0.25.12

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 (95) hide show
  1. package/lib/components/designSystemExtension/AlertBanner/AlertBanner.css +46 -0
  2. package/lib/components/designSystemExtension/AlertBanner/AlertBanner.d.ts +2 -1
  3. package/lib/components/designSystemExtension/AlertBanner/AlertBanner.d.ts.map +1 -1
  4. package/lib/components/designSystemExtension/AlertBanner/AlertBanner.js +18 -16
  5. package/lib/components/designSystemExtension/AlertBanner/AlertBanner.js.map +1 -1
  6. package/lib/components/designSystemExtension/FieldGroupList/FieldGroupList.js +1 -1
  7. package/lib/components/designSystemExtension/FieldGroupList/FieldGroupList.js.map +1 -1
  8. package/lib/components/field/SelectableCard/SelectableCard.d.ts.map +1 -1
  9. package/lib/components/field/SelectableCard/SelectableCard.js +13 -2
  10. package/lib/components/field/SelectableCard/SelectableCard.js.map +1 -1
  11. package/lib/components/infra/Assignment/Assignment.d.ts.map +1 -1
  12. package/lib/components/infra/Assignment/Assignment.js +6 -2
  13. package/lib/components/infra/Assignment/Assignment.js.map +1 -1
  14. package/lib/components/infra/Assignment/useValidationBanner.d.ts +7 -0
  15. package/lib/components/infra/Assignment/useValidationBanner.d.ts.map +1 -0
  16. package/lib/components/infra/Assignment/useValidationBanner.js +26 -0
  17. package/lib/components/infra/Assignment/useValidationBanner.js.map +1 -0
  18. package/lib/components/infra/Containers/FlowContainer/FlowContainer.d.ts.map +1 -1
  19. package/lib/components/infra/Containers/FlowContainer/FlowContainer.js +5 -6
  20. package/lib/components/infra/Containers/FlowContainer/FlowContainer.js.map +1 -1
  21. package/lib/components/infra/Containers/ModalViewContainer/ModalViewContainer.d.ts +4 -0
  22. package/lib/components/infra/Containers/ModalViewContainer/ModalViewContainer.d.ts.map +1 -1
  23. package/lib/components/infra/Containers/ModalViewContainer/ModalViewContainer.js +1 -1
  24. package/lib/components/infra/Containers/ModalViewContainer/ModalViewContainer.js.map +1 -1
  25. package/lib/components/infra/Containers/ViewContainer/ViewContainer.d.ts +4 -0
  26. package/lib/components/infra/Containers/ViewContainer/ViewContainer.d.ts.map +1 -1
  27. package/lib/components/infra/Containers/ViewContainer/ViewContainer.js +4 -7
  28. package/lib/components/infra/Containers/ViewContainer/ViewContainer.js.map +1 -1
  29. package/lib/components/infra/DeferLoad/DeferLoad.d.ts +1 -0
  30. package/lib/components/infra/DeferLoad/DeferLoad.d.ts.map +1 -1
  31. package/lib/components/infra/DeferLoad/DeferLoad.js +24 -9
  32. package/lib/components/infra/DeferLoad/DeferLoad.js.map +1 -1
  33. package/lib/components/infra/NavBar/NavBar.d.ts.map +1 -1
  34. package/lib/components/infra/NavBar/NavBar.js +6 -0
  35. package/lib/components/infra/NavBar/NavBar.js.map +1 -1
  36. package/lib/components/infra/RootContainer/RootContainer.d.ts.map +1 -1
  37. package/lib/components/infra/RootContainer/RootContainer.js +4 -5
  38. package/lib/components/infra/RootContainer/RootContainer.js.map +1 -1
  39. package/lib/components/infra/View/View.d.ts.map +1 -1
  40. package/lib/components/infra/View/View.js +5 -6
  41. package/lib/components/infra/View/View.js.map +1 -1
  42. package/lib/components/template/CaseSummary/CaseSummary.d.ts.map +1 -1
  43. package/lib/components/template/CaseSummary/CaseSummary.js +2 -6
  44. package/lib/components/template/CaseSummary/CaseSummary.js.map +1 -1
  45. package/lib/components/template/FieldGroupTemplate/FieldGroupTemplate.d.ts +1 -0
  46. package/lib/components/template/FieldGroupTemplate/FieldGroupTemplate.d.ts.map +1 -1
  47. package/lib/components/template/FieldGroupTemplate/FieldGroupTemplate.js +7 -3
  48. package/lib/components/template/FieldGroupTemplate/FieldGroupTemplate.js.map +1 -1
  49. package/lib/components/template/HierarchicalForm/HierarchicalForm.d.ts +4 -0
  50. package/lib/components/template/HierarchicalForm/HierarchicalForm.d.ts.map +1 -0
  51. package/lib/components/template/HierarchicalForm/HierarchicalForm.js +16 -0
  52. package/lib/components/template/HierarchicalForm/HierarchicalForm.js.map +1 -0
  53. package/lib/components/template/HierarchicalForm/hooks.d.ts +15 -0
  54. package/lib/components/template/HierarchicalForm/hooks.d.ts.map +1 -0
  55. package/lib/components/template/HierarchicalForm/hooks.js +163 -0
  56. package/lib/components/template/HierarchicalForm/hooks.js.map +1 -0
  57. package/lib/components/template/HierarchicalForm/index.d.ts +2 -0
  58. package/lib/components/template/HierarchicalForm/index.d.ts.map +1 -0
  59. package/lib/components/template/HierarchicalForm/index.js +2 -0
  60. package/lib/components/template/HierarchicalForm/index.js.map +1 -0
  61. package/lib/components/template/ListView/ListView.d.ts +1 -0
  62. package/lib/components/template/ListView/ListView.d.ts.map +1 -1
  63. package/lib/components/template/ListView/ListView.js +56 -9
  64. package/lib/components/template/ListView/ListView.js.map +1 -1
  65. package/lib/components/template/MultiReferenceReadOnly/MultiReferenceReadOnly.d.ts +3 -1
  66. package/lib/components/template/MultiReferenceReadOnly/MultiReferenceReadOnly.d.ts.map +1 -1
  67. package/lib/components/template/MultiReferenceReadOnly/MultiReferenceReadOnly.js +13 -1
  68. package/lib/components/template/MultiReferenceReadOnly/MultiReferenceReadOnly.js.map +1 -1
  69. package/lib/components/template/ObjectPage/index.d.ts +2 -0
  70. package/lib/components/template/ObjectPage/index.d.ts.map +1 -0
  71. package/lib/components/template/ObjectPage/index.js +2 -0
  72. package/lib/components/template/ObjectPage/index.js.map +1 -0
  73. package/lib/components/template/SelfServiceCaseView/SelfServiceCaseView.d.ts.map +1 -1
  74. package/lib/components/template/SelfServiceCaseView/SelfServiceCaseView.js +13 -2
  75. package/lib/components/template/SelfServiceCaseView/SelfServiceCaseView.js.map +1 -1
  76. package/lib/components/template/SimpleTable/SimpleTableManual/SimpleTableManual.d.ts.map +1 -1
  77. package/lib/components/template/SimpleTable/SimpleTableManual/SimpleTableManual.js +8 -6
  78. package/lib/components/template/SimpleTable/SimpleTableManual/SimpleTableManual.js.map +1 -1
  79. package/lib/components/template/SimpleTable/SimpleTableSelectReadonly/SimpleTableSelectReadonly.d.ts +17 -0
  80. package/lib/components/template/SimpleTable/SimpleTableSelectReadonly/SimpleTableSelectReadonly.d.ts.map +1 -0
  81. package/lib/components/template/SimpleTable/SimpleTableSelectReadonly/SimpleTableSelectReadonly.js +94 -0
  82. package/lib/components/template/SimpleTable/SimpleTableSelectReadonly/SimpleTableSelectReadonly.js.map +1 -0
  83. package/lib/components/template/SimpleTable/SimpleTableSelectReadonly/index.d.ts +2 -0
  84. package/lib/components/template/SimpleTable/SimpleTableSelectReadonly/index.d.ts.map +1 -0
  85. package/lib/components/template/SimpleTable/SimpleTableSelectReadonly/index.js +2 -0
  86. package/lib/components/template/SimpleTable/SimpleTableSelectReadonly/index.js.map +1 -0
  87. package/lib/hooks/useFocusFirstField.d.ts +3 -3
  88. package/lib/hooks/useFocusFirstField.d.ts.map +1 -1
  89. package/lib/hooks/useFocusFirstField.js +19 -12
  90. package/lib/hooks/useFocusFirstField.js.map +1 -1
  91. package/lib/sdk-pega-component-map.d.ts +6 -0
  92. package/lib/sdk-pega-component-map.d.ts.map +1 -1
  93. package/lib/sdk-pega-component-map.js +6 -0
  94. package/lib/sdk-pega-component-map.js.map +1 -1
  95. package/package.json +1 -1
@@ -0,0 +1,163 @@
1
+ import { useState, useEffect, useMemo, useCallback, useRef, Children } from 'react';
2
+ import useGetTabsCount from '../../../hooks/useGetTabsCount';
3
+ import { searchtabsClick as tabClick, getActiveTabId, getFirstVisibleTabId } from '../SubTabs/tabUtils';
4
+ import { getInstructions } from '../../helpers/template-utils';
5
+ const ComponentName = 'HierarchicalForm';
6
+ const getLandingPageViewName = (contextName) => {
7
+ const target = contextName.substring(0, contextName.lastIndexOf('_'));
8
+ const activeContainerItemID = PCore.getContainerUtils().getActiveContainerItemName(target);
9
+ const containerItemData = PCore.getContainerUtils().getContainerItemData(target, activeContainerItemID);
10
+ return containerItemData?.view?.config?.name;
11
+ };
12
+ export function useHierarchicalForm(props) {
13
+ const { children = [], getPConnect, tabsVisibility = {}, template } = props;
14
+ const [tabErrors, setTabErrors] = useState({});
15
+ const tabErrorsRef = useRef({});
16
+ const submitAttemptedRef = useRef(false);
17
+ const { lastUpdateCaseTime = getPConnect().getValue('caseInfo.lastUpdateTime') } = props;
18
+ const fullCaseId = getPConnect().getValue(PCore.getConstants().CASE_INFO.CASE_INFO_ID);
19
+ const deferLoadedTabs = Children.toArray(children)[0];
20
+ deferLoadedTabs.props.getPConnect().setInheritedProp('template', template);
21
+ const navigationKey = useMemo(() => {
22
+ const parentNavKey = `${getPConnect().getValue(PCore.getConstants().CASE_INFO.CASE_INFO_ID) || getLandingPageViewName(getPConnect().getContextName())}`;
23
+ return `${parentNavKey}-${getPConnect().getMetadata()?.name}-${ComponentName}`;
24
+ }, []);
25
+ const instructions = getInstructions(getPConnect(), props.instructions);
26
+ const storedTab = PCore.getNavigationUtils().getComponentState(navigationKey)?.activeTab;
27
+ const tabsFromChildren = deferLoadedTabs.props.getPConnect().getChildren();
28
+ const firstTabId = getFirstVisibleTabId(deferLoadedTabs, undefined);
29
+ const [currentTabId, setCurrentTabId] = useState(getActiveTabId(tabsFromChildren, storedTab || firstTabId));
30
+ const [tabVisibilityStr, setTabVisibilityStr] = useState('');
31
+ const { data: tabData, refreshTabData } = useGetTabsCount(deferLoadedTabs, 'hierarchical', currentTabId, template);
32
+ const handleCaseRefresh = (message) => {
33
+ if (message.subtype === 'tab') {
34
+ refreshTabData();
35
+ }
36
+ };
37
+ useEffect(() => {
38
+ let index = 0;
39
+ let caseSubId = '';
40
+ deferLoadedTabs.props
41
+ .getPConnect()
42
+ .getChildren()
43
+ ?.forEach((child) => {
44
+ const rawConfigProps = child.getPConnect().getRawConfigProps();
45
+ if ('visibility' in rawConfigProps) {
46
+ tabsVisibility[`${index}`] = rawConfigProps.visibility;
47
+ }
48
+ index += 1;
49
+ });
50
+ getPConnect().registerAdditionalProps({ tabsVisibility });
51
+ getPConnect().registerAdditionalProps({ lastUpdateCaseTime: '@P caseInfo.lastUpdateTime' });
52
+ if (fullCaseId) {
53
+ caseSubId = PCore.getMessagingServiceManager().getCaseSubscription(fullCaseId).subscribe({ caseId: fullCaseId }, handleCaseRefresh);
54
+ }
55
+ return () => {
56
+ if (fullCaseId)
57
+ PCore.getMessagingServiceManager().getCaseSubscription(fullCaseId).unsubscribe(caseSubId);
58
+ };
59
+ }, []);
60
+ useEffect(() => {
61
+ refreshTabData();
62
+ }, [lastUpdateCaseTime]);
63
+ useEffect(() => {
64
+ const isVisibilityAvailable = Object.values(tabsVisibility).length > 0 && Object.values(tabsVisibility).every(visibility => typeof visibility === 'boolean');
65
+ if (isVisibilityAvailable) {
66
+ let str = '';
67
+ Object.keys(tabsVisibility).forEach(key => {
68
+ str += key + tabsVisibility[key];
69
+ });
70
+ setTabVisibilityStr(str);
71
+ }
72
+ }, [tabsVisibility]);
73
+ useEffect(() => {
74
+ if (tabData && tabData.length) {
75
+ const activeTabId = getActiveTabId(tabData, currentTabId);
76
+ if (activeTabId !== currentTabId) {
77
+ setCurrentTabId(activeTabId);
78
+ }
79
+ }
80
+ }, [tabVisibilityStr, tabData]);
81
+ useEffect(() => {
82
+ PCore.getNavigationUtils().setComponentState(navigationKey, { activeTab: currentTabId });
83
+ const activeTabNavKey = `${getPConnect().getValue(PCore.getConstants().CASE_INFO.CASE_INFO_ID)}-CaseView-ActiveTab`;
84
+ PCore.getNavigationUtils().setComponentState(activeTabNavKey, { id: currentTabId });
85
+ return () => {
86
+ if (getPConnect().getContextName()?.includes('/modal')) {
87
+ PCore.getNavigationUtils().setComponentState(navigationKey, { activeTab: firstTabId });
88
+ }
89
+ };
90
+ }, [currentTabId, children]);
91
+ const handleTabClick = useCallback((event, id) => {
92
+ tabClick(id, tabData, currentTabId, setCurrentTabId);
93
+ }, [tabData, currentTabId]);
94
+ const tabItems = useMemo(() => tabData?.filter((tab) => tab.visibility()) ?? [], [tabData, tabVisibilityStr]);
95
+ const tabsRef = useRef(tabItems);
96
+ tabsRef.current = tabItems;
97
+ const updateTabErrorsOnViewMutate = useCallback((messageObject, tab) => {
98
+ if (!messageObject.type) {
99
+ return;
100
+ }
101
+ const previousTabErrors = tabErrorsRef.current;
102
+ let currentTabState = previousTabErrors[tab.id] || {};
103
+ const { MESSAGES_TYPE_ERROR } = PCore.getConstants().MESSAGES;
104
+ if (messageObject.type !== MESSAGES_TYPE_ERROR) {
105
+ delete currentTabState[messageObject.fieldName];
106
+ currentTabState = Object.keys(currentTabState).length > 0 ? currentTabState : undefined;
107
+ }
108
+ else {
109
+ currentTabState = { ...currentTabState, [messageObject.fieldName]: messageObject.messages };
110
+ }
111
+ const newErrors = { ...previousTabErrors, [tab.id]: currentTabState };
112
+ tabErrorsRef.current = newErrors;
113
+ setTabErrors(newErrors);
114
+ }, []);
115
+ useEffect(() => {
116
+ const rawConfig = '_rawConfig';
117
+ tabItems.forEach((tab) => {
118
+ PCore.getContextTreeManager().onViewMutate(tab.getPConnect().getContextName(), tab.getPConnect().getPageReference(), tab.getPConnect()[rawConfig].config?.name, (messageObject) => updateTabErrorsOnViewMutate(messageObject, tab));
119
+ });
120
+ }, [tabItems, updateTabErrorsOnViewMutate]);
121
+ const navigateToFirstErrorTab = useCallback(() => {
122
+ const currentErrors = tabErrorsRef.current;
123
+ const firstTabWithError = tabsRef.current.find((tab) => {
124
+ const tabErrorState = currentErrors[tab.id];
125
+ return tabErrorState && Object.keys(tabErrorState).length > 0;
126
+ });
127
+ if (firstTabWithError) {
128
+ submitAttemptedRef.current = false;
129
+ setCurrentTabId(firstTabWithError.id);
130
+ }
131
+ }, []);
132
+ const highlightFirstErrorTab = useCallback(() => {
133
+ submitAttemptedRef.current = true;
134
+ navigateToFirstErrorTab();
135
+ }, [navigateToFirstErrorTab]);
136
+ useEffect(() => {
137
+ const { CURRENT_ASSIGNMENT_UPDATED } = PCore.getConstants().PUB_SUB_EVENTS.CASE_EVENTS;
138
+ PCore.getPubSubUtils().subscribe(CURRENT_ASSIGNMENT_UPDATED, () => {
139
+ tabErrorsRef.current = {};
140
+ submitAttemptedRef.current = false;
141
+ setTabErrors({});
142
+ }, 'CURRENT_ASSIGNMENT_UPDATED-HierarchicalForm');
143
+ PCore.getPubSubUtils().subscribe(PCore.getConstants().PUB_SUB_EVENTS.ERROR_ON_FINISH_ASSIGNMENT, highlightFirstErrorTab, 'ERROR_ON_FINISH_ASSIGNMENT-HierarchicalForm');
144
+ return () => {
145
+ PCore.getPubSubUtils().unsubscribe(CURRENT_ASSIGNMENT_UPDATED, 'CURRENT_ASSIGNMENT_UPDATED-HierarchicalForm');
146
+ PCore.getPubSubUtils().unsubscribe(PCore.getConstants().PUB_SUB_EVENTS.ERROR_ON_FINISH_ASSIGNMENT, 'ERROR_ON_FINISH_ASSIGNMENT-HierarchicalForm');
147
+ };
148
+ }, []);
149
+ useEffect(() => {
150
+ if (submitAttemptedRef.current) {
151
+ navigateToFirstErrorTab();
152
+ }
153
+ }, [tabErrors, navigateToFirstErrorTab]);
154
+ const processedTabs = useMemo(() => {
155
+ return tabItems.map(tab => {
156
+ const errorKeys = Object.keys(tabErrors[tab.id] ?? {});
157
+ const errors = errorKeys.length > 0 ? errorKeys.reduce((sum, fieldName) => sum + tabErrors[tab.id][fieldName].length, 0) : undefined;
158
+ return { ...tab, errors };
159
+ });
160
+ }, [tabItems, tabErrors]);
161
+ return { currentTabId, handleTabClick, processedTabs, instructions };
162
+ }
163
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../src/components/template/HierarchicalForm/hooks.ts"],"names":[],"mappings":"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","sourcesContent":["import { useState, useEffect, useMemo, useCallback, useRef, Children, type PropsWithChildren, type SyntheticEvent } from 'react';\n\nimport useGetTabsCount from '../../../hooks/useGetTabsCount';\nimport { searchtabsClick as tabClick, getActiveTabId, getFirstVisibleTabId } from '../SubTabs/tabUtils';\nimport { getInstructions } from '../../helpers/template-utils';\nimport type { PConnProps } from '../../../types/PConnProps';\n\nconst ComponentName = 'HierarchicalForm';\n\nconst getLandingPageViewName = (contextName: string) => {\n const target = contextName.substring(0, contextName.lastIndexOf('_'));\n const activeContainerItemID = PCore.getContainerUtils().getActiveContainerItemName(target);\n const containerItemData = PCore.getContainerUtils().getContainerItemData(target, activeContainerItemID);\n return containerItemData?.view?.config?.name;\n};\n\nexport interface HierarchicalFormProps extends PConnProps {\n tabsVisibility?: Record<string, boolean>;\n template?: string;\n instructions?: string;\n lastUpdateCaseTime?: string | number;\n}\n\nexport function useHierarchicalForm(props: PropsWithChildren<HierarchicalFormProps>) {\n const { children = [], getPConnect, tabsVisibility = {}, template } = props;\n const [tabErrors, setTabErrors] = useState<Record<string, any>>({});\n const tabErrorsRef = useRef<Record<string, any>>({});\n const submitAttemptedRef = useRef(false);\n const { lastUpdateCaseTime = getPConnect().getValue('caseInfo.lastUpdateTime') } = props;\n const fullCaseId = getPConnect().getValue(PCore.getConstants().CASE_INFO.CASE_INFO_ID);\n\n const deferLoadedTabs: any = Children.toArray(children)[0];\n deferLoadedTabs.props.getPConnect().setInheritedProp('template', template);\n\n const navigationKey = useMemo(() => {\n const parentNavKey = `${\n getPConnect().getValue(PCore.getConstants().CASE_INFO.CASE_INFO_ID) || getLandingPageViewName(getPConnect().getContextName())\n }`;\n return `${parentNavKey}-${getPConnect().getMetadata()?.name}-${ComponentName}`;\n }, []);\n\n const instructions = getInstructions(getPConnect(), props.instructions);\n\n const storedTab = (PCore.getNavigationUtils().getComponentState(navigationKey) as any)?.activeTab;\n\n const tabsFromChildren = deferLoadedTabs.props.getPConnect().getChildren();\n\n const firstTabId = getFirstVisibleTabId(deferLoadedTabs, undefined);\n\n const [currentTabId, setCurrentTabId] = useState(getActiveTabId(tabsFromChildren, storedTab || firstTabId));\n const [tabVisibilityStr, setTabVisibilityStr] = useState('');\n const { data: tabData, refreshTabData } = useGetTabsCount(deferLoadedTabs, 'hierarchical', currentTabId, template);\n\n const handleCaseRefresh = (message: any) => {\n if (message.subtype === 'tab') {\n refreshTabData();\n }\n };\n\n useEffect(() => {\n let index = 0;\n let caseSubId = '';\n deferLoadedTabs.props\n .getPConnect()\n .getChildren()\n ?.forEach((child: any) => {\n const rawConfigProps = child.getPConnect().getRawConfigProps();\n if ('visibility' in rawConfigProps) {\n tabsVisibility[`${index}`] = rawConfigProps.visibility;\n }\n index += 1;\n });\n\n getPConnect().registerAdditionalProps({ tabsVisibility });\n getPConnect().registerAdditionalProps({ lastUpdateCaseTime: '@P caseInfo.lastUpdateTime' });\n\n if (fullCaseId) {\n caseSubId = PCore.getMessagingServiceManager().getCaseSubscription(fullCaseId).subscribe({ caseId: fullCaseId }, handleCaseRefresh);\n }\n\n return () => {\n if (fullCaseId) PCore.getMessagingServiceManager().getCaseSubscription(fullCaseId).unsubscribe(caseSubId);\n };\n }, []);\n\n useEffect(() => {\n refreshTabData();\n }, [lastUpdateCaseTime]);\n\n useEffect(() => {\n const isVisibilityAvailable =\n Object.values(tabsVisibility).length > 0 && Object.values(tabsVisibility).every(visibility => typeof visibility === 'boolean');\n if (isVisibilityAvailable) {\n let str = '';\n Object.keys(tabsVisibility).forEach(key => {\n str += key + tabsVisibility[key];\n });\n setTabVisibilityStr(str);\n }\n }, [tabsVisibility]);\n\n useEffect(() => {\n if (tabData && tabData.length) {\n const activeTabId = getActiveTabId(tabData, currentTabId);\n if (activeTabId !== currentTabId) {\n setCurrentTabId(activeTabId);\n }\n }\n }, [tabVisibilityStr, tabData]);\n\n useEffect(() => {\n PCore.getNavigationUtils().setComponentState(navigationKey, { activeTab: currentTabId });\n const activeTabNavKey = `${getPConnect().getValue(PCore.getConstants().CASE_INFO.CASE_INFO_ID)}-CaseView-ActiveTab`;\n PCore.getNavigationUtils().setComponentState(activeTabNavKey, { id: currentTabId });\n\n return () => {\n if (getPConnect().getContextName()?.includes('/modal')) {\n PCore.getNavigationUtils().setComponentState(navigationKey, { activeTab: firstTabId });\n }\n };\n }, [currentTabId, children]);\n\n const handleTabClick = useCallback(\n (event: SyntheticEvent, id: string) => {\n tabClick(id, tabData, currentTabId, setCurrentTabId);\n },\n [tabData, currentTabId]\n );\n\n const tabItems = useMemo(() => tabData?.filter((tab: any) => tab.visibility()) ?? [], [tabData, tabVisibilityStr]);\n\n const tabsRef = useRef(tabItems);\n tabsRef.current = tabItems;\n\n const updateTabErrorsOnViewMutate = useCallback((messageObject: any, tab: any) => {\n if (!messageObject.type) {\n return;\n }\n const previousTabErrors = tabErrorsRef.current;\n let currentTabState = previousTabErrors[tab.id] || {};\n const { MESSAGES_TYPE_ERROR } = PCore.getConstants().MESSAGES;\n if (messageObject.type !== MESSAGES_TYPE_ERROR) {\n delete currentTabState[messageObject.fieldName];\n currentTabState = Object.keys(currentTabState).length > 0 ? currentTabState : undefined;\n } else {\n currentTabState = { ...currentTabState, [messageObject.fieldName]: messageObject.messages };\n }\n const newErrors = { ...previousTabErrors, [tab.id]: currentTabState };\n tabErrorsRef.current = newErrors;\n setTabErrors(newErrors);\n }, []);\n\n useEffect(() => {\n const rawConfig = '_rawConfig';\n tabItems.forEach((tab: any) => {\n PCore.getContextTreeManager().onViewMutate(\n tab.getPConnect().getContextName(),\n tab.getPConnect().getPageReference(),\n tab.getPConnect()[rawConfig].config?.name,\n (messageObject: any) => updateTabErrorsOnViewMutate(messageObject, tab)\n );\n });\n }, [tabItems, updateTabErrorsOnViewMutate]);\n\n const navigateToFirstErrorTab = useCallback(() => {\n const currentErrors = tabErrorsRef.current;\n const firstTabWithError = tabsRef.current.find((tab: any) => {\n const tabErrorState = currentErrors[tab.id];\n return tabErrorState && Object.keys(tabErrorState).length > 0;\n });\n if (firstTabWithError) {\n submitAttemptedRef.current = false;\n setCurrentTabId(firstTabWithError.id);\n }\n }, []);\n\n const highlightFirstErrorTab = useCallback(() => {\n submitAttemptedRef.current = true;\n navigateToFirstErrorTab();\n }, [navigateToFirstErrorTab]);\n\n useEffect(() => {\n const { CURRENT_ASSIGNMENT_UPDATED } = PCore.getConstants().PUB_SUB_EVENTS.CASE_EVENTS;\n PCore.getPubSubUtils().subscribe(\n CURRENT_ASSIGNMENT_UPDATED,\n () => {\n tabErrorsRef.current = {};\n submitAttemptedRef.current = false;\n setTabErrors({});\n },\n 'CURRENT_ASSIGNMENT_UPDATED-HierarchicalForm'\n );\n\n PCore.getPubSubUtils().subscribe(\n PCore.getConstants().PUB_SUB_EVENTS.ERROR_ON_FINISH_ASSIGNMENT,\n highlightFirstErrorTab,\n 'ERROR_ON_FINISH_ASSIGNMENT-HierarchicalForm'\n );\n\n return () => {\n PCore.getPubSubUtils().unsubscribe(CURRENT_ASSIGNMENT_UPDATED, 'CURRENT_ASSIGNMENT_UPDATED-HierarchicalForm');\n PCore.getPubSubUtils().unsubscribe(\n PCore.getConstants().PUB_SUB_EVENTS.ERROR_ON_FINISH_ASSIGNMENT,\n 'ERROR_ON_FINISH_ASSIGNMENT-HierarchicalForm'\n );\n };\n }, []);\n\n useEffect(() => {\n if (submitAttemptedRef.current) {\n navigateToFirstErrorTab();\n }\n }, [tabErrors, navigateToFirstErrorTab]);\n\n const processedTabs = useMemo(() => {\n return tabItems.map(tab => {\n const errorKeys = Object.keys(tabErrors[tab.id] ?? {});\n const errors = errorKeys.length > 0 ? errorKeys.reduce((sum, fieldName) => sum + tabErrors[tab.id][fieldName].length, 0) : undefined;\n return { ...tab, errors };\n });\n }, [tabItems, tabErrors]);\n\n return { currentTabId, handleTabClick, processedTabs, instructions };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export { default } from './HierarchicalForm';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/template/HierarchicalForm/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { default } from './HierarchicalForm';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/template/HierarchicalForm/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC","sourcesContent":["export { default } from './HierarchicalForm';\n"]}
@@ -15,6 +15,7 @@ interface ListViewProps extends PConnProps {
15
15
  viewName?: string;
16
16
  showRecords?: boolean;
17
17
  displayAs?: string;
18
+ localeReference?: string;
18
19
  }
19
20
  export default function ListView(props: ListViewProps): import("react/jsx-runtime").JSX.Element;
20
21
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../../../../src/components/template/ListView/ListView.tsx"],"names":[],"mappings":"AAoCA,OAAO,gBAAgB,CAAC;AAOxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,UAAU,aAAc,SAAQ,UAAU;IAExC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC;IAEtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,GAAG,CAAC;IAC1B,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAcD,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAK,EAAE,aAAa,2CAwuCpD"}
1
+ {"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../../../../src/components/template/ListView/ListView.tsx"],"names":[],"mappings":"AAoCA,OAAO,gBAAgB,CAAC;AAOxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,UAAU,aAAc,SAAQ,UAAU;IAExC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC;IAEtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,GAAG,CAAC;IAC1B,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAcD,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAK,EAAE,aAAa,2CAiyCpD"}
@@ -50,7 +50,7 @@ export default function ListView(props) {
50
50
  const { getPConnect, bInForm = true } = props;
51
51
  const { globalSearch, referenceList,
52
52
  /* rowClickAction, */
53
- selectionMode, referenceType, payload, parameters, compositeKeys, showDynamicFields, viewName, readonlyContextList: selectedValues, value, displayAs } = props;
53
+ selectionMode, referenceType, payload, parameters, compositeKeys, showDynamicFields, viewName, readonlyContextList: selectedValues, value, displayAs, localeReference } = props;
54
54
  let { showRecords } = props;
55
55
  const ref = useRef({}).current;
56
56
  const cosmosTableRef = useRef();
@@ -84,6 +84,8 @@ export default function ListView(props) {
84
84
  const [showSnackbar, setShowSnackbar] = useState(false);
85
85
  const [snackbarMessage, setSnackbarMessage] = useState('');
86
86
  const [selectedValue, setSelectedValue] = useState(value);
87
+ // Tracks selected row keys for multi-select mode (mirrors Angular's SelectionModel)
88
+ const [selectedRowSet, setSelectedRowSet] = useState(new Set());
87
89
  // This basically will hold the list of all current filters
88
90
  const filters = useRef({});
89
91
  // Will contain the list of columns specific for an instance
@@ -150,6 +152,7 @@ export default function ListView(props) {
150
152
  }
151
153
  else {
152
154
  getPConnect().getListActions().clearSelectedRows();
155
+ setSelectedRowSet(new Set());
153
156
  }
154
157
  }
155
158
  }
@@ -463,6 +466,7 @@ export default function ListView(props) {
463
466
  const myColumns = getHeaderCells(columnFields, fieldDefs);
464
467
  const selectParams = [];
465
468
  myColumns.forEach(column => {
469
+ column.label = PCore.getLocaleUtils().getLocaleValue(column.label, localeReference);
466
470
  selectParams.push({
467
471
  field: column.id
468
472
  });
@@ -482,6 +486,16 @@ export default function ListView(props) {
482
486
  if (bCallSetRowsColumns) {
483
487
  setRows(myRows);
484
488
  setColumns(myColumns);
489
+ if (selectionMode === SELECTION_MODE.MULTI && selectedValues?.length > 0) {
490
+ const readonlyIds = new Set(selectedValues.map((element) => element[rowID]));
491
+ const initialSet = new Set();
492
+ myRows?.forEach(row => {
493
+ if (readonlyIds.has(row[rowID])) {
494
+ initialSet.add(row[rowID]);
495
+ }
496
+ });
497
+ setSelectedRowSet(initialSet);
498
+ }
485
499
  }
486
500
  return () => {
487
501
  // Inspired by https://juliangaramendy.dev/blog/use-promise-subscription
@@ -834,12 +848,11 @@ export default function ListView(props) {
834
848
  getPConnect()?.getListActions?.()?.setSelectedRows([reqObj]);
835
849
  setSelectedValue(value);
836
850
  };
837
- const onCheckboxClick = event => {
838
- const value = event?.target?.value;
839
- const checked = event?.target?.checked;
851
+ const getSelectedValue = (row, checked) => {
852
+ const rowValue = row[rowID];
840
853
  const reqObj = {};
841
854
  if (compositeKeys?.length > 1) {
842
- const index = response.findIndex(element => element[rowID] === value);
855
+ const index = response.findIndex(element => element[rowID] === rowValue);
843
856
  const selectedRow = response[index];
844
857
  compositeKeys.forEach(element => {
845
858
  reqObj[element] = selectedRow[element];
@@ -847,10 +860,44 @@ export default function ListView(props) {
847
860
  reqObj.$selected = checked;
848
861
  }
849
862
  else {
850
- reqObj[rowID] = value;
863
+ reqObj[rowID] = rowValue;
851
864
  reqObj.$selected = checked;
852
865
  }
853
- getPConnect()?.getListActions()?.setSelectedRows([reqObj]);
866
+ return reqObj;
867
+ };
868
+ const onCheckboxClick = (row) => {
869
+ const rowKey = row[rowID];
870
+ const newSet = new Set(selectedRowSet);
871
+ if (newSet.has(rowKey)) {
872
+ newSet.delete(rowKey);
873
+ }
874
+ else {
875
+ newSet.add(rowKey);
876
+ }
877
+ setSelectedRowSet(newSet);
878
+ const checked = newSet.has(rowKey);
879
+ const requiredValue = getSelectedValue(row, checked);
880
+ getPConnect()?.getListActions()?.setSelectedRows([requiredValue]);
881
+ };
882
+ const isAllSelected = () => {
883
+ const numSelected = selectedRowSet.size;
884
+ const numRows = arRows?.length || 0;
885
+ return numRows > 0 && numSelected === numRows;
886
+ };
887
+ const toggleAllRows = () => {
888
+ if (isAllSelected()) {
889
+ setSelectedRowSet(new Set());
890
+ getPConnect()?.getListActions()?.clearSelectedRows();
891
+ return;
892
+ }
893
+ if (selectedRowSet.size > 0 && !isAllSelected()) {
894
+ getPConnect()?.getListActions()?.clearSelectedRows();
895
+ }
896
+ const newSet = new Set();
897
+ arRows.forEach(row => newSet.add(row[rowID]));
898
+ setSelectedRowSet(newSet);
899
+ const requiredValues = arRows.map(row => getSelectedValue(row, true));
900
+ getPConnect()?.getListActions()?.setSelectedRows(requiredValues);
854
901
  };
855
902
  const processColumnValue = (column, value) => {
856
903
  let val;
@@ -888,14 +935,14 @@ export default function ListView(props) {
888
935
  _listViewClick(row, column);
889
936
  }, underline: 'hover', children: column.format && typeof value === 'number' ? column.format(value) : value })) : (_jsx(_Fragment, { children: column.format && typeof value === 'number' ? column.format(value) : value || '---' })) }, column.id));
890
937
  }) }, row.pxRefObjectInsName || row.pyID));
891
- }) })] }) })) : (_jsxs(TableContainer, { id: 'list-view', children: [_jsxs(Table, { children: [_jsx(TableHead, { children: _jsxs(TableRow, { children: [(selectionMode === SELECTION_MODE.SINGLE || selectionMode === SELECTION_MODE.MULTI) && _jsx(TableCell, {}), arColumns.map(column => {
938
+ }) })] }) })) : (_jsxs(TableContainer, { id: 'list-view', children: [_jsxs(Table, { children: [_jsx(TableHead, { children: _jsxs(TableRow, { children: [selectionMode === SELECTION_MODE.SINGLE && _jsx(TableCell, { padding: 'checkbox' }), selectionMode === SELECTION_MODE.MULTI && (_jsx(TableCell, { padding: 'checkbox', children: _jsx(Checkbox, { indeterminate: selectedRowSet.size > 0 && !isAllSelected(), checked: arRows?.length > 0 && isAllSelected(), onChange: toggleAllRows }) })), arColumns.map(column => {
892
939
  return (_jsx(TableCell, { className: classes.cell, sortDirection: orderBy === column.id ? order : false, children: _jsxs(TableSortLabel, { active: orderBy === column.id, direction: orderBy === column.id ? order : 'asc', onClick: createSortHandler(column.id), children: [column.label, orderBy === column.id ? (_jsx("span", { className: classes.visuallyHidden, children: order === 'desc' ? 'sorted descending' : 'sorted ascending' })) : null] }) }, column.id));
893
940
  })] }) }), _jsx(TableBody, { children: arRows &&
894
941
  arRows.length > 0 &&
895
942
  stableSort(arRows, getComparator(order, orderBy))
896
943
  .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage)
897
944
  .map(row => {
898
- return (_jsxs(TableRow, { children: [selectionMode === SELECTION_MODE.SINGLE && (_jsx(TableCell, { children: _jsx(Radio, { onChange: handleChange, value: row[rowID], name: 'radio-buttons', inputProps: { 'aria-label': 'A' }, checked: selectedValue === row[rowID] }) })), selectionMode === SELECTION_MODE.MULTI && (_jsx(TableCell, { children: _jsx(Checkbox, { onChange: onCheckboxClick, checked: selectedValues.some(selectedValue => selectedValue[rowID] === row[rowID]), value: row[rowID] }) })), arColumns.map(column => {
945
+ return (_jsxs(TableRow, { children: [selectionMode === SELECTION_MODE.SINGLE && (_jsx(TableCell, { padding: 'checkbox', children: _jsx(Radio, { onChange: handleChange, value: row[rowID], name: 'radio-buttons', inputProps: { 'aria-label': 'A' }, checked: selectedValue === row[rowID] }) })), selectionMode === SELECTION_MODE.MULTI && (_jsx(TableCell, { padding: 'checkbox', children: _jsx(Checkbox, { onChange: () => onCheckboxClick(row), checked: selectedRowSet.has(row[rowID]) }) })), arColumns.map(column => {
899
946
  const value = row[column.id];
900
947
  return (_jsx(TableCell, { className: classes.cell, align: column.align, children: processColumnValue(column, value) }, column.id));
901
948
  })] }, row[rowID]));