@pega/dx-component-builder-sdk 23.1.12 → 23.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/package.json +1 -1
- package/src/tasks/create/templates/SDK-React/field/Boolean/index.tsx.mustache +3 -2
- package/src/tasks/create/templates/SDK-React/field/DateTime/demo.stories.tsx.mustache +8 -1
- package/src/tasks/create/templates/SDK-React/field/Decimal/index.tsx.mustache +3 -9
- package/src/tasks/create/templates/SDK-React/field/Decimal-Currency/index.tsx.mustache +7 -15
- package/src/tasks/create/templates/SDK-React/field/Decimal-Percentage/demo.stories.tsx.mustache +20 -0
- package/src/tasks/create/templates/SDK-React/field/Decimal-Percentage/index.tsx.mustache +38 -37
- package/src/tasks/create/templates/SDK-React/widget/CASE/index.tsx.mustache +3 -3
- package/src/tasks/create/templates/SDK-React/widget/PAGE-CASE/demo.stories.tsx.mustache +7 -0
- package/src/tasks/create/templates/SDK-React/widget/PAGE-CASE/index.tsx.mustache +5 -3
- package/src/tasks/map/map.js +29 -8
- package/src/tasks/publish/index.js +3 -1
- package/src/tasks/publish-all/index.js +7 -5
- package/tests/assets/sdk-a/components/create/override-sdk/template/list-view/utils.ts +4 -2
- package/tests/assets/sdk-a/components/createAll/override-sdk/template/list-view/utils.ts +4 -2
- package/tests/assets/sdk-r/components/create/override-sdk/designSystemExtension/Operator/Operator.tsx +5 -3
- package/tests/assets/sdk-r/components/create/override-sdk/field/CancelAlert/CancelAlert.tsx +95 -78
- package/tests/assets/sdk-r/components/create/override-sdk/field/Checkbox/Checkbox.tsx +3 -1
- package/tests/assets/sdk-r/components/create/override-sdk/field/Currency/Currency.tsx +10 -16
- package/tests/assets/sdk-r/components/create/override-sdk/field/Decimal/Decimal.tsx +6 -10
- package/tests/assets/sdk-r/components/create/override-sdk/field/Group/Group.tsx +2 -0
- package/tests/assets/sdk-r/components/create/override-sdk/field/Percentage/Percentage.tsx +41 -36
- package/tests/assets/sdk-r/components/create/override-sdk/infra/Assignment/Assignment.tsx +21 -7
- package/tests/assets/sdk-r/components/create/override-sdk/infra/NavBar/NavBar.tsx +5 -3
- package/tests/assets/sdk-r/components/create/override-sdk/template/CaseSummary/CaseSummary.tsx +43 -1
- package/tests/assets/sdk-r/components/create/override-sdk/template/CaseView/CaseView.tsx +1 -1
- package/tests/assets/sdk-r/components/create/override-sdk/template/CaseViewActionsMenu/CaseViewActionsMenu.tsx +34 -1
- package/tests/assets/sdk-r/components/create/override-sdk/template/ListView/ListView.tsx +2 -1
- package/tests/assets/sdk-r/components/create/override-sdk/template/ListView/utils.ts +3 -1
- package/tests/assets/sdk-r/components/create/override-sdk/template/SimpleTableManual/SimpleTableManual.tsx +28 -12
- package/tests/assets/sdk-r/components/create/override-sdk/template/WideNarrow/WideNarrow.tsx +1 -1
- package/tests/assets/sdk-r/components/create/override-sdk/template/WssNavBar/WssNavBar.tsx +4 -1
- package/tests/assets/sdk-r/components/create/override-sdk/widget/Attachment/Attachment.tsx +12 -2
- package/tests/assets/sdk-r/components/create/override-sdk/widget/QuickCreate/QuickCreate.tsx +52 -25
- package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyBoolean/index.tsx +3 -2
- package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyCurrency/index.tsx +7 -15
- package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyDateTime/demo.stories.tsx +8 -1
- package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyDecimal/index.tsx +3 -9
- package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyPercentage/demo.stories.tsx +20 -0
- package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyPercentage/index.tsx +38 -37
- package/tests/assets/sdk-r/components/createAll/custom-sdk/widget/Pega_DXIL_MyCaseWidget/index.tsx +3 -3
- package/tests/assets/sdk-r/components/createAll/custom-sdk/widget/Pega_DXIL_MyPageCaseWidget/demo.stories.tsx +7 -0
- package/tests/assets/sdk-r/components/createAll/custom-sdk/widget/Pega_DXIL_MyPageCaseWidget/index.tsx +5 -3
- package/tests/assets/sdk-r/components/createAll/override-sdk/designSystemExtension/Operator/Operator.tsx +5 -3
- package/tests/assets/sdk-r/components/createAll/override-sdk/field/CancelAlert/CancelAlert.tsx +95 -78
- package/tests/assets/sdk-r/components/createAll/override-sdk/field/Checkbox/Checkbox.tsx +3 -1
- package/tests/assets/sdk-r/components/createAll/override-sdk/field/Currency/Currency.tsx +10 -16
- package/tests/assets/sdk-r/components/createAll/override-sdk/field/Decimal/Decimal.tsx +6 -10
- package/tests/assets/sdk-r/components/createAll/override-sdk/field/Group/Group.tsx +2 -0
- package/tests/assets/sdk-r/components/createAll/override-sdk/field/Percentage/Percentage.tsx +41 -36
- package/tests/assets/sdk-r/components/createAll/override-sdk/infra/Assignment/Assignment.tsx +21 -7
- package/tests/assets/sdk-r/components/createAll/override-sdk/infra/NavBar/NavBar.tsx +5 -3
- package/tests/assets/sdk-r/components/createAll/override-sdk/template/CaseSummary/CaseSummary.tsx +43 -1
- package/tests/assets/sdk-r/components/createAll/override-sdk/template/CaseView/CaseView.tsx +1 -1
- package/tests/assets/sdk-r/components/createAll/override-sdk/template/CaseViewActionsMenu/CaseViewActionsMenu.tsx +34 -1
- package/tests/assets/sdk-r/components/createAll/override-sdk/template/ListView/ListView.tsx +2 -1
- package/tests/assets/sdk-r/components/createAll/override-sdk/template/ListView/utils.ts +3 -1
- package/tests/assets/sdk-r/components/createAll/override-sdk/template/SimpleTableManual/SimpleTableManual.tsx +28 -12
- package/tests/assets/sdk-r/components/createAll/override-sdk/template/WideNarrow/WideNarrow.tsx +1 -1
- package/tests/assets/sdk-r/components/createAll/override-sdk/template/WssNavBar/WssNavBar.tsx +4 -1
- package/tests/assets/sdk-r/components/createAll/override-sdk/widget/Attachment/Attachment.tsx +12 -2
- package/tests/assets/sdk-r/components/createAll/override-sdk/widget/QuickCreate/QuickCreate.tsx +52 -25
- package/tests/assets/sdk-r/components/createAll/custom-constellation/field/Pega_DXIL_MyTestText/PConnProps.d.ts +0 -46
- package/tests/assets/sdk-r/components/createAll/custom-constellation/field/Pega_DXIL_MyTestText/demo.stories.tsx +0 -54
- package/tests/assets/sdk-r/components/createAll/custom-constellation/field/Pega_DXIL_MyTestText/index.tsx +0 -73
- package/tests/assets/sdk-r/components/createAll/custom-constellation/field/Pega_DXIL_MyTestText/mock.ts +0 -15
- package/tests/assets/sdk-r/components/createAll/custom-constellation/field/Pega_DXIL_MyTestText/styles.ts +0 -15
- package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyTestText/config.json +0 -83
- package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyTestText/demo.stories.tsx +0 -59
- package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyTestText/index.tsx +0 -101
- package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyTestText/mock.ts +0 -16
- package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyTestText/styles.js +0 -7
- /package/src/tasks/create/templates/Constellation/field/Boolean/{demo.stories.jsx.mustache → demo.stories.tsx.mustache} +0 -0
- /package/tests/assets/sdk-r/components/createAll/custom-constellation/field/Pega_DXIL_MyBoolean/{demo.stories.jsx → demo.stories.tsx} +0 -0
|
@@ -4,6 +4,9 @@ import Menu from '@material-ui/core/Menu';
|
|
|
4
4
|
import MenuItem from '@material-ui/core/MenuItem';
|
|
5
5
|
|
|
6
6
|
import { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
|
|
7
|
+
import Snackbar from '@material-ui/core/Snackbar';
|
|
8
|
+
import IconButton from '@material-ui/core/IconButton';
|
|
9
|
+
import CloseIcon from '@material-ui/icons/Close';
|
|
7
10
|
|
|
8
11
|
interface CaseViewActionsMenuProps extends PConnProps {
|
|
9
12
|
// If any, enter additional props that only exist on this component
|
|
@@ -23,6 +26,9 @@ export default function CaseViewActionsMenu(props: CaseViewActionsMenuProps) {
|
|
|
23
26
|
|
|
24
27
|
const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);
|
|
25
28
|
|
|
29
|
+
const [showSnackbar, setShowSnackbar] = useState(false);
|
|
30
|
+
const [snackbarMessage, setSnackbarMessage]: any = useState('');
|
|
31
|
+
|
|
26
32
|
const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {
|
|
27
33
|
setAnchorEl(event.currentTarget);
|
|
28
34
|
};
|
|
@@ -33,6 +39,18 @@ export default function CaseViewActionsMenu(props: CaseViewActionsMenuProps) {
|
|
|
33
39
|
|
|
34
40
|
const arMenuItems: any[] = [];
|
|
35
41
|
|
|
42
|
+
function showToast(message: string) {
|
|
43
|
+
setSnackbarMessage(message);
|
|
44
|
+
setShowSnackbar(true);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function handleSnackbarClose(event: React.SyntheticEvent | React.MouseEvent, reason?: string) {
|
|
48
|
+
if (reason === 'clickaway') {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
setShowSnackbar(false);
|
|
52
|
+
}
|
|
53
|
+
|
|
36
54
|
function _actionMenuActionsClick(data) {
|
|
37
55
|
const actionsAPI = thePConn.getActionsApi();
|
|
38
56
|
const openLocalAction = actionsAPI.openLocalAction.bind(actionsAPI);
|
|
@@ -51,7 +69,11 @@ export default function CaseViewActionsMenu(props: CaseViewActionsMenuProps) {
|
|
|
51
69
|
const openProcessAction = actionsAPI.openProcessAction.bind(actionsAPI);
|
|
52
70
|
openProcessAction(process.ID, {
|
|
53
71
|
...process
|
|
54
|
-
})
|
|
72
|
+
})
|
|
73
|
+
.then(() => {})
|
|
74
|
+
.catch(() => {
|
|
75
|
+
showToast(`${process.name} Submit failed!`);
|
|
76
|
+
});
|
|
55
77
|
handleClose();
|
|
56
78
|
}
|
|
57
79
|
|
|
@@ -79,6 +101,17 @@ export default function CaseViewActionsMenu(props: CaseViewActionsMenuProps) {
|
|
|
79
101
|
<Menu id='simple-menu' anchorEl={anchorEl} keepMounted open={Boolean(anchorEl)} onClose={handleClose}>
|
|
80
102
|
{arMenuItems}
|
|
81
103
|
</Menu>
|
|
104
|
+
<Snackbar
|
|
105
|
+
open={showSnackbar}
|
|
106
|
+
autoHideDuration={3000}
|
|
107
|
+
onClose={handleSnackbarClose}
|
|
108
|
+
message={snackbarMessage}
|
|
109
|
+
action={
|
|
110
|
+
<IconButton size='small' aria-label='close' color='inherit' onClick={handleSnackbarClose}>
|
|
111
|
+
<CloseIcon fontSize='small' />
|
|
112
|
+
</IconButton>
|
|
113
|
+
}
|
|
114
|
+
/>
|
|
82
115
|
</>
|
|
83
116
|
);
|
|
84
117
|
}
|
|
@@ -154,7 +154,8 @@ export default function ListView(props: ListViewProps) {
|
|
|
154
154
|
paper: {
|
|
155
155
|
width: '100%',
|
|
156
156
|
marginTop: theme.spacing(2),
|
|
157
|
-
marginBottom: theme.spacing(2)
|
|
157
|
+
marginBottom: theme.spacing(2),
|
|
158
|
+
display: 'grid'
|
|
158
159
|
},
|
|
159
160
|
search: {
|
|
160
161
|
padding: '5px 5px'
|
|
@@ -680,7 +680,9 @@ export const readContextResponse = async (context, params) => {
|
|
|
680
680
|
if (compositeKeys.length) {
|
|
681
681
|
otherContext.setCompositeKeys(compositeKeys);
|
|
682
682
|
}
|
|
683
|
-
otherContext
|
|
683
|
+
if (otherContext) {
|
|
684
|
+
otherContext.fetchRowActionDetails = null;
|
|
685
|
+
}
|
|
684
686
|
}
|
|
685
687
|
|
|
686
688
|
const presetArray = [];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable no-nested-ternary */
|
|
2
|
-
import React, { PropsWithChildren, useEffect, useRef, useState } from 'react';
|
|
2
|
+
import React, { PropsWithChildren, useEffect, useLayoutEffect, useRef, useState } from 'react';
|
|
3
3
|
import Table from '@material-ui/core/Table';
|
|
4
4
|
import TableBody from '@material-ui/core/TableBody';
|
|
5
5
|
import TableCell from '@material-ui/core/TableCell';
|
|
@@ -141,7 +141,6 @@ export default function SimpleTableManual(props: PropsWithChildren<SimpleTableMa
|
|
|
141
141
|
// Getting current context
|
|
142
142
|
const context = getPConnect().getContextName();
|
|
143
143
|
const resolvedList = getReferenceList(pConn);
|
|
144
|
-
const pageReference = `${pConn.getPageReference()}${resolvedList}`;
|
|
145
144
|
pConn.setReferenceList(resolvedList);
|
|
146
145
|
const menuIconOverride$ = Utils.getImageSrc('trash', Utils.getSDKStaticConentUrl());
|
|
147
146
|
|
|
@@ -198,6 +197,20 @@ export default function SimpleTableManual(props: PropsWithChildren<SimpleTableMa
|
|
|
198
197
|
// Constellation DX Components.
|
|
199
198
|
const fieldDefs = buildFieldsForTable(rawFields, resolvedFields, showDeleteButton);
|
|
200
199
|
|
|
200
|
+
useLayoutEffect(() => {
|
|
201
|
+
if (allowEditingInModal) {
|
|
202
|
+
getPConnect()
|
|
203
|
+
.getListActions()
|
|
204
|
+
.initDefaultPageInstructions(
|
|
205
|
+
getPConnect().getReferenceList(),
|
|
206
|
+
fieldDefs.filter(item => item.name).map(item => item.name)
|
|
207
|
+
);
|
|
208
|
+
} else {
|
|
209
|
+
// @ts-ignore - An argument for 'fields' was not provided
|
|
210
|
+
getPConnect().getListActions().initDefaultPageInstructions(getPConnect().getReferenceList());
|
|
211
|
+
}
|
|
212
|
+
}, []);
|
|
213
|
+
|
|
201
214
|
const displayedColumns = fieldDefs.map(field => {
|
|
202
215
|
return field.name ? field.name : field.cellRenderer;
|
|
203
216
|
});
|
|
@@ -288,11 +301,13 @@ export default function SimpleTableManual(props: PropsWithChildren<SimpleTableMa
|
|
|
288
301
|
pConn
|
|
289
302
|
.getActionsApi()
|
|
290
303
|
.openEmbeddedDataModal(defaultView, pConn, referenceListStr, referenceList.length, PCore.getConstants().RESOURCE_STATUS.CREATE);
|
|
291
|
-
} else if (PCore.getPCoreVersion()?.includes('8.7')) {
|
|
292
|
-
pConn.getListActions().insert({ classID: contextClass }, referenceList.length, pageReference);
|
|
293
304
|
} else {
|
|
294
|
-
pConn.getListActions().insert({ classID: contextClass }, referenceList.length
|
|
305
|
+
pConn.getListActions().insert({ classID: contextClass }, referenceList.length);
|
|
295
306
|
}
|
|
307
|
+
|
|
308
|
+
getPConnect().clearErrorMessages({
|
|
309
|
+
property: (getPConnect().getStateProps() as any)?.referenceList?.substring(1)
|
|
310
|
+
} as any);
|
|
296
311
|
};
|
|
297
312
|
|
|
298
313
|
const editRecord = () => {
|
|
@@ -312,11 +327,11 @@ export default function SimpleTableManual(props: PropsWithChildren<SimpleTableMa
|
|
|
312
327
|
|
|
313
328
|
const deleteRecord = () => {
|
|
314
329
|
setEditAnchorEl(null);
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
330
|
+
pConn.getListActions().deleteEntry(selectedRowIndex.current);
|
|
331
|
+
};
|
|
332
|
+
|
|
333
|
+
const deleteRecordFromInlineEditable = (index: number) => {
|
|
334
|
+
pConn.getListActions().deleteEntry(index);
|
|
320
335
|
};
|
|
321
336
|
|
|
322
337
|
function buildElementsForTable() {
|
|
@@ -616,7 +631,7 @@ export default function SimpleTableManual(props: PropsWithChildren<SimpleTableMa
|
|
|
616
631
|
className='psdk-utility-button'
|
|
617
632
|
id='delete-button'
|
|
618
633
|
aria-label='Delete Cell'
|
|
619
|
-
onClick={() =>
|
|
634
|
+
onClick={() => deleteRecordFromInlineEditable(index)}
|
|
620
635
|
>
|
|
621
636
|
<img className='psdk-utility-card-action-svg-icon' src={menuIconOverride$} />
|
|
622
637
|
</button>
|
|
@@ -632,7 +647,8 @@ export default function SimpleTableManual(props: PropsWithChildren<SimpleTableMa
|
|
|
632
647
|
.slice(0)
|
|
633
648
|
.map((row, index) => {
|
|
634
649
|
return (
|
|
635
|
-
|
|
650
|
+
// eslint-disable-next-line react/no-array-index-key
|
|
651
|
+
<TableRow key={index}>
|
|
636
652
|
{displayedColumns.map(colKey => {
|
|
637
653
|
return (
|
|
638
654
|
<TableCell key={colKey} className={classes.tableCell}>
|
package/tests/assets/sdk-r/components/create/override-sdk/template/WideNarrow/WideNarrow.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PropsWithChildren, ReactElement } from 'react';
|
|
2
|
-
import { PConnProps } from '
|
|
2
|
+
import { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
|
|
3
3
|
import './WideNarrow.css';
|
|
4
4
|
|
|
5
5
|
interface WideNarrowProps extends PConnProps {
|
|
@@ -54,6 +54,9 @@ export default function WssNavBar(props: WssNavBarProps) {
|
|
|
54
54
|
const [anchorElNav, setAnchorElNav] = useState<null | HTMLElement>(null);
|
|
55
55
|
const [anchorElUser, setAnchorElUser] = useState<null | HTMLElement>(null);
|
|
56
56
|
|
|
57
|
+
const localizedVal = PCore.getLocaleUtils().getLocaleValue;
|
|
58
|
+
const localeCategory = 'AppShell';
|
|
59
|
+
|
|
57
60
|
const handleOpenNavMenu = (event: React.MouseEvent<HTMLElement>) => {
|
|
58
61
|
setAnchorElNav(event.currentTarget);
|
|
59
62
|
};
|
|
@@ -144,7 +147,7 @@ export default function WssNavBar(props: WssNavBarProps) {
|
|
|
144
147
|
onClose={handleCloseUserMenu}
|
|
145
148
|
>
|
|
146
149
|
<MenuItem onClick={logout}>
|
|
147
|
-
<Typography>
|
|
150
|
+
<Typography>{localizedVal('Log off', localeCategory)}</Typography>
|
|
148
151
|
</MenuItem>
|
|
149
152
|
</Menu>
|
|
150
153
|
</Box>
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/* eslint-disable react/jsx-boolean-value */
|
|
2
2
|
/* eslint-disable react/no-array-index-key */
|
|
3
|
+
/* eslint-disable no-nested-ternary */
|
|
3
4
|
import { useState, useEffect, useCallback } from 'react';
|
|
4
5
|
import { CircularProgress, IconButton, Menu, MenuItem, Button } from '@material-ui/core';
|
|
5
6
|
import MoreVertIcon from '@material-ui/icons/MoreVert';
|
|
@@ -39,7 +40,10 @@ export default function Attachment(props: AttachmentProps) {
|
|
|
39
40
|
[required, disabled] = [required, disabled].map(prop => prop === true || (typeof prop === 'string' && prop === 'true'));
|
|
40
41
|
const pConn = getPConnect();
|
|
41
42
|
const caseID = PCore.getStoreValue('.pyID', 'caseInfo.content', pConn.getContextName());
|
|
42
|
-
|
|
43
|
+
const localizedVal = PCore.getLocaleUtils().getLocaleValue;
|
|
44
|
+
const localeCategory = 'CosmosFields';
|
|
45
|
+
const uploadMultipleFilesLabel = localizedVal('file_upload_text_multiple', localeCategory);
|
|
46
|
+
const uploadSingleFileLabel = localizedVal('file_upload_text_one', localeCategory);
|
|
43
47
|
let categoryName = '';
|
|
44
48
|
if (value && value.pyCategoryName) {
|
|
45
49
|
categoryName = value.pyCategoryName;
|
|
@@ -379,7 +383,13 @@ export default function Attachment(props: AttachmentProps) {
|
|
|
379
383
|
onChange={onFileAdded}
|
|
380
384
|
/>
|
|
381
385
|
<Button style={{ textTransform: 'none' }} variant='outlined' color='primary' component='span'>
|
|
382
|
-
{allowMultiple === 'true'
|
|
386
|
+
{allowMultiple === 'true'
|
|
387
|
+
? uploadMultipleFilesLabel === 'file_upload_text_multiple'
|
|
388
|
+
? 'Choose files'
|
|
389
|
+
: uploadMultipleFilesLabel
|
|
390
|
+
: uploadSingleFileLabel === 'file_upload_text_one'
|
|
391
|
+
? 'Choose a file'
|
|
392
|
+
: uploadSingleFileLabel}
|
|
383
393
|
</Button>
|
|
384
394
|
</label>
|
|
385
395
|
</div>
|
package/tests/assets/sdk-r/components/create/override-sdk/widget/QuickCreate/QuickCreate.tsx
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
1
2
|
import { Utils } from '@pega/react-sdk-components/lib/components/helpers/utils';
|
|
2
3
|
import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map';
|
|
3
4
|
import { PConnProps } from '@pega/react-sdk-components/lib/types/PConnProps';
|
|
@@ -25,38 +26,64 @@ export default function QuickCreate(props: QuickCreateProps) {
|
|
|
25
26
|
});
|
|
26
27
|
};
|
|
27
28
|
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
let icon = Utils.getImageSrc('polaris-solid', Utils.getSDKStaticConentUrl());
|
|
38
|
-
let label = '';
|
|
29
|
+
const [quickCreatecases, setCases] = useState([]);
|
|
30
|
+
|
|
31
|
+
/* If the classFilter is empty and has no entries - we will default to the default set of case types
|
|
32
|
+
It will usually come from the envInfo but for Launchpad, this is not populated - instead get the list of cases from the store */
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
const cases: any = [];
|
|
35
|
+
const defaultCases: any = [];
|
|
36
|
+
const envInfo = PCore.getEnvironmentInfo();
|
|
37
|
+
if (envInfo?.environmentInfoObject?.pyCaseTypeList) {
|
|
39
38
|
envInfo.environmentInfoObject.pyCaseTypeList.forEach(casetype => {
|
|
40
|
-
if (casetype.
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
if (casetype.pyWorkTypeName && casetype.pyWorkTypeImplementationClassName) {
|
|
40
|
+
defaultCases.push({
|
|
41
|
+
classname: casetype.pyWorkTypeImplementationClassName,
|
|
42
|
+
onClick: () => {
|
|
43
|
+
createCase(casetype.pyWorkTypeImplementationClassName);
|
|
44
|
+
},
|
|
45
|
+
...(showCaseIcons && { icon: Utils.getImageSrc(casetype?.pxIcon, Utils.getSDKStaticConentUrl()) }),
|
|
46
|
+
label: casetype.pyWorkTypeName
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
} else {
|
|
51
|
+
const pConnectInAppContext = PCore.createPConnect({
|
|
52
|
+
options: { context: PCore.getConstants().APP.APP }
|
|
53
|
+
}).getPConnect();
|
|
54
|
+
const pyPortalInAppContext = pConnectInAppContext.getValue('pyPortal') as any;
|
|
55
|
+
pyPortalInAppContext?.pyCaseTypesAvailableToCreate?.forEach(casetype => {
|
|
56
|
+
if (casetype.pyClassName && casetype.pyLabel) {
|
|
57
|
+
defaultCases.push({
|
|
58
|
+
classname: casetype.pyClassName,
|
|
59
|
+
onClick: () => {
|
|
60
|
+
createCase(casetype.pyClassName);
|
|
61
|
+
},
|
|
62
|
+
...(showCaseIcons && { icon: Utils.getImageSrc(casetype?.pxIcon, Utils.getSDKStaticConentUrl()) }),
|
|
63
|
+
label: casetype.pyLabel
|
|
64
|
+
});
|
|
43
65
|
}
|
|
44
66
|
});
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/* If classFilter is not empty - filter from the list of defaultCases */
|
|
70
|
+
if (classFilter?.length > 0) {
|
|
71
|
+
classFilter.forEach(item => {
|
|
72
|
+
defaultCases.forEach(casetype => {
|
|
73
|
+
if (casetype.classname === item) {
|
|
74
|
+
cases.push(casetype);
|
|
75
|
+
}
|
|
52
76
|
});
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
|
|
77
|
+
});
|
|
78
|
+
setCases(cases);
|
|
79
|
+
} else {
|
|
80
|
+
setCases(defaultCases);
|
|
81
|
+
}
|
|
82
|
+
}, []);
|
|
56
83
|
|
|
57
84
|
return (
|
|
58
85
|
<div>
|
|
59
|
-
<WssQuickCreate heading={heading} actions={
|
|
86
|
+
<WssQuickCreate heading={heading} actions={quickCreatecases} />
|
|
60
87
|
</div>
|
|
61
88
|
);
|
|
62
89
|
}
|
package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyBoolean/index.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useState, useEffect } from 'react';
|
|
2
|
-
import { Checkbox, FormControl, FormControlLabel, FormGroup, FormHelperText } from '@material-ui/core';
|
|
2
|
+
import { Checkbox, FormControl, FormControlLabel, FormGroup, FormHelperText, FormLabel } from '@material-ui/core';
|
|
3
3
|
|
|
4
4
|
import handleEvent from '@pega/react-sdk-components/lib/components/helpers/event-utils';
|
|
5
5
|
import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map';
|
|
@@ -24,6 +24,7 @@ export default function PegaDxilMyBoolean(props: PegaDxilMyBooleanProps) {
|
|
|
24
24
|
|
|
25
25
|
const {
|
|
26
26
|
getPConnect,
|
|
27
|
+
label,
|
|
27
28
|
value = false,
|
|
28
29
|
readOnly,
|
|
29
30
|
testId,
|
|
@@ -78,6 +79,7 @@ export default function PegaDxilMyBoolean(props: PegaDxilMyBooleanProps) {
|
|
|
78
79
|
return (
|
|
79
80
|
<StyledPegaDxilMyBooleanWrapper>
|
|
80
81
|
<FormControl required={required} error={status === 'error'}>
|
|
82
|
+
{!hideLabel && <FormLabel component='legend'>{label}</FormLabel>}
|
|
81
83
|
<FormGroup>
|
|
82
84
|
<FormControlLabel
|
|
83
85
|
control={theCheckbox}
|
|
@@ -94,4 +96,3 @@ export default function PegaDxilMyBoolean(props: PegaDxilMyBooleanProps) {
|
|
|
94
96
|
</StyledPegaDxilMyBooleanWrapper>
|
|
95
97
|
);
|
|
96
98
|
}
|
|
97
|
-
|
package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyCurrency/index.tsx
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { useState, useEffect } from 'react';
|
|
2
1
|
import CurrencyTextField from '@unicef/material-ui-currency-textfield';
|
|
3
2
|
|
|
4
|
-
import handleEvent from '@pega/react-sdk-components/lib/components/helpers/event-utils';
|
|
5
|
-
import { format } from "@pega/react-sdk-components/lib/components/helpers/formatters";
|
|
6
3
|
import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map';
|
|
7
4
|
import { PConnFieldProps } from '@pega/react-sdk-components/lib/types/PConnProps';
|
|
8
|
-
|
|
5
|
+
import handleEvent from '@pega/react-sdk-components/lib/components/helpers/event-utils';
|
|
6
|
+
import { format } from '@pega/react-sdk-components/lib/components/helpers/formatters';
|
|
9
7
|
import { getCurrencyCharacters, getCurrencyOptions } from '@pega/react-sdk-components/lib/components/field/Currency/currency-utils.js';
|
|
10
8
|
import StyledPegaDxilMyCurrencyWrapper from './styles';
|
|
11
9
|
|
|
@@ -52,17 +50,11 @@ export default function PegaDxilMyCurrency(props: PegaDxilMyCurrencyProps) {
|
|
|
52
50
|
'data-test-id': testId
|
|
53
51
|
};
|
|
54
52
|
|
|
55
|
-
|
|
56
|
-
const
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
// currencySymbols looks like this: { theCurrencySymbol: '$', theDecimalIndicator: '.', theSeparator: ',' }
|
|
61
|
-
const theSymbols = getCurrencyCharacters(currencyISOCode);
|
|
62
|
-
setCurrSym(theSymbols.theCurrencySymbol);
|
|
63
|
-
setCurrDec(theSymbols.theDecimalIndicator);
|
|
64
|
-
setCurrSep(theSymbols.theDigitGroupSeparator);
|
|
65
|
-
}, [currencyISOCode]);
|
|
53
|
+
// currencySymbols looks like this: { theCurrencySymbol: '$', theDecimalIndicator: '.', theSeparator: ',' }
|
|
54
|
+
const theSymbols = getCurrencyCharacters(currencyISOCode);
|
|
55
|
+
const theCurrSym = theSymbols.theCurrencySymbol;
|
|
56
|
+
const theCurrDec = theSymbols.theDecimalIndicator;
|
|
57
|
+
const theCurrSep = theSymbols.theDigitGroupSeparator;
|
|
66
58
|
|
|
67
59
|
const theCurrencyOptions = getCurrencyOptions(currencyISOCode);
|
|
68
60
|
const formattedValue = format(value, pConn.getComponentName().toLowerCase(), theCurrencyOptions);
|
package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyDecimal/index.tsx
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { useState, useEffect } from 'react';
|
|
2
1
|
import CurrencyTextField from '@unicef/material-ui-currency-textfield';
|
|
3
2
|
|
|
4
3
|
import { getCurrencyCharacters, getCurrencyOptions } from '@pega/react-sdk-components/lib/components/field/Currency/currency-utils.js';
|
|
@@ -49,14 +48,9 @@ export default function PegaDxilMyDecimal(props: PegaDxilMyDecimalProps) {
|
|
|
49
48
|
const propName = (pConn.getStateProps() as any).value;
|
|
50
49
|
const helperTextToDisplay = validatemessage || helperText;
|
|
51
50
|
|
|
52
|
-
const
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
useEffect(() => {
|
|
56
|
-
const theSymbols = getCurrencyCharacters(currencyISOCode);
|
|
57
|
-
setCurrDec(theSymbols.theDecimalIndicator);
|
|
58
|
-
setCurrSep(theSymbols.theDigitGroupSeparator);
|
|
59
|
-
}, [currencyISOCode]);
|
|
51
|
+
const theSymbols = getCurrencyCharacters(currencyISOCode);
|
|
52
|
+
const theCurrDec = theSymbols.theDecimalIndicator;
|
|
53
|
+
const theCurrSep = theSymbols.theDigitGroupSeparator;
|
|
60
54
|
|
|
61
55
|
const theCurrencyOptions = getCurrencyOptions(currencyISOCode);
|
|
62
56
|
const formattedValue = format(value, pConn.getComponentName().toLowerCase(), theCurrencyOptions);
|
|
@@ -10,6 +10,20 @@ const meta: Meta<typeof PegaDxilMyPercentage> = {
|
|
|
10
10
|
excludeStories: /.*Data$/
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
+
window.PCore = {
|
|
14
|
+
...window.PCore,
|
|
15
|
+
getEnvironmentInfo: (): any => {
|
|
16
|
+
return {
|
|
17
|
+
getUseLocale: () => {
|
|
18
|
+
return 'en-GB';
|
|
19
|
+
},
|
|
20
|
+
getLocale: () => {
|
|
21
|
+
return 'en-GB';
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
|
|
13
27
|
export default meta;
|
|
14
28
|
type Story = StoryObj<typeof PegaDxilMyPercentage>;
|
|
15
29
|
|
|
@@ -22,10 +36,16 @@ export const BasePegaDxilMyPercentage: Story = args => {
|
|
|
22
36
|
fieldMetadata,
|
|
23
37
|
getPConnect: () => {
|
|
24
38
|
return {
|
|
39
|
+
getComponentName: () => {
|
|
40
|
+
return 'Percentage';
|
|
41
|
+
},
|
|
25
42
|
getActionsApi: () => {
|
|
26
43
|
return {
|
|
27
44
|
updateFieldValue: (propName, theValue) => {
|
|
28
45
|
setValue(theValue);
|
|
46
|
+
},
|
|
47
|
+
triggerFieldChange: (propName, theValue) => {
|
|
48
|
+
setValue(theValue);
|
|
29
49
|
}
|
|
30
50
|
};
|
|
31
51
|
},
|
package/tests/assets/sdk-r/components/createAll/custom-sdk/field/Pega_DXIL_MyPercentage/index.tsx
CHANGED
|
@@ -1,69 +1,57 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { makeStyles } from '@material-ui/core/styles';
|
|
1
|
+
import CurrencyTextField from '@unicef/material-ui-currency-textfield';
|
|
3
2
|
|
|
4
3
|
import { getComponentFromMap } from '@pega/react-sdk-components/lib/bridge/helpers/sdk_component_map';
|
|
5
4
|
import { PConnFieldProps } from '@pega/react-sdk-components/lib/types/PConnProps';
|
|
5
|
+
import { getCurrencyCharacters, getCurrencyOptions } from '@pega/react-sdk-components/lib/components/field/Currency/currency-utils.js';
|
|
6
|
+
import handleEvent from '@pega/react-sdk-components/lib/components/helpers/event-utils';
|
|
7
|
+
import { format } from '@pega/react-sdk-components/lib/components/helpers/formatters';
|
|
6
8
|
import StyledPegaDxilMyPercentageWrapper from './styles';
|
|
7
9
|
|
|
8
|
-
// Inspired by https://stackoverflow.com/questions/50823182/material-ui-remove-up-down-arrow-dials-from-textview
|
|
9
|
-
const useStyles = makeStyles((/* theme */) => ({
|
|
10
|
-
input: {
|
|
11
|
-
'& input[type=number]': {
|
|
12
|
-
'-moz-appearance': 'textfield'
|
|
13
|
-
},
|
|
14
|
-
'& input[type=number]::-webkit-outer-spin-button': {
|
|
15
|
-
'-webkit-appearance': 'none',
|
|
16
|
-
margin: 0
|
|
17
|
-
},
|
|
18
|
-
'& input[type=number]::-webkit-inner-spin-button': {
|
|
19
|
-
'-webkit-appearance': 'none',
|
|
20
|
-
margin: 0
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}));
|
|
24
|
-
|
|
25
10
|
interface PegaDxilMyPercentageProps extends PConnFieldProps {
|
|
26
11
|
// If any, enter additional props that only exist on this componentName
|
|
12
|
+
currencyISOCode: string;
|
|
27
13
|
}
|
|
28
14
|
|
|
29
15
|
// props passed in combination of props from property panel (config.json) and run time props from Constellation
|
|
30
16
|
export default function PegaDxilMyPercentage(props: PegaDxilMyPercentageProps) {
|
|
31
17
|
// Get emitted components from map (so we can get any override that may exist)
|
|
32
|
-
const TextInput = getComponentFromMap('TextInput');
|
|
33
18
|
const FieldValueList = getComponentFromMap('FieldValueList');
|
|
34
19
|
|
|
35
|
-
const classes = useStyles();
|
|
36
|
-
|
|
37
20
|
const {
|
|
21
|
+
getPConnect,
|
|
38
22
|
label,
|
|
39
23
|
required,
|
|
40
24
|
disabled,
|
|
41
25
|
value = '',
|
|
42
26
|
validatemessage,
|
|
43
27
|
status,
|
|
44
|
-
onChange,
|
|
45
|
-
onBlur,
|
|
28
|
+
// onChange,
|
|
29
|
+
// onBlur,
|
|
46
30
|
readOnly,
|
|
31
|
+
currencyISOCode = 'USD',
|
|
47
32
|
testId,
|
|
48
33
|
helperText,
|
|
49
34
|
displayMode,
|
|
50
35
|
hideLabel,
|
|
51
36
|
placeholder
|
|
52
37
|
} = props;
|
|
38
|
+
|
|
39
|
+
const pConn = getPConnect();
|
|
40
|
+
const actions = pConn.getActionsApi();
|
|
41
|
+
const propName = (pConn.getStateProps() as any).value;
|
|
53
42
|
const helperTextToDisplay = validatemessage || helperText;
|
|
54
43
|
|
|
44
|
+
const theCurrencyOptions = getCurrencyOptions(currencyISOCode);
|
|
45
|
+
const formattedValue = format(value, pConn.getComponentName().toLowerCase(), theCurrencyOptions);
|
|
46
|
+
|
|
55
47
|
// console.log(`Percentage: label: ${label} value: ${value}`);
|
|
56
48
|
|
|
57
49
|
if (displayMode === 'LABELS_LEFT') {
|
|
58
|
-
return <FieldValueList name={hideLabel ? '' : label} value={
|
|
50
|
+
return <FieldValueList name={hideLabel ? '' : label} value={formattedValue} />;
|
|
59
51
|
}
|
|
60
52
|
|
|
61
53
|
if (displayMode === 'STACKED_LARGE_VAL') {
|
|
62
|
-
return <FieldValueList name={hideLabel ? '' : label} value={
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (readOnly) {
|
|
66
|
-
return <TextInput {...props} />;
|
|
54
|
+
return <FieldValueList name={hideLabel ? '' : label} value={formattedValue} variant='stacked' />;
|
|
67
55
|
}
|
|
68
56
|
|
|
69
57
|
let testProp = {};
|
|
@@ -72,10 +60,17 @@ export default function PegaDxilMyPercentage(props: PegaDxilMyPercentageProps) {
|
|
|
72
60
|
'data-test-id': testId
|
|
73
61
|
};
|
|
74
62
|
|
|
63
|
+
const theSymbols = getCurrencyCharacters(currencyISOCode);
|
|
64
|
+
const theCurrDec = theSymbols.theDecimalIndicator;
|
|
65
|
+
const theCurrSep = theSymbols.theDigitGroupSeparator;
|
|
66
|
+
|
|
67
|
+
function PercentageOnBlur(event, inValue) {
|
|
68
|
+
handleEvent(actions, 'changeNblur', propName, inValue !== '' ? Number(inValue) : inValue);
|
|
69
|
+
}
|
|
70
|
+
|
|
75
71
|
return (
|
|
76
72
|
<StyledPegaDxilMyPercentageWrapper>
|
|
77
|
-
<
|
|
78
|
-
className={classes.input}
|
|
73
|
+
<CurrencyTextField
|
|
79
74
|
fullWidth
|
|
80
75
|
variant={readOnly ? 'standard' : 'outlined'}
|
|
81
76
|
helperText={helperTextToDisplay}
|
|
@@ -83,15 +78,21 @@ export default function PegaDxilMyPercentage(props: PegaDxilMyPercentageProps) {
|
|
|
83
78
|
size='small'
|
|
84
79
|
required={required}
|
|
85
80
|
disabled={disabled}
|
|
86
|
-
|
|
87
|
-
onBlur={!readOnly ? onBlur : undefined}
|
|
81
|
+
readOnly={!!readOnly}
|
|
88
82
|
error={status === 'error'}
|
|
89
83
|
label={label}
|
|
90
84
|
value={value}
|
|
91
|
-
type='
|
|
92
|
-
|
|
85
|
+
type='text'
|
|
86
|
+
outputFormat='number'
|
|
87
|
+
textAlign='left'
|
|
88
|
+
InputProps={{
|
|
89
|
+
inputProps: { ...testProp }
|
|
90
|
+
}}
|
|
91
|
+
currencySymbol=''
|
|
92
|
+
decimalCharacter={theCurrDec}
|
|
93
|
+
digitGroupSeparator={theCurrSep}
|
|
94
|
+
onBlur={!readOnly ? PercentageOnBlur : undefined}
|
|
93
95
|
/>
|
|
94
96
|
</StyledPegaDxilMyPercentageWrapper>
|
|
95
97
|
);
|
|
96
98
|
}
|
|
97
|
-
|
package/tests/assets/sdk-r/components/createAll/custom-sdk/widget/Pega_DXIL_MyCaseWidget/index.tsx
CHANGED
|
@@ -151,9 +151,9 @@ export default function PegaDxilMyCaseWidget(props: PegaDxilMyCaseWidgetProps) {
|
|
|
151
151
|
const theKey = `CaseHistory-${index}`;
|
|
152
152
|
theDataRows.push(
|
|
153
153
|
<TableRow key={theKey}>
|
|
154
|
-
<StyledTableCell>{dataRow[0] ? dataRow[0] : '---'}</StyledTableCell>
|
|
155
|
-
<StyledTableCell>{dataRow[1] ? dataRow[1] : '---'}</StyledTableCell>
|
|
156
|
-
<StyledTableCell>{dataRow[2] ? dataRow[2] : '---'}</StyledTableCell>
|
|
154
|
+
<StyledTableCell>{dataRow[0] ? dataRow[0] as any : '---'}</StyledTableCell>
|
|
155
|
+
<StyledTableCell>{dataRow[1] ? dataRow[1] as any : '---'}</StyledTableCell>
|
|
156
|
+
<StyledTableCell>{dataRow[2] ? dataRow[2] as any : '---'}</StyledTableCell>
|
|
157
157
|
</TableRow>
|
|
158
158
|
);
|
|
159
159
|
});
|