@pega/react-sdk-overrides 24.2.10 → 24.2.11

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 (45) hide show
  1. package/lib/designSystemExtension/FieldValueList/FieldValueList.tsx +2 -2
  2. package/lib/field/CancelAlert/CancelAlert.tsx +1 -4
  3. package/lib/field/Currency/Currency.tsx +8 -5
  4. package/lib/field/Date/Date.tsx +5 -1
  5. package/lib/field/DateTime/DateTime.tsx +13 -5
  6. package/lib/field/Decimal/Decimal.tsx +7 -2
  7. package/lib/field/Dropdown/Dropdown.tsx +27 -20
  8. package/lib/field/Percentage/Percentage.tsx +6 -2
  9. package/lib/field/RadioButtons/RadioButtons.tsx +0 -3
  10. package/lib/field/ScalarList/ScalarList.tsx +1 -2
  11. package/lib/field/Time/Time.tsx +1 -1
  12. package/lib/field/UserReference/UserReference.tsx +1 -3
  13. package/lib/helpers/common-utils.ts +24 -1
  14. package/lib/helpers/formatters/Currency.ts +11 -16
  15. package/lib/helpers/formatters/common.ts +2 -1
  16. package/lib/helpers/formatters/index.ts +2 -4
  17. package/lib/infra/Assignment/Assignment.tsx +2 -6
  18. package/lib/infra/Containers/FlowContainer/FlowContainer.tsx +5 -18
  19. package/lib/infra/Containers/FlowContainer/helpers.ts +1 -5
  20. package/lib/infra/Containers/ModalViewContainer/ListViewActionButtons/ListViewActionButtons.tsx +3 -1
  21. package/lib/infra/Containers/SimpleView/helper.ts +1 -1
  22. package/lib/infra/DashboardFilter/DashboardFilter.tsx +2 -3
  23. package/lib/infra/DashboardFilter/filterUtils.tsx +1 -3
  24. package/lib/infra/DeferLoad/DeferLoad.tsx +5 -5
  25. package/lib/infra/MultiStep/MultiStep.tsx +1 -6
  26. package/lib/infra/RootContainer/RootContainer.tsx +1 -1
  27. package/lib/template/AppShell/AppShell.tsx +6 -6
  28. package/lib/template/CaseView/CaseView.tsx +5 -4
  29. package/lib/template/Confirmation/Confirmation.tsx +1 -1
  30. package/lib/template/Details/DynamicTabs/DynamicTabs.tsx +0 -1
  31. package/lib/template/FieldGroupTemplate/FieldGroupTemplate.tsx +0 -2
  32. package/lib/template/ListView/ListView.tsx +10 -9
  33. package/lib/template/ListView/utils.ts +0 -1
  34. package/lib/template/PromotedFilters/PromotedFilters.tsx +0 -1
  35. package/lib/template/SimpleTable/SimpleTable/SimpleTable.tsx +0 -2
  36. package/lib/template/SimpleTable/SimpleTableManual/SimpleTableManual.tsx +68 -56
  37. package/lib/template/SimpleTable/SimpleTableSelect/SimpleTableSelect.tsx +2 -4
  38. package/lib/widget/Attachment/Attachment.css +1 -0
  39. package/lib/widget/Attachment/Attachment.tsx +2 -7
  40. package/lib/widget/FileUtility/FileUtility/FileUtility.tsx +1 -1
  41. package/lib/widget/QuickCreate/QuickCreate.tsx +0 -1
  42. package/lib/widget/SummaryItem/SummaryItem.tsx +1 -1
  43. package/lib/widget/ToDo/ToDo.tsx +1 -1
  44. package/package.json +1 -1
  45. /package/lib/infra/Containers/{helpers.ts → container-helpers.ts} +0 -0
@@ -12,6 +12,7 @@ interface DeferLoadProps extends PConnProps {
12
12
  isChildDeferLoad?: boolean;
13
13
  isTab: boolean;
14
14
  deferLoadId: string;
15
+ lastUpdateCaseTime: any;
15
16
  }
16
17
 
17
18
  //
@@ -34,7 +35,7 @@ const useStyles = makeStyles(theme => ({
34
35
  }));
35
36
 
