@oneblink/apps-react 0.6.2-beta.2 → 1.0.0-beta.1
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/dist/OneBlinkAutoSaveForm.js +2 -2
- package/dist/OneBlinkAutoSaveForm.js.map +1 -1
- package/dist/OneBlinkFormBase.js +4 -4
- package/dist/OneBlinkFormBase.js.map +1 -1
- package/dist/OneBlinkFormStoreView.d.ts +8 -0
- package/dist/OneBlinkFormStoreView.js +55 -0
- package/dist/OneBlinkFormStoreView.js.map +1 -0
- package/dist/components/CopyToClipboardIconButton.d.ts +10 -0
- package/dist/components/CopyToClipboardIconButton.js +42 -0
- package/dist/components/CopyToClipboardIconButton.js.map +1 -0
- package/dist/components/CustomAccordion.d.ts +27 -0
- package/dist/components/CustomAccordion.js +40 -0
- package/dist/components/CustomAccordion.js.map +1 -0
- package/dist/components/ErrorMessage.d.ts +13 -0
- package/dist/components/ErrorMessage.js +13 -0
- package/dist/components/ErrorMessage.js.map +1 -0
- package/dist/components/ErrorSnackbar.d.ts +8 -0
- package/dist/components/ErrorSnackbar.js +49 -0
- package/dist/components/ErrorSnackbar.js.map +1 -0
- package/dist/components/Lists.d.ts +10 -0
- package/dist/components/Lists.js +43 -0
- package/dist/components/Lists.js.map +1 -0
- package/dist/components/LoadingWithMessage.d.ts +6 -0
- package/dist/components/LoadingWithMessage.js +12 -0
- package/dist/components/LoadingWithMessage.js.map +1 -0
- package/dist/components/NoResourcesYet.d.ts +12 -0
- package/dist/components/NoResourcesYet.js +7 -0
- package/dist/components/NoResourcesYet.js.map +1 -0
- package/dist/components/formStore/ColumnsConfigurationButton.d.ts +10 -0
- package/dist/components/formStore/ColumnsConfigurationButton.js +29 -0
- package/dist/components/formStore/ColumnsConfigurationButton.js.map +1 -0
- package/dist/components/formStore/DownloadSubmissionDataButton.d.ts +13 -0
- package/dist/components/formStore/DownloadSubmissionDataButton.js +45 -0
- package/dist/components/formStore/DownloadSubmissionDataButton.js.map +1 -0
- package/dist/components/formStore/FormStore.d.ts +9 -0
- package/dist/components/formStore/FormStore.js +103 -0
- package/dist/components/formStore/FormStore.js.map +1 -0
- package/dist/components/formStore/display/ElementDisplay.d.ts +23 -0
- package/dist/components/formStore/display/ElementDisplay.js +78 -0
- package/dist/components/formStore/display/ElementDisplay.js.map +1 -0
- package/dist/components/formStore/display/FormStoreIcon.d.ts +2 -0
- package/dist/components/formStore/display/FormStoreIcon.js +3 -0
- package/dist/components/formStore/display/FormStoreIcon.js.map +1 -0
- package/dist/components/formStore/table/ActionedByTableCell.d.ts +11 -0
- package/dist/components/formStore/table/ActionedByTableCell.js +44 -0
- package/dist/components/formStore/table/ActionedByTableCell.js.map +1 -0
- package/dist/components/formStore/table/ColumnFilters.d.ts +9 -0
- package/dist/components/formStore/table/ColumnFilters.js +180 -0
- package/dist/components/formStore/table/ColumnFilters.js.map +1 -0
- package/dist/components/formStore/table/FormElementTableCell.d.ts +10 -0
- package/dist/components/formStore/table/FormElementTableCell.js +195 -0
- package/dist/components/formStore/table/FormElementTableCell.js.map +1 -0
- package/dist/components/formStore/table/HeaderCellMoreButton.d.ts +9 -0
- package/dist/components/formStore/table/HeaderCellMoreButton.js +49 -0
- package/dist/components/formStore/table/HeaderCellMoreButton.js.map +1 -0
- package/dist/components/formStore/table/RepeatableSetCell.d.ts +9 -0
- package/dist/components/formStore/table/RepeatableSetCell.js +63 -0
- package/dist/components/formStore/table/RepeatableSetCell.js.map +1 -0
- package/dist/components/formStore/table/RepeatableSetCellAccordion.d.ts +9 -0
- package/dist/components/formStore/table/RepeatableSetCellAccordion.js +12 -0
- package/dist/components/formStore/table/RepeatableSetCellAccordion.js.map +1 -0
- package/dist/components/formStore/table/TableCellCopyButton.d.ts +7 -0
- package/dist/components/formStore/table/TableCellCopyButton.js +31 -0
- package/dist/components/formStore/table/TableCellCopyButton.js.map +1 -0
- package/dist/components/formStore/table/generateColumns.d.ts +18 -0
- package/dist/components/formStore/table/generateColumns.js +233 -0
- package/dist/components/formStore/table/generateColumns.js.map +1 -0
- package/dist/components/formStore/table/index.d.ts +17 -0
- package/dist/components/formStore/table/index.js +194 -0
- package/dist/components/formStore/table/index.js.map +1 -0
- package/dist/components/formStore/table/useFormStoreTable.d.ts +12 -0
- package/dist/components/formStore/table/useFormStoreTable.js +130 -0
- package/dist/components/formStore/table/useFormStoreTable.js.map +1 -0
- package/dist/components/messages/LargeIconMessage.d.ts +14 -0
- package/dist/components/messages/LargeIconMessage.js +68 -0
- package/dist/components/messages/LargeIconMessage.js.map +1 -0
- package/dist/components/pickers/V4CompatibleDatePicker.d.ts +30 -0
- package/dist/components/pickers/V4CompatibleDatePicker.js +58 -0
- package/dist/components/pickers/V4CompatibleDatePicker.js.map +1 -0
- package/dist/components/pickers/V4CompatibleDateTimePicker.d.ts +29 -0
- package/dist/components/pickers/V4CompatibleDateTimePicker.js +58 -0
- package/dist/components/pickers/V4CompatibleDateTimePicker.js.map +1 -0
- package/dist/components/pickers/V4CompatibleTimePicker.d.ts +26 -0
- package/dist/components/pickers/V4CompatibleTimePicker.js +41 -0
- package/dist/components/pickers/V4CompatibleTimePicker.js.map +1 -0
- package/dist/components/{AnnotationModal.d.ts → renderer/AnnotationModal.d.ts} +0 -0
- package/dist/components/{AnnotationModal.js → renderer/AnnotationModal.js} +2 -2
- package/dist/components/renderer/AnnotationModal.js.map +1 -0
- package/dist/components/{AutocompleteDropdown.d.ts → renderer/AutocompleteDropdown.d.ts} +0 -0
- package/dist/components/{AutocompleteDropdown.js → renderer/AutocompleteDropdown.js} +1 -1
- package/dist/components/renderer/AutocompleteDropdown.js.map +1 -0
- package/dist/components/{CopyToClipboardButton.d.ts → renderer/CopyToClipboardButton.d.ts} +0 -0
- package/dist/components/{CopyToClipboardButton.js → renderer/CopyToClipboardButton.js} +1 -1
- package/dist/components/renderer/CopyToClipboardButton.js.map +1 -0
- package/dist/components/{CustomisableButtonInner.d.ts → renderer/CustomisableButtonInner.d.ts} +0 -0
- package/dist/components/{CustomisableButtonInner.js → renderer/CustomisableButtonInner.js} +0 -0
- package/dist/components/renderer/CustomisableButtonInner.js.map +1 -0
- package/dist/components/{FormElementLabelContainer.d.ts → renderer/FormElementLabelContainer.d.ts} +0 -0
- package/dist/components/{FormElementLabelContainer.js → renderer/FormElementLabelContainer.js} +0 -0
- package/dist/components/renderer/FormElementLabelContainer.js.map +1 -0
- package/dist/components/{FormElementOptions.d.ts → renderer/FormElementOptions.d.ts} +0 -0
- package/dist/components/{FormElementOptions.js → renderer/FormElementOptions.js} +0 -0
- package/dist/components/renderer/FormElementOptions.js.map +1 -0
- package/dist/components/{LookupButton.d.ts → renderer/LookupButton.d.ts} +0 -0
- package/dist/components/{LookupButton.js → renderer/LookupButton.js} +3 -3
- package/dist/components/renderer/LookupButton.js.map +1 -0
- package/dist/components/{LookupNotification.d.ts → renderer/LookupNotification.d.ts} +1 -1
- package/dist/components/{LookupNotification.js → renderer/LookupNotification.js} +9 -9
- package/dist/components/renderer/LookupNotification.js.map +1 -0
- package/dist/components/{Modal.d.ts → renderer/Modal.d.ts} +0 -0
- package/dist/components/{Modal.js → renderer/Modal.js} +0 -0
- package/dist/components/renderer/Modal.js.map +1 -0
- package/dist/components/{OnLoading.d.ts → renderer/OnLoading.d.ts} +0 -0
- package/dist/components/{OnLoading.js → renderer/OnLoading.js} +0 -0
- package/dist/components/renderer/OnLoading.js.map +1 -0
- package/dist/components/{OneBlinkAppsErrorOriginalMessage.d.ts → renderer/OneBlinkAppsErrorOriginalMessage.d.ts} +0 -0
- package/dist/components/{OneBlinkAppsErrorOriginalMessage.js → renderer/OneBlinkAppsErrorOriginalMessage.js} +0 -0
- package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.js.map +1 -0
- package/dist/components/{OneBlinkFormElements.d.ts → renderer/OneBlinkFormElements.d.ts} +1 -1
- package/dist/components/{OneBlinkFormElements.js → renderer/OneBlinkFormElements.js} +36 -36
- package/dist/components/renderer/OneBlinkFormElements.js.map +1 -0
- package/dist/components/{PageFormElements.d.ts → renderer/PageFormElements.d.ts} +1 -1
- package/dist/components/{PageFormElements.js → renderer/PageFormElements.js} +3 -3
- package/dist/components/renderer/PageFormElements.js.map +1 -0
- package/dist/components/{ToggleAllCheckbox.d.ts → renderer/ToggleAllCheckbox.d.ts} +1 -1
- package/dist/components/{ToggleAllCheckbox.js → renderer/ToggleAllCheckbox.js} +0 -0
- package/dist/components/renderer/ToggleAllCheckbox.js.map +1 -0
- package/dist/components/{attachments → renderer/attachments}/AttachmentStatus.d.ts +0 -0
- package/dist/components/{attachments → renderer/attachments}/AttachmentStatus.js +1 -1
- package/dist/components/renderer/attachments/AttachmentStatus.js.map +1 -0
- package/dist/components/{attachments → renderer/attachments}/FileCard.d.ts +0 -0
- package/dist/components/{attachments → renderer/attachments}/FileCard.js +4 -4
- package/dist/components/renderer/attachments/FileCard.js.map +1 -0
- package/dist/components/{attachments → renderer/attachments}/FileCardContent.d.ts +0 -0
- package/dist/components/{attachments → renderer/attachments}/FileCardContent.js +0 -0
- package/dist/components/renderer/attachments/FileCardContent.js.map +1 -0
- package/dist/components/{attachments → renderer/attachments}/Files.d.ts +0 -0
- package/dist/components/{attachments → renderer/attachments}/Files.js +0 -0
- package/dist/components/renderer/attachments/Files.js.map +1 -0
- package/dist/components/{attachments → renderer/attachments}/ImagePreviewUnavailable.d.ts +0 -0
- package/dist/components/{attachments → renderer/attachments}/ImagePreviewUnavailable.js +1 -1
- package/dist/components/renderer/attachments/ImagePreviewUnavailable.js.map +1 -0
- package/dist/components/{attachments → renderer/attachments}/UploadingAttachment.d.ts +0 -0
- package/dist/components/{attachments → renderer/attachments}/UploadingAttachment.js +1 -1
- package/dist/components/renderer/attachments/UploadingAttachment.js.map +1 -0
- package/dist/form-elements/FormElementABN.js +3 -3
- package/dist/form-elements/FormElementABN.js.map +1 -1
- package/dist/form-elements/FormElementAutocomplete.js +3 -3
- package/dist/form-elements/FormElementAutocomplete.js.map +1 -1
- package/dist/form-elements/FormElementBSB.js +3 -3
- package/dist/form-elements/FormElementBSB.js.map +1 -1
- package/dist/form-elements/FormElementBarcodeScanner.js +4 -4
- package/dist/form-elements/FormElementBarcodeScanner.js.map +1 -1
- package/dist/form-elements/FormElementBoolean.js +1 -1
- package/dist/form-elements/FormElementBoolean.js.map +1 -1
- package/dist/form-elements/FormElementCamera.js +6 -6
- package/dist/form-elements/FormElementCamera.js.map +1 -1
- package/dist/form-elements/FormElementCheckBoxes.js +4 -4
- package/dist/form-elements/FormElementCheckBoxes.js.map +1 -1
- package/dist/form-elements/FormElementCivicaStreetName.js +2 -2
- package/dist/form-elements/FormElementCivicaStreetName.js.map +1 -1
- package/dist/form-elements/FormElementCompliance.js +2 -2
- package/dist/form-elements/FormElementCompliance.js.map +1 -1
- package/dist/form-elements/FormElementDate.js +4 -4
- package/dist/form-elements/FormElementDate.js.map +1 -1
- package/dist/form-elements/FormElementDateTime.js +4 -4
- package/dist/form-elements/FormElementDateTime.js.map +1 -1
- package/dist/form-elements/FormElementEmail.js +3 -3
- package/dist/form-elements/FormElementEmail.js.map +1 -1
- package/dist/form-elements/FormElementFiles/FormElementFile.js +1 -1
- package/dist/form-elements/FormElementFiles/FormElementFile.js.map +1 -1
- package/dist/form-elements/FormElementFiles/FormElementFiles.js +1 -1
- package/dist/form-elements/FormElementFiles/FormElementFiles.js.map +1 -1
- package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.js +2 -2
- package/dist/form-elements/FormElementFiles/legacy/FormElementFiles.js.map +1 -1
- package/dist/form-elements/FormElementForm.js +1 -1
- package/dist/form-elements/FormElementForm.js.map +1 -1
- package/dist/form-elements/FormElementGeoscapeAddress.js +2 -2
- package/dist/form-elements/FormElementGeoscapeAddress.js.map +1 -1
- package/dist/form-elements/FormElementLocation.js +2 -2
- package/dist/form-elements/FormElementLocation.js.map +1 -1
- package/dist/form-elements/FormElementNumber.js +3 -3
- package/dist/form-elements/FormElementNumber.js.map +1 -1
- package/dist/form-elements/FormElementPointAddress.js +2 -2
- package/dist/form-elements/FormElementPointAddress.js.map +1 -1
- package/dist/form-elements/FormElementRadio.js +2 -2
- package/dist/form-elements/FormElementRadio.js.map +1 -1
- package/dist/form-elements/FormElementRepeatableSet.js +3 -3
- package/dist/form-elements/FormElementRepeatableSet.js.map +1 -1
- package/dist/form-elements/FormElementSection.d.ts +1 -1
- package/dist/form-elements/FormElementSection.js +1 -1
- package/dist/form-elements/FormElementSection.js.map +1 -1
- package/dist/form-elements/FormElementSelect.js +4 -4
- package/dist/form-elements/FormElementSelect.js.map +1 -1
- package/dist/form-elements/FormElementSignature.js +4 -4
- package/dist/form-elements/FormElementSignature.js.map +1 -1
- package/dist/form-elements/FormElementTelephone.js +3 -3
- package/dist/form-elements/FormElementTelephone.js.map +1 -1
- package/dist/form-elements/FormElementText.js +3 -3
- package/dist/form-elements/FormElementText.js.map +1 -1
- package/dist/form-elements/FormElementTextarea.js +3 -3
- package/dist/form-elements/FormElementTextarea.js.map +1 -1
- package/dist/form-elements/FormElementTime.js +4 -4
- package/dist/form-elements/FormElementTime.js.map +1 -1
- package/dist/hooks/useConditionalLogic.js +1 -1
- package/dist/hooks/useConditionalLogic.js.map +1 -1
- package/dist/hooks/useInfiniteScrollDataLoad.d.ts +28 -0
- package/dist/hooks/useInfiniteScrollDataLoad.js +118 -0
- package/dist/hooks/useInfiniteScrollDataLoad.js.map +1 -0
- package/dist/hooks/useIsHovering.d.ts +5 -0
- package/dist/hooks/useIsHovering.js +13 -0
- package/dist/hooks/useIsHovering.js.map +1 -0
- package/dist/hooks/useLegacyElements.d.ts +16 -0
- package/dist/hooks/useLegacyElements.js +55 -0
- package/dist/hooks/useLegacyElements.js.map +1 -0
- package/dist/hooks/useQuery.d.ts +2 -0
- package/dist/hooks/useQuery.js +8 -0
- package/dist/hooks/useQuery.js.map +1 -0
- package/dist/hooks/useSubmissionIdIsValid.d.ts +4 -0
- package/dist/hooks/useSubmissionIdIsValid.js +21 -0
- package/dist/hooks/useSubmissionIdIsValid.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/services/defaultCoordinates.js +1 -1
- package/dist/services/defaultCoordinates.js.map +1 -1
- package/dist/services/generate-default-data.js +1 -1
- package/dist/services/generate-default-data.js.map +1 -1
- package/package.json +11 -4
- package/dist/components/AnnotationModal.js.map +0 -1
- package/dist/components/AutocompleteDropdown.js.map +0 -1
- package/dist/components/CopyToClipboardButton.js.map +0 -1
- package/dist/components/CustomisableButtonInner.js.map +0 -1
- package/dist/components/FormElementLabelContainer.js.map +0 -1
- package/dist/components/FormElementOptions.js.map +0 -1
- package/dist/components/LookupButton.js.map +0 -1
- package/dist/components/LookupNotification.js.map +0 -1
- package/dist/components/Modal.js.map +0 -1
- package/dist/components/OnLoading.js.map +0 -1
- package/dist/components/OneBlinkAppsErrorOriginalMessage.js.map +0 -1
- package/dist/components/OneBlinkFormElements.js.map +0 -1
- package/dist/components/PageFormElements.js.map +0 -1
- package/dist/components/ToggleAllCheckbox.js.map +0 -1
- package/dist/components/attachments/AttachmentStatus.js.map +0 -1
- package/dist/components/attachments/FileCard.js.map +0 -1
- package/dist/components/attachments/FileCardContent.js.map +0 -1
- package/dist/components/attachments/Files.js.map +0 -1
- package/dist/components/attachments/ImagePreviewUnavailable.js.map +0 -1
- package/dist/components/attachments/UploadingAttachment.js.map +0 -1
@@ -0,0 +1,194 @@
|
|
1
|
+
import * as React from 'react';
|
2
|
+
import clsx from 'clsx';
|
3
|
+
import { Box, Paper, TableContainer, Tooltip } from '@mui/material';
|
4
|
+
import makeStyles from '@mui/styles/makeStyles';
|
5
|
+
import { FilterList as FilterListIcon, Warning as WarningIcon, ArrowDownward as SortingIcon, } from '@mui/icons-material';
|
6
|
+
import { IsHoveringProvider } from '../../../hooks/useIsHovering';
|
7
|
+
import { NoResourcesYet } from '../../NoResourcesYet';
|
8
|
+
import FormStoreIcon from '../display/FormStoreIcon';
|
9
|
+
import HeaderCellMoreButton from './HeaderCellMoreButton';
|
10
|
+
const useStyles = makeStyles((theme) => ({
|
11
|
+
tooltip: {
|
12
|
+
zIndex: theme.zIndex.drawer,
|
13
|
+
},
|
14
|
+
sortingIcon: {
|
15
|
+
transition: theme.transitions.create('transform'),
|
16
|
+
},
|
17
|
+
sortingIconDescending: {
|
18
|
+
transform: 'rotate(180deg)',
|
19
|
+
},
|
20
|
+
table: {
|
21
|
+
display: 'inline-block',
|
22
|
+
'& .tbody .tr:last-child .tc': {
|
23
|
+
borderBottom: 0,
|
24
|
+
},
|
25
|
+
'& .tc': {
|
26
|
+
padding: theme.spacing(1),
|
27
|
+
borderBottomColor: theme.palette.divider,
|
28
|
+
borderBottom: '1px solid',
|
29
|
+
display: 'flex',
|
30
|
+
alignItems: 'center',
|
31
|
+
'&.is-clickable': {
|
32
|
+
cursor: 'pointer',
|
33
|
+
transition: theme.transitions.create('transform'),
|
34
|
+
'&:hover': {
|
35
|
+
backgroundColor: theme.palette.action.hover,
|
36
|
+
},
|
37
|
+
},
|
38
|
+
},
|
39
|
+
'& .td': {
|
40
|
+
position: 'relative',
|
41
|
+
borderRight: '1px solid',
|
42
|
+
borderRightColor: theme.palette.divider,
|
43
|
+
overflowX: 'hidden',
|
44
|
+
// minus 1 to cater for the border
|
45
|
+
minHeight: `${parseInt(theme.spacing(5.5)) - 1}px`,
|
46
|
+
'&.is-resizing': {
|
47
|
+
borderRightStyle: 'dashed',
|
48
|
+
},
|
49
|
+
},
|
50
|
+
'& .th': {
|
51
|
+
position: 'relative',
|
52
|
+
fontWeight: theme.typography.fontWeightBold,
|
53
|
+
paddingRight: 0,
|
54
|
+
'& .th-content': {
|
55
|
+
flex: 1,
|
56
|
+
display: 'flex',
|
57
|
+
alignItems: 'center',
|
58
|
+
justifyContent: 'space-between',
|
59
|
+
borderRight: '1px solid',
|
60
|
+
borderRightColor: theme.palette.divider,
|
61
|
+
paddingRight: theme.spacing(),
|
62
|
+
'& .th-label': {
|
63
|
+
display: 'inline-flex',
|
64
|
+
alignItems: 'center',
|
65
|
+
'& .th-icon': {
|
66
|
+
marginLeft: theme.spacing(),
|
67
|
+
},
|
68
|
+
},
|
69
|
+
},
|
70
|
+
'& .resizer': {
|
71
|
+
display: 'inline-flex',
|
72
|
+
alignItems: 'center',
|
73
|
+
justifyContent: 'center',
|
74
|
+
borderWidth: 0,
|
75
|
+
borderLeftStyle: 'solid',
|
76
|
+
borderRightStyle: 'solid',
|
77
|
+
borderColor: theme.palette.divider,
|
78
|
+
paddingTop: theme.spacing(),
|
79
|
+
paddingBottom: theme.spacing(),
|
80
|
+
paddingRight: `calc(${theme.spacing(1)} + 1px)`,
|
81
|
+
position: 'absolute',
|
82
|
+
right: 0,
|
83
|
+
top: theme.spacing(0.5),
|
84
|
+
bottom: theme.spacing(0.5),
|
85
|
+
transform: `translateX(calc(${theme.spacing(0.5)} + 1px))`,
|
86
|
+
zIndex: 1,
|
87
|
+
// prevents from scrolling while dragging on touch devices
|
88
|
+
touchAction: 'none',
|
89
|
+
'&:hover': {
|
90
|
+
borderWidth: '1px',
|
91
|
+
},
|
92
|
+
'&.is-resizing': {
|
93
|
+
borderWidth: '1px',
|
94
|
+
borderColor: theme.palette.grey[700],
|
95
|
+
},
|
96
|
+
},
|
97
|
+
},
|
98
|
+
},
|
99
|
+
}));
|
100
|
+
function FormStoreTable({ getTableProps, getTableBodyProps, headerGroups, rows, prepareRow, isEmptyResults, onChangeFilters, }) {
|
101
|
+
const classes = useStyles();
|
102
|
+
return (React.createElement(React.Fragment, null,
|
103
|
+
React.createElement(Paper, null,
|
104
|
+
React.createElement(TableContainer, null,
|
105
|
+
React.createElement("div", { className: classes.table, ...getTableProps() },
|
106
|
+
React.createElement("div", { className: "thead" },
|
107
|
+
// Loop over the header rows
|
108
|
+
headerGroups.map((headerGroup) => (
|
109
|
+
// Apply the header row props
|
110
|
+
React.createElement("div", { ...headerGroup.getHeaderGroupProps(), className: "tr" },
|
111
|
+
// Loop over the headers in each row
|
112
|
+
headerGroup.headers.map((headerGroup) => {
|
113
|
+
var _a, _b, _c, _d, _e;
|
114
|
+
const sortingProperty = (_a = headerGroup.sorting) === null || _a === void 0 ? void 0 : _a.property;
|
115
|
+
const sortingDirection = (_b = headerGroup.sorting) === null || _b === void 0 ? void 0 : _b.direction;
|
116
|
+
return (React.createElement(Tooltip, { title: headerGroup.tooltip || '', arrow: true, key: headerGroup.id, classes: {
|
117
|
+
popper: classes.tooltip,
|
118
|
+
} },
|
119
|
+
React.createElement("div", { className: clsx('th tc', {
|
120
|
+
'is-clickable': !!sortingProperty,
|
121
|
+
}), onClick: sortingProperty
|
122
|
+
? () => {
|
123
|
+
onChangeFilters((currentFilters) => {
|
124
|
+
switch (sortingDirection) {
|
125
|
+
case 'ascending': {
|
126
|
+
return {
|
127
|
+
...currentFilters,
|
128
|
+
sorting: [
|
129
|
+
{
|
130
|
+
property: sortingProperty,
|
131
|
+
direction: 'descending',
|
132
|
+
},
|
133
|
+
],
|
134
|
+
};
|
135
|
+
}
|
136
|
+
case 'descending': {
|
137
|
+
return {
|
138
|
+
...currentFilters,
|
139
|
+
sorting: undefined,
|
140
|
+
};
|
141
|
+
}
|
142
|
+
default: {
|
143
|
+
return {
|
144
|
+
...currentFilters,
|
145
|
+
sorting: [
|
146
|
+
{
|
147
|
+
property: sortingProperty,
|
148
|
+
direction: 'ascending',
|
149
|
+
},
|
150
|
+
],
|
151
|
+
};
|
152
|
+
}
|
153
|
+
}
|
154
|
+
}, false);
|
155
|
+
}
|
156
|
+
: undefined, ...headerGroup.getHeaderProps() },
|
157
|
+
React.createElement(IsHoveringProvider, { className: "th-content" },
|
158
|
+
React.createElement("div", { className: "th-label" },
|
159
|
+
React.createElement("span", null, headerGroup.headerText),
|
160
|
+
sortingDirection && (React.createElement(SortingIcon, { fontSize: "small", color: "primary", className: clsx('th-icon', classes.sortingIcon, {
|
161
|
+
[classes.sortingIconDescending]: sortingDirection === 'descending',
|
162
|
+
}) })),
|
163
|
+
((_c = headerGroup.filter) === null || _c === void 0 ? void 0 : _c.isInvalid) ? (React.createElement(Tooltip, { title: ((_d = headerGroup.filter) === null || _d === void 0 ? void 0 : _d.validationMessage) ||
|
164
|
+
'' },
|
165
|
+
React.createElement(WarningIcon, { fontSize: "small", color: "error", className: "th-icon" }))) : ((_e = headerGroup.filter) === null || _e === void 0 ? void 0 : _e.value) ? (React.createElement(FilterListIcon, { fontSize: "small", color: "primary", className: "th-icon" })) : null),
|
166
|
+
React.createElement(HeaderCellMoreButton, { headerGroup: headerGroup, onHide: headerGroup.toggleHidden }),
|
167
|
+
React.createElement("div", { ...headerGroup.getResizerProps(), className: clsx('resizer', {
|
168
|
+
'is-resizing': headerGroup.isResizing,
|
169
|
+
}), onClick: (event) => {
|
170
|
+
event.stopPropagation();
|
171
|
+
} })))));
|
172
|
+
}))))),
|
173
|
+
!isEmptyResults ? (React.createElement("div", { ...getTableBodyProps(), className: "tbody" },
|
174
|
+
// Loop over the table rows
|
175
|
+
rows.map((row) => {
|
176
|
+
// Prepare the row for display
|
177
|
+
prepareRow(row);
|
178
|
+
return (
|
179
|
+
// Apply the row props
|
180
|
+
React.createElement("div", { ...row.getRowProps(), className: "tr" },
|
181
|
+
// Loop over the rows cells
|
182
|
+
row.cells.map((cell) => {
|
183
|
+
// Apply the cell props
|
184
|
+
return (React.createElement(IsHoveringProvider, { ...cell.getCellProps(), className: clsx('td tc', {
|
185
|
+
'is-resizing': cell.column.isResizing,
|
186
|
+
}) },
|
187
|
+
// Render the cell contents
|
188
|
+
cell.render('Cell')));
|
189
|
+
})));
|
190
|
+
}))) : (React.createElement(Box, { padding: 2 }))))),
|
191
|
+
isEmptyResults && (React.createElement(NoResourcesYet, { IconComponent: FormStoreIcon, title: "No Records Found..." }, "There are no Submissions matching your filters."))));
|
192
|
+
}
|
193
|
+
export default React.memo(FormStoreTable);
|
194
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/formStore/table/index.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { TableInstance } from 'react-table'\nimport clsx from 'clsx'\nimport { Box, Paper, TableContainer, Tooltip } from '@mui/material'\nimport makeStyles from '@mui/styles/makeStyles'\nimport {\n FilterList as FilterListIcon,\n Warning as WarningIcon,\n ArrowDownward as SortingIcon,\n} from '@mui/icons-material'\nimport { SubmissionTypes } from '@oneblink/types'\nimport { IsHoveringProvider } from '../../../hooks/useIsHovering'\nimport { NoResourcesYet } from '../../NoResourcesYet'\nimport FormStoreIcon from '../display/FormStoreIcon'\nimport HeaderCellMoreButton from './HeaderCellMoreButton'\nimport { OnChangeFilters } from '../../../hooks/useInfiniteScrollDataLoad'\nimport { formStoreService } from '@oneblink/apps'\n\nconst useStyles = makeStyles((theme) => ({\n tooltip: {\n zIndex: theme.zIndex.drawer,\n },\n sortingIcon: {\n transition: theme.transitions.create('transform'),\n },\n sortingIconDescending: {\n transform: 'rotate(180deg)',\n },\n table: {\n display: 'inline-block',\n '& .tbody .tr:last-child .tc': {\n borderBottom: 0,\n },\n '& .tc': {\n padding: theme.spacing(1),\n borderBottomColor: theme.palette.divider,\n borderBottom: '1px solid',\n display: 'flex',\n alignItems: 'center',\n '&.is-clickable': {\n cursor: 'pointer',\n transition: theme.transitions.create('transform'),\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n },\n },\n '& .td': {\n position: 'relative',\n borderRight: '1px solid',\n borderRightColor: theme.palette.divider,\n overflowX: 'hidden',\n // minus 1 to cater for the border\n minHeight: `${parseInt(theme.spacing(5.5)) - 1}px`,\n '&.is-resizing': {\n borderRightStyle: 'dashed',\n },\n },\n '& .th': {\n position: 'relative',\n fontWeight: theme.typography.fontWeightBold,\n paddingRight: 0,\n '& .th-content': {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n borderRight: '1px solid',\n borderRightColor: theme.palette.divider,\n paddingRight: theme.spacing(),\n '& .th-label': {\n display: 'inline-flex',\n alignItems: 'center',\n '& .th-icon': {\n marginLeft: theme.spacing(),\n },\n },\n },\n '& .resizer': {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderWidth: 0,\n borderLeftStyle: 'solid',\n borderRightStyle: 'solid',\n borderColor: theme.palette.divider,\n paddingTop: theme.spacing(),\n paddingBottom: theme.spacing(),\n paddingRight: `calc(${theme.spacing(1)} + 1px)`,\n position: 'absolute',\n right: 0,\n top: theme.spacing(0.5),\n bottom: theme.spacing(0.5),\n transform: `translateX(calc(${theme.spacing(0.5)} + 1px))`,\n zIndex: 1,\n // prevents from scrolling while dragging on touch devices\n touchAction: 'none',\n '&:hover': {\n borderWidth: '1px',\n },\n '&.is-resizing': {\n borderWidth: '1px',\n borderColor: theme.palette.grey[700],\n },\n },\n },\n },\n}))\n\ntype FormStoreTableInstance = TableInstance<SubmissionTypes.FormStoreRecord>\n\nfunction FormStoreTable({\n getTableProps,\n getTableBodyProps,\n headerGroups,\n rows,\n prepareRow,\n isEmptyResults,\n onChangeFilters,\n}: {\n getTableProps: FormStoreTableInstance['getTableProps']\n getTableBodyProps: FormStoreTableInstance['getTableBodyProps']\n headerGroups: FormStoreTableInstance['headerGroups']\n rows: FormStoreTableInstance['rows']\n prepareRow: FormStoreTableInstance['prepareRow']\n isEmptyResults: boolean\n onChangeFilters: OnChangeFilters<formStoreService.FormStoreFilters>\n}) {\n const classes = useStyles()\n\n return (\n <>\n <Paper>\n <TableContainer>\n <div className={classes.table} {...getTableProps()}>\n <div className=\"thead\">\n {\n // Loop over the header rows\n headerGroups.map((headerGroup) => (\n // Apply the header row props\n <div {...headerGroup.getHeaderGroupProps()} className=\"tr\">\n {\n // Loop over the headers in each row\n headerGroup.headers.map((headerGroup) => {\n const sortingProperty = headerGroup.sorting?.property\n const sortingDirection = headerGroup.sorting?.direction\n\n return (\n <Tooltip\n title={headerGroup.tooltip || ''}\n arrow\n key={headerGroup.id}\n classes={{\n popper: classes.tooltip,\n }}\n >\n <div\n className={clsx('th tc', {\n 'is-clickable': !!sortingProperty,\n })}\n onClick={\n sortingProperty\n ? () => {\n onChangeFilters((currentFilters) => {\n switch (sortingDirection) {\n case 'ascending': {\n return {\n ...currentFilters,\n sorting: [\n {\n property: sortingProperty,\n direction: 'descending',\n },\n ],\n }\n }\n case 'descending': {\n return {\n ...currentFilters,\n sorting: undefined,\n }\n }\n default: {\n return {\n ...currentFilters,\n sorting: [\n {\n property: sortingProperty,\n direction: 'ascending',\n },\n ],\n }\n }\n }\n }, false)\n }\n : undefined\n }\n // Apply the header cell props\n {...headerGroup.getHeaderProps()}\n >\n <IsHoveringProvider className=\"th-content\">\n <div className=\"th-label\">\n <span>{headerGroup.headerText}</span>\n {sortingDirection && (\n <SortingIcon\n fontSize=\"small\"\n color=\"primary\"\n className={clsx(\n 'th-icon',\n classes.sortingIcon,\n {\n [classes.sortingIconDescending]:\n sortingDirection === 'descending',\n },\n )}\n />\n )}\n {headerGroup.filter?.isInvalid ? (\n <Tooltip\n title={\n headerGroup.filter?.validationMessage ||\n ''\n }\n >\n <WarningIcon\n fontSize=\"small\"\n color=\"error\"\n className=\"th-icon\"\n />\n </Tooltip>\n ) : headerGroup.filter?.value ? (\n <FilterListIcon\n fontSize=\"small\"\n color=\"primary\"\n className=\"th-icon\"\n />\n ) : null}\n </div>\n <HeaderCellMoreButton\n headerGroup={headerGroup}\n onHide={headerGroup.toggleHidden}\n />\n <div\n {...headerGroup.getResizerProps()}\n className={clsx('resizer', {\n 'is-resizing': headerGroup.isResizing,\n })}\n onClick={(event) => {\n event.stopPropagation()\n }}\n />\n </IsHoveringProvider>\n </div>\n </Tooltip>\n )\n })\n }\n </div>\n ))\n }\n </div>\n {!isEmptyResults ? (\n <div {...getTableBodyProps()} className=\"tbody\">\n {\n // Loop over the table rows\n rows.map((row) => {\n // Prepare the row for display\n prepareRow(row)\n return (\n // Apply the row props\n <div {...row.getRowProps()} className=\"tr\">\n {\n // Loop over the rows cells\n row.cells.map((cell) => {\n // Apply the cell props\n return (\n <IsHoveringProvider\n {...cell.getCellProps()}\n className={clsx('td tc', {\n 'is-resizing': cell.column.isResizing,\n })}\n >\n {\n // Render the cell contents\n cell.render('Cell')\n }\n </IsHoveringProvider>\n )\n })\n }\n </div>\n )\n })\n }\n </div>\n ) : (\n <Box padding={2} />\n )}\n </div>\n </TableContainer>\n </Paper>\n\n {isEmptyResults && (\n <NoResourcesYet\n IconComponent={FormStoreIcon}\n title=\"No Records Found...\"\n >\n There are no Submissions matching your filters.\n </NoResourcesYet>\n )}\n </>\n )\n}\n\nexport default React.memo(FormStoreTable)\n"]}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { FormStoreRecord } from '@oneblink/types/typescript/submissions';
|
2
|
+
import { FormTypes } from '@oneblink/types';
|
3
|
+
import { OnChangeFilters } from '../../../hooks/useInfiniteScrollDataLoad';
|
4
|
+
import { formStoreService } from '@oneblink/apps';
|
5
|
+
export default function FormStoreTable({ form, formElements, formStoreRecords, filters, onChangeFilters, submissionIdValidationMessage, }: {
|
6
|
+
formStoreRecords: FormStoreRecord[];
|
7
|
+
form: FormTypes.Form;
|
8
|
+
formElements: FormTypes.FormElementWithName[];
|
9
|
+
filters: formStoreService.FormStoreFilters;
|
10
|
+
onChangeFilters: OnChangeFilters<formStoreService.FormStoreFilters>;
|
11
|
+
submissionIdValidationMessage?: string;
|
12
|
+
}): import("react-table").TableInstance<FormStoreRecord>;
|
@@ -0,0 +1,130 @@
|
|
1
|
+
import * as React from 'react';
|
2
|
+
import { useFlexLayout, useResizeColumns, useTable, } from 'react-table';
|
3
|
+
import { format } from 'date-fns';
|
4
|
+
import generateColumns from './generateColumns';
|
5
|
+
import ActionedByTableCell from './ActionedByTableCell';
|
6
|
+
import TableCellCopyButton from './TableCellCopyButton';
|
7
|
+
import { localisationService } from '@oneblink/apps';
|
8
|
+
const defaultColumn = {
|
9
|
+
minWidth: 150,
|
10
|
+
width: 225,
|
11
|
+
};
|
12
|
+
const localStorageKey = (formId) => `REACT_TABLE_STATE_FORM_STORE_${formId}`;
|
13
|
+
export default function FormStoreTable({ form, formElements, formStoreRecords, filters, onChangeFilters, submissionIdValidationMessage, }) {
|
14
|
+
const columns = React.useMemo(() => {
|
15
|
+
var _a, _b, _c, _d;
|
16
|
+
return generateColumns({
|
17
|
+
formElements,
|
18
|
+
filters,
|
19
|
+
parentElementNames: [],
|
20
|
+
onChangeFilters,
|
21
|
+
allowCopy: true,
|
22
|
+
initialColumns: [
|
23
|
+
{
|
24
|
+
id: 'SUBMITTED_AT',
|
25
|
+
headerText: 'Submission Date Time',
|
26
|
+
sorting: {
|
27
|
+
property: 'dateTimeSubmitted',
|
28
|
+
direction: (_b = (_a = filters.sorting) === null || _a === void 0 ? void 0 : _a.find(({ property }) => property === 'dateTimeSubmitted')) === null || _b === void 0 ? void 0 : _b.direction,
|
29
|
+
},
|
30
|
+
filter: {
|
31
|
+
type: 'DATETIME',
|
32
|
+
value: filters.dateTimeSubmitted,
|
33
|
+
onChange: (newValue) => {
|
34
|
+
onChangeFilters((currentFilters) => ({
|
35
|
+
...currentFilters,
|
36
|
+
dateTimeSubmitted: newValue,
|
37
|
+
}), false);
|
38
|
+
},
|
39
|
+
},
|
40
|
+
Cell: ({ row: { original: formStoreRecord }, }) => {
|
41
|
+
const text = format(new Date(formStoreRecord.dateTimeSubmitted), localisationService.getDateFnsFormats().longDateTime);
|
42
|
+
return (React.createElement(React.Fragment, null,
|
43
|
+
text,
|
44
|
+
React.createElement(TableCellCopyButton, { text: text })));
|
45
|
+
},
|
46
|
+
},
|
47
|
+
{
|
48
|
+
id: 'SUBMITTED_BY',
|
49
|
+
headerText: 'Submitted By',
|
50
|
+
sorting: undefined,
|
51
|
+
filter: {
|
52
|
+
type: 'TEXT',
|
53
|
+
value: filters.submittedBy,
|
54
|
+
onChange: (newValue) => {
|
55
|
+
onChangeFilters((currentFilters) => ({
|
56
|
+
...currentFilters,
|
57
|
+
submittedBy: newValue,
|
58
|
+
}), true);
|
59
|
+
},
|
60
|
+
},
|
61
|
+
Cell: ({ row: { original: formStoreRecord }, }) => (React.createElement(ActionedByTableCell, { userProfile: formStoreRecord.user, developerKey: formStoreRecord.key, variant: "outlined" })),
|
62
|
+
},
|
63
|
+
{
|
64
|
+
id: 'SUBMISSION_ID',
|
65
|
+
headerText: 'Submission Id',
|
66
|
+
sorting: undefined,
|
67
|
+
filter: {
|
68
|
+
type: 'SUBMISSION_ID',
|
69
|
+
value: filters.submissionId,
|
70
|
+
validationMessage: submissionIdValidationMessage,
|
71
|
+
isInvalid: !!submissionIdValidationMessage,
|
72
|
+
onChange: (newValue) => {
|
73
|
+
onChangeFilters((currentFilters) => ({
|
74
|
+
...currentFilters,
|
75
|
+
submissionId: newValue,
|
76
|
+
}), true);
|
77
|
+
},
|
78
|
+
},
|
79
|
+
Cell: ({ row: { original: formStoreRecord }, }) => (React.createElement(React.Fragment, null,
|
80
|
+
formStoreRecord.submissionId,
|
81
|
+
React.createElement(TableCellCopyButton, { text: formStoreRecord.submissionId }))),
|
82
|
+
},
|
83
|
+
{
|
84
|
+
id: 'EXTERNAL_ID',
|
85
|
+
headerText: 'External Id',
|
86
|
+
sorting: {
|
87
|
+
property: 'externalId',
|
88
|
+
direction: (_d = (_c = filters.sorting) === null || _c === void 0 ? void 0 : _c.find(({ property }) => property === 'externalId')) === null || _d === void 0 ? void 0 : _d.direction,
|
89
|
+
},
|
90
|
+
filter: {
|
91
|
+
type: 'TEXT',
|
92
|
+
value: filters.externalId,
|
93
|
+
onChange: (newValue) => {
|
94
|
+
onChangeFilters((currentFilters) => ({
|
95
|
+
...currentFilters,
|
96
|
+
externalId: newValue,
|
97
|
+
}), true);
|
98
|
+
},
|
99
|
+
},
|
100
|
+
Cell: ({ row: { original: formStoreRecord }, }) => (React.createElement(React.Fragment, null,
|
101
|
+
formStoreRecord.externalId,
|
102
|
+
formStoreRecord.externalId && (React.createElement(TableCellCopyButton, { text: formStoreRecord.externalId })))),
|
103
|
+
},
|
104
|
+
],
|
105
|
+
});
|
106
|
+
}, [filters, formElements, onChangeFilters, submissionIdValidationMessage]);
|
107
|
+
const [initialState] = React.useState(() => {
|
108
|
+
const text = localStorage.getItem(localStorageKey(form.id));
|
109
|
+
if (text) {
|
110
|
+
return JSON.parse(text);
|
111
|
+
}
|
112
|
+
});
|
113
|
+
const table = useTable({
|
114
|
+
columns,
|
115
|
+
data: formStoreRecords,
|
116
|
+
defaultColumn,
|
117
|
+
autoResetHiddenColumns: false,
|
118
|
+
autoResetResize: false,
|
119
|
+
initialState: initialState
|
120
|
+
? initialState
|
121
|
+
: { hiddenColumns: ['SUBMISSION_ID', 'EXTERNAL_ID'] },
|
122
|
+
}, useFlexLayout, useResizeColumns);
|
123
|
+
React.useEffect(() => {
|
124
|
+
if (!table.state.columnResizing.isResizingColumn) {
|
125
|
+
localStorage.setItem(localStorageKey(form.id), JSON.stringify(table.state));
|
126
|
+
}
|
127
|
+
}, [form.id, table.state]);
|
128
|
+
return table;
|
129
|
+
}
|
130
|
+
//# sourceMappingURL=useFormStoreTable.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"useFormStoreTable.js","sourceRoot":"","sources":["../../../../src/components/formStore/table/useFormStoreTable.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { FormStoreRecord } from '@oneblink/types/typescript/submissions'\nimport {\n CellProps,\n useFlexLayout,\n useResizeColumns,\n useTable,\n TableState,\n} from 'react-table'\nimport { format } from 'date-fns'\nimport generateColumns from './generateColumns'\nimport ActionedByTableCell from './ActionedByTableCell'\nimport TableCellCopyButton from './TableCellCopyButton'\nimport { FormTypes } from '@oneblink/types'\nimport { OnChangeFilters } from '../../../hooks/useInfiniteScrollDataLoad'\nimport { formStoreService, localisationService } from '@oneblink/apps'\n\nconst defaultColumn = {\n minWidth: 150,\n width: 225,\n}\n\nconst localStorageKey = (formId: number) =>\n `REACT_TABLE_STATE_FORM_STORE_${formId}`\n\nexport default function FormStoreTable({\n form,\n formElements,\n formStoreRecords,\n filters,\n onChangeFilters,\n submissionIdValidationMessage,\n}: {\n formStoreRecords: FormStoreRecord[]\n form: FormTypes.Form\n formElements: FormTypes.FormElementWithName[]\n filters: formStoreService.FormStoreFilters\n onChangeFilters: OnChangeFilters<formStoreService.FormStoreFilters>\n submissionIdValidationMessage?: string\n}) {\n const columns = React.useMemo(() => {\n return generateColumns({\n formElements,\n filters,\n parentElementNames: [],\n onChangeFilters,\n allowCopy: true,\n initialColumns: [\n {\n id: 'SUBMITTED_AT',\n headerText: 'Submission Date Time',\n sorting: {\n property: 'dateTimeSubmitted',\n direction: filters.sorting?.find(\n ({ property }) => property === 'dateTimeSubmitted',\n )?.direction,\n },\n filter: {\n type: 'DATETIME',\n value: filters.dateTimeSubmitted as\n | { $gte?: string; $lte?: string }\n | undefined,\n onChange: (newValue) => {\n onChangeFilters(\n (currentFilters) => ({\n ...currentFilters,\n dateTimeSubmitted: newValue,\n }),\n false,\n )\n },\n },\n Cell: ({\n row: { original: formStoreRecord },\n }: CellProps<FormStoreRecord>) => {\n const text = format(\n new Date(formStoreRecord.dateTimeSubmitted),\n localisationService.getDateFnsFormats().longDateTime,\n )\n return (\n <>\n {text}\n <TableCellCopyButton text={text} />\n </>\n )\n },\n },\n {\n id: 'SUBMITTED_BY',\n headerText: 'Submitted By',\n sorting: undefined,\n filter: {\n type: 'TEXT',\n value: filters.submittedBy as { $regex: string } | undefined,\n onChange: (newValue) => {\n onChangeFilters(\n (currentFilters) => ({\n ...currentFilters,\n submittedBy: newValue,\n }),\n true,\n )\n },\n },\n Cell: ({\n row: { original: formStoreRecord },\n }: CellProps<FormStoreRecord>) => (\n <ActionedByTableCell\n userProfile={formStoreRecord.user}\n developerKey={formStoreRecord.key}\n variant=\"outlined\"\n />\n ),\n },\n {\n id: 'SUBMISSION_ID',\n headerText: 'Submission Id',\n sorting: undefined,\n filter: {\n type: 'SUBMISSION_ID',\n value: filters.submissionId as { $eq: string } | undefined,\n validationMessage: submissionIdValidationMessage,\n isInvalid: !!submissionIdValidationMessage,\n onChange: (newValue) => {\n onChangeFilters(\n (currentFilters) => ({\n ...currentFilters,\n submissionId: newValue,\n }),\n true,\n )\n },\n },\n Cell: ({\n row: { original: formStoreRecord },\n }: CellProps<FormStoreRecord>) => (\n <>\n {formStoreRecord.submissionId}\n <TableCellCopyButton text={formStoreRecord.submissionId} />\n </>\n ),\n },\n {\n id: 'EXTERNAL_ID',\n headerText: 'External Id',\n sorting: {\n property: 'externalId',\n direction: filters.sorting?.find(\n ({ property }) => property === 'externalId',\n )?.direction,\n },\n filter: {\n type: 'TEXT',\n value: filters.externalId as { $regex: string } | undefined,\n onChange: (newValue) => {\n onChangeFilters(\n (currentFilters) => ({\n ...currentFilters,\n externalId: newValue,\n }),\n true,\n )\n },\n },\n Cell: ({\n row: { original: formStoreRecord },\n }: CellProps<FormStoreRecord>) => (\n <>\n {formStoreRecord.externalId}\n {formStoreRecord.externalId && (\n <TableCellCopyButton text={formStoreRecord.externalId} />\n )}\n </>\n ),\n },\n ],\n })\n }, [filters, formElements, onChangeFilters, submissionIdValidationMessage])\n\n const [initialState] = React.useState<Partial<TableState<FormStoreRecord>>>(\n () => {\n const text = localStorage.getItem(localStorageKey(form.id))\n if (text) {\n return JSON.parse(text)\n }\n },\n )\n\n const table = useTable(\n {\n columns,\n data: formStoreRecords,\n defaultColumn,\n autoResetHiddenColumns: false,\n autoResetResize: false,\n initialState: initialState\n ? initialState\n : { hiddenColumns: ['SUBMISSION_ID', 'EXTERNAL_ID'] },\n },\n useFlexLayout,\n useResizeColumns,\n )\n\n React.useEffect(() => {\n if (!table.state.columnResizing.isResizingColumn) {\n localStorage.setItem(\n localStorageKey(form.id),\n JSON.stringify(table.state),\n )\n }\n }, [form.id, table.state])\n\n return table\n}\n"]}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import * as React from 'react';
|
2
|
+
declare type Props = {
|
3
|
+
IconComponent: React.ComponentType<{
|
4
|
+
className: string;
|
5
|
+
}>;
|
6
|
+
title: string;
|
7
|
+
variant: 'primary' | 'success' | 'error' | 'warning';
|
8
|
+
gutterTop?: boolean;
|
9
|
+
gutterBottom?: boolean;
|
10
|
+
children?: React.ReactNode;
|
11
|
+
action?: React.ReactNode;
|
12
|
+
};
|
13
|
+
declare const _default: React.NamedExoticComponent<Props>;
|
14
|
+
export default _default;
|
@@ -0,0 +1,68 @@
|
|
1
|
+
import * as React from 'react';
|
2
|
+
import clsx from 'clsx';
|
3
|
+
import makeStyles from '@mui/styles/makeStyles';
|
4
|
+
import { Typography, Grid, Container } from '@mui/material';
|
5
|
+
// Styles
|
6
|
+
const useStyles = makeStyles((theme) => ({
|
7
|
+
gutterTop: {
|
8
|
+
paddingTop: theme.spacing(4),
|
9
|
+
},
|
10
|
+
gutterBottom: {
|
11
|
+
marginBottom: theme.spacing(4),
|
12
|
+
},
|
13
|
+
iconContainer: {
|
14
|
+
textAlign: 'center',
|
15
|
+
},
|
16
|
+
icon: {
|
17
|
+
fontSize: theme.spacing(16),
|
18
|
+
},
|
19
|
+
primaryText: {
|
20
|
+
color: theme.palette.primary.main,
|
21
|
+
},
|
22
|
+
successText: {
|
23
|
+
color: theme.palette.success.main,
|
24
|
+
},
|
25
|
+
errorText: {
|
26
|
+
color: theme.palette.error.main,
|
27
|
+
},
|
28
|
+
warningText: {
|
29
|
+
color: theme.palette.warning.main,
|
30
|
+
},
|
31
|
+
}));
|
32
|
+
// TODO: Come back to this
|
33
|
+
// interface StyledIconContainerProps {
|
34
|
+
// gutterTop?: boolean
|
35
|
+
// }
|
36
|
+
// const StyledIconContainer = styled('div', {
|
37
|
+
// shouldForwardProp: (prop) => prop !== 'gutterTop',
|
38
|
+
// })<StyledIconContainerProps>(({ theme, gutterTop }) => ({
|
39
|
+
// textAlign: 'center',
|
40
|
+
// ...(gutterTop
|
41
|
+
// ? {
|
42
|
+
// paddingTop: theme.spacing(4),
|
43
|
+
// }
|
44
|
+
// : {}),
|
45
|
+
// }))
|
46
|
+
function LargeIconMessage({ IconComponent, title, variant, gutterTop, gutterBottom, children, action, }) {
|
47
|
+
const classes = useStyles();
|
48
|
+
const textClassName = clsx({
|
49
|
+
[classes.primaryText]: variant === 'primary',
|
50
|
+
[classes.successText]: variant === 'success',
|
51
|
+
[classes.errorText]: variant === 'error',
|
52
|
+
[classes.warningText]: variant === 'warning',
|
53
|
+
});
|
54
|
+
return (React.createElement(Container, { maxWidth: "sm" },
|
55
|
+
React.createElement("div", { className: clsx(classes.iconContainer, {
|
56
|
+
[classes.gutterTop]: gutterTop,
|
57
|
+
}) },
|
58
|
+
React.createElement(IconComponent, { className: clsx(classes.icon, textClassName) })),
|
59
|
+
React.createElement(Typography, { variant: "h5", align: "center", gutterBottom: true, className: textClassName }, title),
|
60
|
+
children ? (React.createElement(Typography, { align: "center", variant: "body2", paragraph: !!action, className: clsx({
|
61
|
+
[classes.gutterBottom]: !action && gutterBottom,
|
62
|
+
}) }, children)) : null,
|
63
|
+
action && (React.createElement(Grid, { container: true, justifyContent: "center", className: clsx({
|
64
|
+
[classes.gutterBottom]: gutterBottom,
|
65
|
+
}) }, action))));
|
66
|
+
}
|
67
|
+
export default React.memo(LargeIconMessage);
|
68
|
+
//# sourceMappingURL=LargeIconMessage.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"LargeIconMessage.js","sourceRoot":"","sources":["../../../src/components/messages/LargeIconMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAc3D,SAAS;AACT,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACvC,SAAS,EAAE;QACT,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;KAC7B;IACD,YAAY,EAAE;QACZ,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;KAC/B;IACD,aAAa,EAAE;QACb,SAAS,EAAE,QAAQ;KACpB;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;KAC5B;IACD,WAAW,EAAE;QACX,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI;KAClC;IACD,WAAW,EAAE;QACX,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI;KAClC;IACD,SAAS,EAAE;QACT,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI;KAChC;IACD,WAAW,EAAE;QACX,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI;KAClC;CACF,CAAC,CAAC,CAAA;AAEH,0BAA0B;AAC1B,uCAAuC;AACvC,wBAAwB;AACxB,IAAI;AAEJ,8CAA8C;AAC9C,uDAAuD;AACvD,4DAA4D;AAC5D,yBAAyB;AACzB,kBAAkB;AAClB,UAAU;AACV,wCAAwC;AACxC,UAAU;AACV,aAAa;AACb,MAAM;AAEN,SAAS,gBAAgB,CAAC,EACxB,aAAa,EACb,KAAK,EACL,OAAO,EACP,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,MAAM,GACA;IACN,MAAM,OAAO,GAAG,SAAS,EAAE,CAAA;IAC3B,MAAM,aAAa,GAAG,IAAI,CAAC;QACzB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,KAAK,SAAS;QAC5C,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,KAAK,SAAS;QAC5C,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,KAAK,OAAO;QACxC,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,KAAK,SAAS;KAC7C,CAAC,CAAA;IACF,OAAO,CACL,oBAAC,SAAS,IAAC,QAAQ,EAAC,IAAI;QACtB,6BACE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE;gBACrC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,SAAS;aAC/B,CAAC;YAEF,oBAAC,aAAa,IAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,GAAI,CAC3D;QACN,oBAAC,UAAU,IACT,OAAO,EAAC,IAAI,EACZ,KAAK,EAAC,QAAQ,EACd,YAAY,QACZ,SAAS,EAAE,aAAa,IAEvB,KAAK,CACK;QACZ,QAAQ,CAAC,CAAC,CAAC,CACV,oBAAC,UAAU,IACT,KAAK,EAAC,QAAQ,EACd,OAAO,EAAC,OAAO,EACf,SAAS,EAAE,CAAC,CAAC,MAAM,EACnB,SAAS,EAAE,IAAI,CAAC;gBACd,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,IAAI,YAAY;aAChD,CAAC,IAED,QAAQ,CACE,CACd,CAAC,CAAC,CAAC,IAAI;QACP,MAAM,IAAI,CACT,oBAAC,IAAI,IACH,SAAS,QACT,cAAc,EAAC,QAAQ,EACvB,SAAS,EAAE,IAAI,CAAC;gBACd,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,YAAY;aACrC,CAAC,IAED,MAAM,CACF,CACR,CACS,CACb,CAAA;AACH,CAAC;AAED,eAAe,KAAK,CAAC,IAAI,CAAQ,gBAAgB,CAAC,CAAA","sourcesContent":["import * as React from 'react'\nimport clsx from 'clsx'\nimport makeStyles from '@mui/styles/makeStyles'\nimport { Typography, Grid, Container } from '@mui/material'\n// import { styled } from '@mui/material/styles'\n\ntype Props = {\n IconComponent: React.ComponentType<{\n className: string\n }>\n title: string\n variant: 'primary' | 'success' | 'error' | 'warning'\n gutterTop?: boolean\n gutterBottom?: boolean\n children?: React.ReactNode\n action?: React.ReactNode\n}\n// Styles\nconst useStyles = makeStyles((theme) => ({\n gutterTop: {\n paddingTop: theme.spacing(4),\n },\n gutterBottom: {\n marginBottom: theme.spacing(4),\n },\n iconContainer: {\n textAlign: 'center',\n },\n icon: {\n fontSize: theme.spacing(16),\n },\n primaryText: {\n color: theme.palette.primary.main,\n },\n successText: {\n color: theme.palette.success.main,\n },\n errorText: {\n color: theme.palette.error.main,\n },\n warningText: {\n color: theme.palette.warning.main,\n },\n}))\n\n// TODO: Come back to this\n// interface StyledIconContainerProps {\n// gutterTop?: boolean\n// }\n\n// const StyledIconContainer = styled('div', {\n// shouldForwardProp: (prop) => prop !== 'gutterTop',\n// })<StyledIconContainerProps>(({ theme, gutterTop }) => ({\n// textAlign: 'center',\n// ...(gutterTop\n// ? {\n// paddingTop: theme.spacing(4),\n// }\n// : {}),\n// }))\n\nfunction LargeIconMessage({\n IconComponent,\n title,\n variant,\n gutterTop,\n gutterBottom,\n children,\n action,\n}: Props) {\n const classes = useStyles()\n const textClassName = clsx({\n [classes.primaryText]: variant === 'primary',\n [classes.successText]: variant === 'success',\n [classes.errorText]: variant === 'error',\n [classes.warningText]: variant === 'warning',\n })\n return (\n <Container maxWidth=\"sm\">\n <div\n className={clsx(classes.iconContainer, {\n [classes.gutterTop]: gutterTop,\n })}\n >\n <IconComponent className={clsx(classes.icon, textClassName)} />\n </div>\n <Typography\n variant=\"h5\"\n align=\"center\"\n gutterBottom\n className={textClassName}\n >\n {title}\n </Typography>\n {children ? (\n <Typography\n align=\"center\"\n variant=\"body2\"\n paragraph={!!action}\n className={clsx({\n [classes.gutterBottom]: !action && gutterBottom,\n })}\n >\n {children}\n </Typography>\n ) : null}\n {action && (\n <Grid\n container\n justifyContent=\"center\"\n className={clsx({\n [classes.gutterBottom]: gutterBottom,\n })}\n >\n {action}\n </Grid>\n )}\n </Container>\n )\n}\n\nexport default React.memo<Props>(LargeIconMessage)\n"]}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import * as React from 'react';
|
2
|
+
import { MobileDatePickerProps } from '@mui/x-date-pickers';
|
3
|
+
import { TextField, IconButton } from '@mui/material';
|
4
|
+
declare type RemainingPickerProps = Omit<MobileDatePickerProps<Date>, 'onError' | 'renderInput' | 'toolbarFormat' | 'rightArrowIcon' | 'leftArrowIcon' | 'maxDate' | 'minDate' | 'inputFormat'>;
|
5
|
+
declare type TextFieldProps = React.ComponentProps<typeof TextField>;
|
6
|
+
declare type IconButtonProps = React.ComponentProps<typeof IconButton>;
|
7
|
+
declare type Props = RemainingPickerProps & {
|
8
|
+
name?: string;
|
9
|
+
label?: string;
|
10
|
+
maxDate?: string | Date;
|
11
|
+
maxDateMessage?: string;
|
12
|
+
minDate?: string | Date;
|
13
|
+
minDateMessage?: string;
|
14
|
+
margin?: TextFieldProps['margin'];
|
15
|
+
size?: TextFieldProps['size'];
|
16
|
+
placeholder?: string;
|
17
|
+
InputProps?: TextFieldProps['InputProps'];
|
18
|
+
inputVariant?: TextFieldProps['variant'];
|
19
|
+
onBlur?: TextFieldProps['onBlur'];
|
20
|
+
startIconButton?: boolean;
|
21
|
+
endIconButton?: boolean;
|
22
|
+
iconButtonEdge?: IconButtonProps['edge'];
|
23
|
+
iconButtonSize?: IconButtonProps['size'];
|
24
|
+
helperText?: string | React.ReactNode;
|
25
|
+
error?: boolean;
|
26
|
+
required?: boolean;
|
27
|
+
'data-cypress'?: string;
|
28
|
+
};
|
29
|
+
declare const _default: React.NamedExoticComponent<Props>;
|
30
|
+
export default _default;
|
@@ -0,0 +1,58 @@
|
|
1
|
+
import * as React from 'react';
|
2
|
+
import { MobileDatePicker } from '@mui/x-date-pickers';
|
3
|
+
import { TextField, InputAdornment, IconButton } from '@mui/material';
|
4
|
+
import { DateRange } from '@mui/icons-material';
|
5
|
+
import useBooleanState from '../../hooks/useBooleanState';
|
6
|
+
import { localisationService } from '@oneblink/apps';
|
7
|
+
const emptyFn = () => {
|
8
|
+
//
|
9
|
+
};
|
10
|
+
const V4CompatibleDatePicker = ({ name, label, maxDate, maxDateMessage, minDate, minDateMessage, margin, size, placeholder, InputProps, onChange, inputVariant, onBlur, disabled, startIconButton, endIconButton, iconButtonEdge, iconButtonSize, helperText: helperTextProp, error, required, 'data-cypress': dataCypress, ...rest }) => {
|
11
|
+
const [isOpen, setIsOpen, setIsClosed] = useBooleanState(false);
|
12
|
+
const [helperText, setHelperText] = React.useState(undefined);
|
13
|
+
const handleError = React.useCallback((error) => {
|
14
|
+
switch (error) {
|
15
|
+
case 'invalidDate': {
|
16
|
+
return setHelperText('Invalid Date Time');
|
17
|
+
}
|
18
|
+
case 'maxDate': {
|
19
|
+
return setHelperText(maxDateMessage);
|
20
|
+
}
|
21
|
+
case 'minDate': {
|
22
|
+
return setHelperText(minDateMessage);
|
23
|
+
}
|
24
|
+
default: {
|
25
|
+
return setHelperText(undefined);
|
26
|
+
}
|
27
|
+
}
|
28
|
+
}, [maxDateMessage, minDateMessage]);
|
29
|
+
const convertedMaxDate = React.useMemo(() => {
|
30
|
+
if (typeof maxDate === 'string') {
|
31
|
+
return new Date(maxDate);
|
32
|
+
}
|
33
|
+
}, [maxDate]);
|
34
|
+
const convertedMinDate = React.useMemo(() => {
|
35
|
+
if (typeof minDate === 'string') {
|
36
|
+
return new Date(minDate);
|
37
|
+
}
|
38
|
+
}, [minDate]);
|
39
|
+
const onAccept = React.useCallback((date) => {
|
40
|
+
const currentValue = rest.value instanceof Date ? rest.value.toISOString() : rest.value;
|
41
|
+
if (currentValue !== ((date === null || date === void 0 ? void 0 : date.toISOString()) || null)) {
|
42
|
+
onChange(date);
|
43
|
+
}
|
44
|
+
}, [onChange, rest.value]);
|
45
|
+
return (React.createElement(MobileDatePicker, { open: isOpen, onOpen: setIsOpen, onClose: setIsClosed, renderInput: (props) => (React.createElement(TextField, { ...props, name: name, label: label, required: required, helperText: helperTextProp || helperText, ...(error ? { error } : {}), fullWidth: true, margin: margin, size: size, placeholder: placeholder, variant: inputVariant, onBlur: onBlur, InputProps: {
|
46
|
+
startAdornment: startIconButton ? (React.createElement(InputAdornment, { position: "start" },
|
47
|
+
React.createElement(IconButton, { edge: iconButtonEdge, size: iconButtonSize, onClick: setIsOpen, disabled: disabled },
|
48
|
+
React.createElement(DateRange, null)))) : undefined,
|
49
|
+
endAdornment: endIconButton ? (React.createElement(InputAdornment, { position: "end" },
|
50
|
+
React.createElement(IconButton, { edge: iconButtonEdge, size: iconButtonSize, onClick: setIsOpen, disabled: disabled },
|
51
|
+
React.createElement(DateRange, null)))) : undefined,
|
52
|
+
...(InputProps ? InputProps : {}),
|
53
|
+
}, "data-cypress": dataCypress })), maxDate: convertedMaxDate, minDate: convertedMinDate, onError: handleError,
|
54
|
+
// This triggers everytime a component of the while date changes within the picker
|
55
|
+
onChange: emptyFn, onAccept: onAccept, inputFormat: localisationService.getDateFnsFormats().shortDateTime, disabled: disabled, ...rest }));
|
56
|
+
};
|
57
|
+
export default React.memo(V4CompatibleDatePicker);
|
58
|
+
//# sourceMappingURL=V4CompatibleDatePicker.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"V4CompatibleDatePicker.js","sourceRoot":"","sources":["../../../src/components/pickers/V4CompatibleDatePicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { MobileDatePicker, MobileDatePickerProps } from '@mui/x-date-pickers'\nimport { TextField, InputAdornment, IconButton } from '@mui/material'\nimport { DateRange } from '@mui/icons-material'\nimport useBooleanState from '../../hooks/useBooleanState'\nimport { localisationService } from '@oneblink/apps'\n\ntype RemainingPickerProps = Omit<\n MobileDatePickerProps<Date>,\n | 'onError'\n | 'renderInput'\n | 'toolbarFormat'\n | 'rightArrowIcon'\n | 'leftArrowIcon'\n | 'maxDate'\n | 'minDate'\n | 'inputFormat'\n>\n\ntype TextFieldProps = React.ComponentProps<typeof TextField>\ntype IconButtonProps = React.ComponentProps<typeof IconButton>\n\ntype Props = RemainingPickerProps & {\n name?: string\n label?: string\n maxDate?: string | Date\n maxDateMessage?: string\n minDate?: string | Date\n minDateMessage?: string\n margin?: TextFieldProps['margin']\n size?: TextFieldProps['size']\n placeholder?: string\n InputProps?: TextFieldProps['InputProps']\n inputVariant?: TextFieldProps['variant']\n onBlur?: TextFieldProps['onBlur']\n startIconButton?: boolean\n endIconButton?: boolean\n iconButtonEdge?: IconButtonProps['edge']\n iconButtonSize?: IconButtonProps['size']\n helperText?: string | React.ReactNode\n error?: boolean\n required?: boolean\n 'data-cypress'?: string\n}\n\nconst emptyFn = () => {\n //\n}\nconst V4CompatibleDatePicker = ({\n name,\n label,\n maxDate,\n maxDateMessage,\n minDate,\n minDateMessage,\n margin,\n size,\n placeholder,\n InputProps,\n onChange,\n inputVariant,\n onBlur,\n disabled,\n startIconButton,\n endIconButton,\n iconButtonEdge,\n iconButtonSize,\n helperText: helperTextProp,\n error,\n required,\n 'data-cypress': dataCypress,\n ...rest\n}: Props) => {\n const [isOpen, setIsOpen, setIsClosed] = useBooleanState(false)\n const [helperText, setHelperText] = React.useState<string | undefined>(\n undefined,\n )\n const handleError = React.useCallback(\n (error: Parameters<Required<MobileDatePickerProps>['onError']>[0]) => {\n switch (error) {\n case 'invalidDate': {\n return setHelperText('Invalid Date Time')\n }\n case 'maxDate': {\n return setHelperText(maxDateMessage)\n }\n case 'minDate': {\n return setHelperText(minDateMessage)\n }\n default: {\n return setHelperText(undefined)\n }\n }\n },\n [maxDateMessage, minDateMessage],\n )\n\n const convertedMaxDate = React.useMemo(() => {\n if (typeof maxDate === 'string') {\n return new Date(maxDate)\n }\n }, [maxDate])\n const convertedMinDate = React.useMemo(() => {\n if (typeof minDate === 'string') {\n return new Date(minDate)\n }\n }, [minDate])\n\n const onAccept = React.useCallback(\n (date: Date | null) => {\n const currentValue =\n rest.value instanceof Date ? rest.value.toISOString() : rest.value\n\n if (currentValue !== (date?.toISOString() || null)) {\n onChange(date)\n }\n },\n [onChange, rest.value],\n )\n\n return (\n <MobileDatePicker\n open={isOpen}\n onOpen={setIsOpen}\n onClose={setIsClosed}\n renderInput={(props) => (\n <TextField\n {...props}\n name={name}\n label={label}\n required={required}\n helperText={helperTextProp || helperText}\n {...(error ? { error } : {})}\n fullWidth\n margin={margin}\n size={size}\n placeholder={placeholder}\n variant={inputVariant}\n onBlur={onBlur}\n InputProps={{\n startAdornment: startIconButton ? (\n <InputAdornment position=\"start\">\n <IconButton\n edge={iconButtonEdge}\n size={iconButtonSize}\n onClick={setIsOpen}\n disabled={disabled}\n >\n <DateRange />\n </IconButton>\n </InputAdornment>\n ) : undefined,\n endAdornment: endIconButton ? (\n <InputAdornment position=\"end\">\n <IconButton\n edge={iconButtonEdge}\n size={iconButtonSize}\n onClick={setIsOpen}\n disabled={disabled}\n >\n <DateRange />\n </IconButton>\n </InputAdornment>\n ) : undefined,\n ...(InputProps ? InputProps : {}),\n }}\n data-cypress={dataCypress}\n />\n )}\n maxDate={convertedMaxDate}\n minDate={convertedMinDate}\n onError={handleError}\n // This triggers everytime a component of the while date changes within the picker\n onChange={emptyFn}\n onAccept={onAccept}\n inputFormat={localisationService.getDateFnsFormats().shortDateTime}\n disabled={disabled}\n {...rest}\n />\n )\n}\n\nexport default React.memo<Props>(V4CompatibleDatePicker)\n"]}
|