@oneblink/apps-react 6.9.0-beta.1 → 6.9.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/dist/OneBlinkAutoSaveForm.js.map +1 -1
  2. package/dist/OneBlinkForm.d.ts +25 -35
  3. package/dist/OneBlinkFormBase.d.ts +6 -1
  4. package/dist/OneBlinkFormBase.js +8 -12
  5. package/dist/OneBlinkFormBase.js.map +1 -1
  6. package/dist/OneBlinkReadOnlyForm.js +0 -1
  7. package/dist/OneBlinkReadOnlyForm.js.map +1 -1
  8. package/dist/PaymentReceipt.js.map +1 -1
  9. package/dist/components/ArcGISWebMap.js.map +1 -1
  10. package/dist/components/CustomAccordion.d.ts +12 -13
  11. package/dist/components/ErrorSnackbar.js.map +1 -1
  12. package/dist/components/MaterialIcon.d.ts +4 -2
  13. package/dist/components/MaterialIcon.js +3 -3
  14. package/dist/components/MaterialIcon.js.map +1 -1
  15. package/dist/components/ValidationErrorsCard.d.ts +11 -0
  16. package/dist/components/ValidationErrorsCard.js +185 -0
  17. package/dist/components/ValidationErrorsCard.js.map +1 -0
  18. package/dist/components/ValidationErrorsCard_framer.d.ts +10 -0
  19. package/dist/components/ValidationErrorsCard_framer.js +218 -0
  20. package/dist/components/ValidationErrorsCard_framer.js.map +1 -0
  21. package/dist/components/formStore/FormStoreTableProvider.js.map +1 -1
  22. package/dist/components/formStore/OneBlinkFormStoreDownloadButton.js.map +1 -1
  23. package/dist/components/formStore/OneBlinkFormStoreProvider.js.map +1 -1
  24. package/dist/components/formStore/OneBlinkFormStoreTable.js.map +1 -1
  25. package/dist/components/formStore/display/ElementDisplay.js.map +1 -1
  26. package/dist/components/formStore/table/ActionedByTableCell.js.map +1 -1
  27. package/dist/components/formStore/table/ColumnFilters.js.map +1 -1
  28. package/dist/components/formStore/table/FormElementTableCell.js.map +1 -1
  29. package/dist/components/formStore/table/TableCellCopyButton.js.map +1 -1
  30. package/dist/components/formStore/table/generateColumns.d.ts +3 -10
  31. package/dist/components/formStore/table/generateColumns.js.map +1 -1
  32. package/dist/components/formStore/table/useFormStoreTable.d.ts +4 -4
  33. package/dist/components/formStore/table/useFormStoreTable.js.map +1 -1
  34. package/dist/components/formStore/useFormStoreTableContext.d.ts +4 -4
  35. package/dist/components/formStore/useFormStoreTableContext.js.map +1 -1
  36. package/dist/components/payments/PaymentForm.js.map +1 -1
  37. package/dist/components/payments/WestpacQuickStreamPaymentForm.js.map +1 -1
  38. package/dist/components/renderer/AnnotationModal.js.map +1 -1
  39. package/dist/components/renderer/AutocompleteDropdown.js.map +1 -1
  40. package/dist/components/renderer/FormElementOptions.js.map +1 -1
  41. package/dist/components/renderer/LookupButton.js.map +1 -1
  42. package/dist/components/renderer/LookupNotification.js.map +1 -1
  43. package/dist/components/renderer/OneBlinkAppsErrorOriginalMessage.js.map +1 -1
  44. package/dist/components/renderer/OneBlinkFormElements.js +3 -1
  45. package/dist/components/renderer/OneBlinkFormElements.js.map +1 -1
  46. package/dist/components/renderer/PageFormElements.js.map +1 -1
  47. package/dist/components/renderer/ReverseGeocode.js.map +1 -1
  48. package/dist/components/renderer/ToggleAllCheckbox.js.map +1 -1
  49. package/dist/components/renderer/attachments/AttachmentStatus.d.ts +5 -5
  50. package/dist/components/renderer/attachments/AttachmentStatus.js.map +1 -1
  51. package/dist/components/renderer/attachments/DropdownMenu.js +6 -3
  52. package/dist/components/renderer/attachments/DropdownMenu.js.map +1 -1
  53. package/dist/components/renderer/attachments/FileCard.js +1 -1
  54. package/dist/components/renderer/attachments/FileCard.js.map +1 -1
  55. package/dist/components/renderer/attachments/FileCardContent.d.ts +2 -2
  56. package/dist/components/renderer/attachments/FileCardContent.js.map +1 -1
  57. package/dist/form-elements/FormElementABN.js.map +1 -1
  58. package/dist/form-elements/FormElementAPINSWLiquorLicence.js.map +1 -1
  59. package/dist/form-elements/FormElementArcGISWebMap.js.map +1 -1
  60. package/dist/form-elements/FormElementAutocomplete.js.map +1 -1
  61. package/dist/form-elements/FormElementBSB.js.map +1 -1
  62. package/dist/form-elements/FormElementBarcodeScanner.js.map +1 -1
  63. package/dist/form-elements/FormElementCalculation.js.map +1 -1
  64. package/dist/form-elements/FormElementCamera.js.map +1 -1
  65. package/dist/form-elements/FormElementCaptcha.js.map +1 -1
  66. package/dist/form-elements/FormElementCheckBoxes.js.map +1 -1
  67. package/dist/form-elements/FormElementCivicaNameRecord.js.map +1 -1
  68. package/dist/form-elements/FormElementCivicaStreetName.js.map +1 -1
  69. package/dist/form-elements/FormElementCompliance.js.map +1 -1
  70. package/dist/form-elements/FormElementDate.js.map +1 -1
  71. package/dist/form-elements/FormElementDateTime.js.map +1 -1
  72. package/dist/form-elements/FormElementFile.js.map +1 -1
  73. package/dist/form-elements/FormElementFiles.js.map +1 -1
  74. package/dist/form-elements/FormElementForm.js +3 -1
  75. package/dist/form-elements/FormElementForm.js.map +1 -1
  76. package/dist/form-elements/FormElementFreshdeskDependentField.js.map +1 -1
  77. package/dist/form-elements/FormElementGeoscapeAddress.js.map +1 -1
  78. package/dist/form-elements/FormElementGoogleAddress.js.map +1 -1
  79. package/dist/form-elements/FormElementHeading.js.map +1 -1
  80. package/dist/form-elements/FormElementLocation.js.map +1 -1
  81. package/dist/form-elements/FormElementNumber.js.map +1 -1
  82. package/dist/form-elements/FormElementPointAddress.js.map +1 -1
  83. package/dist/form-elements/FormElementRadio.js.map +1 -1
  84. package/dist/form-elements/FormElementRepeatableSet.js +3 -1
  85. package/dist/form-elements/FormElementRepeatableSet.js.map +1 -1
  86. package/dist/form-elements/FormElementSection.js.map +1 -1
  87. package/dist/form-elements/FormElementSelect.js.map +1 -1
  88. package/dist/form-elements/FormElementSignature.js.map +1 -1
  89. package/dist/form-elements/FormElementSummary.js.map +1 -1
  90. package/dist/form-elements/FormElementTime.js.map +1 -1
  91. package/dist/hooks/attachments/useAttachment.d.ts +3 -3
  92. package/dist/hooks/attachments/useAttachment.js.map +1 -1
  93. package/dist/hooks/attachments/useAttachments.d.ts +1 -1
  94. package/dist/hooks/attachments/useAttachments.js.map +1 -1
  95. package/dist/hooks/useCaptcha.d.ts +0 -1
  96. package/dist/hooks/useClickOutsideElement.js.map +1 -1
  97. package/dist/hooks/useConditionalLogic.js.map +1 -1
  98. package/dist/hooks/useDrafts.js.map +1 -1
  99. package/dist/hooks/useDynamicOptionsLoaderState.js.map +1 -1
  100. package/dist/hooks/useFlatpickr.js.map +1 -1
  101. package/dist/hooks/useFormDefinition.js.map +1 -1
  102. package/dist/hooks/useFormElementLookups.js.map +1 -1
  103. package/dist/hooks/useFormElementOptions.js.map +1 -1
  104. package/dist/hooks/useFormSubmissionAutoSaveState.d.ts +1 -3
  105. package/dist/hooks/useFormSubmissionAutoSaveState.js.map +1 -1
  106. package/dist/hooks/useFormSubmissionModelContext.js.map +1 -1
  107. package/dist/hooks/useFormSubmissionState.d.ts +2 -2
  108. package/dist/hooks/useFormValidation.d.ts +1 -1
  109. package/dist/hooks/useFormValidation.js.map +1 -1
  110. package/dist/hooks/useInfiniteScrollDataLoad.js.map +1 -1
  111. package/dist/hooks/useIsOffline.d.ts +1 -1
  112. package/dist/hooks/useLoadDataState.js.map +1 -1
  113. package/dist/hooks/useLogin.js.map +1 -1
  114. package/dist/hooks/useLookupNotification.js.map +1 -1
  115. package/dist/hooks/useLookups.d.ts +1 -1
  116. package/dist/hooks/useLookups.js.map +1 -1
  117. package/dist/hooks/useOneBlinkFormContainer.d.ts +0 -1
  118. package/dist/hooks/usePages.js.map +1 -1
  119. package/dist/hooks/usePendingSubmissions.js.map +1 -1
  120. package/dist/hooks/useReCAPTCHAProps.js.map +1 -1
  121. package/dist/hooks/useSignUp.js.map +1 -1
  122. package/dist/hooks/useSubmissionIdIsValid.js.map +1 -1
  123. package/dist/hooks/useToggleComplianceChildren.js.map +1 -1
  124. package/dist/hooks/useValidationClass.js.map +1 -1
  125. package/dist/services/attachments.js.map +1 -1
  126. package/dist/services/blob-utils.js.map +1 -1
  127. package/dist/services/checkBsbsAreInvalid.js.map +1 -1
  128. package/dist/services/checkIfAttachmentsExist.js.map +1 -1
  129. package/dist/services/checkIfBsbsAreValidating.js.map +1 -1
  130. package/dist/services/cleanFormSubmissionModel.js.map +1 -1
  131. package/dist/services/download-file.js.map +1 -1
  132. package/dist/services/drawTimestampOnCanvas.js.map +1 -1
  133. package/dist/services/form-validation.js.map +1 -1
  134. package/dist/services/generate-default-data.js.map +1 -1
  135. package/dist/services/generateCivicaNameRecordElements.js.map +1 -1
  136. package/dist/services/generateFreshdeskDependentFieldElements.js.map +1 -1
  137. package/dist/services/geolocation.js +1 -1
  138. package/dist/services/geolocation.js.map +1 -1
  139. package/dist/services/getDateRangeConfiguration.js.map +1 -1
  140. package/dist/services/getRepeatableSetEntriesConfiguration.js.map +1 -1
  141. package/dist/services/injectableOptions.js.map +1 -1
  142. package/dist/services/scrolling-service.js.map +1 -1
  143. package/dist/styles/ob-html.scss +3 -0
  144. package/dist/styles/section.scss +4 -0
  145. package/dist/styles/validation-errors-card.scss +180 -0
  146. package/dist/styles.css +179 -0
  147. package/dist/styles.scss +1 -0
  148. package/dist/types/form.d.ts +0 -1
  149. package/dist/utils/elementDOMIds.d.ts +13 -0
  150. package/dist/utils/elementDOMIds.js +24 -0
  151. package/dist/utils/elementDOMIds.js.map +1 -0
  152. package/dist/utils/merge-executed-lookups.js.map +1 -1
  153. package/dist/utils/scrollToElement.d.ts +6 -0
  154. package/dist/utils/scrollToElement.js +65 -0
  155. package/dist/utils/scrollToElement.js.map +1 -0
  156. package/package.json +6 -5