36
37
  export default function DeferLoad(props: DeferLoadProps) {
37
- const { getPConnect, name, deferLoadId, isTab } = props;
38
+ const { getPConnect, name, deferLoadId, isTab, lastUpdateCaseTime } = props;
38
39
  const [content, setContent] = useState<any>(null);
39
40
  const [isLoading, setLoading] = useState(true);
40
41
  const [currentLoadedAssignment, setCurrentLoadedAssignment] = useState('');
@@ -69,8 +70,8 @@ export default function DeferLoad(props: DeferLoadProps) {
69
70
  const getViewOptions = () => ({
70
71
  viewContext: resourceType,
71
72
  pageClass: loadViewCaseID ? '' : (pConnect.getDataObject('') as any).pyPortal.classID, // 2nd arg empty string until typedef allows optional
72
- container: isContainerPreview ? 'preview' : null,
73
- containerName: isContainerPreview ? 'preview' : null,
73
+ container: isContainerPreview ? 'preview' : undefined,
74
+ containerName: isContainerPreview ? 'preview' : undefined,
74
75
  updateData: isContainerPreview
75
76
  });
76
77
 
@@ -113,7 +114,6 @@ export default function DeferLoad(props: DeferLoadProps) {
113
114
  getPConnect()
114
115
  .getActionsApi()
115
116
  .showData(name, dataContext, dataContextParameters, {
116
- // @ts-ignore - Type 'boolean' is not assignable to type 'string'
117
117
  skipSemanticUrl: true,
118
118
  // @ts-ignore
119
119
  isDeferLoaded: true
@@ -145,7 +145,7 @@ export default function DeferLoad(props: DeferLoadProps) {
145
145
  console.log(`deferload: ${error}`);
146
146
  });
147
147
  }
148
- }, [name, getPConnect, currentLoadedAssignment]);
148
+ }, [name, getPConnect, currentLoadedAssignment, lastUpdateCaseTime]);
149
149
  /* TODO Cosmos need to handle for now added a wrapper div with pos relative */
150
150
  let deferLoadContent;
