@pega/react-sdk-overrides 0.25.1 → 0.25.3

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 (144) hide show
  1. package/lib/designSystemExtension/Banner/Banner.css +1 -1
  2. package/lib/designSystemExtension/Banner/Banner.tsx +7 -7
  3. package/lib/designSystemExtension/CaseSummaryFields/CaseSummaryFields.css +0 -1
  4. package/lib/designSystemExtension/CaseSummaryFields/CaseSummaryFields.tsx +52 -36
  5. package/lib/designSystemExtension/DetailsFields/DetailsFields.tsx +11 -13
  6. package/lib/designSystemExtension/FieldGroup/FieldGroup.tsx +8 -9
  7. package/lib/designSystemExtension/FieldGroupList/FieldGroupList.tsx +9 -9
  8. package/lib/designSystemExtension/FieldValueList/FieldValueList.tsx +7 -8
  9. package/lib/designSystemExtension/Operator/Operator.tsx +21 -19
  10. package/lib/designSystemExtension/Pulse/Pulse.tsx +1 -1
  11. package/lib/designSystemExtension/RichTextEditor/RichTextEditor.tsx +28 -3
  12. package/lib/designSystemExtension/WssQuickCreate/WssQuickCreate.css +4 -4
  13. package/lib/designSystemExtension/WssQuickCreate/WssQuickCreate.tsx +1 -1
  14. package/lib/field/AutoComplete/AutoComplete.tsx +1 -1
  15. package/lib/field/CancelAlert/CancelAlert.css +4 -4
  16. package/lib/field/CancelAlert/CancelAlert.tsx +6 -6
  17. package/lib/field/Checkbox/Checkbox.tsx +97 -4
  18. package/lib/field/Currency/Currency.tsx +3 -3
  19. package/lib/field/Currency/currency-utils.ts +1 -2
  20. package/lib/field/Date/Date.tsx +3 -7
  21. package/lib/field/DateTime/DateTime.tsx +3 -8
  22. package/lib/field/Decimal/Decimal.tsx +3 -5
  23. package/lib/field/Dropdown/Dropdown.tsx +5 -7
  24. package/lib/field/Email/Email.tsx +11 -13
  25. package/lib/field/Group/Group.tsx +7 -7
  26. package/lib/field/Integer/Integer.tsx +5 -7
  27. package/lib/field/Location/Location.tsx +256 -0
  28. package/lib/field/Location/config-ext.json +8 -0
  29. package/lib/field/Location/index.tsx +1 -0
  30. package/lib/field/ObjectReference/ObjectReference.tsx +235 -0
  31. package/lib/field/ObjectReference/index.tsx +1 -0
  32. package/lib/field/ObjectReference/utils.ts +111 -0
  33. package/lib/field/Percentage/Percentage.tsx +3 -7
  34. package/lib/field/Phone/Phone.tsx +7 -5
  35. package/lib/field/RadioButtons/RadioButtons.tsx +47 -2
  36. package/lib/field/RichText/RichText.tsx +1 -1
  37. package/lib/field/ScalarList/ScalarList.tsx +2 -3
  38. package/lib/field/SelectableCard/SelectableCard.tsx +175 -0
  39. package/lib/field/SelectableCard/index.tsx +1 -0
  40. package/lib/field/SelectableCard/utils.tsx +226 -0
  41. package/lib/field/SemanticLink/SemanticLink.tsx +160 -28
  42. package/lib/field/SemanticLink/utils.ts +1 -1
  43. package/lib/field/TextArea/TextArea.tsx +5 -7
  44. package/lib/field/TextContent/TextContent.tsx +1 -2
  45. package/lib/field/TextInput/TextInput.tsx +5 -7
  46. package/lib/field/Time/Time.tsx +3 -7
  47. package/lib/field/URL/URL.tsx +5 -7
  48. package/lib/field/UserReference/UserReference.tsx +1 -2
  49. package/lib/helpers/attachmentHelpers.ts +56 -35
  50. package/lib/helpers/common-utils.ts +2 -2
  51. package/lib/helpers/data_page.ts +0 -1
  52. package/lib/helpers/field-group-utils.ts +1 -1
  53. package/lib/helpers/formatters/CurrencyMap.ts +0 -2
  54. package/lib/helpers/simpleTableHelpers.ts +118 -6
  55. package/lib/helpers/utils.ts +8 -1
  56. package/lib/helpers/versionHelpers.ts +0 -1
  57. package/lib/infra/ActionButtons/ActionButtons.tsx +28 -21
  58. package/lib/infra/Assignment/Assignment.tsx +4 -4
  59. package/lib/infra/AssignmentCard/AssignmentCard.tsx +2 -2
  60. package/lib/infra/Containers/FlowContainer/FlowContainer.tsx +15 -94
  61. package/lib/infra/Containers/ModalViewContainer/ListViewActionButtons/ListViewActionButtons.tsx +1 -2
  62. package/lib/infra/Containers/ModalViewContainer/ModalViewContainer.tsx +3 -3
  63. package/lib/infra/Containers/ViewContainer/ViewContainer.tsx +4 -5
  64. package/lib/infra/Containers/container-helpers.ts +47 -1
  65. package/lib/infra/DashboardFilter/DashboardFilter.tsx +2 -4
  66. package/lib/infra/DashboardFilter/filterUtils.tsx +3 -4
  67. package/lib/infra/DeferLoad/DeferLoad.tsx +2 -4
  68. package/lib/infra/ErrorBoundary/ErrorBoundary.tsx +1 -3
  69. package/lib/infra/MultiStep/MultiStep.css +8 -8
  70. package/lib/infra/MultiStep/MultiStep.tsx +2 -2
  71. package/lib/infra/NavBar/NavBar.css +1 -1
  72. package/lib/infra/NavBar/NavBar.tsx +29 -27
  73. package/lib/infra/Reference/Reference.tsx +3 -4
  74. package/lib/infra/Region/Region.tsx +1 -1
  75. package/lib/infra/RootContainer/RootContainer.tsx +2 -3
  76. package/lib/infra/Stages/Stages.tsx +1 -1
  77. package/lib/infra/View/View.tsx +2 -2
  78. package/lib/template/AdvancedSearch/AdvancedSearch.tsx +0 -1
  79. package/lib/template/AdvancedSearch/SearchGroup/persistUtils.ts +3 -9
  80. package/lib/template/AdvancedSearch/SearchGroups/SearchGroups.tsx +3 -4
  81. package/lib/template/AdvancedSearch/SearchGroups/hooks.ts +1 -1
  82. package/lib/template/AppShell/AppShell.css +1 -1
  83. package/lib/template/AppShell/AppShell.tsx +6 -10
  84. package/lib/template/BannerPage/BannerPage.tsx +2 -2
  85. package/lib/template/CaseSummary/CaseSummary.tsx +2 -3
  86. package/lib/template/CaseView/CaseView.tsx +15 -21
  87. package/lib/template/CaseViewActionsMenu/CaseViewActionsMenu.tsx +1 -1
  88. package/lib/template/Confirmation/Confirmation.tsx +2 -3
  89. package/lib/template/DataReference/DataReference.tsx +9 -12
  90. package/lib/template/DataReference/SearchForm.tsx +6 -5
  91. package/lib/template/DataReference/{utils.js → utils.ts} +3 -3
  92. package/lib/template/DefaultForm/DefaultForm.tsx +3 -3
  93. package/lib/template/Details/Details/Details.tsx +11 -11
  94. package/lib/template/Details/DetailsSubTabs/DetailsSubTabs.tsx +2 -2
  95. package/lib/template/Details/DetailsThreeColumn/DetailsThreeColumn.tsx +11 -11
  96. package/lib/template/Details/DetailsTwoColumn/DetailsTwoColumn.tsx +11 -11
  97. package/lib/template/Details/DynamicTabs/DynamicTabs.tsx +1 -1
  98. package/lib/template/FieldGroupTemplate/FieldGroupTemplate.tsx +2 -3
  99. package/lib/template/InlineDashboard/InlineDashboard.tsx +14 -16
  100. package/lib/template/InlineDashboardPage/InlineDashboardPage.tsx +2 -2
  101. package/lib/template/ListPage/ListPage.tsx +1 -1
  102. package/lib/template/ListView/ListView.tsx +10 -22
  103. package/lib/template/ListView/hooks.ts +1 -5
  104. package/lib/template/ListView/utils.ts +1 -1
  105. package/lib/template/MultiReferenceReadOnly/MultiReferenceReadOnly.tsx +1 -1
  106. package/lib/template/NarrowWide/NarrowWide/NarrowWide.tsx +5 -5
  107. package/lib/template/NarrowWide/NarrowWideDetails/NarrowWideDetails.tsx +11 -11
  108. package/lib/template/NarrowWide/NarrowWideForm/NarrowWideForm.tsx +2 -2
  109. package/lib/template/NarrowWide/NarrowWidePage/NarrowWidePage.tsx +2 -2
  110. package/lib/template/OneColumn/OneColumn/OneColumn.tsx +7 -7
  111. package/lib/template/OneColumn/OneColumnPage/OneColumnPage.tsx +1 -1
  112. package/lib/template/OneColumn/OneColumnTab/OneColumnTab.tsx +2 -2
  113. package/lib/template/PromotedFilters/PromotedFilters.tsx +1 -2
  114. package/lib/template/SimpleTable/SimpleTable/SimpleTable.tsx +2 -3
  115. package/lib/template/SimpleTable/SimpleTableManual/SimpleTableManual.tsx +35 -32
  116. package/lib/template/SimpleTable/SimpleTableSelect/SimpleTableSelect.tsx +1 -1
  117. package/lib/template/SingleReferenceReadOnly/SingleReferenceReadOnly.tsx +1 -1
  118. package/lib/template/SubTabs/SubTabs.tsx +2 -2
  119. package/lib/template/TwoColumn/TwoColumn/TwoColumn.tsx +9 -10
  120. package/lib/template/TwoColumn/TwoColumnPage/TwoColumnPage.tsx +1 -1
  121. package/lib/template/TwoColumn/TwoColumnTab/TwoColumnTab.tsx +9 -10
  122. package/lib/template/WideNarrow/WideNarrow/WideNarrow.tsx +5 -5
  123. package/lib/template/WideNarrow/WideNarrowDetails/WideNarrowDetails.tsx +11 -11
  124. package/lib/template/WideNarrow/WideNarrowForm/WideNarrowForm.tsx +2 -2
  125. package/lib/template/WideNarrow/WideNarrowPage/WideNarrowPage.tsx +2 -2
  126. package/lib/template/WssNavBar/WssNavBar.css +1 -1
  127. package/lib/template/WssNavBar/WssNavBar.tsx +5 -5
  128. package/lib/widget/AppAnnouncement/AppAnnouncement.tsx +1 -1
  129. package/lib/widget/Attachment/Attachment.css +6 -8
  130. package/lib/widget/Attachment/Attachment.tsx +62 -58
  131. package/lib/widget/CaseHistory/CaseHistory.tsx +5 -5
  132. package/lib/widget/FileUtility/ActionButtonsForFileUtil/ActionButtonsForFileUtil.css +0 -14
  133. package/lib/widget/FileUtility/ActionButtonsForFileUtil/ActionButtonsForFileUtil.tsx +3 -3
  134. package/lib/widget/FileUtility/FileUtility/FileUtility.css +7 -6
  135. package/lib/widget/FileUtility/FileUtility/FileUtility.tsx +5 -7
  136. package/lib/widget/Followers/Followers.tsx +2 -4
  137. package/lib/widget/QuickCreate/QuickCreate.tsx +1 -2
  138. package/lib/widget/SummaryItem/SummaryItem.css +9 -11
  139. package/lib/widget/SummaryItem/SummaryItem.tsx +2 -2
  140. package/lib/widget/SummaryList/SummaryList.tsx +1 -1
  141. package/lib/widget/ToDo/ToDo.css +1 -13
  142. package/lib/widget/ToDo/ToDo.tsx +26 -26
  143. package/package.json +1 -1
  144. /package/lib/template/DataReference/{DataReferenceAdvancedSearchContext.js → DataReferenceAdvancedSearchContext.ts} +0 -0