@@ -0,0 +1,218 @@
1
+ import { Box, Card, CardContent, Typography, Grid, IconButton, Collapse, styled, } from '@mui/material';
2
+ import * as React from 'react';
3
+ import MaterialIcon from './MaterialIcon';
4
+ import useBooleanState from '../hooks/useBooleanState';
5
+ import clsx from 'clsx';
6
+ import useFormDefinition from '../hooks/useFormDefinition';
7
+ const NO_PAGE_KEY = 'NO_PAGE';
8
+ const getValidationErrors = ({ formElementsValidation, elements, page, idPrefix, }) => {
9
+ return elements.reduce((memo, el) => {
10
+ switch (el.type) {
11
+ case 'page': {
12
+ memo.push(...getValidationErrors({
13
+ formElementsValidation,
14
+ elements: el.elements,
15
+ page: el,
16
+ idPrefix,
17
+ }));
18
+ break;
19
+ }
20
+ case 'section': {
21
+ memo.push(...getValidationErrors({
22
+ formElementsValidation,
23
+ elements: el.elements,
24
+ page,
25
+ idPrefix,
26
+ }));
27
+ break;
28
+ }
29
+ case 'repeatableSet': {
30
+ const validationData = formElementsValidation[el.name];
31
+ if (!!validationData &&
32
+ typeof validationData !== 'string' &&
33
+ validationData.type === 'repeatableSet') {
34
+ for (const [key, entry] of Object.entries(validationData.entries)) {
35
+ if (!entry)
36
+ continue;
37
+ memo.push(...getValidationErrors({
38
+ formElementsValidation: entry,
39
+ elements: el.elements,
40
+ page,
41
+ idPrefix: `${idPrefix}${el.name}_entry-${key}_`,
42
+ }));
43
+ }
44
+ }
45
+ break;
46
+ }
47
+ case 'infoPage':
48
+ case 'form': {
49
+ const validationData = formElementsValidation[el.name];
50
+ if (!!validationData &&
51
+ typeof validationData !== 'string' &&
52
+ validationData.type === 'formElements') {
53
+ validationData.formElements;
54
+ if (validationData.formElements && el.elements) {
55
+ memo.push(...getValidationErrors({
56
+ formElementsValidation: validationData.formElements,
57
+ elements: el.elements,
58
+ page,
59
+ idPrefix: `${idPrefix}${el.name}_`,
60
+ }));
61
+ }
62
+ }
63
+ break;
64
+ }
65
+ default: {
66
+ const validationMessage = formElementsValidation[el.name];
67
+ if (typeof validationMessage === 'string') {
68
+ memo.push({
69
+ id: `${idPrefix}${el.name}`,
70
+ label: el.label,
71
+ page,
72
+ errorMessage: validationMessage,
73
+ });
74
+ }
75
+ }
76
+ }
77
+ return memo;
78
+ }, []);
79
+ };
80
+ const PulsingCard = styled(Card)(() => {
81
+ return {
82
+ animation: 'pulse-animation 1.5s infinite',
83
+ '@keyframes pulse-animation': {
84
+ '0%': {
85
+ boxShadow: '0 0 0 0px rgba(255, 0, 0, 0.4)',
86
+ },
87
+ '99%': {
88
+ boxShadow: '0 0 0 16px rgba(255, 0, 0, 0.0)',
89
+ },
90
+ },
91
+ };
92
+ });
93
+ const ValidationErrorsCard = ({ formElementsValidation, display, currentPage, setPageId, }) => {
94
+ const [isExpanded, expand, contract] = useBooleanState(true);
95
+ const form = useFormDefinition();
96
+ const pagesWithValidationErrors = React.useMemo(() => {
97
+ if (!formElementsValidation)
98
+ return [];
99
+ const flatErrors = getValidationErrors({
100
+ formElementsValidation,
101
+ elements: form.elements,
102
+ idPrefix: '',
103
+ });
104
+ // Organise into pages
105
+ const pages = new Map();
106
+ for (const error of flatErrors) {
107
+ if (error.page) {
108
+ // If error belongs to a page
109
+ const existingSetEntry = pages.get(error.page.id);
110
+ const errors = [...((existingSetEntry === null || existingSetEntry === void 0 ? void 0 : existingSetEntry.errors) || []), error];
111
+ const page = error.page;
112
+ pages.set(page.id, {
113
+ page,
114
+ errors,
115
+ });
116
+ }
117
+ else {
118
+ // No page associated with error
119
+ const existingSetEntry = pages.get(NO_PAGE_KEY);
120
+ const errors = [...((existingSetEntry === null || existingSetEntry === void 0 ? void 0 : existingSetEntry.errors) || []), error];
121
+ pages.set(NO_PAGE_KEY, {
122
+ page: undefined,
123
+ errors,
124
+ });
125
+ }
126
+ }
127
+ return Array.from(pages.values());
128
+ }, [form.elements, formElementsValidation]);
129
+ if (!display)
130
+ return null;
131
+ return (React.createElement(Box, { sx: {
132
+ position: 'fixed',
133
+ bottom: 16,
134
+ right: 16,
135
+ zIndex: 10,
136
+ } },
137
+ React.createElement(PulsingCard, { isExpanded: isExpanded, elevation: !isExpanded ? 20 : 0, sx: (theme) => ({
138
+ transition: `${theme.transitions.duration.standard}ms ${theme.transitions.easing.easeInOut}`,
139
+ borderTopLeftRadius: 8,
140
+ borderTopRightRadius: 8,
141
+ borderBottomLeftRadius: 8,
142
+ borderBottomRightRadius: 8,
143
+ maxHeight: 350,
144
+ overflowY: 'auto',
145
+ borderColor: theme.palette.error.light,
146
+ borderWidth: 2,
147
+ borderStyle: 'solid',
148
+ backgroundColor: !isExpanded ? theme.palette.error.light : undefined,
149
+ color: !isExpanded ? theme.palette.error.contrastText : undefined,
150
+ }), className: !isExpanded ? 'is-clickable' : '', onClick: !isExpanded ? expand : undefined },
151
+ React.createElement(CardContent, { sx: (theme) => ({
152
+ transition: `${theme.transitions.duration.standard}ms ${theme.transitions.easing.easeInOut}`,
153
+ paddingBottom: !isExpanded ? `8px !important` : undefined,
154
+ paddingTop: !isExpanded ? `8px !important` : undefined,
155
+ }) },
156
+ React.createElement(Grid, { container: true, justifyContent: "space-between", alignItems: "center" },
157
+ React.createElement(Grid, { item: true, alignItems: "center", display: "flex" },
158
+ React.createElement(MaterialIcon, { className: clsx({
159
+ 'has-text-danger': isExpanded,
160
+ 'has-text-white': !isExpanded,
161
+ }), sx: { mr: 1, fontSize: 22 } }, "error"),
162
+ React.createElement(Typography, { className: clsx({
163
+ 'has-text-danger': isExpanded,
164
+ 'has-text-white': !isExpanded,
165
+ }), fontWeight: 600 }, "Validation Errors")),
166
+ React.createElement(Grid, { item: true }, isExpanded ? (React.createElement(IconButton, { onClick: contract },
167
+ React.createElement(MaterialIcon, { className: "icon-small" }, "expand_more"))) : (React.createElement(IconButton, { onClick: expand },
168
+ React.createElement(MaterialIcon, { className: "icon-small has-text-white" }, "expand_less"))))),
169
+ React.createElement(Box, { sx: (theme) => ({
170
+ transition: `width ${theme.transitions.duration.standard}ms ${theme.transitions.easing.easeInOut}`,
171
+ whiteSpace: 'nowrap',
172
+ width: isExpanded ? 300 : 194,
173
+ overflowX: 'hidden',
174
+ opacity: isExpanded ? 1 : 0,
175
+ }) },
176
+ React.createElement(Collapse, { in: isExpanded }, pagesWithValidationErrors.map(({ page, errors }, pageIndex) => {
177
+ const isNotFirstPage = pageIndex > 0;
178
+ return (React.createElement(React.Fragment, null,
179
+ isNotFirstPage && React.createElement(Box, { mt: 1 }),
180
+ page && (React.createElement(Typography, { variant: "body2", fontWeight: "600", color: "text.primary" }, page.label)),
181
+ React.createElement(Box, { mb: 1 }),
182
+ errors.map(({ errorMessage, label, id }, index, list) => {
183
+ const isFirst = index === 0;
184
+ const isLast = index === list.length - 1;
185
+ return (React.createElement(Box, { display: "flex", justifyContent: "space-between", alignItems: "center", key: index, p: 1, sx: (theme) => ({
186
+ borderColor: theme.palette.divider,
187
+ borderWidth: 1,
188
+ borderStyle: 'solid',
189
+ borderTopLeftRadius: isFirst ? 8 : 0,
190
+ borderTopRightRadius: isFirst ? 8 : 0,
191
+ borderBottomWidth: isLast ? 1 : 0,
192
+ borderBottomLeftRadius: isLast ? 8 : 0,
193
+ borderBottomRightRadius: isLast ? 8 : 0,
194
+ }), className: "ob-list__item is-clickable", onClick: () => {
195
+ if (page && page.id !== currentPage.id) {
196
+ setPageId(page.id);
197
+ }
198
+ const element = document.getElementById(id);
199
+ if (element) {
200
+ window.requestAnimationFrame(() => {
201
+ element.scrollIntoView({
202
+ behavior: 'smooth',
203
+ });
204
+ });
205
+ }
206
+ } },
207
+ React.createElement(Box, { sx: { whitespace: 'nowrap' } },
208
+ React.createElement(Typography, { variant: "body2", color: "text.primary" }, label),
209
+ React.createElement(Typography, { variant: "body2", className: "has-text-danger", sx: {
210
+ whiteSpace: 'nowrap',
211
+ textOverflow: 'ellipsis',
212
+ } }, errorMessage)),
213
+ React.createElement(MaterialIcon, { className: "has-text-grey icon-small", sx: { ml: 1 } }, "chevron_right")));
214
+ })));
215
+ })))))));
216
+ };
217
+ export default React.memo(ValidationErrorsCard);
218
+ //# sourceMappingURL=ValidationErrorsCard_framer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValidationErrorsCard_framer.js","sourceRoot":"","sources":["../../src/components/ValidationErrorsCard_framer.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Box,\n Card,\n CardContent,\n Typography,\n Grid,\n IconButton,\n Collapse,\n styled,\n} from '@mui/material'\nimport * as React from 'react'\nimport MaterialIcon from './MaterialIcon'\nimport { FormElementsValidation } from '../types/form'\nimport useBooleanState from '../hooks/useBooleanState'\nimport clsx from 'clsx'\nimport useFormDefinition from '../hooks/useFormDefinition'\nimport { FormTypes } from '@oneblink/types'\n\nconst NO_PAGE_KEY = 'NO_PAGE'\n// const transitionLength = 3000\ntype ValidationErrorMetaData = {\n id: string\n label: string\n page?: {\n label: string\n id: string\n }\n errorMessage: string\n}\nconst getValidationErrors = ({\n formElementsValidation,\n elements,\n page,\n idPrefix,\n}: {\n formElementsValidation: FormElementsValidation\n elements: FormTypes.FormElement[]\n page?: ValidationErrorMetaData['page']\n idPrefix: string\n}) => {\n return elements.reduce<Array<ValidationErrorMetaData>>((memo, el) => {\n switch (el.type) {\n case 'page': {\n memo.push(\n ...getValidationErrors({\n formElementsValidation,\n elements: el.elements,\n page: el,\n idPrefix,\n }),\n )\n break\n }\n case 'section': {\n memo.push(\n ...getValidationErrors({\n formElementsValidation,\n elements: el.elements,\n page,\n idPrefix,\n }),\n )\n break\n }\n case 'repeatableSet': {\n const validationData = formElementsValidation[el.name]\n if (\n !!validationData &&\n typeof validationData !== 'string' &&\n validationData.type === 'repeatableSet'\n ) {\n for (const [key, entry] of Object.entries(validationData.entries)) {\n if (!entry) continue\n memo.push(\n ...getValidationErrors({\n formElementsValidation: entry,\n elements: el.elements,\n page,\n idPrefix: `${idPrefix}${el.name}_entry-${key}_`,\n }),\n )\n }\n }\n break\n }\n case 'infoPage':\n case 'form': {\n const validationData = formElementsValidation[el.name]\n if (\n !!validationData &&\n typeof validationData !== 'string' &&\n validationData.type === 'formElements'\n ) {\n validationData.formElements\n\n if (validationData.formElements && el.elements) {\n memo.push(\n ...getValidationErrors({\n formElementsValidation: validationData.formElements,\n elements: el.elements,\n page,\n idPrefix: `${idPrefix}${el.name}_`,\n }),\n )\n }\n }\n break\n }\n default: {\n const validationMessage = formElementsValidation[el.name]\n if (typeof validationMessage === 'string') {\n memo.push({\n id: `${idPrefix}${el.name}`,\n label: el.label,\n page,\n errorMessage: validationMessage,\n })\n }\n }\n }\n return memo\n }, [])\n}\n\nconst PulsingCard = styled(Card)<{ isExpanded: boolean }>(() => {\n return {\n animation: 'pulse-animation 1.5s infinite',\n '@keyframes pulse-animation': {\n '0%': {\n boxShadow: '0 0 0 0px rgba(255, 0, 0, 0.4)',\n },\n '99%': {\n boxShadow: '0 0 0 16px rgba(255, 0, 0, 0.0)',\n },\n },\n }\n})\nconst ValidationErrorsCard = ({\n formElementsValidation,\n display,\n currentPage,\n setPageId,\n}: {\n formElementsValidation: FormElementsValidation | undefined\n display: boolean\n currentPage: FormTypes.PageElement\n setPageId: (pageId: string) => void\n}) => {\n const [isExpanded, expand, contract] = useBooleanState(true)\n\n const form = useFormDefinition()\n\n const pagesWithValidationErrors = React.useMemo(() => {\n if (!formElementsValidation) return []\n const flatErrors = getValidationErrors({\n formElementsValidation,\n elements: form.elements,\n idPrefix: '',\n })\n\n // Organise into pages\n const pages = new Map<\n string,\n {\n page: ValidationErrorMetaData['page']\n errors: ValidationErrorMetaData[]\n }\n >()\n for (const error of flatErrors) {\n if (error.page) {\n // If error belongs to a page\n const existingSetEntry = pages.get(error.page.id)\n const errors = [...(existingSetEntry?.errors || []), error]\n const page = error.page\n\n pages.set(page.id, {\n page,\n errors,\n })\n } else {\n // No page associated with error\n const existingSetEntry = pages.get(NO_PAGE_KEY)\n const errors = [...(existingSetEntry?.errors || []), error]\n pages.set(NO_PAGE_KEY, {\n page: undefined,\n errors,\n })\n }\n }\n return Array.from(pages.values())\n }, [form.elements, formElementsValidation])\n if (!display) return null\n\n return (\n <Box\n sx={{\n position: 'fixed',\n bottom: 16,\n right: 16,\n zIndex: 10,\n }}\n >\n <PulsingCard\n isExpanded={isExpanded}\n elevation={!isExpanded ? 20 : 0}\n sx={(theme) => ({\n transition: `${theme.transitions.duration.standard}ms ${theme.transitions.easing.easeInOut}`,\n borderTopLeftRadius: 8,\n borderTopRightRadius: 8,\n borderBottomLeftRadius: 8,\n borderBottomRightRadius: 8,\n maxHeight: 350,\n overflowY: 'auto',\n borderColor: theme.palette.error.light,\n borderWidth: 2,\n borderStyle: 'solid',\n backgroundColor: !isExpanded ? theme.palette.error.light : undefined,\n color: !isExpanded ? theme.palette.error.contrastText : undefined,\n })}\n className={!isExpanded ? 'is-clickable' : ''}\n onClick={!isExpanded ? expand : undefined}\n >\n <CardContent\n sx={(theme) => ({\n transition: `${theme.transitions.duration.standard}ms ${theme.transitions.easing.easeInOut}`,\n paddingBottom: !isExpanded ? `8px !important` : undefined,\n paddingTop: !isExpanded ? `8px !important` : undefined,\n })}\n >\n <Grid container justifyContent=\"space-between\" alignItems=\"center\">\n <Grid item alignItems=\"center\" display=\"flex\">\n <MaterialIcon\n className={clsx({\n 'has-text-danger': isExpanded,\n 'has-text-white': !isExpanded,\n })}\n sx={{ mr: 1, fontSize: 22 }}\n >\n error\n </MaterialIcon>\n <Typography\n className={clsx({\n 'has-text-danger': isExpanded,\n 'has-text-white': !isExpanded,\n })}\n fontWeight={600}\n >\n Validation Errors\n </Typography>\n </Grid>\n <Grid item>\n {isExpanded ? (\n <IconButton onClick={contract}>\n <MaterialIcon className=\"icon-small\">\n expand_more\n </MaterialIcon>\n </IconButton>\n ) : (\n <IconButton onClick={expand}>\n <MaterialIcon className=\"icon-small has-text-white\">\n expand_less\n </MaterialIcon>\n </IconButton>\n )}\n </Grid>\n </Grid>\n <Box\n sx={(theme) => ({\n transition: `width ${theme.transitions.duration.standard}ms ${theme.transitions.easing.easeInOut}`,\n whiteSpace: 'nowrap',\n width: isExpanded ? 300 : 194,\n overflowX: 'hidden',\n opacity: isExpanded ? 1 : 0,\n })}\n >\n <Collapse in={isExpanded}>\n {pagesWithValidationErrors.map(({ page, errors }, pageIndex) => {\n const isNotFirstPage = pageIndex > 0\n return (\n <>\n {isNotFirstPage && <Box mt={1} />}\n {page && (\n <Typography\n variant=\"body2\"\n fontWeight=\"600\"\n color=\"text.primary\"\n >\n {page.label}\n </Typography>\n )}\n <Box mb={1} />\n {errors.map(({ errorMessage, label, id }, index, list) => {\n const isFirst = index === 0\n const isLast = index === list.length - 1\n return (\n <Box\n display=\"flex\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n key={index}\n p={1}\n sx={(theme) => ({\n borderColor: theme.palette.divider,\n borderWidth: 1,\n borderStyle: 'solid',\n borderTopLeftRadius: isFirst ? 8 : 0,\n borderTopRightRadius: isFirst ? 8 : 0,\n borderBottomWidth: isLast ? 1 : 0,\n borderBottomLeftRadius: isLast ? 8 : 0,\n borderBottomRightRadius: isLast ? 8 : 0,\n })}\n className=\"ob-list__item is-clickable\"\n onClick={() => {\n if (page && page.id !== currentPage.id) {\n setPageId(page.id)\n }\n const element = document.getElementById(id)\n if (element) {\n window.requestAnimationFrame(() => {\n element.scrollIntoView({\n behavior: 'smooth',\n })\n })\n }\n }}\n >\n <Box sx={{ whitespace: 'nowrap' }}>\n <Typography variant=\"body2\" color=\"text.primary\">\n {label}\n </Typography>\n <Typography\n variant=\"body2\"\n className=\"has-text-danger\"\n sx={{\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n }}\n >\n {errorMessage}\n </Typography>\n </Box>\n <MaterialIcon\n className=\"has-text-grey icon-small\"\n sx={{ ml: 1 }}\n >\n chevron_right\n </MaterialIcon>\n </Box>\n )\n })}\n </>\n )\n })}\n </Collapse>\n </Box>\n </CardContent>\n </PulsingCard>\n </Box>\n )\n}\n\nexport default React.memo(ValidationErrorsCard)\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"FormStoreTableProvider.js","sourceRoot":"","sources":["../../../src/components/formStore/FormStoreTableProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { useHistory, useLocation } from 'react-router-dom'\nimport querystring from 'query-string'\nimport { FormStoreRecord } from '@oneblink/types/typescript/submissions'\nimport { formStoreService } from '@oneblink/apps'\nimport useInfiniteScrollDataLoad from '../../hooks/useInfiniteScrollDataLoad'\nimport useFormStoreTable from './table/useFormStoreTable'\nimport { Box, Button, Grid } from '@mui/material'\nimport { LoadingButton } from '@mui/lab'\nimport { FormTypes } from '@oneblink/types'\nimport useSubmissionIdValidationMessage, {\n validateIsUUID,\n} from '../../hooks/useSubmissionIdIsValid'\nimport ErrorMessage from '../messages/ErrorMessage'\nimport LoadingWithMessage from '../LoadingWithMessage'\nimport NoResourcesYet from '../messages/NoResourcesYet'\nimport FormStoreIcon from './display/FormStoreIcon'\nimport { FormStoreTableContext } from './useFormStoreTableContext'\nimport MaterialIcon from '../MaterialIcon'\n\nconst TABLE_PARAMETERS_FORM_STORE_KEY = 'REACT_TABLE_PARAMETERS_FORM_STORE'\n\nfunction getParamsFromLocalStorage() {\n const text = localStorage.getItem(TABLE_PARAMETERS_FORM_STORE_KEY)\n if (text) {\n return JSON.parse(text)\n }\n}\n\nexport function FormStoreTableProvider({\n form,\n children,\n}: {\n form: FormTypes.Form\n children: React.ReactNode\n}) {\n const history = useHistory()\n const location = useLocation()\n const {\n isLoading,\n loadError,\n records: formStoreRecords,\n onTryAgain,\n onRefresh,\n filters: parameters,\n onChangeFilters: onChangeParameters,\n nextOffset,\n } = useInfiniteScrollDataLoad<\n formStoreService.FormStoreParameters,\n FormStoreRecord\n >({\n limit: 50,\n isManual: true,\n debounceSearchMs: 1000,\n onDefaultFilters: React.useCallback((query) => {\n let defaultParameters: formStoreService.FormStoreParameters = {}\n const localStorageParams = getParamsFromLocalStorage()\n if (\n localStorageParams &&\n Object(localStorageParams) === localStorageParams\n ) {\n defaultParameters = localStorageParams\n }\n try {\n if (typeof query.parameters === 'string') {\n //allow qs params to override local storage\n defaultParameters = {\n ...defaultParameters,\n ...JSON.parse(query.parameters),\n }\n }\n } catch (error) {\n console.warn('Could not parse filter as JSON', error)\n }\n if (!defaultParameters.sorting) {\n defaultParameters.sorting = [\n { property: 'dateTimeSubmitted', direction: 'descending' },\n ]\n }\n return defaultParameters\n }, []),\n onSearch: React.useCallback(\n async (currentParameters, paging, abortSignal) => {\n // Exclude all search parameters if searching\n // for a specific submission using an identifier\n const filters = currentParameters.filters?.submissionId\n ? {\n submissionId: currentParameters.filters.submissionId,\n }\n : currentParameters.filters\n const result = await formStoreService.searchFormStoreRecords(\n {\n ...currentParameters,\n paging,\n formId: form.id,\n filters,\n },\n abortSignal,\n )\n return {\n records: result.formStoreRecords,\n meta: result.meta,\n }\n },\n [form.id],\n ),\n onValidateFilters: React.useCallback(\n (currentParameters: formStoreService.FormStoreParameters) => {\n return validateIsUUID(currentParameters.filters?.submissionId?.$eq)\n },\n [],\n ),\n })\n\n React.useEffect(() => {\n const currentSearch = querystring.parse(location.search)\n history.replace({\n search: querystring.stringify({\n ...currentSearch,\n parameters: JSON.stringify(parameters),\n }),\n })\n }, [history, location.search, parameters])\n\n const submissionIdValidationMessage = useSubmissionIdValidationMessage(\n parameters.filters?.submissionId?.$eq,\n )\n\n React.useEffect(() => {\n const paramsToStore = {\n unwindRepeatableSets: parameters?.unwindRepeatableSets,\n }\n localStorage.setItem(\n TABLE_PARAMETERS_FORM_STORE_KEY,\n JSON.stringify(paramsToStore),\n )\n }, [parameters?.unwindRepeatableSets])\n\n const formStoreTable = useFormStoreTable({\n formStoreRecords,\n parameters,\n onChangeParameters,\n submissionIdValidationMessage,\n form,\n onRefresh,\n })\n\n return (\n <FormStoreTableContext.Provider value={formStoreTable}>\n {children}\n {formStoreTable.visibleColumns.length ? (\n <>\n {!formStoreRecords.length && !isLoading && !loadError && (\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 <NoResourcesYet\n IconComponent={(props) => (\n <MaterialIcon {...props}>settings</MaterialIcon>\n )}\n title=\"No Columns Visible\"\n gutterBottom\n >\n It looks like you have hidden all of the available columns. Please\n enable at least one column to view submissions.\n </NoResourcesYet>\n )}\n\n {isLoading === 'INITIAL' && (\n <div className=\"ob-form-store-loading-initial\">\n <LoadingWithMessage message=\"Loading initial records...\" />\n </div>\n )}\n\n {loadError && (\n <>\n <ErrorMessage\n title=\"Error Retrieving Submissions\"\n gutterBottom\n gutterTop\n >\n {loadError.message}\n </ErrorMessage>\n <Grid container justifyContent=\"center\">\n <Button\n className=\"ob-form-store-try-again-button\"\n variant=\"outlined\"\n color=\"primary\"\n onClick={() => onTryAgain()}\n >\n Try Again\n </Button>\n </Grid>\n </>\n )}\n\n {!!nextOffset && !loadError && isLoading !== 'INITIAL' && (\n <Box padding={4} className=\"ob-form-store-load-more-button-container\">\n <Grid container justifyContent=\"center\">\n <LoadingButton\n className=\"ob-form-store-load-more-button\"\n variant=\"outlined\"\n color=\"primary\"\n onClick={() => onTryAgain(nextOffset)}\n loading={isLoading === 'MORE'}\n size=\"large\"\n loadingPosition=\"start\"\n startIcon={<MaterialIcon>read_more</MaterialIcon>}\n classes={{\n loadingIndicator: 'ob-form-store-loading-more-indicator',\n }}\n >\n Load More\n </LoadingButton>\n </Grid>\n </Box>\n )}\n </FormStoreTableContext.Provider>\n )\n}\n"]}
1
+ {"version":3,"file":"FormStoreTableProvider.js","sourceRoot":"","sources":["../../../src/components/formStore/FormStoreTableProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { useHistory, useLocation } from 'react-router-dom'\nimport querystring from 'query-string'\nimport { FormStoreRecord } from '@oneblink/types/typescript/submissions'\nimport { formStoreService } from '@oneblink/apps'\nimport useInfiniteScrollDataLoad from '../../hooks/useInfiniteScrollDataLoad'\nimport useFormStoreTable from './table/useFormStoreTable'\nimport { Box, Button, Grid } from '@mui/material'\nimport { LoadingButton } from '@mui/lab'\nimport { FormTypes } from '@oneblink/types'\nimport useSubmissionIdValidationMessage, {\n validateIsUUID,\n} from '../../hooks/useSubmissionIdIsValid'\nimport ErrorMessage from '../messages/ErrorMessage'\nimport LoadingWithMessage from '../LoadingWithMessage'\nimport NoResourcesYet from '../messages/NoResourcesYet'\nimport FormStoreIcon from './display/FormStoreIcon'\nimport { FormStoreTableContext } from './useFormStoreTableContext'\nimport MaterialIcon from '../MaterialIcon'\n\nconst TABLE_PARAMETERS_FORM_STORE_KEY = 'REACT_TABLE_PARAMETERS_FORM_STORE'\n\nfunction getParamsFromLocalStorage() {\n const text = localStorage.getItem(TABLE_PARAMETERS_FORM_STORE_KEY)\n if (text) {\n return JSON.parse(text)\n }\n}\n\nexport function FormStoreTableProvider({\n form,\n children,\n}: {\n form: FormTypes.Form\n children: React.ReactNode\n}) {\n const history = useHistory()\n const location = useLocation()\n const {\n isLoading,\n loadError,\n records: formStoreRecords,\n onTryAgain,\n onRefresh,\n filters: parameters,\n onChangeFilters: onChangeParameters,\n nextOffset,\n } = useInfiniteScrollDataLoad<\n formStoreService.FormStoreParameters,\n FormStoreRecord\n >({\n limit: 50,\n isManual: true,\n debounceSearchMs: 1000,\n onDefaultFilters: React.useCallback((query) => {\n let defaultParameters: formStoreService.FormStoreParameters = {}\n const localStorageParams = getParamsFromLocalStorage()\n if (\n localStorageParams &&\n Object(localStorageParams) === localStorageParams\n ) {\n defaultParameters = localStorageParams\n }\n try {\n if (typeof query.parameters === 'string') {\n //allow qs params to override local storage\n defaultParameters = {\n ...defaultParameters,\n ...JSON.parse(query.parameters),\n }\n }\n } catch (error) {\n console.warn('Could not parse filter as JSON', error)\n }\n if (!defaultParameters.sorting) {\n defaultParameters.sorting = [\n { property: 'dateTimeSubmitted', direction: 'descending' },\n ]\n }\n return defaultParameters\n }, []),\n onSearch: React.useCallback(\n async (currentParameters, paging, abortSignal) => {\n // Exclude all search parameters if searching\n // for a specific submission using an identifier\n const filters = currentParameters.filters?.submissionId\n ? {\n submissionId: currentParameters.filters.submissionId,\n }\n : currentParameters.filters\n const result = await formStoreService.searchFormStoreRecords(\n {\n ...currentParameters,\n paging,\n formId: form.id,\n filters,\n },\n abortSignal,\n )\n return {\n records: result.formStoreRecords,\n meta: result.meta,\n }\n },\n [form.id],\n ),\n onValidateFilters: React.useCallback(\n (currentParameters: formStoreService.FormStoreParameters) => {\n return validateIsUUID(currentParameters.filters?.submissionId?.$eq)\n },\n [],\n ),\n })\n\n React.useEffect(() => {\n const currentSearch = querystring.parse(location.search)\n history.replace({\n search: querystring.stringify({\n ...currentSearch,\n parameters: JSON.stringify(parameters),\n }),\n })\n }, [history, location.search, parameters])\n\n const submissionIdValidationMessage = useSubmissionIdValidationMessage(\n parameters.filters?.submissionId?.$eq,\n )\n\n React.useEffect(() => {\n const paramsToStore = {\n unwindRepeatableSets: parameters?.unwindRepeatableSets,\n }\n localStorage.setItem(\n TABLE_PARAMETERS_FORM_STORE_KEY,\n JSON.stringify(paramsToStore),\n )\n }, [parameters?.unwindRepeatableSets])\n\n const formStoreTable = useFormStoreTable({\n formStoreRecords,\n parameters,\n onChangeParameters,\n submissionIdValidationMessage,\n form,\n onRefresh,\n })\n\n return (\n <FormStoreTableContext.Provider value={formStoreTable}>\n {children}\n {formStoreTable.visibleColumns.length ? (\n <>\n {!formStoreRecords.length && !isLoading && !loadError && (\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 <NoResourcesYet\n IconComponent={(props) => (\n <MaterialIcon {...props}>settings</MaterialIcon>\n )}\n title=\"No Columns Visible\"\n gutterBottom\n >\n It looks like you have hidden all of the available columns. Please\n enable at least one column to view submissions.\n </NoResourcesYet>\n )}\n\n {isLoading === 'INITIAL' && (\n <div className=\"ob-form-store-loading-initial\">\n <LoadingWithMessage message=\"Loading initial records...\" />\n </div>\n )}\n\n {loadError && (\n <>\n <ErrorMessage\n title=\"Error Retrieving Submissions\"\n gutterBottom\n gutterTop\n >\n {loadError.message}\n </ErrorMessage>\n <Grid container justifyContent=\"center\">\n <Button\n className=\"ob-form-store-try-again-button\"\n variant=\"outlined\"\n color=\"primary\"\n onClick={() => onTryAgain()}\n >\n Try Again\n </Button>\n </Grid>\n </>\n )}\n\n {!!nextOffset && !loadError && isLoading !== 'INITIAL' && (\n <Box padding={4} className=\"ob-form-store-load-more-button-container\">\n <Grid container justifyContent=\"center\">\n <LoadingButton\n className=\"ob-form-store-load-more-button\"\n variant=\"outlined\"\n color=\"primary\"\n onClick={() => onTryAgain(nextOffset)}\n loading={isLoading === 'MORE'}\n size=\"large\"\n loadingPosition=\"start\"\n startIcon={<MaterialIcon>read_more</MaterialIcon>}\n classes={{\n loadingIndicator: 'ob-form-store-loading-more-indicator',\n }}\n >\n Load More\n </LoadingButton>\n </Grid>\n </Box>\n )}\n </FormStoreTableContext.Provider>\n )\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"OneBlinkFormStoreDownloadButton.js","sourceRoot":"","sources":["../../../src/components/formStore/OneBlinkFormStoreDownloadButton.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport {\n Tooltip,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogContentText,\n DialogActions,\n Button,\n} from '@mui/material'\nimport { LoadingButton } from '@mui/lab'\nimport ErrorSnackbar from '../ErrorSnackbar'\nimport { ColumnInstance } from 'react-table'\nimport { FormStoreRecord } from '@oneblink/types/typescript/submissions'\nimport { formStoreService } from '@oneblink/apps'\nimport useFormStoreTableContext from './useFormStoreTableContext'\nimport MaterialIcon from '../MaterialIcon'\n\nfunction OneBlinkFormStoreDownloadButton(\n props: React.ComponentProps<typeof LoadingButton>,\n) {\n const { visibleColumns, parameters, form } = useFormStoreTableContext()\n const [\n { isDownloadingCsv, isPromptingDownloadCsv, downloadingCsvError },\n setState,\n ] = React.useState<{\n isDownloadingCsv: boolean\n isPromptingDownloadCsv: boolean\n downloadingCsvError: Error | null\n }>({\n isDownloadingCsv: false,\n isPromptingDownloadCsv: false,\n downloadingCsvError: null,\n })\n\n const clearError = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n downloadingCsvError: null,\n }))\n }, [])\n\n const downloadCsv = React.useCallback(async () => {\n setState({\n isPromptingDownloadCsv: false,\n isDownloadingCsv: true,\n downloadingCsvError: null,\n })\n try {\n await formStoreService.exportFormStoreRecords(form.name, {\n formId: form.id,\n includeColumns: visibleColumns.map(\n (visibleColumn: ColumnInstance<FormStoreRecord>) => visibleColumn.id,\n ),\n ...parameters,\n })\n setState((currentState) => ({\n ...currentState,\n isDownloadingCsv: false,\n downloadingCsvError: null,\n }))\n } catch (error) {\n setState((currentState) => ({\n ...currentState,\n isDownloadingCsv: false,\n downloadingCsvError: error as Error,\n }))\n }\n }, [form, parameters, visibleColumns])\n\n const promptDownloadCsv = React.useCallback(() => {\n if (\n !parameters.unwindRepeatableSets &&\n visibleColumns.some((c) => c.formElementType === 'repeatableSet')\n ) {\n setState((currentState) => ({\n ...currentState,\n downloadingCsvError: null,\n isPromptingDownloadCsv: true,\n }))\n return\n }\n downloadCsv()\n }, [downloadCsv, parameters.unwindRepeatableSets, visibleColumns])\n\n const cancelPromptDownloadCsv = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n isPromptingDownloadCsv: false,\n }))\n }, [])\n\n return (\n <>\n <Tooltip title=\"Download submission data as a CSV file\">\n <LoadingButton\n className=\"ob-form-store-download-csv-button\"\n type=\"button\"\n loading={isDownloadingCsv}\n loadingPosition=\"start\"\n startIcon={<MaterialIcon>download</MaterialIcon>}\n onClick={promptDownloadCsv}\n // eslint-disable-next-line react/no-children-prop\n children={<>Download</>}\n {...props}\n />\n </Tooltip>\n\n <ErrorSnackbar open={!!downloadingCsvError} onClose={clearError}>\n <span data-cypress=\"edit-dialog-error-message\">\n {downloadingCsvError && downloadingCsvError.message}\n </span>\n </ErrorSnackbar>\n\n <Dialog\n open={isPromptingDownloadCsv}\n maxWidth=\"sm\"\n fullWidth\n onClose={cancelPromptDownloadCsv}\n >\n <DialogTitle>Column Configuration</DialogTitle>\n <DialogContent>\n <DialogContentText>\n Repeatable set columns will not be included in the export unless the{' '}\n <b>Output a row per repeatable set entry</b> option is turned on\n under <b>Column Configuration</b>.\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={cancelPromptDownloadCsv} variant=\"text\">\n Cancel\n </Button>\n <Button\n onClick={downloadCsv}\n startIcon={<MaterialIcon>download</MaterialIcon>}\n color=\"primary\"\n variant=\"contained\"\n >\n Download\n </Button>\n </DialogActions>\n </Dialog>\n </>\n )\n}\n\n/**\n * @param props\n * @returns\n * @group Components\n */\nexport default React.memo(OneBlinkFormStoreDownloadButton)\n"]}
1
+ {"version":3,"file":"OneBlinkFormStoreDownloadButton.js","sourceRoot":"","sources":["../../../src/components/formStore/OneBlinkFormStoreDownloadButton.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport {\n Tooltip,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogContentText,\n DialogActions,\n Button,\n} from '@mui/material'\nimport { LoadingButton } from '@mui/lab'\nimport ErrorSnackbar from '../ErrorSnackbar'\nimport { ColumnInstance } from 'react-table'\nimport { FormStoreRecord } from '@oneblink/types/typescript/submissions'\nimport { formStoreService } from '@oneblink/apps'\nimport useFormStoreTableContext from './useFormStoreTableContext'\nimport MaterialIcon from '../MaterialIcon'\n\nfunction OneBlinkFormStoreDownloadButton(\n props: React.ComponentProps<typeof LoadingButton>,\n) {\n const { visibleColumns, parameters, form } = useFormStoreTableContext()\n const [\n { isDownloadingCsv, isPromptingDownloadCsv, downloadingCsvError },\n setState,\n ] = React.useState<{\n isDownloadingCsv: boolean\n isPromptingDownloadCsv: boolean\n downloadingCsvError: Error | null\n }>({\n isDownloadingCsv: false,\n isPromptingDownloadCsv: false,\n downloadingCsvError: null,\n })\n\n const clearError = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n downloadingCsvError: null,\n }))\n }, [])\n\n const downloadCsv = React.useCallback(async () => {\n setState({\n isPromptingDownloadCsv: false,\n isDownloadingCsv: true,\n downloadingCsvError: null,\n })\n try {\n await formStoreService.exportFormStoreRecords(form.name, {\n formId: form.id,\n includeColumns: visibleColumns.map(\n (visibleColumn: ColumnInstance<FormStoreRecord>) => visibleColumn.id,\n ),\n ...parameters,\n })\n setState((currentState) => ({\n ...currentState,\n isDownloadingCsv: false,\n downloadingCsvError: null,\n }))\n } catch (error) {\n setState((currentState) => ({\n ...currentState,\n isDownloadingCsv: false,\n downloadingCsvError: error as Error,\n }))\n }\n }, [form, parameters, visibleColumns])\n\n const promptDownloadCsv = React.useCallback(() => {\n if (\n !parameters.unwindRepeatableSets &&\n visibleColumns.some((c) => c.formElementType === 'repeatableSet')\n ) {\n setState((currentState) => ({\n ...currentState,\n downloadingCsvError: null,\n isPromptingDownloadCsv: true,\n }))\n return\n }\n downloadCsv()\n }, [downloadCsv, parameters.unwindRepeatableSets, visibleColumns])\n\n const cancelPromptDownloadCsv = React.useCallback(() => {\n setState((currentState) => ({\n ...currentState,\n isPromptingDownloadCsv: false,\n }))\n }, [])\n\n return (\n <>\n <Tooltip title=\"Download submission data as a CSV file\">\n <LoadingButton\n className=\"ob-form-store-download-csv-button\"\n type=\"button\"\n loading={isDownloadingCsv}\n loadingPosition=\"start\"\n startIcon={<MaterialIcon>download</MaterialIcon>}\n onClick={promptDownloadCsv}\n // eslint-disable-next-line react/no-children-prop\n children={<>Download</>}\n {...props}\n />\n </Tooltip>\n\n <ErrorSnackbar open={!!downloadingCsvError} onClose={clearError}>\n <span data-cypress=\"edit-dialog-error-message\">\n {downloadingCsvError && downloadingCsvError.message}\n </span>\n </ErrorSnackbar>\n\n <Dialog\n open={isPromptingDownloadCsv}\n maxWidth=\"sm\"\n fullWidth\n onClose={cancelPromptDownloadCsv}\n >\n <DialogTitle>Column Configuration</DialogTitle>\n <DialogContent>\n <DialogContentText>\n Repeatable set columns will not be included in the export unless the{' '}\n <b>Output a row per repeatable set entry</b> option is turned on\n under <b>Column Configuration</b>.\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={cancelPromptDownloadCsv} variant=\"text\">\n Cancel\n </Button>\n <Button\n onClick={downloadCsv}\n startIcon={<MaterialIcon>download</MaterialIcon>}\n color=\"primary\"\n variant=\"contained\"\n >\n Download\n </Button>\n </DialogActions>\n </Dialog>\n </>\n )\n}\n\n/**\n * @param props\n * @returns\n * @group Components\n */\nexport default React.memo(OneBlinkFormStoreDownloadButton)\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"OneBlinkFormStoreProvider.js","sourceRoot":"","sources":["../../../src/components/formStore/OneBlinkFormStoreProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,kBAAkB,MAAM,uBAAuB,CAAA;AACtD,OAAO,YAAY,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,gBAAgB,MAAM,8BAA8B,CAAA;AAE3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAIjE,MAAM,CAAC,MAAM,wBAAwB,GACnC,KAAK,CAAC,aAAa,CAAgC,EAAE,CAAC,CAAA;AAExD;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,EACxC,IAAI,EACJ,QAAQ,GAIT;IACC,MAAM,wBAAwB,GAAG,KAAK,CAAC,WAAW,CAChD,CAAC,WAAyB,EAAE,EAAE;QAC5B,OAAO,gBAAgB,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAA;IACtE,CAAC,EACD,CAAC,IAAI,CAAC,EAAE,CAAC,CACV,CAAA;IACD,MAAM,CAAC,wBAAwB,EAAE,UAAU,CAAC,GAAG,gBAAgB,CAC7D,wBAAwB,CACzB,CAAA;IAED,IAAI,wBAAwB,CAAC,MAAM,KAAK,SAAS,EAAE;QACjD,OAAO,oBAAC,kBAAkB,OAAG,CAAA;KAC9B;IAED,IAAI,wBAAwB,CAAC,MAAM,KAAK,OAAO,EAAE;QAC/C,OAAO,CACL;YACE,oBAAC,YAAY,IACX,KAAK,EAAC,kCAAkC,EACxC,SAAS,QACT,UAAU,EAAE,UAAU,IAErB,wBAAwB,CAAC,KAAK,CAAC,OAAO,CAC1B,CACd,CACJ,CAAA;KACF;IAED,OAAO,CACL,oBAAC,wBAAwB,CAAC,QAAQ,IAChC,KAAK,EAAE,wBAAwB,CAAC,MAAM,CAAC,YAAY;QAEnD,oBAAC,sBAAsB,IAAC,IAAI,EAAE,IAAI,IAAG,QAAQ,CAA0B,CACrC,CACrC,CAAA;AACH,CAAC","sourcesContent":["import * as React from 'react'\nimport LoadingWithMessage from '../LoadingWithMessage'\nimport ErrorMessage from '../messages/ErrorMessage'\nimport { formStoreService } from '@oneblink/apps'\nimport useLoadDataState from '../../hooks/useLoadDataState'\nimport { FormTypes } from '@oneblink/types'\nimport { FormStoreTableProvider } from './FormStoreTableProvider'\n\nexport type FormStoreElementsContextValue = FormTypes.FormElementWithName[]\n\nexport const FormStoreElementsContext =\n React.createContext<FormStoreElementsContextValue>([])\n\n/**\n * @param props\n * @returns\n * @group Components\n */\nexport function OneBlinkFormStoreProvider({\n form,\n children,\n}: {\n form: FormTypes.Form\n children: React.ReactNode\n}) {\n const fetchFormStoreDefinition = React.useCallback(\n (abortSignal?: AbortSignal) => {\n return formStoreService.getFormStoreDefinition(form.id, abortSignal)\n },\n [form.id],\n )\n const [formStoreDefinitionState, onTryAgain] = useLoadDataState(\n fetchFormStoreDefinition,\n )\n\n if (formStoreDefinitionState.status === 'LOADING') {\n return <LoadingWithMessage />\n }\n\n if (formStoreDefinitionState.status === 'ERROR') {\n return (\n <>\n <ErrorMessage\n title=\"Error Retrieving Form Definition\"\n gutterTop\n onTryAgain={onTryAgain}\n >\n {formStoreDefinitionState.error.message}\n </ErrorMessage>\n </>\n )\n }\n\n return (\n <FormStoreElementsContext.Provider\n value={formStoreDefinitionState.result.formElements}\n >\n <FormStoreTableProvider form={form}>{children}</FormStoreTableProvider>\n </FormStoreElementsContext.Provider>\n )\n}\n"]}
1
+ {"version":3,"file":"OneBlinkFormStoreProvider.js","sourceRoot":"","sources":["../../../src/components/formStore/OneBlinkFormStoreProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,kBAAkB,MAAM,uBAAuB,CAAA;AACtD,OAAO,YAAY,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,gBAAgB,MAAM,8BAA8B,CAAA;AAE3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAIjE,MAAM,CAAC,MAAM,wBAAwB,GACnC,KAAK,CAAC,aAAa,CAAgC,EAAE,CAAC,CAAA;AAExD;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,EACxC,IAAI,EACJ,QAAQ,GAIT;IACC,MAAM,wBAAwB,GAAG,KAAK,CAAC,WAAW,CAChD,CAAC,WAAyB,EAAE,EAAE;QAC5B,OAAO,gBAAgB,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAA;IACtE,CAAC,EACD,CAAC,IAAI,CAAC,EAAE,CAAC,CACV,CAAA;IACD,MAAM,CAAC,wBAAwB,EAAE,UAAU,CAAC,GAAG,gBAAgB,CAC7D,wBAAwB,CACzB,CAAA;IAED,IAAI,wBAAwB,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAClD,OAAO,oBAAC,kBAAkB,OAAG,CAAA;IAC/B,CAAC;IAED,IAAI,wBAAwB,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAChD,OAAO,CACL;YACE,oBAAC,YAAY,IACX,KAAK,EAAC,kCAAkC,EACxC,SAAS,QACT,UAAU,EAAE,UAAU,IAErB,wBAAwB,CAAC,KAAK,CAAC,OAAO,CAC1B,CACd,CACJ,CAAA;IACH,CAAC;IAED,OAAO,CACL,oBAAC,wBAAwB,CAAC,QAAQ,IAChC,KAAK,EAAE,wBAAwB,CAAC,MAAM,CAAC,YAAY;QAEnD,oBAAC,sBAAsB,IAAC,IAAI,EAAE,IAAI,IAAG,QAAQ,CAA0B,CACrC,CACrC,CAAA;AACH,CAAC","sourcesContent":["import * as React from 'react'\nimport LoadingWithMessage from '../LoadingWithMessage'\nimport ErrorMessage from '../messages/ErrorMessage'\nimport { formStoreService } from '@oneblink/apps'\nimport useLoadDataState from '../../hooks/useLoadDataState'\nimport { FormTypes } from '@oneblink/types'\nimport { FormStoreTableProvider } from './FormStoreTableProvider'\n\nexport type FormStoreElementsContextValue = FormTypes.FormElementWithName[]\n\nexport const FormStoreElementsContext =\n React.createContext<FormStoreElementsContextValue>([])\n\n/**\n * @param props\n * @returns\n * @group Components\n */\nexport function OneBlinkFormStoreProvider({\n form,\n children,\n}: {\n form: FormTypes.Form\n children: React.ReactNode\n}) {\n const fetchFormStoreDefinition = React.useCallback(\n (abortSignal?: AbortSignal) => {\n return formStoreService.getFormStoreDefinition(form.id, abortSignal)\n },\n [form.id],\n )\n const [formStoreDefinitionState, onTryAgain] = useLoadDataState(\n fetchFormStoreDefinition,\n )\n\n if (formStoreDefinitionState.status === 'LOADING') {\n return <LoadingWithMessage />\n }\n\n if (formStoreDefinitionState.status === 'ERROR') {\n return (\n <>\n <ErrorMessage\n title=\"Error Retrieving Form Definition\"\n gutterTop\n onTryAgain={onTryAgain}\n >\n {formStoreDefinitionState.error.message}\n </ErrorMessage>\n </>\n )\n }\n\n return (\n <FormStoreElementsContext.Provider\n value={formStoreDefinitionState.result.formElements}\n >\n <FormStoreTableProvider form={form}>{children}</FormStoreTableProvider>\n </FormStoreElementsContext.Provider>\n )\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"OneBlinkFormStoreTable.js","sourceRoot":"","sources":["../../../src/components/formStore/OneBlinkFormStoreTable.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport clsx from 'clsx'\nimport { styled, Tooltip } from '@mui/material'\nimport { IsHoveringProvider } from '../../hooks/useIsHovering'\nimport HeaderCellMoreButton from './table/HeaderCellMoreButton'\nimport useFormStoreTableContext from './useFormStoreTableContext'\nimport MaterialIcon from '../MaterialIcon'\n\nconst SortingIcon = styled(MaterialIcon)(({ theme }) => ({\n transition: theme.transitions.create('transform'),\n}))\n\nconst Table = styled('div')(({ theme }) => ({\n display: 'inline-block',\n backgroundColor: theme.palette.background.paper,\n fontSize: theme.typography.body2.fontSize,\n '& .ob-form-store-table-row__alternate': {\n backgroundColor: theme.palette.action.hover,\n },\n '& .tc': {\n padding: theme.spacing(1),\n borderBottom: '1px solid',\n borderBottomColor: theme.palette.divider,\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 borderBottomWidth: '2px',\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\nfunction OneBlinkFormStoreTable() {\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups: [parentHeaderGroup],\n rows,\n prepareRow,\n onChangeParameters,\n } = useFormStoreTableContext()\n\n if (!parentHeaderGroup) {\n return null\n }\n\n let alternateBackground = false\n\n return (\n <>\n <Table {...getTableProps()} className=\"ob-form-store-table\">\n <div className=\"thead\">\n <div\n {...parentHeaderGroup.getHeaderGroupProps()}\n className=\"tr ob-form-store-table-header-row\"\n >\n {\n // Loop over the headers in each row\n parentHeaderGroup.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 PopperProps={{\n sx: {\n zIndex: 'drawer',\n },\n }}\n >\n <div\n className={clsx('th tc ob-form-store-table-header-cell', {\n 'is-clickable': !!sortingProperty,\n })}\n onClick={\n sortingProperty\n ? () => {\n onChangeParameters((currentParameters) => {\n switch (sortingDirection) {\n case 'ascending': {\n return {\n ...currentParameters,\n sorting: [\n {\n property: sortingProperty,\n direction: 'descending',\n },\n ],\n }\n }\n case 'descending': {\n return {\n ...currentParameters,\n sorting: undefined,\n }\n }\n default: {\n return {\n ...currentParameters,\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 sx={\n sortingDirection === 'ascending'\n ? {\n transform: 'rotate(180deg)',\n }\n : undefined\n }\n className=\"th-icon\"\n >\n arrow_downward\n </SortingIcon>\n )}\n {headerGroup.filter?.isInvalid ? (\n <Tooltip\n title={\n headerGroup.filter?.validationMessage || ''\n }\n >\n <MaterialIcon\n fontSize=\"small\"\n color=\"error\"\n className=\"th-icon\"\n >\n warning\n </MaterialIcon>\n </Tooltip>\n ) : headerGroup.filter?.value ? (\n <MaterialIcon\n fontSize=\"small\"\n color=\"primary\"\n className=\"th-icon\"\n >\n filter_list\n </MaterialIcon>\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 </div>\n <div {...getTableBodyProps()} className=\"tbody\">\n {\n // Loop over the table rows\n rows.map((row, index) => {\n if (\n rows[index - 1]?.original.submissionId !==\n row.original.submissionId\n ) {\n alternateBackground = !alternateBackground\n }\n // Prepare the row for display\n prepareRow(row)\n return (\n // Apply the row props\n <div\n {...row.getRowProps()}\n key={row.id}\n className={clsx('tr ob-form-store-table-row', {\n 'ob-form-store-table-row__alternate': alternateBackground,\n })}\n >\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 key={cell.column.id}\n className={clsx(\n 'td tc ob-form-store-table-row-cell',\n {\n 'is-resizing': cell.column.isResizing,\n },\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 </Table>\n </>\n )\n}\n\n/**\n * @returns\n * @group Components\n */\nexport default React.memo(OneBlinkFormStoreTable)\n"]}
1
+ {"version":3,"file":"OneBlinkFormStoreTable.js","sourceRoot":"","sources":["../../../src/components/formStore/OneBlinkFormStoreTable.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport clsx from 'clsx'\nimport { styled, Tooltip } from '@mui/material'\nimport { IsHoveringProvider } from '../../hooks/useIsHovering'\nimport HeaderCellMoreButton from './table/HeaderCellMoreButton'\nimport useFormStoreTableContext from './useFormStoreTableContext'\nimport MaterialIcon from '../MaterialIcon'\n\nconst SortingIcon = styled(MaterialIcon)(({ theme }) => ({\n transition: theme.transitions.create('transform'),\n}))\n\nconst Table = styled('div')(({ theme }) => ({\n display: 'inline-block',\n backgroundColor: theme.palette.background.paper,\n fontSize: theme.typography.body2.fontSize,\n '& .ob-form-store-table-row__alternate': {\n backgroundColor: theme.palette.action.hover,\n },\n '& .tc': {\n padding: theme.spacing(1),\n borderBottom: '1px solid',\n borderBottomColor: theme.palette.divider,\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 borderBottomWidth: '2px',\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\nfunction OneBlinkFormStoreTable() {\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups: [parentHeaderGroup],\n rows,\n prepareRow,\n onChangeParameters,\n } = useFormStoreTableContext()\n\n if (!parentHeaderGroup) {\n return null\n }\n\n let alternateBackground = false\n\n return (\n <>\n <Table {...getTableProps()} className=\"ob-form-store-table\">\n <div className=\"thead\">\n <div\n {...parentHeaderGroup.getHeaderGroupProps()}\n className=\"tr ob-form-store-table-header-row\"\n >\n {\n // Loop over the headers in each row\n parentHeaderGroup.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 PopperProps={{\n sx: {\n zIndex: 'drawer',\n },\n }}\n >\n <div\n className={clsx('th tc ob-form-store-table-header-cell', {\n 'is-clickable': !!sortingProperty,\n })}\n onClick={\n sortingProperty\n ? () => {\n onChangeParameters((currentParameters) => {\n switch (sortingDirection) {\n case 'ascending': {\n return {\n ...currentParameters,\n sorting: [\n {\n property: sortingProperty,\n direction: 'descending',\n },\n ],\n }\n }\n case 'descending': {\n return {\n ...currentParameters,\n sorting: undefined,\n }\n }\n default: {\n return {\n ...currentParameters,\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 sx={\n sortingDirection === 'ascending'\n ? {\n transform: 'rotate(180deg)',\n }\n : undefined\n }\n className=\"th-icon\"\n >\n arrow_downward\n </SortingIcon>\n )}\n {headerGroup.filter?.isInvalid ? (\n <Tooltip\n title={\n headerGroup.filter?.validationMessage || ''\n }\n >\n <MaterialIcon\n fontSize=\"small\"\n color=\"error\"\n className=\"th-icon\"\n >\n warning\n </MaterialIcon>\n </Tooltip>\n ) : headerGroup.filter?.value ? (\n <MaterialIcon\n fontSize=\"small\"\n color=\"primary\"\n className=\"th-icon\"\n >\n filter_list\n </MaterialIcon>\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 </div>\n <div {...getTableBodyProps()} className=\"tbody\">\n {\n // Loop over the table rows\n rows.map((row, index) => {\n if (\n rows[index - 1]?.original.submissionId !==\n row.original.submissionId\n ) {\n alternateBackground = !alternateBackground\n }\n // Prepare the row for display\n prepareRow(row)\n return (\n // Apply the row props\n <div\n {...row.getRowProps()}\n key={row.id}\n className={clsx('tr ob-form-store-table-row', {\n 'ob-form-store-table-row__alternate': alternateBackground,\n })}\n >\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 key={cell.column.id}\n className={clsx(\n 'td tc ob-form-store-table-row-cell',\n {\n 'is-resizing': cell.column.isResizing,\n },\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 </Table>\n </>\n )\n}\n\n/**\n * @returns\n * @group Components\n */\nexport default React.memo(OneBlinkFormStoreTable)\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ElementDisplay.js","sourceRoot":"","sources":["../../../../src/components/formStore/display/ElementDisplay.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { saveAs } from 'file-saver'\nimport { Chip, CircularProgress, Grid } from '@mui/material'\nimport ErrorSnackbar from '../../ErrorSnackbar'\nimport { UnorderedList, ListItem } from '../../Lists'\nimport { FormElementWithOptions } from '@oneblink/types/typescript/forms'\nimport { getCognitoIdToken } from '@oneblink/apps/dist/services/cognito'\nimport MaterialIcon from '../../MaterialIcon'\n\nasync function fetchFile(url: string) {\n const idToken = await getCognitoIdToken()\n const response = await fetch(url, {\n headers: {\n Authorization: `Bearer ${idToken}`,\n },\n })\n\n if (!response.ok) {\n throw new Error(\n `Unable to download file. HTTP Status Code: ${response.status}`,\n )\n }\n\n return await response.blob()\n}\n\nexport function FileChip({\n file: { fileName, url, data },\n}: {\n file: {\n fileName: string\n url?: string\n isPrivate?: boolean\n data?: string\n }\n}) {\n const [{ isDownloading, error }, setState] = React.useState<{\n error?: Error\n isDownloading: boolean\n }>({\n isDownloading: false,\n })\n const clearError = React.useCallback(() => {\n setState({\n isDownloading: false,\n })\n }, [])\n const handleDownload = React.useCallback(async () => {\n try {\n setState({\n isDownloading: true,\n })\n\n if (url) {\n const blob = await fetchFile(url)\n saveAs(blob, fileName)\n } else if (data) {\n saveAs(data, fileName)\n }\n\n setState({\n isDownloading: false,\n })\n } catch (error) {\n setState({\n isDownloading: false,\n error: error as Error,\n })\n }\n }, [data, fileName, url])\n return (\n <>\n <Chip\n label={fileName}\n deleteIcon={<MaterialIcon>save_alt</MaterialIcon>}\n onDelete={handleDownload}\n variant=\"outlined\"\n icon={\n isDownloading ? (\n <CircularProgress size={16} />\n ) : (\n <MaterialIcon>attach_file</MaterialIcon>\n )\n }\n />\n <ErrorSnackbar open={!!error} onClose={clearError}>\n <span data-cypress=\"download-legacy-file-error-message\">\n {error && error.message}\n </span>\n </ErrorSnackbar>\n </>\n )\n}\n\nexport function FilesElementDataTableCellContent({\n value,\n}: {\n value: Array<{\n fileName: string\n url?: string | undefined\n isPrivate?: boolean | undefined\n data?: string | undefined\n }>\n}) {\n return (\n <Grid container spacing={1}>\n {value.map((file, index) => {\n return (\n <Grid item key={index} xs={12}>\n <FileChip file={file} />\n </Grid>\n )\n })}\n </Grid>\n )\n}\n\nexport function MultiSelectFormElementTableCellContent({\n value,\n formElement,\n}: {\n value: string[]\n formElement: FormElementWithOptions\n}) {\n return (\n <UnorderedList disablePadding>\n {value.map((selection, index) => {\n const label = getSelectedOptionLabel(formElement, selection)\n return <ListItem key={index}>{label?.toString()}</ListItem>\n })}\n </UnorderedList>\n )\n}\n\nexport function getSelectedOptionLabel(\n formElement: FormElementWithOptions,\n value: string,\n) {\n const selectedOption = (formElement.options || []).find(\n (opt) => opt.value === value,\n )\n return selectedOption ? selectedOption.label : value\n}\n"]}
1
+ {"version":3,"file":"ElementDisplay.js","sourceRoot":"","sources":["../../../../src/components/formStore/display/ElementDisplay.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { saveAs } from 'file-saver'\nimport { Chip, CircularProgress, Grid } from '@mui/material'\nimport ErrorSnackbar from '../../ErrorSnackbar'\nimport { UnorderedList, ListItem } from '../../Lists'\nimport { FormElementWithOptions } from '@oneblink/types/typescript/forms'\nimport { getCognitoIdToken } from '@oneblink/apps/dist/services/cognito'\nimport MaterialIcon from '../../MaterialIcon'\n\nasync function fetchFile(url: string) {\n const idToken = await getCognitoIdToken()\n const response = await fetch(url, {\n headers: {\n Authorization: `Bearer ${idToken}`,\n },\n })\n\n if (!response.ok) {\n throw new Error(\n `Unable to download file. HTTP Status Code: ${response.status}`,\n )\n }\n\n return await response.blob()\n}\n\nexport function FileChip({\n file: { fileName, url, data },\n}: {\n file: {\n fileName: string\n url?: string\n isPrivate?: boolean\n data?: string\n }\n}) {\n const [{ isDownloading, error }, setState] = React.useState<{\n error?: Error\n isDownloading: boolean\n }>({\n isDownloading: false,\n })\n const clearError = React.useCallback(() => {\n setState({\n isDownloading: false,\n })\n }, [])\n const handleDownload = React.useCallback(async () => {\n try {\n setState({\n isDownloading: true,\n })\n\n if (url) {\n const blob = await fetchFile(url)\n saveAs(blob, fileName)\n } else if (data) {\n saveAs(data, fileName)\n }\n\n setState({\n isDownloading: false,\n })\n } catch (error) {\n setState({\n isDownloading: false,\n error: error as Error,\n })\n }\n }, [data, fileName, url])\n return (\n <>\n <Chip\n label={fileName}\n deleteIcon={<MaterialIcon>save_alt</MaterialIcon>}\n onDelete={handleDownload}\n variant=\"outlined\"\n icon={\n isDownloading ? (\n <CircularProgress size={16} />\n ) : (\n <MaterialIcon>attach_file</MaterialIcon>\n )\n }\n />\n <ErrorSnackbar open={!!error} onClose={clearError}>\n <span data-cypress=\"download-legacy-file-error-message\">\n {error && error.message}\n </span>\n </ErrorSnackbar>\n </>\n )\n}\n\nexport function FilesElementDataTableCellContent({\n value,\n}: {\n value: Array<{\n fileName: string\n url?: string | undefined\n isPrivate?: boolean | undefined\n data?: string | undefined\n }>\n}) {\n return (\n <Grid container spacing={1}>\n {value.map((file, index) => {\n return (\n <Grid item key={index} xs={12}>\n <FileChip file={file} />\n </Grid>\n )\n })}\n </Grid>\n )\n}\n\nexport function MultiSelectFormElementTableCellContent({\n value,\n formElement,\n}: {\n value: string[]\n formElement: FormElementWithOptions\n}) {\n return (\n <UnorderedList disablePadding>\n {value.map((selection, index) => {\n const label = getSelectedOptionLabel(formElement, selection)\n return <ListItem key={index}>{label?.toString()}</ListItem>\n })}\n </UnorderedList>\n )\n}\n\nexport function getSelectedOptionLabel(\n formElement: FormElementWithOptions,\n value: string,\n) {\n const selectedOption = (formElement.options || []).find(\n (opt) => opt.value === value,\n )\n return selectedOption ? selectedOption.label : value\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ActionedByTableCell.js","sourceRoot":"","sources":["../../../../src/components/formStore/table/ActionedByTableCell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,mBAAmB,MAAM,uBAAuB,CAAA;AACvD,OAAO,YAAY,MAAM,oBAAoB,CAAA;AAE7C,SAAS,mBAAmB,CAAC,EAC3B,WAAW,EACX,YAAY,EACZ,GAAG,IAAI,EAIR;IACC,MAAM,SAAS,GAAG,sBAAsB,CAAC;QACvC,WAAW;QACX,YAAY;QACZ,GAAG,IAAI;KACR,CAAC,CAAA;IAEF,OAAO,CACL;QACE,oBAAC,IAAI,OAAK,SAAS,KAAM,IAAI,GAAI;QACjC,oBAAC,mBAAmB,IAAC,IAAI,EAAE,SAAS,CAAC,KAAK,GAAI,CAC7C,CACJ,CAAA;AACH,CAAC;AAED,eAAe,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;AAE9C,SAAS,sBAAsB,CAAC,EAC9B,WAAW,EACX,YAAY,GAIb;IAKC,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACxB,IAAI,WAAW,EAAE;YACf,MAAM,cAAc,GAIhB;gBACF,KAAK,EAAE,EAAE;aACV,CAAA;YAED,IAAI,WAAW,CAAC,OAAO,EAAE;gBACvB,cAAc,CAAC,MAAM,GAAG,CACtB,oBAAC,MAAM,IAAC,GAAG,EAAE,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,WAAW,CAAC,OAAO,GAAI,CAChE,CAAA;aACF;iBAAM;gBACL,cAAc,CAAC,IAAI,GAAG,oBAAC,YAAY,yBAA8B,CAAA;aAClE;YAED,cAAc,CAAC,KAAK,GAAG,WAAW,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAA;YACnE,OAAO,cAAc,CAAA;SACtB;QAED,IAAI,YAAY,EAAE;YAChB,OAAO;gBACL,IAAI,EAAE,oBAAC,YAAY,kBAAuB;gBAC1C,KAAK,EAAE,YAAY,CAAC,IAAI;aACzB,CAAA;SACF;QAED,OAAO;YACL,IAAI,EAAE,oBAAC,YAAY,eAAoB;YACvC,KAAK,EAAE,WAAW;SACnB,CAAA;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAA;AACjC,CAAC","sourcesContent":["import * as React from 'react'\nimport { userService } from '@oneblink/sdk-core'\nimport { UserProfile } from '@oneblink/types/typescript/misc'\nimport { Chip, Avatar } from '@mui/material'\nimport TableCellCopyButton from './TableCellCopyButton'\nimport MaterialIcon from '../../MaterialIcon'\n\nfunction ActionedByTableCell({\n userProfile,\n developerKey,\n ...rest\n}: React.ComponentProps<typeof Chip> & {\n userProfile?: UserProfile\n developerKey?: { name: string }\n}) {\n const chipProps = useActionedByChipProps({\n userProfile,\n developerKey,\n ...rest,\n })\n\n return (\n <>\n <Chip {...chipProps} {...rest} />\n <TableCellCopyButton text={chipProps.label} />\n </>\n )\n}\n\nexport default React.memo(ActionedByTableCell)\n\nfunction useActionedByChipProps({\n userProfile,\n developerKey,\n}: React.ComponentProps<typeof Chip> & {\n userProfile?: UserProfile\n developerKey?: { name: string }\n}): {\n label: string\n icon?: React.ComponentProps<typeof Chip>['icon']\n avatar?: React.ComponentProps<typeof Chip>['avatar']\n} {\n return React.useMemo(() => {\n if (userProfile) {\n const emptyChipProps: {\n label: string\n icon?: React.ComponentProps<typeof Chip>['icon']\n avatar?: React.ComponentProps<typeof Chip>['avatar']\n } = {\n label: '',\n }\n\n if (userProfile.picture) {\n emptyChipProps.avatar = (\n <Avatar alt={userProfile.fullName} src={userProfile.picture} />\n )\n } else {\n emptyChipProps.icon = <MaterialIcon>account_circle</MaterialIcon>\n }\n\n emptyChipProps.label = userService.getUserFriendlyName(userProfile)\n return emptyChipProps\n }\n\n if (developerKey) {\n return {\n icon: <MaterialIcon>vpn_key</MaterialIcon>,\n label: developerKey.name,\n }\n }\n\n return {\n icon: <MaterialIcon>help</MaterialIcon>,\n label: 'Anonymous',\n }\n }, [developerKey, userProfile])\n}\n"]}
1
+ {"version":3,"file":"ActionedByTableCell.js","sourceRoot":"","sources":["../../../../src/components/formStore/table/ActionedByTableCell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAC5C,OAAO,mBAAmB,MAAM,uBAAuB,CAAA;AACvD,OAAO,YAAY,MAAM,oBAAoB,CAAA;AAE7C,SAAS,mBAAmB,CAAC,EAC3B,WAAW,EACX,YAAY,EACZ,GAAG,IAAI,EAIR;IACC,MAAM,SAAS,GAAG,sBAAsB,CAAC;QACvC,WAAW;QACX,YAAY;QACZ,GAAG,IAAI;KACR,CAAC,CAAA;IAEF,OAAO,CACL;QACE,oBAAC,IAAI,OAAK,SAAS,KAAM,IAAI,GAAI;QACjC,oBAAC,mBAAmB,IAAC,IAAI,EAAE,SAAS,CAAC,KAAK,GAAI,CAC7C,CACJ,CAAA;AACH,CAAC;AAED,eAAe,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;AAE9C,SAAS,sBAAsB,CAAC,EAC9B,WAAW,EACX,YAAY,GAIb;IAKC,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACxB,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,cAAc,GAIhB;gBACF,KAAK,EAAE,EAAE;aACV,CAAA;YAED,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;gBACxB,cAAc,CAAC,MAAM,GAAG,CACtB,oBAAC,MAAM,IAAC,GAAG,EAAE,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,WAAW,CAAC,OAAO,GAAI,CAChE,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,IAAI,GAAG,oBAAC,YAAY,yBAA8B,CAAA;YACnE,CAAC;YAED,cAAc,CAAC,KAAK,GAAG,WAAW,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAA;YACnE,OAAO,cAAc,CAAA;QACvB,CAAC;QAED,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO;gBACL,IAAI,EAAE,oBAAC,YAAY,kBAAuB;gBAC1C,KAAK,EAAE,YAAY,CAAC,IAAI;aACzB,CAAA;QACH,CAAC;QAED,OAAO;YACL,IAAI,EAAE,oBAAC,YAAY,eAAoB;YACvC,KAAK,EAAE,WAAW;SACnB,CAAA;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,CAAA;AACjC,CAAC","sourcesContent":["import * as React from 'react'\nimport { userService } from '@oneblink/sdk-core'\nimport { UserProfile } from '@oneblink/types/typescript/misc'\nimport { Chip, Avatar } from '@mui/material'\nimport TableCellCopyButton from './TableCellCopyButton'\nimport MaterialIcon from '../../MaterialIcon'\n\nfunction ActionedByTableCell({\n userProfile,\n developerKey,\n ...rest\n}: React.ComponentProps<typeof Chip> & {\n userProfile?: UserProfile\n developerKey?: { name: string }\n}) {\n const chipProps = useActionedByChipProps({\n userProfile,\n developerKey,\n ...rest,\n })\n\n return (\n <>\n <Chip {...chipProps} {...rest} />\n <TableCellCopyButton text={chipProps.label} />\n </>\n )\n}\n\nexport default React.memo(ActionedByTableCell)\n\nfunction useActionedByChipProps({\n userProfile,\n developerKey,\n}: React.ComponentProps<typeof Chip> & {\n userProfile?: UserProfile\n developerKey?: { name: string }\n}): {\n label: string\n icon?: React.ComponentProps<typeof Chip>['icon']\n avatar?: React.ComponentProps<typeof Chip>['avatar']\n} {\n return React.useMemo(() => {\n if (userProfile) {\n const emptyChipProps: {\n label: string\n icon?: React.ComponentProps<typeof Chip>['icon']\n avatar?: React.ComponentProps<typeof Chip>['avatar']\n } = {\n label: '',\n }\n\n if (userProfile.picture) {\n emptyChipProps.avatar = (\n <Avatar alt={userProfile.fullName} src={userProfile.picture} />\n )\n } else {\n emptyChipProps.icon = <MaterialIcon>account_circle</MaterialIcon>\n }\n\n emptyChipProps.label = userService.getUserFriendlyName(userProfile)\n return emptyChipProps\n }\n\n if (developerKey) {\n return {\n icon: <MaterialIcon>vpn_key</MaterialIcon>,\n label: developerKey.name,\n }\n }\n\n return {\n icon: <MaterialIcon>help</MaterialIcon>,\n label: 'Anonymous',\n }\n }, [developerKey, userProfile])\n}\n"]}