151
151
  if (isLoading) {
@@ -71,12 +71,7 @@ export default function MultiStep(props: PropsWithChildren<MultiStepProps>) {
71
71
  }
72
72
 
73
73
  function _showHLine(index: number): boolean {
74
- // eslint-disable-next-line sonarjs/prefer-single-boolean-return
75
- if (index < arNavigationSteps.length - 1) {
76
- return true;
77
- }
78
-
79
- return false;
74
+ return index < arNavigationSteps.length - 1;
80
75
  }
81
76
 
82
77
  function buttonPress(sAction: string, sButtonType: string) {
@@ -179,7 +179,7 @@ export default function RootContainer(props: PropsWithChildren<RootContainerProp
179
179
  }
180
180
  };
181
181
 
182
- if (!PCore.isDeepEqual(currentRootConfig, prevRootConfig)) {
182
+ if (prevRootConfig === null || !PCore.isDeepEqual(currentRootConfig, prevRootConfig)) {
183
183
  rootView.current = createElement(createPConnectComponent(), PCore.createPConnect(currentRootConfig)) as any;
184
184
  }
185
185
 
@@ -73,7 +73,7 @@ export default function AppShell(props: PropsWithChildren<AppShellProps>) {
73
73
  const pConn = getPConnect();
74
74
  const envInfo = PCore.getEnvironmentInfo();
75
75
  const imageKey = envInfo.getOperatorImageInsKey();
76
- const userName = envInfo.getOperatorName();
76
+ const userName = envInfo.getOperatorName() || '';
77
77
  const currentUserInitials = Utils.getInitials(userName);
78
78
  const appNameToDisplay = showAppName ? envInfo.getApplicationLabel() : '';
79
79
  const portalClass = pConn.getValue('.classID', ''); // 2nd arg empty string until typedef marked correctly
@@ -101,7 +101,7 @@ export default function AppShell(props: PropsWithChildren<AppShellProps>) {
101
101
  );
102
102
  // Initial setting of appName and mapChildren
103
103
  useEffect(() => {
104
- setAppName(PCore.getEnvironmentInfo().getApplicationName());
104
+ setAppName(PCore.getEnvironmentInfo().getApplicationName() || '');
105
105
 
106
106
  const tempMap: any = (pConn.getChildren() as any)?.map((child: any, index) => {
107
107
  const theChildComp = child.getPConnect().getComponentName();
@@ -125,7 +125,7 @@ export default function AppShell(props: PropsWithChildren<AppShellProps>) {
125
125
  .getPageDataAsync(caseTypesAvailableToCreateDP, pConn.getContextName(), {
126
126
  PortalName: portalID
127
127
  })
128
- .then(response => {
128
+ .then((response: { pyCaseTypesAvailableToCreate?: any }) => {
129
129
  if (response?.pyCaseTypesAvailableToCreate) {
130
130
  pConn.replaceState('.pyCaseTypesAvailableToCreate', response.pyCaseTypesAvailableToCreate, {
131
131
  skipDirtyValidation: true
@@ -218,10 +218,10 @@ export default function AppShell(props: PropsWithChildren<AppShellProps>) {
218
218
  portalName={portalName}
219
219
  imageSrc={iconURL}
220
220
  fullImageSrc={fullIconURL}
221
- appName={localizedVal(appNameToDisplay, '', `${portalClass}!PORTAL!${envPortalName}`.toUpperCase())}
221
+ appName={localizedVal(appNameToDisplay || '', '', `${portalClass}!PORTAL!${envPortalName}`.toUpperCase())}
222
222
  appInfo={{
223
223
  imageSrc: iconURL,
224
- appName: localizedVal(appNameToDisplay, '', `${portalClass}!PORTAL!${envPortalName}`.toUpperCase()),
224
+ appName: localizedVal(appNameToDisplay || '', '', `${portalClass}!PORTAL!${envPortalName}`.toUpperCase()),
225
225
  onClick: links[0] && /* links[0].onClick ? */ links[0].onClick /* : undefined */
226
226
  }}
227
227
  navLinks={links.filter((link, index) => {
@@ -245,7 +245,7 @@ export default function AppShell(props: PropsWithChildren<AppShellProps>) {
245
245
  <NavBar
246
246
  getPConnect={getPConnect}
247
247
  pConn={getPConnect()}
248
- appName={localizedVal(appNameToDisplay, '', `${portalClass}!PORTAL!${envPortalName}`.toUpperCase())}
248
+ appName={localizedVal(appNameToDisplay || '', '', `${portalClass}!PORTAL!${envPortalName}`.toUpperCase())}
249
249
  pages={pages}
250
250
  caseTypes={caseTypes}
251
251
  />
@@ -19,6 +19,7 @@ interface CaseViewProps extends PConnProps {
19
19
  header: string;
20
20
  showIconInHeader: boolean;
21
21
  caseInfo: any;
22
+ lastUpdateCaseTime: any;
22
23
  }
23
24
 
24
25
  const useStyles = makeStyles(theme => ({
@@ -64,10 +65,10 @@ export default function CaseView(props: PropsWithChildren<CaseViewProps>) {
64
65
  showIconInHeader = true,
65
66
  caseInfo: { availableActions = [], availableProcesses = [], hasNewAttachments, caseTypeID = '', caseTypeName = '' }
66
67
  } = props;
68
+ const { lastUpdateCaseTime = getPConnect().getValue('caseInfo.lastUpdateTime') } = props;
67
69
 
68
70
  const currentCaseID = props.caseInfo.ID;
69
71
  let isComponentMounted = true;
70
-
71
72
  const { displayOnlyFA } = useContext<any>(StoreContext);
72
73
 
73
74
  const thePConn = getPConnect();
@@ -79,7 +80,6 @@ export default function CaseView(props: PropsWithChildren<CaseViewProps>) {
79
80
  const localizedVal = PCore.getLocaleUtils().getLocaleValue;
80
81
  const localeCategory = 'CaseView';
81
82
  const localeKey = `${caseTypeID}!CASE!${caseTypeName}`.toUpperCase();
82
-
83
83
  /**
84
84
  *
85
85
  * @param inName the metadata <em>name</em> that will cause a region to be returned
@@ -169,7 +169,6 @@ export default function CaseView(props: PropsWithChildren<CaseViewProps>) {
169
169
 
170
170
  useEffect(() => {
171
171
  if (hasNewAttachments) {
172
- // @ts-ignore - Argument of type 'boolean' is not assignable to parameter of type 'object'
173
172
  PCore.getPubSubUtils().publish((PCore.getEvents().getCaseEvent() as any).CASE_ATTACHMENTS_UPDATED_FROM_CASEVIEW, true);
174
173
  }
175
174
  }, [hasNewAttachments]);
@@ -244,7 +243,9 @@ export default function CaseView(props: PropsWithChildren<CaseViewProps>) {
244
243
  <Grid item xs={6}>
245
244
  {theStagesRegion}
246
245
  {theTodoRegion}
247
- {deferLoadInfo.length > 0 && <DeferLoad getPConnect={getPConnect} name={deferLoadInfo[activeVertTab].config.name} isTab />}
246
+ {deferLoadInfo.length > 0 && (
247
+ <DeferLoad getPConnect={getPConnect} name={deferLoadInfo[activeVertTab].config.name} isTab lastUpdateCaseTime={lastUpdateCaseTime} />
248
+ )}
248
249
  </Grid>
249
250
 
250
251
  <Grid item xs={3}>
@@ -41,7 +41,7 @@ export default function Confirmation(props: PropsWithChildren<ConfirmationProps>
41
41
  // Not using whatsNext at the moment, need to figure out the use of it
42
42
  // const whatsNext = datasource?.source;
43
43
  // const items = whatsNext.length > 0 ? whatsNext.map(item => item.label) : '';
44
- const activeContainerItemID = PCore.getContainerUtils().getActiveContainerItemName(getPConnect().getTarget());
44
+ const activeContainerItemID = PCore.getContainerUtils().getActiveContainerItemName(getPConnect().getTarget() || '');
45
45
  const rootInfo = PCore.getContainerUtils().getContainerItemData(getPConnect().getTarget(), activeContainerItemID);
46
46
  const onConfirmViewClose = () => {
47
47
  setShowConfirmView(false);
@@ -26,7 +26,6 @@ function DynamicTabs(props: DynamicTabsProps) {
26
26
  // Get the inherited props from the parent to determine label settings
27
27
  const propsToUse = { label, showLabel, ...pConnect.getInheritedProps() };
28
28
  const defaultTabIndex = 0;
29
- // @ts-ignore - Property 'getComponentConfig' is private and only accessible within class 'C11nEnv'.
30
29
  const { tablabel } = pConnect.getComponentConfig();
31
30
  const tablabelProp = PCore.getAnnotationUtils().getPropertyName(tablabel);
32
31
  const referenceListData: any = pConnect.getValue(`${referenceList}.pxResults`, ''); // 2nd arg empty string until typedefs properly allow optional
@@ -58,7 +58,6 @@ export default function FieldGroupTemplate(props: FieldGroupTemplateProps) {
58
58
  if (PCore.getPCoreVersion()?.includes('8.7')) {
59
59
  pConn.getListActions().insert({ classID: contextClass }, referenceList.length, pageReference);
60
60
  } else {
61
- // @ts-ignore - An argument for 'pageRef' was not provided.
62
61
  pConn.getListActions().insert({}, referenceList.length);
63
62
  }
64
63
  };
@@ -71,7 +70,6 @@ export default function FieldGroupTemplate(props: FieldGroupTemplateProps) {
71
70
  if (PCore.getPCoreVersion()?.includes('8.7')) {
72
71
  pConn.getListActions().deleteEntry(index, pageReference);
73
72
  } else {
74
- // @ts-ignore - An argument for 'pageRef' was not provided.
75
73
  pConn.getListActions().deleteEntry(index);
76
74
  }
77
75
  };
@@ -43,6 +43,7 @@ import { filterData } from '@pega/react-sdk-components/lib/components/helpers/si
43
43
  import './ListView.css';
44
44
  import { getDateFormatInfo } from '@pega/react-sdk-components/lib/components/helpers/date-format-utils';
45
45
  import { getCurrencyOptions } from '@pega/react-sdk-components/lib/components/field/Currency/currency-utils';
46
+ import { getGenericFieldsLocalizedValue } from '@pega/react-sdk-components/lib/components/helpers/common-utils';
46
47
  import { format } from '@pega/react-sdk-components/lib/components/helpers/formatters';
47
48
 
48
49
  import useInit from './hooks';
@@ -109,7 +110,6 @@ export default function ListView(props: ListViewProps) {
109
110
  });
110
111
 
111
112
  const thePConn = getPConnect();
112
- // @ts-ignore - Property 'getComponentConfig' is private and only accessible within class 'C11nEnv'.
113
113
  const componentConfig = thePConn.getComponentConfig();
114
114
  const resolvedConfigProps: any = thePConn.getConfigProps() as ListViewProps;
115
115
 
@@ -222,11 +222,12 @@ export default function ListView(props: ListViewProps) {
222
222
 
223
223
  type Order = 'asc' | 'desc';
224
224
 
225
- function getComparator<Key extends keyof any>(
226
- theOrder: Order,
227
- orderedBy: Key
228
- ): (a: { [key in Key]: number | string }, b: { [key in Key]: number | string }) => number {
229
- return theOrder === 'desc' ? (a, b) => descendingComparator(a, b, orderedBy) : (a, b) => -descendingComparator(a, b, orderedBy);
225
+ interface Comparator<T> {
226
+ (a: T, b: T): number;
227
+ }
228
+
229
+ function getComparator<T, Key extends keyof T>(theOrder: Order, orderedBy: Key): Comparator<T> {
230
+ return theOrder === 'desc' ? (a: T, b: T) => descendingComparator(a, b, orderedBy) : (a: T, b: T) => -descendingComparator(a, b, orderedBy);
230
231
  }
231
232
 
232
233
  function stableSort<T>(array: T[], comparator: (a: T, b: T) => number) {
@@ -642,7 +643,6 @@ export default function ListView(props: ListViewProps) {
642
643
 
643
644
  thePConn
644
645
  .getActionsApi()
645
- // @ts-ignore
646
646
  .openAssignment(pzInsKey, pxRefObjectClass, options)
647
647
  .then(() => {
648
648
  // console.log("openAssignment successful");
@@ -875,7 +875,6 @@ export default function ListView(props: ListViewProps) {
875
875
  pzInsKey = row[`${associationCategory}:pzInsKey`];
876
876
  }
877
877
  if (column.isAssignmentLink) {
878
- // @ts-ignore
879
878
  thePConn.getActionsApi().openAssignment(pzInsKey, pxObjClass, {
880
879
  containerName: 'primary',
881
880
  channelName: ''
@@ -1131,7 +1130,9 @@ export default function ListView(props: ListViewProps) {
1131
1130
  })}
1132
1131
  </TableBody>
1133
1132
  </Table>
1134
- {arRows && arRows.length === 0 && <div className='no-records'>No records found.</div>}
1133
+ {arRows && arRows.length === 0 && (
1134
+ <div className='no-records'>{getGenericFieldsLocalizedValue('CosmosFields.fields.lists', 'No records found.')}</div>
1135
+ )}
1135
1136
  </TableContainer>
1136
1137
  )}
1137
1138
  </>
@@ -202,7 +202,6 @@ export function getConfigEmbeddedFieldsMeta(configFields, classID) {
202
202
  if (value.includes('[')) {
203
203
  value = value.substring(0, value.indexOf('[')) + value.substring(value.indexOf(']') + 1);
204
204
  }
205
- // @ts-ignore - Expected 3 arguments, but got 2.
206
205
  const meta: any = PCore.getMetadataUtils().getEmbeddedPropertyMetadata(value, classID);
207
206
  meta.fieldID = field;
208
207
  configEmbeddedFieldsMeta.push(meta);
@@ -87,7 +87,6 @@ export default function PromotedFilters(props: PromotedFilterProps) {
87
87
  };
88
88
  return getPConnect().getContainerManager().addTransientItem({
89
89
  id: viewName,
90
- // @ts-ignore - Property 'coreHeaders' is missing in type '{ classID: string; }' but required in type '{ coreHeaders: any; }'.
91
90
  data: filtersWithClassID
92
91
  });
93
92
  }, []);
@@ -50,11 +50,9 @@ export default function SimpleTable(props: SimpleTableProps) {
50
50
 
51
51
  let { contextClass } = props;
52
52
  if (!contextClass) {
53
- // @ts-ignore - Property 'getComponentConfig' is private and only accessible within class 'C11nEnv'.
54
53
  let listName = getPConnect().getComponentConfig().referenceList;
55
54
  listName = PCore.getAnnotationUtils().getPropertyName(listName);
56
55
  // was... contextClass = getPConnect().getFieldMetadata(listName)?.pageClass;
57
- // @ts-ignore - Property 'getFieldMetadata' is private and only accessible within class 'C11nEnv'.
58
56
  const theFieldMetadata = getPConnect().getFieldMetadata(listName);
59
57
  if (theFieldMetadata) {
60
58
  contextClass = theFieldMetadata.pageClass;
@@ -1,4 +1,3 @@
1
- /* eslint-disable no-nested-ternary */
2
1
  import React, { PropsWithChildren, useEffect, useLayoutEffect, useRef, useState } from 'react';
3
2
  import Table from '@mui/material/Table';
4
3
  import TableBody from '@mui/material/TableBody';
@@ -28,6 +27,7 @@ import createPConnectComponent from '@pega/react-sdk-components/lib/bridge/react
28
27
  import { Utils } from '@pega/react-sdk-components/lib/components/helpers/utils';
29
28
  import { getReferenceList } from '@pega/react-sdk-components/lib/components/helpers/field-group-utils';
30
29
  import { getDataPage } from '@pega/react-sdk-components/lib/components/helpers/data_page';
30
+ import { getGenericFieldsLocalizedValue } from '@pega/react-sdk-components/lib/components/helpers/common-utils';
31
31
  import { buildFieldsForTable, filterData, getContext } from '@pega/react-sdk-components/lib/components/helpers/simpleTableHelpers';
32
32
  import { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
33
33
  import { format } from '@pega/react-sdk-components/lib/components/helpers/formatters';
@@ -52,12 +52,27 @@ interface SimpleTableManualProps extends PConnProps {
52
52
  displayMode?: string;
53
53
  useSeparateViewForEdit: any;
54
54
  viewForEditModal: any;
55
+ validatemessage?: string;
56
+ required?: boolean;
55
57
  }
56
58
 
57
59
  const useStyles = makeStyles((/* theme */) => ({
58
60
  label: {
59
61
  margin: '8px'
60
62
  },
63
+ tableLabel: {
64
+ '&::after': {
65
+ display: 'inline',
66
+ content: '" *"',
67
+ verticalAlign: 'top',
68
+ color: 'var(--app-error-color)'
69
+ }
70
+ },
71
+ message: {
72
+ margin: '8px',
73
+ color: 'var(--app-error-color)',
74
+ fontSize: '14px'
75
+ },
61
76
  header: {
62
77
  background: '#f5f5f5'
63
78
  },
@@ -110,7 +125,9 @@ export default function SimpleTableManual(props: PropsWithChildren<SimpleTableMa
110
125
  editModeConfig,
111
126
  displayMode,
112
127
  useSeparateViewForEdit,
113
- viewForEditModal
128
+ viewForEditModal,
129
+ required,
130
+ validatemessage
114
131
  } = props;
115
132
  const pConn = getPConnect();
116
133
  const [rowData, setRowData] = useState([]);
@@ -130,7 +147,8 @@ export default function SimpleTableManual(props: PropsWithChildren<SimpleTableMa
130
147
  const [displayDialogDateFilter, setDisplayDialogDateFilter] = useState<string>('notequal');
131
148
  const [displayDialogDateValue, setDisplayDialogDateValue] = useState<string>('');
132
149
  const selectedRowIndex: any = useRef(null);
133
-
150
+ const localizedVal = PCore.getLocaleUtils().getLocaleValue;
151
+ const localeCategory = 'SimpleTable';
134
152
  const parameters = fieldMetadata?.datasource?.parameters;
135
153
  const { referenceListStr } = getContext(getPConnect());
136
154
  const label = labelProp || propertyLabel;
@@ -176,13 +194,8 @@ export default function SimpleTableManual(props: PropsWithChildren<SimpleTableMa
176
194
  });
177
195
 
178
196
  useEffect(() => {
179
- if (editableMode && !allowEditingInModal) {
180
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
181
- buildElementsForTable();
182
- }
183
- }, [referenceList.length]);
184
-
185
- useEffect(() => {
197
+ // eslint-disable-next-line @typescript-eslint/no-use-before-define
198
+ buildElementsForTable();
186
199
  if (readOnlyMode || allowEditingInModal) {
187
200
  // eslint-disable-next-line @typescript-eslint/no-use-before-define
188
201
  generateRowsData();
@@ -201,7 +214,6 @@ export default function SimpleTableManual(props: PropsWithChildren<SimpleTableMa
201
214
  if (allowEditingInModal) {
202
215
  getPConnect()
203
216
  .getListActions()
204
- // @ts-ignore - An argument for 'uniqueField' was not provided.
205
217
  .initDefaultPageInstructions(
206
218
  getPConnect().getReferenceList(),
207
219
  fieldDefs.filter(item => item.name).map(item => item.name)
@@ -306,9 +318,9 @@ export default function SimpleTableManual(props: PropsWithChildren<SimpleTableMa
306
318
  if (allowEditingInModal && defaultView) {
307
319
  pConn
308
320
  .getActionsApi()
321
+ // @ts-ignore
309
322
  .openEmbeddedDataModal(defaultView, pConn, referenceListStr, referenceList.length, PCore.getConstants().RESOURCE_STATUS.CREATE);
310
323
  } else {
311
- // @ts-ignore - An argument for 'pageRef' was not provided.
312
324
  pConn.getListActions().insert({ classID: contextClass }, referenceList.length);
313
325
  }
314
326
 
@@ -322,6 +334,7 @@ export default function SimpleTableManual(props: PropsWithChildren<SimpleTableMa
322
334
  if (typeof selectedRowIndex.current === 'number') {
323
335
  pConn
324
336
  .getActionsApi()
337
+ // @ts-ignore
325
338
  .openEmbeddedDataModal(
326
339
  bUseSeparateViewForEdit ? editView : defaultView,
327
340
  pConn,
@@ -334,12 +347,10 @@ export default function SimpleTableManual(props: PropsWithChildren<SimpleTableMa
334
347
 
335
348
  const deleteRecord = () => {
336
349
  setEditAnchorEl(null);
337
- // @ts-ignore - An argument for 'pageRef' was not provided.
338
350
  pConn.getListActions().deleteEntry(selectedRowIndex.current);
339
351
  };
340
352
 
341
353
  const deleteRecordFromInlineEditable = (index: number) => {
342
- // @ts-ignore - An argument for 'pageRef' was not provided.
343
354
  pConn.getListActions().deleteEntry(index);
344
355
  };
345
356
 
@@ -349,7 +360,7 @@ export default function SimpleTableManual(props: PropsWithChildren<SimpleTableMa
349
360
  const data: any = [];
350
361
  rawFields.forEach(item => {
351
362
  // removing label field from config to hide title in the table cell
352
- item = { ...item, config: { ...item.config, label: '' } };
363
+ item = { ...item, config: { ...item.config, label: '', displayMode: readOnlyMode || allowEditingInModal ? 'DISPLAY_ONLY' : undefined } };
353
364
  const referenceListData = getReferenceList(pConn);
354
365
  const isDatapage = referenceListData.startsWith('D_');
355
366
  const pageReferenceValue = isDatapage
@@ -397,11 +408,12 @@ export default function SimpleTableManual(props: PropsWithChildren<SimpleTableMa
397
408
 
398
409
  type Order = 'asc' | 'desc';
399
410
 
400
- function getComparator<Key extends keyof any>(
401
- theOrder: Order,
402
- orderedBy: Key
403
- ): (a: { [key in Key]: number | string }, b: { [key in Key]: number | string }) => number {
404
- return theOrder === 'desc' ? (a, b) => descendingComparator(a, b, orderedBy) : (a, b) => -descendingComparator(a, b, orderedBy);
411
+ interface Comparator<T> {
412
+ (a: T, b: T): number;
413
+ }
414
+
415
+ function getComparator<Key extends keyof any, T extends Record<Key, any>>(theOrder: Order, orderedBy: Key): Comparator<T> {
416
+ return theOrder === 'desc' ? (a: T, b: T) => descendingComparator<T>(a, b, orderedBy) : (a: T, b: T) => -descendingComparator<T>(a, b, orderedBy);
405
417
  }
406
418
 
407
419
  function stableSort<T>(array: T[], comparator: (a: T, b: T) => number) {
@@ -413,7 +425,11 @@ export default function SimpleTableManual(props: PropsWithChildren<SimpleTableMa
413
425
  return a[1] - b[1];
414
426
  });
415
427
 
416
- return stabilizedThis.map(el => el[0]);
428
+ const newElements = new Array(stabilizedThis.length);
429
+ stabilizedThis.forEach((el, index) => {
430
+ newElements[index] = elements[el[1]];
431
+ });
432
+ return newElements;
417
433
  }
418
434
 
419
435
  function _menuClick(event, columnId: string, columnType: string, labelValue: string) {
@@ -583,19 +599,21 @@ export default function SimpleTableManual(props: PropsWithChildren<SimpleTableMa
583
599
  <>
584
600
  <TableContainer component={Paper} style={{ margin: '4px 0px' }} id='simple-table-manual'>
585
601
  {propsToUse.label && (
586
- <h3 className={classes.label}>
602
+ <h3 className={`${classes.label} ${required ? classes.tableLabel : ''}`}>
587
603
  {propsToUse.label} {results()}
588
604
  </h3>
589
605
  )}
606
+ {validatemessage && <div className={classes.message}>{validatemessage}</div>}
590
607
  <Table>
591
608
  <TableHead className={classes.header}>
592
609
  <TableRow>
593
610
  {fieldDefs.map((field: any, index) => {
594
611
  return (
595
612
  <TableCell key={`head-${displayedColumns[index]}`} className={classes.tableCell}>
596
- {readOnlyMode ? (
597
- <div>
613
+ {(readOnlyMode || allowEditingInModal) && field.cellRenderer !== 'DeleteIcon' ? (
614
+ <div style={{ display: 'flex' }}>
598
615
  <TableSortLabel
616
+ style={{ width: '75%' }}
599
617
  active={orderBy === displayedColumns[index]}
600
618
  direction={orderBy === displayedColumns[index] ? order : 'asc'}
601
619
  onClick={createSortHandler(displayedColumns[index])}
@@ -607,8 +625,8 @@ export default function SimpleTableManual(props: PropsWithChildren<SimpleTableMa
607
625
  ) : null}
608
626
  </TableSortLabel>
609
627
  <MoreIcon
628
+ style={{ cursor: 'pointer', zIndex: 1000 }}
610
629
  id='menu-icon'
611
- className={classes.moreIcon}
612
630
  onClick={event => {
613
631
  _menuClick(event, field.name, field.meta.type, field.label);
614
632
  }}
@@ -624,6 +642,7 @@ export default function SimpleTableManual(props: PropsWithChildren<SimpleTableMa
624
642
  </TableHead>
625
643
  <TableBody>
626
644
  {editableMode &&
645
+ !allowEditingInModal &&
627
646
  elements.map((row: any, index) => {
628
647
  const theKey = `row-${index}`;
629
648
  return (
@@ -661,53 +680,46 @@ export default function SimpleTableManual(props: PropsWithChildren<SimpleTableMa
661
680
  return (
662
681
  // eslint-disable-next-line react/no-array-index-key
663
682
  <TableRow key={index}>
664
- {displayedColumns.map(colKey => {
683
+ {row.map((item, childIndex) => {
684
+ const theColKey = displayedColumns[childIndex];
665
685
  return (
666
- <TableCell key={colKey} className={classes.tableCell}>
667
- {showDeleteButton && colKey === 'DeleteIcon' ? (
668
- <div>
669
- <MoreIcon
670
- id='table-edit-menu-icon'
671
- className={classes.moreIcon}
672
- onClick={event => {
673
- editMenuClick(event, index);
674
- }}
675
- />
676
- <Menu id='table-edit-menu' anchorEl={editAnchorEl} keepMounted open={Boolean(editAnchorEl)} onClose={_menuClose}>
677
- <MenuItem onClick={() => editRecord()}>Edit</MenuItem>
678
- <MenuItem onClick={() => deleteRecord()}>Delete</MenuItem>
679
- </Menu>
680
- </div>
681
- ) : typeof row[colKey] === 'boolean' && !row[colKey] ? (
682
- 'False'
683
- ) : typeof row[colKey] === 'boolean' && row[colKey] ? (
684
- 'True'
685
- ) : (
686
- row[colKey] || '---'
687
- )}
686
+ <TableCell key={theColKey} className={classes.tableCell}>
687
+ {item}
688
688
  </TableCell>
689
689
  );
690
690
  })}
691
+ {showDeleteButton && (
692
+ <TableCell key='DeleteIcon' className={classes.tableCell}>
693
+ <div>
694
+ <MoreIcon
695
+ id='table-edit-menu-icon'
696
+ className={classes.moreIcon}
697
+ onClick={event => {
698
+ editMenuClick(event, index);
699
+ }}
700
+ />
701
+ <Menu id='table-edit-menu' anchorEl={editAnchorEl} keepMounted open={Boolean(editAnchorEl)} onClose={_menuClose}>
702
+ <MenuItem onClick={() => editRecord()}>Edit</MenuItem>
703
+ <MenuItem onClick={() => deleteRecord()}>Delete</MenuItem>
704
+ </Menu>
705
+ </div>
706
+ </TableCell>
707
+ )}
691
708
  </TableRow>
692
709
  );
693
710
  })}
694
711
  </TableBody>
695
712
  </Table>
696
- {readOnlyMode && rowData && rowData.length === 0 && (
697
- <div className='no-records' id='no-records'>
698
- No records found.
699
- </div>
700
- )}
701
- {editableMode && referenceList && referenceList.length === 0 && (
713
+ {((readOnlyMode && (!rowData || rowData?.length === 0)) || (editableMode && (!referenceList || referenceList?.length === 0))) && (
702
714
  <div className='no-records' id='no-records'>
703
- No records found.
715
+ {getGenericFieldsLocalizedValue('CosmosFields.fields.lists', 'No records found.')}
704
716
  </div>
705
717
  )}
706
718
  </TableContainer>
707
719
  {showAddRowButton && (
708
720
  <div style={{ fontSize: '1rem' }}>
709
721
  <Link style={{ cursor: 'pointer' }} onClick={addRecord} underline='hover'>
710
- + Add
722
+ + {localizedVal('Add', localeCategory)}
711
723
  </Link>
712
724
  </div>
713
725
  )}
@@ -57,10 +57,8 @@ export default function SimpleTableSelect(props: SimpleTableSelectProps) {
57
57
 
58
58
  // Need to get this written so typedefs work
59
59
  const { datasource: { parameters: fieldParameters = {} } = {}, pageClass } = isMultiSelectMode
60
- ? // @ts-ignore - Property 'getFieldMetadata' is private and only accessible within class 'C11nEnv'.
61
- pConn.getFieldMetadata(`@P .${referenceProp}`)
62
- : // @ts-ignore - Property 'getCurrentPageFieldMetadata' is private and only accessible within class 'C11nEnv'.
63
- pConn.getCurrentPageFieldMetadata(contextPageReference);
60
+ ? pConn.getFieldMetadata(`@P .${referenceProp}`)
61
+ : pConn.getCurrentPageFieldMetadata(contextPageReference);
64
62
 
65
63
  const compositeKeys: any[] = [];
66
64
  Object.values(fieldParameters).forEach((param: any) => {
@@ -34,6 +34,7 @@
34
34
 
35
35
  .file-error {
36
36
  color: var(--app-error-color);
37
+ font-size: 14px;
37
38
  }
38
39
 
39
40
  .psdk-utility-card {
@@ -33,7 +33,7 @@ const updateAttachmentState = (pConn, key, attachments) => {
33
33
  };
34
34
 
35
35
  export default function Attachment(props: AttachmentProps) {
36
- const { value, getPConnect, label, validatemessage, allowMultiple, extensions, displayMode } = props;
36
+ const { value, getPConnect, label, validatemessage, allowMultiple, extensions, displayMode, helperText } = props;
37
37
  /* this is a temporary fix because required is supposed to be passed as a boolean and NOT as a string */
38
38
  let { required, disabled } = props;
39
39
  [required, disabled] = [required, disabled].map(prop => prop === true || (typeof prop === 'string' && prop === 'true'));
@@ -155,11 +155,9 @@ export default function Attachment(props: AttachmentProps) {
155
155
  const context = pConn.getContextName();
156
156
  // set errors to property to block submit even on errors in file upload
157
157
  PCore.getMessageManager().addMessages({
158
- // @ts-ignore
159
158
  messages: [
160
159
  {
161
160
  type: 'error',
162
- // @ts-ignore - Type '{ type: string; message: string; }' is not assignable to type 'MessagesConfigObject'.
163
161
  message: pConn.getLocalizedValue('Error with one or more files', '', '')
164
162
  }
165
163
  ],
@@ -192,7 +190,6 @@ export default function Attachment(props: AttachmentProps) {
192
190
  const clearFieldErrorMessages = () => {
193
191
  const fieldName = (pConn.getStateProps() as any).value;
194
192
  const context = pConn.getContextName();
195
- // @ts-ignore
196
193
  PCore.getMessageManager().clearMessages({
197
194
  type: PCore.getConstants().MESSAGES.MESSAGES_TYPE_ERROR,
198
195
  property: fieldName,
@@ -231,11 +228,9 @@ export default function Attachment(props: AttachmentProps) {
231
228
  const fieldName = (pConn.getStateProps() as any).value;
232
229
  const context = pConn.getContextName();
233
230
  PCore.getMessageManager().addMessages({
234
- // @ts-ignore
235
231
  messages: [
236
232
  {
237
233
  type: 'error',
238
- // @ts-ignore - Type '{ type: string; message: string; }' is not assignable to type 'MessagesConfigObject'.
239
234
  message: pConn.getLocalizedValue('Error with one or more files', '', '')
240
235
  }
241
236
  ],
@@ -461,7 +456,7 @@ export default function Attachment(props: AttachmentProps) {
461
456
  <div className='file-upload-container'>
462
457
  <span className={`label ${required ? 'file-label' : ''}`}>{label}</span>
463
458
  {((files.length === 0 && allowMultiple !== 'true') || allowMultiple === 'true') && <section>{content}</section>}
464
- {validatemessage !== '' ? <span className='file-error'>{validatemessage}</span> : ''}
459
+ {validatemessage !== '' ? <span className='file-error'>{validatemessage}</span> : <span style={{ fontSize: '14px' }}>{helperText}</span>}
465
460
  {files && files.length > 0 && <section>{fileDisplay}</section>}
466
461
  </div>
467
462
  );
@@ -512,7 +512,7 @@ export default function FileUtility(props: FileUtilityProps) {
512
512
  >
513
513
  <MoreVertIcon />
514
514
  </IconButton>
515
- <Menu style={{ marginTop: '3rem' }} id='simple-menu' anchorEl={anchorEl} keepMounted open={Boolean(anchorEl)} onClose={handleClose}>
515
+ <Menu id='simple-menu' anchorEl={anchorEl} keepMounted open={Boolean(anchorEl)} onClose={handleClose}>
516
516
  <MenuItem style={{ fontSize: '14px' }} onClick={onAddFilesClick}>
517
517
  {thePConn.getLocalizedValue('Add files', '', '')}
518
518
  </MenuItem>{' '}