@@ -8,7 +8,7 @@ import { IconButton, Menu, MenuItem, Typography, Button } from '@mui/material';
8
8
  import Avatar from '@mui/material/Avatar';
9
9
  import MenuIcon from '@mui/icons-material/Menu';
10
10
  import { logout } from '@pega/auth/lib/sdk-auth-manager';
11
- import { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
11
+ import type { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
12
12
  import './WssNavBar.css';
13
13
 
14
14
  interface WssNavBarProps extends PConnProps {
@@ -17,10 +17,10 @@ interface WssNavBarProps extends PConnProps {
17
17
  navLinks: any[];
18
18
  operator: { currentUserInitials: string };
19
19
  navDisplayOptions: { alignment: string; position: string };
20
- // eslint-disable-next-line react/no-unused-prop-types
20
+
21
21
  portalName: string;
22
22
  imageSrc: string;
23
- // eslint-disable-next-line react/no-unused-prop-types
23
+
24
24
  fullImageSrc: string;
25
25
  appName: any;
26
26
  }
@@ -36,10 +36,10 @@ const useStyles = makeStyles(theme => ({
36
36
  marginRight: theme.spacing(2)
37
37
  },
38
38
  appListLogo: {
39
- width: '3.6rem'
39
+ width: '3.6rem',
40
+ filter: 'var(--svg-color)'
40
41
  },
41
42
  appName: {
42
- color: 'white',
43
43
  marginLeft: theme.spacing(2),
44
44
  marginRight: theme.spacing(4),
45
45
  fontSize: '1.5rem'
@@ -1,6 +1,6 @@
1
1
  import { Card, CardContent, CardHeader, Typography, CardActions, Button } from '@mui/material';
2
2
  import makeStyles from '@mui/styles/makeStyles';
3
- import { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
3
+ import type { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
4
4
 
5
5
  interface AppAnnouncementProps extends PConnProps {
6
6
  // If any, enter additional props that only exist on this component
@@ -42,6 +42,10 @@
42
42
  flex-direction: row;
43
43
  padding: 0.25rem 0rem 0.25rem 0.25rem;
44
44
  margin-bottom: 0.5rem;
45
+ align-items: center;
46
+ border: 0.0625rem solid var(--utility-card-border-color);
47
+ border-radius: calc(0.25rem);
48
+ min-height: 3rem;
45
49
  }
46
50
 
47
51
  .psdk-utility-card-icon {
@@ -54,6 +58,7 @@
54
58
  .psdk-utility-card-svg-icon {
55
59
  width: 2.5rem;
56
60
  display: inline-block;
61
+ filter: var(--svg-color);
57
62
  }
58
63
 
59
64
  .psdk-utility-card-main {
@@ -71,14 +76,7 @@
71
76
  .psdk-utility-card-action-svg-icon {
72
77
  width: 1.4rem;
73
78
  display: inline-block;
74
- }
75
-
76
- .psdk-utility-card {
77
- display: flex;
78
- align-items: center;
79
- border: 0.0625rem solid rgb(207, 207, 207);
80
- border-radius: calc(0.25rem);
81
- min-height: 3rem;
79
+ filter: var(--svg-color);
82
80
  }
83
81
 
84
82
  .psdk-utility-button {
@@ -1,14 +1,11 @@
1
- /* eslint-disable react/jsx-boolean-value */
2
- /* eslint-disable react/no-array-index-key */
3
- /* eslint-disable no-nested-ternary */
4
- import { useState, useEffect, useCallback } from 'react';
1
+ import { useState, useEffect, useCallback, useMemo, useRef } from 'react';
5
2
  import { CircularProgress, IconButton, Menu, MenuItem, Button } from '@mui/material';
6
3
  import MoreVertIcon from '@mui/icons-material/MoreVert';
7
- import download from 'downloadjs';
8
4
 
9
- import { buildFilePropsFromResponse, getIconFromFileType, validateMaxSize } from '@pega/react-sdk-components/lib/components/helpers/attachmentHelpers';
5
+ import { getIconFromFileType, isFileUploadedToServer, useFileDownload, validateMaxSize } from '@pega/react-sdk-components/lib/components/helpers/attachmentHelpers';
6
+
10
7
  import { Utils } from '@pega/react-sdk-components/lib/components/helpers/utils';
11
- import { PConnFieldProps } from '@pega/react-sdk-components/lib/types/PConnProps';
8
+ import type { PConnFieldProps } from '@pega/react-sdk-components/lib/types/PConnProps';
12
9
 
13
10
  import './Attachment.css';
14
11
 
@@ -19,7 +16,9 @@ interface AttachmentProps extends Omit<PConnFieldProps, 'value'> {
19
16
  extensions: string;
20
17
  }
21
18
 
22
- const getAttachmentKey = (name = '') => (name ? `attachmentsList.${name}` : 'attachmentsList');
19
+ const getAttachmentKey = (name, embeddedReference) => {
20
+ return `attachmentsList${embeddedReference}.${name}`;
21
+ };
23
22
 
24
23
  const getCurrentAttachmentsList = (key, context) => {
25
24
  return PCore.getStoreValue(`.${key}`, 'context_data', context) || [];
@@ -38,61 +37,65 @@ export default function Attachment(props: AttachmentProps) {
38
37
  let { required, disabled } = props;
39
38
  [required, disabled] = [required, disabled].map(prop => prop === true || (typeof prop === 'string' && prop === 'true'));
40
39
  const pConn = getPConnect();
40
+
41
+ const actionSequencer = useMemo(() => PCore.getActionsSequencer(), []);
41
42
  const caseID = PCore.getStoreValue('.pyID', 'caseInfo.content', pConn.getContextName());
42
43
  const localizedVal = PCore.getLocaleUtils().getLocaleValue;
43
44
  const localeCategory = 'CosmosFields';
44
45
  const uploadMultipleFilesLabel = localizedVal('file_upload_text_multiple', localeCategory);
45
46
  const uploadSingleFileLabel = localizedVal('file_upload_text_one', localeCategory);
46
- let categoryName = '';
47
- if (value && value.pyCategoryName) {
48
- categoryName = value.pyCategoryName;
49
- }
50
47
  const deleteIcon = Utils.getImageSrc('trash', Utils.getSDKStaticConentUrl());
51
48
  const srcImg = Utils.getImageSrc('document-doc', Utils.getSDKStaticConentUrl());
52
49
  let valueRef = (pConn.getStateProps() as any).value;
53
50
  valueRef = valueRef.indexOf('.') === 0 ? valueRef.substring(1) : valueRef;
54
51
  const [anchorEl, setAnchorEl] = useState(null);
55
52
  const open = Boolean(anchorEl);
56
- const [files, setFiles] = useState<any[]>(() =>
57
- value?.pxResults && +value.pyCount > 0 ? value.pxResults.map(f => buildFilePropsFromResponse(f)) : []
58
- );
53
+
54
+ const rawValue = pConn.getComponentConfig().value;
55
+ const isAttachmentAnnotationPresent = typeof rawValue === 'object' ? false : rawValue?.includes('@ATTACHMENT');
56
+ const { hasUploadedFiles, attachments, categoryName } = isAttachmentAnnotationPresent
57
+ ? value
58
+ : PCore.getAttachmentUtils().prepareAttachmentData(value);
59
+
60
+ const fileInputRef = useRef<HTMLInputElement>(null);
61
+ const [files, setFiles] = useState<any[]>(attachments);
59
62
  const [filesWithError, setFilesWithError] = useState<any[]>([]);
60
63
  const [toggleUploadBegin, setToggleUploadBegin] = useState(false);
61
64
 
65
+ const context = pConn.getContextName();
66
+ const onFileDownload = useFileDownload(context);
67
+
68
+ let embeddedProperty = pConn
69
+ .getPageReference()
70
+ .replace(PCore.getConstants().CASE_INFO.CASE_INFO_CONTENT, '')
71
+ .replace(PCore.getConstants().DATA_INFO.DATA_INFO_CONTENT, '');
72
+
73
+ if (valueRef?.indexOf('.') > 0) {
74
+ embeddedProperty = valueRef.substring(0, valueRef.indexOf('.') + 1);
75
+ }
76
+
62
77
  const resetAttachmentStoredState = () => {
63
- PCore.getStateUtils().updateState(pConn.getContextName(), getAttachmentKey(valueRef), undefined, {
78
+ PCore.getStateUtils().updateState(pConn.getContextName(), getAttachmentKey(valueRef, embeddedProperty), undefined, {
64
79
  pageReference: 'context_data',
65
80
  isArrayDeepMerge: false
66
81
  });
67
82
  };
68
83
 
69
- const fileDownload = (data, fileName, ext) => {
70
- const fileData = ext ? `${fileName}.${ext}` : fileName;
71
- download(atob(data), fileData);
72
- };
73
-
74
- const downloadFile = (fileObj: any) => {
75
- setAnchorEl(null);
76
- PCore.getAttachmentUtils()
77
- // @ts-ignore - 3rd parameter "responseEncoding" should be optional
78
- .downloadAttachment(fileObj.pzInsKey, pConn.getContextName())
79
- .then((content: any) => {
80
- const extension = fileObj.pyAttachName.split('.').pop();
81
- fileDownload(content.data, fileObj.pyFileName, extension);
82
- })
83
- .catch(() => {});
84
- };
85
-
86
84
  const deleteFile = useCallback(
87
85
  file => {
88
86
  setAnchorEl(null);
87
+
88
+ // reset the file input so that it will allow re-uploading the same file after deletion
89
+ if (fileInputRef.current) {
90
+ fileInputRef.current.value = ''; // Reset the input
91
+ }
92
+
89
93
  let attachmentsList: any[] = [];
90
- let currentAttachmentList = getCurrentAttachmentsList(getAttachmentKey(valueRef), pConn.getContextName());
94
+ let currentAttachmentList = getCurrentAttachmentsList(getAttachmentKey(valueRef, embeddedProperty), pConn.getContextName());
91
95
 
92
96
  // If file to be deleted is the one added in previous stage i.e. for which a file instance is created in server
93
97
  // no need to filter currentAttachmentList as we will get another entry of file in redux with delete & label
94
- // eslint-disable-next-line no-unsafe-optional-chaining
95
- if (value && value?.pxResults && +value?.pyCount > 0 && file.responseProps && file?.responseProps?.pzInsKey !== 'temp') {
98
+ if (hasUploadedFiles && isFileUploadedToServer(file)) {
96
99
  const updatedAttachments = files.map(f => {
97
100
  if (f.responseProps && f.responseProps.pzInsKey === file.responseProps.pzInsKey) {
98
101
  return { ...f, delete: true, label: valueRef };
@@ -101,27 +104,25 @@ export default function Attachment(props: AttachmentProps) {
101
104
  });
102
105
 
103
106
  // updating the redux store to help form-handler in passing the data to delete the file from server
104
- updateAttachmentState(pConn, getAttachmentKey(valueRef), [...updatedAttachments]);
107
+ updateAttachmentState(pConn, getAttachmentKey(valueRef, embeddedProperty), [...updatedAttachments]);
105
108
  setFiles(current => {
106
109
  const newlyAddedFiles = current.filter(f => !!f.ID);
107
- const filesPostDelete = current.filter(
108
- f => f.responseProps?.pzInsKey !== 'temp' && f.responseProps?.pzInsKey !== file.responseProps?.pzInsKey
109
- );
110
+ const filesPostDelete = current.filter(f => isFileUploadedToServer(f) && f.responseProps?.ID !== file.responseProps?.ID);
110
111
  attachmentsList = [...filesPostDelete, ...newlyAddedFiles];
111
112
  return attachmentsList;
112
113
  });
113
114
  } // if the file being deleted is the added in this stage i.e. whose data is not yet created in server
114
115
  else {
115
116
  // filter newly added files in this stage, later the updated current stage files will be added to redux once files state is updated in below setFiles()
116
- currentAttachmentList = currentAttachmentList.filter(f => f.label !== valueRef);
117
- setFiles(current => {
118
- attachmentsList = current.filter(f => f.ID !== file.ID);
119
- return attachmentsList;
120
- });
121
- updateAttachmentState(pConn, getAttachmentKey(valueRef), [...currentAttachmentList, ...attachmentsList]);
117
+ currentAttachmentList = currentAttachmentList.filter(f => !f.props.error && (f.delete || f.label !== valueRef));
118
+ setFiles(current => current.filter(f => f.ID !== file.ID));
119
+ updateAttachmentState(pConn, getAttachmentKey(valueRef, embeddedProperty), [...currentAttachmentList, ...attachmentsList]);
122
120
  if (file.inProgress) {
123
- // @ts-ignore - 3rd parameter "responseEncoding" should be optional
121
+ // @ts-expect-error - 3rd parameter "responseEncoding" should be optional
124
122
  PCore.getAttachmentUtils().cancelRequest(file.ID, pConn.getContextName());
123
+ actionSequencer.deRegisterBlockingAction(pConn.getContextName()).catch(error => {
124
+ console.log(error);
125
+ });
125
126
  }
126
127
  }
127
128
 
@@ -130,7 +131,7 @@ export default function Attachment(props: AttachmentProps) {
130
131
  return prevFilesWithError.filter(f => f.ID !== file.ID);
131
132
  });
132
133
  },
133
- [pConn, value, valueRef, filesWithError]
134
+ [valueRef, pConn, hasUploadedFiles, filesWithError, hasUploadedFiles, actionSequencer]
134
135
  );
135
136
 
136
137
  const onUploadProgress = () => {};
@@ -152,7 +153,6 @@ export default function Attachment(props: AttachmentProps) {
152
153
  f.props.name = pConn.getLocalizedValue('Unable to upload file', '', '');
153
154
  f.inProgress = false;
154
155
  const fieldName = (pConn.getStateProps() as any).value;
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
158
  messages: [
@@ -189,7 +189,6 @@ export default function Attachment(props: AttachmentProps) {
189
189
 
190
190
  const clearFieldErrorMessages = () => {
191
191
  const fieldName = (pConn.getStateProps() as any).value;
192
- const context = pConn.getContextName();
193
192
  PCore.getMessageManager().clearMessages({
194
193
  type: PCore.getConstants().MESSAGES.MESSAGES_TYPE_ERROR,
195
194
  property: fieldName,
@@ -226,7 +225,6 @@ export default function Attachment(props: AttachmentProps) {
226
225
  }
227
226
  if (f.props.error) {
228
227
  const fieldName = (pConn.getStateProps() as any).value;
229
- const context = pConn.getContextName();
230
228
  PCore.getMessageManager().addMessages({
231
229
  messages: [
232
230
  {
@@ -301,7 +299,6 @@ export default function Attachment(props: AttachmentProps) {
301
299
  setToggleUploadBegin(false);
302
300
  })
303
301
  .catch(error => {
304
- // eslint-disable-next-line no-console
305
302
  console.log(error);
306
303
  setToggleUploadBegin(false);
307
304
  });
@@ -315,12 +312,12 @@ export default function Attachment(props: AttachmentProps) {
315
312
 
316
313
  useEffect(() => {
317
314
  if (files.length > 0 && displayMode !== 'DISPLAY_ONLY') {
318
- const currentAttachmentList = getCurrentAttachmentsList(getAttachmentKey(valueRef), pConn.getContextName());
315
+ const currentAttachmentList = getCurrentAttachmentsList(getAttachmentKey(valueRef, embeddedProperty), pConn.getContextName());
319
316
  // block duplicate files to redux store when added 1 after another to prevent multiple duplicates being added to the case on submit
320
317
  const tempFiles = files.filter(f => currentAttachmentList.findIndex(fr => fr.ID === f.ID) === -1 && !f.inProgress && f.responseProps);
321
318
 
322
319
  const updatedAttList = [...currentAttachmentList, ...tempFiles];
323
- updateAttachmentState(pConn, getAttachmentKey(valueRef), updatedAttList);
320
+ updateAttachmentState(pConn, getAttachmentKey(valueRef, embeddedProperty), updatedAttList);
324
321
  }
325
322
  }, [files]);
326
323
 
@@ -331,7 +328,7 @@ export default function Attachment(props: AttachmentProps) {
331
328
  }, [filesWithError]);
332
329
 
333
330
  useEffect(() => {
334
- let tempUploadedFiles = getCurrentAttachmentsList(getAttachmentKey(valueRef), pConn.getContextName());
331
+ let tempUploadedFiles = getCurrentAttachmentsList(getAttachmentKey(valueRef, embeddedProperty), pConn.getContextName());
335
332
  tempUploadedFiles = tempUploadedFiles.filter(f => f.label === valueRef);
336
333
  setFiles(current => {
337
334
  return [
@@ -349,9 +346,13 @@ export default function Attachment(props: AttachmentProps) {
349
346
  ...tempUploadedFiles
350
347
  ];
351
348
  });
352
- PCore.getPubSubUtils().subscribe(PCore.getConstants().PUB_SUB_EVENTS.CASE_EVENTS.ASSIGNMENT_SUBMISSION, resetAttachmentStoredState, caseID);
349
+ if (displayMode !== 'DISPLAY_ONLY') {
350
+ PCore.getPubSubUtils().subscribe(PCore.getConstants().PUB_SUB_EVENTS.CASE_EVENTS.ASSIGNMENT_SUBMISSION, resetAttachmentStoredState, caseID);
351
+ }
353
352
  return () => {
354
- PCore.getPubSubUtils().unsubscribe(PCore.getConstants().PUB_SUB_EVENTS.CASE_EVENTS.ASSIGNMENT_SUBMISSION, caseID);
353
+ if (displayMode !== 'DISPLAY_ONLY') {
354
+ PCore.getPubSubUtils().unsubscribe(PCore.getConstants().PUB_SUB_EVENTS.CASE_EVENTS.ASSIGNMENT_SUBMISSION, caseID);
355
+ }
355
356
  };
356
357
  }, []);
357
358
 
@@ -435,7 +436,10 @@ export default function Attachment(props: AttachmentProps) {
435
436
  <MenuItem
436
437
  style={{ fontSize: '14px' }}
437
438
  key='download'
438
- onClick={() => downloadFile(item.responseProps ? item.responseProps : {})}
439
+ onClick={() => {
440
+ setAnchorEl(null);
441
+ onFileDownload(item.responseProps ? item.responseProps : {});
442
+ }}
439
443
  >
440
444
  Download
441
445
  </MenuItem>
@@ -1,5 +1,5 @@
1
1
  import { useEffect, useRef, useState } from 'react';
2
- import { Theme } from '@mui/material/styles';
2
+ import type { Theme } from '@mui/material/styles';
3
3
  import withStyles from '@mui/styles/withStyles';
4
4
  import createStyles from '@mui/styles/createStyles';
5
5
  import Table from '@mui/material/Table';
@@ -11,7 +11,7 @@ import TableRow from '@mui/material/TableRow';
11
11
  import isDeepEqual from 'fast-deep-equal/react';
12
12
 
13
13
  import { Utils } from '@pega/react-sdk-components/lib/components/helpers/utils';
14
- import { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
14
+ import type { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
15
15
 
16
16
  interface CaseHistoryProps extends PConnProps {
17
17
  // If any, enter additional props that only exist on this component
@@ -66,8 +66,8 @@ export default function CaseHistory(props: CaseHistoryProps) {
66
66
  const dataViewName = 'D_pyWorkHistory';
67
67
  const context = thePConn.getContextName();
68
68
 
69
- function computeRowData(rows: Object[]): void {
70
- const theRowData: Object[] = [];
69
+ function computeRowData(rows: object[]): void {
70
+ const theRowData: object[] = [];
71
71
 
72
72
  rows.forEach((row: any, rowIndex: number) => {
73
73
  // Now, for each property in the index of row properties (displayedColumns), add an object
@@ -142,7 +142,7 @@ export default function CaseHistory(props: CaseHistoryProps) {
142
142
  // Note: using rowData.current since we're using useRef as a mutatable
143
143
  // value that's only updated when it changes.
144
144
  if (rowData.current.length > 0) {
145
- rowData.current.forEach((dataRow: Object[], index) => {
145
+ rowData.current.forEach((dataRow: object[], index) => {
146
146
  // using dataRow[0]-dataRow[1] as the array key since it's a unique value
147
147
  const theKey = `CaseHistory-${index}`;
148
148
  theDataRows.push(
@@ -11,17 +11,3 @@
11
11
  justify-content: center;
12
12
  display: flex;
13
13
  }
14
-
15
- .primary-button {
16
- background-color: #3f51b5 !important;
17
- color: white !important;
18
- padding: 6px 14px !important;
19
- text-transform: unset !important;
20
- font-size: 14px;
21
- }
22
-
23
- .secondary-button {
24
- box-shadow: 0px 5px 10px 0px rgb(0 0 0 / 20%);
25
- text-transform: unset !important;
26
- padding: 6px 14px !important;
27
- }
@@ -1,5 +1,5 @@
1
1
  import { Button } from '@mui/material';
2
- import { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
2
+ import type { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
3
3
  import './ActionButtonsForFileUtil.css';
4
4
 
5
5
  interface ActionButtonsForFileUtilProps extends PConnProps {
@@ -15,14 +15,14 @@ export default function ActionButtonsForFileUtil(props: ActionButtonsForFileUtil
15
15
  <div className='psdk-actions'>
16
16
  <div className='psdk-action-buttons'>
17
17
  {props.arSecondaryButtons.map(file => (
18
- <Button className='secondary-button' key={file.actionID} onClick={props.secondaryAction}>
18
+ <Button className='secondary-button' color='secondary' variant='contained' key={file.actionID} onClick={props.secondaryAction}>
19
19
  {file.name}
20
20
  </Button>
21
21
  ))}
22
22
  </div>
23
23
  <div className='psdk-action-buttons'>
24
24
  {props.arMainButtons.map(file => (
25
- <Button className='primary-button' key={file.actionID} onClick={props.primaryAction}>
25
+ <Button className='primary-button' color='primary' variant='contained' key={file.actionID} onClick={props.primaryAction}>
26
26
  {file.name}
27
27
  </Button>
28
28
  ))}
@@ -2,7 +2,7 @@
2
2
  width: 100%;
3
3
  padding: 0.625rem 0rem;
4
4
  text-align: left;
5
- background-color: white;
5
+ /* background-color: var(--utility-background-color); */
6
6
  border-radius: 0.6125rem;
7
7
  margin: 0.3125rem 0rem;
8
8
  position: relative;
@@ -16,6 +16,7 @@
16
16
  .psdk-file-utility-card-svg-icon {
17
17
  width: 1.4rem;
18
18
  display: inline-block;
19
+ filter: var(--svg-color);
19
20
  }
20
21
 
21
22
  .header-text {
@@ -25,7 +26,7 @@
25
26
  }
26
27
 
27
28
  .psdk-utility-count {
28
- background: #65b5f5;
29
+ background: var(--utility-count-background-color);
29
30
  border-radius: calc(1.125 * 0.5rem);
30
31
  font-size: 0.75rem;
31
32
  font-weight: bold;
@@ -40,7 +41,7 @@
40
41
  align-items: center;
41
42
  height: 100%;
42
43
  width: 100%;
43
- background-color: rgba(100, 100, 100, 0.4);
44
+ background-color: var(--modal-background-color);
44
45
  position: fixed;
45
46
  z-index: 999;
46
47
  top: 0px;
@@ -51,11 +52,11 @@
51
52
  display: table;
52
53
  margin: auto;
53
54
  min-width: 650px;
54
- background-color: white;
55
- border: 1px solid black;
55
+ background-color: var(--modal-top-color);
56
+ border: 1px solid var(--modal-border-color);
56
57
  border-radius: 10px;
57
58
  padding: 20px;
58
- box-shadow: 0 0 10px 3px #777;
59
+ box-shadow: 0 0 10px 3px var(--modal-box-shadow-color);
59
60
  }
60
61
 
61
62
  .psdk-modal-file-selector {
@@ -7,12 +7,12 @@ import download from 'downloadjs';
7
7
  // import SummaryList from '../../SummaryList';
8
8
  // import ActionButtonsForFileUtil from '../ActionButtonsForFileUtil';
9
9
  import './FileUtility.css';
10
- import { IconButton, Menu, MenuItem, Button, CircularProgress } from '@mui/material';
10
+ import { IconButton, Menu, MenuItem, Button, CircularProgress, Card } from '@mui/material';
11
11
  import MoreVertIcon from '@mui/icons-material/MoreVert';
12
12
 
13
13
  import { validateMaxSize } from '@pega/react-sdk-components/lib/components/helpers/attachmentHelpers';
14
14
  import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map';
15
- import { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
15
+ import type { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
16
16
 
17
17
  interface FileUtilityProps extends PConnProps {
18
18
  // If any, enter additional props that only exist on this component
@@ -179,7 +179,7 @@ export default function FileUtility(props: FileUtilityProps) {
179
179
  const context = thePConn.getContextName();
180
180
 
181
181
  attachUtils
182
- // @ts-ignore - 3rd parameter "responseEncoding" is optional
182
+ // @ts-expect-error - 3rd parameter "responseEncoding" is optional
183
183
  .downloadAttachment(ID, context)
184
184
  .then((content: any) => {
185
185
  if (type === 'FILE') {
@@ -203,7 +203,6 @@ export default function FileUtility(props: FileUtilityProps) {
203
203
  attachUtils
204
204
  .deleteAttachment(ID, context)
205
205
  .then(() => {
206
- // eslint-disable-next-line @typescript-eslint/no-use-before-define
207
206
  getAttachments();
208
207
  })
209
208
  .catch();
@@ -488,7 +487,7 @@ export default function FileUtility(props: FileUtilityProps) {
488
487
  }
489
488
 
490
489
  return (
491
- <div className='psdk-utility' id='file-utility'>
490
+ <Card className='psdk-utility' id='file-utility'>
492
491
  {inProgress && (
493
492
  <div className='progress-div'>
494
493
  <CircularProgress />
@@ -630,7 +629,6 @@ export default function FileUtility(props: FileUtilityProps) {
630
629
  <div className='psdk-modal-file-top'>
631
630
  <div className='psdk-view-all-header'>
632
631
  <h3>{thePConn.getLocalizedValue('Attachments', '', '')}</h3> {/* 2nd and 3rd args empty string until typedef marked correctly */}
633
- {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}
634
632
  <button type='button' className='psdk-close-button' onClick={() => setViewAll(false)}>
635
633
  <img className='psdk-utility-card-actions-svg-icon' src={closeSvgIcon} />
636
634
  </button>
@@ -641,6 +639,6 @@ export default function FileUtility(props: FileUtilityProps) {
641
639
  </div>
642
640
  </div>
643
641
  )}
644
- </div>
642
+ </Card>
645
643
  );
646
644
  }
@@ -1,7 +1,7 @@
1
- import { PropsWithChildren } from 'react';
1
+ import type { PropsWithChildren } from 'react';
2
2
  import { Card, CardContent, CardHeader, Typography } from '@mui/material';
3
3
  import makeStyles from '@mui/styles/makeStyles';
4
- import { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
4
+ import type { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
5
5
 
6
6
  interface FollowersProps extends PConnProps {
7
7
  // If any, enter additional props that only exist on this component
@@ -17,8 +17,6 @@ const useStyles = makeStyles(theme => ({
17
17
  marginLeft: theme.spacing(1),
18
18
  marginTop: theme.spacing(1),
19
19
  marginBottom: theme.spacing(1)
20
- // borderLeft: "6px solid",
21
- // borderLeftColor: green[300]
22
20
  }
23
21
  }));
24
22
 
@@ -1,7 +1,7 @@
1
1
  import { useEffect, useState } from 'react';
2
2
  import { Utils } from '@pega/react-sdk-components/lib/components/helpers/utils';
3
3
  import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map';
4
- import { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
4
+ import type { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
5
5
 
6
6
  interface QuickCreateProps extends PConnProps {
7
7
  // If any, enter additional props that only exist on this component
@@ -21,7 +21,6 @@ export default function QuickCreate(props: QuickCreateProps) {
21
21
  .getActionsApi()
22
22
  .createWork(className, {} as any)
23
23
  .catch(error => {
24
- // eslint-disable-next-line no-console
25
24
  console.log('Error in case creation: ', error?.message);
26
25
  });
27
26
  };
@@ -11,6 +11,10 @@
11
11
  flex-direction: row;
12
12
  padding: 0.25rem 0rem 0.25rem 0.25rem;
13
13
  margin-bottom: 0.5rem;
14
+ align-items: center;
15
+ border: 0.0625rem solid var(--utility-card-border-color);
16
+ border-radius: calc(0.25rem);
17
+ min-height: 3rem;
14
18
  }
15
19
 
16
20
  .psdk-utility-card-icon {
@@ -23,6 +27,7 @@
23
27
  .psdk-utility-card-svg-icon {
24
28
  width: 2.5rem;
25
29
  display: inline-block;
30
+ filter: var(--svg-color);
26
31
  }
27
32
 
28
33
  .psdk-utility-card-main {
@@ -40,14 +45,7 @@
40
45
  .psdk-utility-card-action-svg-icon {
41
46
  width: 1.4rem;
42
47
  display: inline-block;
43
- }
44
-
45
- .psdk-utility-card {
46
- display: flex;
47
- align-items: center;
48
- border: 0.0625rem solid rgb(207, 207, 207);
49
- border-radius: calc(0.25rem);
50
- min-height: 3rem;
48
+ filter: var(--svg-color);
51
49
  }
52
50
 
53
51
  .psdk-utility-button {
@@ -65,14 +63,14 @@
65
63
  width: 1.4rem;
66
64
  display: inline-block;
67
65
  vertical-align: middle;
68
- filter: invert(28%) sepia(20%) saturate(3903%) hue-rotate(209deg) brightness(101%) contrast(87%);
66
+ filter: var(--svg-color);
69
67
  }
70
68
 
71
- .psdk-link-button {
69
+ .psdk-utility-link-button {
72
70
  background: none;
73
71
  border: none;
74
72
  align-items: center;
75
73
  display: flex;
76
74
  padding: 0;
77
- color: #3f51b5;
75
+ color: var(--link-button-color);
78
76
  }
@@ -2,7 +2,7 @@ import { useState } from 'react';
2
2
  import { IconButton, Menu, MenuItem } from '@mui/material';
3
3
  import MoreVertIcon from '@mui/icons-material/MoreVert';
4
4
  import { Utils } from '@pega/react-sdk-components/lib/components/helpers/utils';
5
- import { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
5
+ import type { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
6
6
 
7
7
  import './SummaryItem.css';
8
8
 
@@ -47,7 +47,7 @@ export default function SummaryItem(props: SummaryItemProps) {
47
47
  {item.primary.type !== 'URL' && <div className='psdk-utility-card-main-primary-label'>{item.primary.name}</div>}
48
48
  {item.primary.type === 'URL' && (
49
49
  <div className='psdk-utility-card-main-primary-url'>
50
- <button type='button' className='psdk-link-button'>
50
+ <button type='button' className='psdk-utility-link-button'>
51
51
  {item.primary.name}&nbsp;
52
52
  <img className='psdk-utility-card-actions-svg-icon' src={`${imagePath$}${item.primary.icon}.svg`} />
53
53
  </button>
@@ -1,5 +1,5 @@
1
1
  import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map';
2
- import { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
2
+ import type { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
3
3
 
4
4
  interface SummaryListProps extends PConnProps {
5
5
  // If any, enter additional props that only exist on this component
@@ -41,7 +41,7 @@
41
41
  text-align: center;
42
42
  display: flex;
43
43
  background: var(--app-primary-color);
44
- color: white;
44
+ color: var(--app-text-color);
45
45
  font-weight: bold;
46
46
  font-size: 1.25rem;
47
47
  }
@@ -56,18 +56,6 @@
56
56
  display: inline-flex;
57
57
  }
58
58
 
59
- .psdk-todo-assignment-status {
60
- background-color: var(--app-neutral-light-color);
61
- border-radius: 0.125rem;
62
- color: darkslategray;
63
- font-size: 0.75rem;
64
- font-weight: bold;
65
- line-height: calc(0.5rem * 2.5);
66
- height: calc(0.5rem * 2.5);
67
- padding: 0 0.5rem;
68
- text-transform: uppercase;
69
- }
70
-
71
59
  .psdk-todo-assignment-task {
72
60
  color: var(--app-neutral-color);
73
61
  }