@oneblink/apps-react 5.12.0-beta.9 → 5.12.1-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/OneBlinkFormBase.js +9 -8
- package/dist/OneBlinkFormBase.js.map +1 -1
- package/dist/PaymentReceipt.js +2 -1
- package/dist/PaymentReceipt.js.map +1 -1
- package/dist/components/ArcGISWebMap.js +2 -1
- package/dist/components/ArcGISWebMap.js.map +1 -1
- package/dist/components/CopyToClipboardIconButton.js +2 -2
- package/dist/components/CopyToClipboardIconButton.js.map +1 -1
- package/dist/components/CustomAccordion.d.ts +1 -1
- package/dist/components/ErrorSnackbar.js +6 -8
- package/dist/components/ErrorSnackbar.js.map +1 -1
- package/dist/components/Lists.d.ts +1 -1
- package/dist/components/MaterialIcon.d.ts +3 -0
- package/dist/components/MaterialIcon.js +7 -0
- package/dist/components/MaterialIcon.js.map +1 -0
- package/dist/components/formStore/FormStoreTableProvider.js +3 -3
- package/dist/components/formStore/FormStoreTableProvider.js.map +1 -1
- package/dist/components/formStore/OneBlinkFormStoreClearFiltersButton.js +2 -2
- package/dist/components/formStore/OneBlinkFormStoreClearFiltersButton.js.map +1 -1
- package/dist/components/formStore/OneBlinkFormStoreColumnsButton.js +3 -3
- package/dist/components/formStore/OneBlinkFormStoreColumnsButton.js.map +1 -1
- package/dist/components/formStore/OneBlinkFormStoreDownloadButton.js +3 -3
- package/dist/components/formStore/OneBlinkFormStoreDownloadButton.js.map +1 -1
- package/dist/components/formStore/OneBlinkFormStoreRefreshButton.js +2 -2
- package/dist/components/formStore/OneBlinkFormStoreRefreshButton.js.map +1 -1
- package/dist/components/formStore/OneBlinkFormStoreTable.js +4 -4
- package/dist/components/formStore/OneBlinkFormStoreTable.js.map +1 -1
- package/dist/components/formStore/display/ElementDisplay.js +2 -2
- package/dist/components/formStore/display/ElementDisplay.js.map +1 -1
- package/dist/components/formStore/display/FormStoreIcon.d.ts +3 -2
- package/dist/components/formStore/display/FormStoreIcon.js +5 -2
- package/dist/components/formStore/display/FormStoreIcon.js.map +1 -1
- package/dist/components/formStore/table/ActionedByTableCell.js +4 -4
- package/dist/components/formStore/table/ActionedByTableCell.js.map +1 -1
- package/dist/components/formStore/table/FormElementTableCell.js +1 -1
- package/dist/components/formStore/table/FormElementTableCell.js.map +1 -1
- package/dist/components/formStore/table/HeaderCellMoreButton.js +5 -6
- package/dist/components/formStore/table/HeaderCellMoreButton.js.map +1 -1
- package/dist/components/formStore/table/RepeatableSetCellAccordion.js +2 -2
- package/dist/components/formStore/table/RepeatableSetCellAccordion.js.map +1 -1
- package/dist/components/messages/ErrorMessage.js +3 -5
- package/dist/components/messages/ErrorMessage.js.map +1 -1
- package/dist/components/messages/LargeIconMessage.d.ts +6 -4
- package/dist/components/messages/LargeIconMessage.js +1 -1
- package/dist/components/messages/LargeIconMessage.js.map +1 -1
- package/dist/components/payments/PaymentForm.js +2 -1
- package/dist/components/payments/PaymentForm.js.map +1 -1
- package/dist/components/payments/WestpacQuickStreamPaymentForm.js +2 -1
- package/dist/components/payments/WestpacQuickStreamPaymentForm.js.map +1 -1
- package/dist/components/receipts/ReceiptList.js +3 -2
- package/dist/components/receipts/ReceiptList.js.map +1 -1
- package/dist/components/receipts/ReceiptListItem.js +3 -2
- package/dist/components/receipts/ReceiptListItem.js.map +1 -1
- package/dist/components/renderer/AutocompleteDropdown.js +3 -2
- package/dist/components/renderer/AutocompleteDropdown.js.map +1 -1
- package/dist/components/renderer/CopyToClipboardButton.js +2 -1
- package/dist/components/renderer/CopyToClipboardButton.js.map +1 -1
- package/dist/components/renderer/CustomisableButtonInner.js +2 -1
- package/dist/components/renderer/CustomisableButtonInner.js.map +1 -1
- package/dist/components/renderer/FormElementLabelContainer.js +2 -1
- package/dist/components/renderer/FormElementLabelContainer.js.map +1 -1
- package/dist/components/renderer/LookupButton.js +2 -1
- package/dist/components/renderer/LookupButton.js.map +1 -1
- package/dist/components/renderer/LookupNotification.js +4 -3
- package/dist/components/renderer/LookupNotification.js.map +1 -1
- package/dist/components/renderer/attachments/AttachmentStatus.js +5 -4
- package/dist/components/renderer/attachments/AttachmentStatus.js.map +1 -1
- package/dist/components/renderer/attachments/DropdownMenu.js +2 -1
- package/dist/components/renderer/attachments/DropdownMenu.js.map +1 -1
- package/dist/components/renderer/attachments/FileCardContent.js +2 -1
- package/dist/components/renderer/attachments/FileCardContent.js.map +1 -1
- package/dist/components/renderer/attachments/ImagePreviewUnavailable.js +3 -2
- package/dist/components/renderer/attachments/ImagePreviewUnavailable.js.map +1 -1
- package/dist/form-elements/ComplianceButton.js +2 -1
- package/dist/form-elements/ComplianceButton.js.map +1 -1
- package/dist/form-elements/FormElementBarcodeScanner.js +2 -1
- package/dist/form-elements/FormElementBarcodeScanner.js.map +1 -1
- package/dist/form-elements/FormElementCalculation.js +2 -1
- package/dist/form-elements/FormElementCalculation.js.map +1 -1
- package/dist/form-elements/FormElementCamera.js +3 -2
- package/dist/form-elements/FormElementCamera.js.map +1 -1
- package/dist/form-elements/FormElementDate.js +2 -1
- package/dist/form-elements/FormElementDate.js.map +1 -1
- package/dist/form-elements/FormElementDateTime.js +2 -1
- package/dist/form-elements/FormElementDateTime.js.map +1 -1
- package/dist/form-elements/FormElementEmail.js +2 -1
- package/dist/form-elements/FormElementEmail.js.map +1 -1
- package/dist/form-elements/FormElementFiles.js +2 -1
- package/dist/form-elements/FormElementFiles.js.map +1 -1
- package/dist/form-elements/FormElementFreshdeskDependentField.js.map +1 -1
- package/dist/form-elements/FormElementNumber.js +2 -1
- package/dist/form-elements/FormElementNumber.js.map +1 -1
- package/dist/form-elements/FormElementRepeatableSet.js +5 -4
- package/dist/form-elements/FormElementRepeatableSet.js.map +1 -1
- package/dist/form-elements/FormElementSection.js +3 -2
- package/dist/form-elements/FormElementSection.js.map +1 -1
- package/dist/form-elements/FormElementTelephone.js +2 -1
- package/dist/form-elements/FormElementTelephone.js.map +1 -1
- package/dist/form-elements/FormElementTime.js +2 -1
- package/dist/form-elements/FormElementTime.js.map +1 -1
- package/dist/hooks/useDynamicOptionsLoaderState.d.ts +1 -1
- package/dist/hooks/useDynamicOptionsLoaderState.js +2 -1
- package/dist/hooks/useDynamicOptionsLoaderState.js.map +1 -1
- package/dist/hooks/useFormSubmissionState.d.ts +1 -1
- package/dist/hooks/useFormSubmissionState.js.map +1 -1
- package/dist/styles/icons.scss +13 -11
- package/dist/styles.css +4 -7
- package/dist/types/mui-color.d.ts +4 -0
- package/dist/types/mui-color.js +2 -0
- package/dist/types/mui-color.js.map +1 -0
- package/package.json +2 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormElementRepeatableSet.js","sourceRoot":"","sources":["../../src/form-elements/FormElementRepeatableSet.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport clsx from 'clsx'\nimport useBooleanState from '../hooks/useBooleanState'\nimport generateDefaultData from '../services/generate-default-data'\nimport OneBlinkFormElements from '../components/renderer/OneBlinkFormElements'\nimport Modal from '../components/renderer/Modal'\nimport { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport useValidationClass from '../hooks/useValidationClass'\nimport {\n ExecutedLookups,\n FormElementConditionallyShown,\n FormElementLookupHandler,\n FormElementsConditionallyShown,\n FormElementsValidation,\n FormElementValidation,\n NestedFormElementValueChangeHandler,\n IsDirtyProps,\n UpdateFormElementsHandler,\n} from '../types/form'\nimport useFormElementRepeatableSetEntries from '../hooks/useFormElementRepeatableSetEntries'\n\ntype Props = {\n formId: number\n id: string\n isEven: boolean\n element: FormTypes.RepeatableSetElement\n value: Array<SubmissionTypes.S3SubmissionData['submission']> | undefined\n onChange: NestedFormElementValueChangeHandler<\n SubmissionTypes.S3SubmissionData['submission'][]\n >\n onLookup: FormElementLookupHandler\n formElementConditionallyShown: FormElementConditionallyShown | undefined\n formElementValidation: FormElementValidation | undefined\n displayValidationMessage: boolean\n onUpdateFormElements: UpdateFormElementsHandler\n} & IsDirtyProps\n\nconst RepeatableSetIndexContext = React.createContext<number>(0)\n\nexport function useRepeatableSetIndexText(text: string) {\n const index = React.useContext(RepeatableSetIndexContext)\n return React.useMemo(\n () => text.replace('{INDEX}', (index + 1).toString()),\n [index, text],\n )\n}\n\nfunction FormElementRepeatableSet({\n formId,\n element,\n value,\n formElementValidation,\n id,\n isEven,\n displayValidationMessage,\n formElementConditionallyShown,\n onChange,\n onLookup,\n onUpdateFormElements,\n isDirty,\n setIsDirty,\n}: Props) {\n const entries = React.useMemo(\n () => (Array.isArray(value) ? value : []),\n [value],\n )\n\n const handleAddEntry = React.useCallback(() => {\n onChange(element, {\n value: (existingEntries) => {\n const newEntries = [...(existingEntries || [])]\n const entry = generateDefaultData(element.elements, {})\n newEntries.push(entry)\n return newEntries\n },\n executedLookups: (existingExecutedLookups) => {\n if (\n existingExecutedLookups !== undefined &&\n !Array.isArray(existingExecutedLookups)\n ) {\n return []\n }\n\n const newExistingExecutedLookups = [\n ...((existingExecutedLookups as ExecutedLookups[]) ??\n Array.from(Array(entries.length))),\n ]\n newExistingExecutedLookups.push({})\n return newExistingExecutedLookups\n },\n })\n setIsDirty()\n }, [element, onChange, setIsDirty, entries])\n\n const handleRemoveEntry = React.useCallback(\n (index: number) => {\n onChange(element, {\n value: (existingEntries) => {\n const newEntries = [...(existingEntries || [])]\n newEntries.splice(index, 1)\n return newEntries\n },\n executedLookups: (existingExecutedLookups) => {\n if (!Array.isArray(existingExecutedLookups)) {\n return []\n }\n const newExistingExecutedLookups = [...existingExecutedLookups]\n\n newExistingExecutedLookups.splice(index, 1)\n return newExistingExecutedLookups\n },\n })\n setIsDirty()\n },\n [element, onChange, setIsDirty],\n )\n\n const handleNestedChange = React.useCallback(\n (\n index: number,\n nestedElement: FormTypes.FormElement,\n {\n value,\n executedLookups,\n }: Parameters<NestedFormElementValueChangeHandler>[1],\n ) => {\n if (!('name' in nestedElement)) {\n return\n }\n onChange(element, {\n value: (existingEntries) => {\n const newEntries = (existingEntries || []).map((entry, i) => {\n if (i === index) {\n return {\n ...entry,\n [nestedElement.name]:\n typeof value === 'function'\n ? value(entry[nestedElement.name])\n : value,\n }\n } else {\n return entry\n }\n })\n return newEntries\n },\n executedLookups: (existingExecutedLookups) => {\n const elementExecutedLookups = existingExecutedLookups ?? []\n if (!Array.isArray(elementExecutedLookups)) {\n return elementExecutedLookups\n }\n const newExecutedLookups = elementExecutedLookups.map(\n (executedLookup, i) => {\n if (i === index) {\n const updatedExecutedLookups =\n typeof executedLookups === 'function'\n ? executedLookups(executedLookup?.[nestedElement.name])\n : executedLookups\n return {\n ...executedLookup,\n [nestedElement.name]: updatedExecutedLookups,\n }\n }\n return executedLookup\n },\n )\n return newExecutedLookups\n },\n })\n },\n [element, onChange],\n )\n\n const { minSetEntries, maxSetEntries } =\n useFormElementRepeatableSetEntries(element)\n\n const repeatableSetValidation = React.useMemo(\n () =>\n !formElementValidation ||\n typeof formElementValidation === 'string' ||\n formElementValidation.type !== 'repeatableSet'\n ? undefined\n : formElementValidation,\n [formElementValidation],\n )\n\n const repeatableSetEntriesConditionallyShown =\n formElementConditionallyShown &&\n formElementConditionallyShown.type === 'repeatableSet'\n ? formElementConditionallyShown.entries\n : {}\n\n const { validationClassName } = useValidationClass({\n formElementsValid: !repeatableSetValidation,\n displayInvalidClassName: isDirty || displayValidationMessage,\n validClassName: 'ob-repeatable-set-element__valid',\n invalidClassName: 'ob-repeatable-set-element__invalid',\n })\n\n return (\n <div\n className={clsx('cypress-repeatable-set-element', validationClassName)}\n >\n <FormElementLabelContainer\n className={`ob-repeatable-set ${isEven ? 'even' : 'odd'}`}\n element={element}\n id={id}\n required={!!minSetEntries && minSetEntries > 0}\n >\n {entries.map((entry, index) => {\n return (\n <RepeatableSetEntry\n key={index}\n formId={formId}\n index={index}\n id={id}\n isEven={isEven}\n entry={entry}\n element={element}\n onChange={handleNestedChange}\n onLookup={onLookup}\n onRemove={handleRemoveEntry}\n formElementsConditionallyShown={\n repeatableSetEntriesConditionallyShown[index.toString()]\n }\n formElementsValidation={\n repeatableSetValidation &&\n repeatableSetValidation.entries[index.toString()]\n }\n displayValidationMessages={displayValidationMessage}\n onUpdateFormElements={onUpdateFormElements}\n />\n )\n })}\n {(!maxSetEntries || entries.length < maxSetEntries) && (\n <button\n type=\"button\"\n className=\"button ob-button ob-button__add is-primary cypress-add-repeatable-set\"\n onClick={handleAddEntry}\n disabled={element.readOnly}\n >\n <span className=\"icon\">\n <i className=\"material-icons\">add</i>\n </span>\n {!!element.addSetEntryLabel && (\n <span>{element.addSetEntryLabel}</span>\n )}\n </button>\n )}\n {(isDirty || displayValidationMessage) &&\n !!repeatableSetValidation &&\n !!repeatableSetValidation.set && (\n <div role=\"alert\" className=\"has-margin-top-8\">\n <div className=\"has-text-danger ob-error__text cypress-validation-message\">\n {repeatableSetValidation.set}\n </div>\n </div>\n )}\n </FormElementLabelContainer>\n </div>\n )\n}\n\nexport default React.memo(FormElementRepeatableSet)\n\ntype RepeatableSetEntryProps = {\n formId: number\n id: string\n index: number\n isEven: boolean\n entry: SubmissionTypes.S3SubmissionData['submission']\n element: FormTypes.RepeatableSetElement\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined\n formElementsValidation: FormElementsValidation | undefined\n displayValidationMessages: boolean\n onChange: (\n index: number,\n formElement: FormTypes.FormElement,\n {\n value,\n executedLookups,\n }: Parameters<NestedFormElementValueChangeHandler>[1],\n ) => void\n onLookup: FormElementLookupHandler\n onRemove: (index: number) => unknown\n onUpdateFormElements: UpdateFormElementsHandler\n}\n\nconst RepeatableSetEntry = React.memo<RepeatableSetEntryProps>(\n function RepeatableSetEntry({\n formId,\n id,\n index,\n isEven,\n entry,\n element,\n formElementsConditionallyShown,\n displayValidationMessages,\n formElementsValidation,\n onChange,\n onLookup,\n onRemove,\n onUpdateFormElements,\n }: RepeatableSetEntryProps) {\n const [isConfirmingRemove, confirmRemove, cancelRemove] =\n useBooleanState(false)\n\n const handleChange: NestedFormElementValueChangeHandler = React.useCallback(\n (nestedElement, { value, executedLookups }) => {\n onChange(index, nestedElement, {\n value,\n executedLookups,\n })\n },\n [index, onChange],\n )\n\n const handleLookup = React.useCallback<FormElementLookupHandler>(\n (mergeLookupResults) => {\n onLookup((currentFormSubmission) => {\n let newEntry = {}\n const entries = currentFormSubmission.submission[\n element.name\n ] as Array<SubmissionTypes.S3SubmissionData['submission']>\n const repeatableSetExecutedLookups =\n (currentFormSubmission.executedLookups?.[\n element.name\n ] as ExecutedLookups[]) ?? Array.from(Array(entries.length))\n // if the repeatable set is prefilled or has minimum entries then executed lookups exists,\n // but is an empty array\n for (let i = 0; i < entries.length; i++) {\n if (!repeatableSetExecutedLookups[index]) {\n repeatableSetExecutedLookups[index] = {}\n }\n }\n let newExecutedLookups: ExecutedLookups = {}\n const elements = currentFormSubmission.elements.map((formElement) => {\n if (\n formElement.type === 'repeatableSet' &&\n formElement.name === element.name\n ) {\n const { elements, submission, executedLookups } =\n mergeLookupResults({\n elements: formElement.elements,\n submission: entries[index],\n lastElementUpdated: currentFormSubmission.lastElementUpdated,\n executedLookups: repeatableSetExecutedLookups[index] ?? {},\n })\n newEntry = submission\n newExecutedLookups = executedLookups as ExecutedLookups\n return {\n ...formElement,\n elements,\n }\n }\n return formElement\n })\n\n const submission = {\n ...currentFormSubmission.submission,\n [element.name]: entries.map((entry, i) => {\n if (i === index) {\n return newEntry\n }\n return entry\n }),\n }\n\n let updatedExecutedLookups = currentFormSubmission.executedLookups\n if (Array.isArray(repeatableSetExecutedLookups)) {\n updatedExecutedLookups = {\n ...currentFormSubmission.executedLookups,\n [element.name]: repeatableSetExecutedLookups.map((entry, i) => {\n if (i == index) {\n return newExecutedLookups\n }\n return entry\n }),\n }\n }\n\n return {\n elements,\n submission,\n executedLookups: updatedExecutedLookups,\n }\n })\n },\n [element.name, index, onLookup],\n )\n\n const { validationClassName } = useValidationClass({\n formElementsValid: !formElementsValidation,\n displayInvalidClassName: displayValidationMessages,\n validClassName: 'ob-repeatable-set__valid',\n invalidClassName: 'ob-repeatable-set__invalid',\n })\n\n const handleUpdateNestedFormElements =\n React.useCallback<UpdateFormElementsHandler>(\n (setter) => {\n onUpdateFormElements((formElements) => {\n return formElements.map((formElement) => {\n if (\n formElement.id === element.id &&\n formElement.type === 'repeatableSet'\n ) {\n return {\n ...formElement,\n elements: setter(formElement.elements),\n }\n }\n return formElement\n })\n })\n },\n [element.id, onUpdateFormElements],\n )\n\n return (\n <RepeatableSetIndexContext.Provider value={index}>\n <Modal\n isOpen={isConfirmingRemove}\n className=\"cypress-repeatable-set-prompt\"\n titleClassName=\"cypress-repeatable-set-remove-entry-header\"\n title={element.removeSetEntryLabel || 'Remove Entry'}\n actions={\n <>\n <button\n type=\"button\"\n className=\"button ob-button is-light cypress-cancel-repeatable-set\"\n onClick={cancelRemove}\n >\n Cancel\n </button>\n <button\n type=\"button\"\n className=\"button ob-button is-primary cypress-confirm-repeatable-set\"\n onClick={() => {\n cancelRemove()\n onRemove(index)\n }}\n autoFocus\n >\n Yes\n </button>\n </>\n }\n >\n Are you sure you want to remove this entry?\n </Modal>\n\n <div\n key={index}\n className={clsx(\n 'ob-repeatable-set__container cypress-repeatable-set-container',\n validationClassName,\n )}\n >\n <button\n type=\"button\"\n className=\"button ob-button ob-button_remove is-light cypress-remove-repeatable-set-entry\"\n onClick={confirmRemove}\n disabled={element.readOnly}\n >\n <span className=\"icon\">\n <i className=\"material-icons\">delete_outline</i>\n </span>\n {!!element.removeSetEntryLabel && (\n <span>{element.removeSetEntryLabel}</span>\n )}\n </button>\n\n <OneBlinkFormElements\n formId={formId}\n idPrefix={`${id}_entry-${index}_`}\n isEven={isEven}\n formElementsValidation={formElementsValidation}\n displayValidationMessages={displayValidationMessages}\n elements={element.elements}\n onChange={handleChange}\n onLookup={handleLookup}\n model={entry}\n parentElement={element}\n formElementsConditionallyShown={formElementsConditionallyShown}\n onUpdateFormElements={handleUpdateNestedFormElements}\n />\n </div>\n </RepeatableSetIndexContext.Provider>\n )\n },\n)\n"]}
|
|
1
|
+
{"version":3,"file":"FormElementRepeatableSet.js","sourceRoot":"","sources":["../../src/form-elements/FormElementRepeatableSet.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,eAAe,MAAM,0BAA0B,CAAA;AACtD,OAAO,mBAAmB,MAAM,mCAAmC,CAAA;AACnE,OAAO,oBAAoB,MAAM,6CAA6C,CAAA;AAC9E,OAAO,KAAK,MAAM,8BAA8B,CAAA;AAEhD,OAAO,yBAAyB,MAAM,kDAAkD,CAAA;AACxF,OAAO,kBAAkB,MAAM,6BAA6B,CAAA;AAY5D,OAAO,kCAAkC,MAAM,6CAA6C,CAAA;AAC5F,OAAO,YAAY,MAAM,4BAA4B,CAAA;AAkBrD,MAAM,yBAAyB,GAAG,KAAK,CAAC,aAAa,CAAS,CAAC,CAAC,CAAA;AAEhE,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAA;IACzD,OAAO,KAAK,CAAC,OAAO,CAClB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,EACrD,CAAC,KAAK,EAAE,IAAI,CAAC,CACd,CAAA;AACH,CAAC;AAED,SAAS,wBAAwB,CAAC,EAChC,MAAM,EACN,OAAO,EACP,KAAK,EACL,qBAAqB,EACrB,EAAE,EACF,MAAM,EACN,wBAAwB,EACxB,6BAA6B,EAC7B,QAAQ,EACR,QAAQ,EACR,oBAAoB,EACpB,OAAO,EACP,UAAU,GACJ;IACN,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAC3B,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EACzC,CAAC,KAAK,CAAC,CACR,CAAA;IAED,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC5C,QAAQ,CAAC,OAAO,EAAE;YAChB,KAAK,EAAE,CAAC,eAAe,EAAE,EAAE;gBACzB,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAA;gBAC/C,MAAM,KAAK,GAAG,mBAAmB,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;gBACvD,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACtB,OAAO,UAAU,CAAA;YACnB,CAAC;YACD,eAAe,EAAE,CAAC,uBAAuB,EAAE,EAAE;;gBAC3C,IACE,uBAAuB,KAAK,SAAS;oBACrC,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,EACvC;oBACA,OAAO,EAAE,CAAA;iBACV;gBAED,MAAM,0BAA0B,GAAG;oBACjC,GAAG,CAAC,MAAC,uBAA6C,mCAChD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;iBACrC,CAAA;gBACD,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBACnC,OAAO,0BAA0B,CAAA;YACnC,CAAC;SACF,CAAC,CAAA;QACF,UAAU,EAAE,CAAA;IACd,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;IAE5C,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CACzC,CAAC,KAAa,EAAE,EAAE;QAChB,QAAQ,CAAC,OAAO,EAAE;YAChB,KAAK,EAAE,CAAC,eAAe,EAAE,EAAE;gBACzB,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAA;gBAC/C,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;gBAC3B,OAAO,UAAU,CAAA;YACnB,CAAC;YACD,eAAe,EAAE,CAAC,uBAAuB,EAAE,EAAE;gBAC3C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE;oBAC3C,OAAO,EAAE,CAAA;iBACV;gBACD,MAAM,0BAA0B,GAAG,CAAC,GAAG,uBAAuB,CAAC,CAAA;gBAE/D,0BAA0B,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;gBAC3C,OAAO,0BAA0B,CAAA;YACnC,CAAC;SACF,CAAC,CAAA;QACF,UAAU,EAAE,CAAA;IACd,CAAC,EACD,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAChC,CAAA;IAED,MAAM,kBAAkB,GAAG,KAAK,CAAC,WAAW,CAC1C,CACE,KAAa,EACb,aAAoC,EACpC,EACE,KAAK,EACL,eAAe,GACoC,EACrD,EAAE;QACF,IAAI,CAAC,CAAC,MAAM,IAAI,aAAa,CAAC,EAAE;YAC9B,OAAM;SACP;QACD,QAAQ,CAAC,OAAO,EAAE;YAChB,KAAK,EAAE,CAAC,eAAe,EAAE,EAAE;gBACzB,MAAM,UAAU,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC1D,IAAI,CAAC,KAAK,KAAK,EAAE;wBACf,OAAO;4BACL,GAAG,KAAK;4BACR,CAAC,aAAa,CAAC,IAAI,CAAC,EAClB,OAAO,KAAK,KAAK,UAAU;gCACzB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gCAClC,CAAC,CAAC,KAAK;yBACZ,CAAA;qBACF;yBAAM;wBACL,OAAO,KAAK,CAAA;qBACb;gBACH,CAAC,CAAC,CAAA;gBACF,OAAO,UAAU,CAAA;YACnB,CAAC;YACD,eAAe,EAAE,CAAC,uBAAuB,EAAE,EAAE;gBAC3C,MAAM,sBAAsB,GAAG,uBAAuB,aAAvB,uBAAuB,cAAvB,uBAAuB,GAAI,EAAE,CAAA;gBAC5D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE;oBAC1C,OAAO,sBAAsB,CAAA;iBAC9B;gBACD,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,GAAG,CACnD,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE;oBACpB,IAAI,CAAC,KAAK,KAAK,EAAE;wBACf,MAAM,sBAAsB,GAC1B,OAAO,eAAe,KAAK,UAAU;4BACnC,CAAC,CAAC,eAAe,CAAC,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAG,aAAa,CAAC,IAAI,CAAC,CAAC;4BACvD,CAAC,CAAC,eAAe,CAAA;wBACrB,OAAO;4BACL,GAAG,cAAc;4BACjB,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,sBAAsB;yBAC7C,CAAA;qBACF;oBACD,OAAO,cAAc,CAAA;gBACvB,CAAC,CACF,CAAA;gBACD,OAAO,kBAAkB,CAAA;YAC3B,CAAC;SACF,CAAC,CAAA;IACJ,CAAC,EACD,CAAC,OAAO,EAAE,QAAQ,CAAC,CACpB,CAAA;IAED,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GACpC,kCAAkC,CAAC,OAAO,CAAC,CAAA;IAE7C,MAAM,uBAAuB,GAAG,KAAK,CAAC,OAAO,CAC3C,GAAG,EAAE,CACH,CAAC,qBAAqB;QACtB,OAAO,qBAAqB,KAAK,QAAQ;QACzC,qBAAqB,CAAC,IAAI,KAAK,eAAe;QAC5C,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,qBAAqB,EAC3B,CAAC,qBAAqB,CAAC,CACxB,CAAA;IAED,MAAM,sCAAsC,GAC1C,6BAA6B;QAC7B,6BAA6B,CAAC,IAAI,KAAK,eAAe;QACpD,CAAC,CAAC,6BAA6B,CAAC,OAAO;QACvC,CAAC,CAAC,EAAE,CAAA;IAER,MAAM,EAAE,mBAAmB,EAAE,GAAG,kBAAkB,CAAC;QACjD,iBAAiB,EAAE,CAAC,uBAAuB;QAC3C,uBAAuB,EAAE,OAAO,IAAI,wBAAwB;QAC5D,cAAc,EAAE,kCAAkC;QAClD,gBAAgB,EAAE,oCAAoC;KACvD,CAAC,CAAA;IAEF,OAAO,CACL,6BACE,SAAS,EAAE,IAAI,CAAC,gCAAgC,EAAE,mBAAmB,CAAC;QAEtE,oBAAC,yBAAyB,IACxB,SAAS,EAAE,qBAAqB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,EACzD,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,CAAC,CAAC,aAAa,IAAI,aAAa,GAAG,CAAC;YAE7C,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC5B,OAAO,CACL,oBAAC,kBAAkB,IACjB,GAAG,EAAE,KAAK,EACV,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,EAAE,EAAE,EAAE,EACN,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,iBAAiB,EAC3B,8BAA8B,EAC5B,sCAAsC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,EAE1D,sBAAsB,EACpB,uBAAuB;wBACvB,uBAAuB,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,EAEnD,yBAAyB,EAAE,wBAAwB,EACnD,oBAAoB,EAAE,oBAAoB,GAC1C,CACH,CAAA;YACH,CAAC,CAAC;YACD,CAAC,CAAC,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,aAAa,CAAC,IAAI,CACrD,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,uEAAuE,EACjF,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,OAAO,CAAC,QAAQ,gBACd,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;gBAE9D,8BAAM,SAAS,EAAC,MAAM;oBACpB,oBAAC,YAAY,cAAmB,CAC3B;gBACN,CAAC,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAC7B,kCAAO,OAAO,CAAC,gBAAgB,CAAQ,CACxC,CACM,CACV;YACA,CAAC,OAAO,IAAI,wBAAwB,CAAC;gBACpC,CAAC,CAAC,uBAAuB;gBACzB,CAAC,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAC/B,6BAAK,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,kBAAkB;gBAC5C,6BAAK,SAAS,EAAC,2DAA2D,IACvE,uBAAuB,CAAC,GAAG,CACxB,CACF,CACP,CACuB,CACxB,CACP,CAAA;AACH,CAAC;AAED,eAAe,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;AAyBnD,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,CACnC,SAAS,kBAAkB,CAAC,EAC1B,MAAM,EACN,EAAE,EACF,KAAK,EACL,MAAM,EACN,KAAK,EACL,OAAO,EACP,8BAA8B,EAC9B,yBAAyB,EACzB,sBAAsB,EACtB,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,oBAAoB,GACI;IACxB,MAAM,CAAC,kBAAkB,EAAE,aAAa,EAAE,YAAY,CAAC,GACrD,eAAe,CAAC,KAAK,CAAC,CAAA;IAExB,MAAM,YAAY,GAAwC,KAAK,CAAC,WAAW,CACzE,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE;QAC5C,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE;YAC7B,KAAK;YACL,eAAe;SAChB,CAAC,CAAA;IACJ,CAAC,EACD,CAAC,KAAK,EAAE,QAAQ,CAAC,CAClB,CAAA;IAED,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CACpC,CAAC,kBAAkB,EAAE,EAAE;QACrB,QAAQ,CAAC,CAAC,qBAAqB,EAAE,EAAE;;YACjC,IAAI,QAAQ,GAAG,EAAE,CAAA;YACjB,MAAM,OAAO,GAAG,qBAAqB,CAAC,UAAU,CAC9C,OAAO,CAAC,IAAI,CAC4C,CAAA;YAC1D,MAAM,4BAA4B,GAChC,MAAC,MAAA,qBAAqB,CAAC,eAAe,0CACpC,OAAO,CAAC,IAAI,CACS,mCAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;YAC9D,0FAA0F;YAC1F,wBAAwB;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACvC,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,EAAE;oBACxC,4BAA4B,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;iBACzC;aACF;YACD,IAAI,kBAAkB,GAAoB,EAAE,CAAA;YAC5C,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE;;gBAClE,IACE,WAAW,CAAC,IAAI,KAAK,eAAe;oBACpC,WAAW,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EACjC;oBACA,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,eAAe,EAAE,GAC7C,kBAAkB,CAAC;wBACjB,QAAQ,EAAE,WAAW,CAAC,QAAQ;wBAC9B,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC;wBAC1B,kBAAkB,EAAE,qBAAqB,CAAC,kBAAkB;wBAC5D,eAAe,EAAE,MAAA,4BAA4B,CAAC,KAAK,CAAC,mCAAI,EAAE;qBAC3D,CAAC,CAAA;oBACJ,QAAQ,GAAG,UAAU,CAAA;oBACrB,kBAAkB,GAAG,eAAkC,CAAA;oBACvD,OAAO;wBACL,GAAG,WAAW;wBACd,QAAQ;qBACT,CAAA;iBACF;gBACD,OAAO,WAAW,CAAA;YACpB,CAAC,CAAC,CAAA;YAEF,MAAM,UAAU,GAAG;gBACjB,GAAG,qBAAqB,CAAC,UAAU;gBACnC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;oBACvC,IAAI,CAAC,KAAK,KAAK,EAAE;wBACf,OAAO,QAAQ,CAAA;qBAChB;oBACD,OAAO,KAAK,CAAA;gBACd,CAAC,CAAC;aACH,CAAA;YAED,IAAI,sBAAsB,GAAG,qBAAqB,CAAC,eAAe,CAAA;YAClE,IAAI,KAAK,CAAC,OAAO,CAAC,4BAA4B,CAAC,EAAE;gBAC/C,sBAAsB,GAAG;oBACvB,GAAG,qBAAqB,CAAC,eAAe;oBACxC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,4BAA4B,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;wBAC5D,IAAI,CAAC,IAAI,KAAK,EAAE;4BACd,OAAO,kBAAkB,CAAA;yBAC1B;wBACD,OAAO,KAAK,CAAA;oBACd,CAAC,CAAC;iBACH,CAAA;aACF;YAED,OAAO;gBACL,QAAQ;gBACR,UAAU;gBACV,eAAe,EAAE,sBAAsB;aACxC,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,EACD,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAChC,CAAA;IAED,MAAM,EAAE,mBAAmB,EAAE,GAAG,kBAAkB,CAAC;QACjD,iBAAiB,EAAE,CAAC,sBAAsB;QAC1C,uBAAuB,EAAE,yBAAyB;QAClD,cAAc,EAAE,0BAA0B;QAC1C,gBAAgB,EAAE,4BAA4B;KAC/C,CAAC,CAAA;IAEF,MAAM,8BAA8B,GAClC,KAAK,CAAC,WAAW,CACf,CAAC,MAAM,EAAE,EAAE;QACT,oBAAoB,CAAC,CAAC,YAAY,EAAE,EAAE;YACpC,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE;gBACtC,IACE,WAAW,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE;oBAC7B,WAAW,CAAC,IAAI,KAAK,eAAe,EACpC;oBACA,OAAO;wBACL,GAAG,WAAW;wBACd,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC;qBACvC,CAAA;iBACF;gBACD,OAAO,WAAW,CAAA;YACpB,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,EACD,CAAC,OAAO,CAAC,EAAE,EAAE,oBAAoB,CAAC,CACnC,CAAA;IAEH,OAAO,CACL,oBAAC,yBAAyB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK;QAC9C,oBAAC,KAAK,IACJ,MAAM,EAAE,kBAAkB,EAC1B,SAAS,EAAC,+BAA+B,EACzC,cAAc,EAAC,4CAA4C,EAC3D,KAAK,EAAE,OAAO,CAAC,mBAAmB,IAAI,cAAc,EACpD,OAAO,EACL;gBACE,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,yDAAyD,EACnE,OAAO,EAAE,YAAY,aAGd;gBACT,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,4DAA4D,EACtE,OAAO,EAAE,GAAG,EAAE;wBACZ,YAAY,EAAE,CAAA;wBACd,QAAQ,CAAC,KAAK,CAAC,CAAA;oBACjB,CAAC,EACD,SAAS,gBAGF,CACR,kDAIC;QAER,6BACE,GAAG,EAAE,KAAK,EACV,SAAS,EAAE,IAAI,CACb,+DAA+D,EAC/D,mBAAmB,CACpB;YAED,gCACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,gFAAgF,EAC1F,OAAO,EAAE,aAAa,EACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ,gBAExB,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc;gBAG1D,8BAAM,SAAS,EAAC,MAAM;oBACpB,oBAAC,YAAY,yBAA8B,CACtC;gBACN,CAAC,CAAC,OAAO,CAAC,mBAAmB,IAAI,CAChC,kCAAO,OAAO,CAAC,mBAAmB,CAAQ,CAC3C,CACM;YAET,oBAAC,oBAAoB,IACnB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,GAAG,EAAE,UAAU,KAAK,GAAG,EACjC,MAAM,EAAE,MAAM,EACd,sBAAsB,EAAE,sBAAsB,EAC9C,yBAAyB,EAAE,yBAAyB,EACpD,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAC1B,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,KAAK,EACZ,aAAa,EAAE,OAAO,EACtB,8BAA8B,EAAE,8BAA8B,EAC9D,oBAAoB,EAAE,8BAA8B,GACpD,CACE,CAC6B,CACtC,CAAA;AACH,CAAC,CACF,CAAA","sourcesContent":["import * as React from 'react'\nimport clsx from 'clsx'\nimport useBooleanState from '../hooks/useBooleanState'\nimport generateDefaultData from '../services/generate-default-data'\nimport OneBlinkFormElements from '../components/renderer/OneBlinkFormElements'\nimport Modal from '../components/renderer/Modal'\nimport { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport useValidationClass from '../hooks/useValidationClass'\nimport {\n ExecutedLookups,\n FormElementConditionallyShown,\n FormElementLookupHandler,\n FormElementsConditionallyShown,\n FormElementsValidation,\n FormElementValidation,\n NestedFormElementValueChangeHandler,\n IsDirtyProps,\n UpdateFormElementsHandler,\n} from '../types/form'\nimport useFormElementRepeatableSetEntries from '../hooks/useFormElementRepeatableSetEntries'\nimport MaterialIcon from '../components/MaterialIcon'\n\ntype Props = {\n formId: number\n id: string\n isEven: boolean\n element: FormTypes.RepeatableSetElement\n value: Array<SubmissionTypes.S3SubmissionData['submission']> | undefined\n onChange: NestedFormElementValueChangeHandler<\n SubmissionTypes.S3SubmissionData['submission'][]\n >\n onLookup: FormElementLookupHandler\n formElementConditionallyShown: FormElementConditionallyShown | undefined\n formElementValidation: FormElementValidation | undefined\n displayValidationMessage: boolean\n onUpdateFormElements: UpdateFormElementsHandler\n} & IsDirtyProps\n\nconst RepeatableSetIndexContext = React.createContext<number>(0)\n\nexport function useRepeatableSetIndexText(text: string) {\n const index = React.useContext(RepeatableSetIndexContext)\n return React.useMemo(\n () => text.replace('{INDEX}', (index + 1).toString()),\n [index, text],\n )\n}\n\nfunction FormElementRepeatableSet({\n formId,\n element,\n value,\n formElementValidation,\n id,\n isEven,\n displayValidationMessage,\n formElementConditionallyShown,\n onChange,\n onLookup,\n onUpdateFormElements,\n isDirty,\n setIsDirty,\n}: Props) {\n const entries = React.useMemo(\n () => (Array.isArray(value) ? value : []),\n [value],\n )\n\n const handleAddEntry = React.useCallback(() => {\n onChange(element, {\n value: (existingEntries) => {\n const newEntries = [...(existingEntries || [])]\n const entry = generateDefaultData(element.elements, {})\n newEntries.push(entry)\n return newEntries\n },\n executedLookups: (existingExecutedLookups) => {\n if (\n existingExecutedLookups !== undefined &&\n !Array.isArray(existingExecutedLookups)\n ) {\n return []\n }\n\n const newExistingExecutedLookups = [\n ...((existingExecutedLookups as ExecutedLookups[]) ??\n Array.from(Array(entries.length))),\n ]\n newExistingExecutedLookups.push({})\n return newExistingExecutedLookups\n },\n })\n setIsDirty()\n }, [element, onChange, setIsDirty, entries])\n\n const handleRemoveEntry = React.useCallback(\n (index: number) => {\n onChange(element, {\n value: (existingEntries) => {\n const newEntries = [...(existingEntries || [])]\n newEntries.splice(index, 1)\n return newEntries\n },\n executedLookups: (existingExecutedLookups) => {\n if (!Array.isArray(existingExecutedLookups)) {\n return []\n }\n const newExistingExecutedLookups = [...existingExecutedLookups]\n\n newExistingExecutedLookups.splice(index, 1)\n return newExistingExecutedLookups\n },\n })\n setIsDirty()\n },\n [element, onChange, setIsDirty],\n )\n\n const handleNestedChange = React.useCallback(\n (\n index: number,\n nestedElement: FormTypes.FormElement,\n {\n value,\n executedLookups,\n }: Parameters<NestedFormElementValueChangeHandler>[1],\n ) => {\n if (!('name' in nestedElement)) {\n return\n }\n onChange(element, {\n value: (existingEntries) => {\n const newEntries = (existingEntries || []).map((entry, i) => {\n if (i === index) {\n return {\n ...entry,\n [nestedElement.name]:\n typeof value === 'function'\n ? value(entry[nestedElement.name])\n : value,\n }\n } else {\n return entry\n }\n })\n return newEntries\n },\n executedLookups: (existingExecutedLookups) => {\n const elementExecutedLookups = existingExecutedLookups ?? []\n if (!Array.isArray(elementExecutedLookups)) {\n return elementExecutedLookups\n }\n const newExecutedLookups = elementExecutedLookups.map(\n (executedLookup, i) => {\n if (i === index) {\n const updatedExecutedLookups =\n typeof executedLookups === 'function'\n ? executedLookups(executedLookup?.[nestedElement.name])\n : executedLookups\n return {\n ...executedLookup,\n [nestedElement.name]: updatedExecutedLookups,\n }\n }\n return executedLookup\n },\n )\n return newExecutedLookups\n },\n })\n },\n [element, onChange],\n )\n\n const { minSetEntries, maxSetEntries } =\n useFormElementRepeatableSetEntries(element)\n\n const repeatableSetValidation = React.useMemo(\n () =>\n !formElementValidation ||\n typeof formElementValidation === 'string' ||\n formElementValidation.type !== 'repeatableSet'\n ? undefined\n : formElementValidation,\n [formElementValidation],\n )\n\n const repeatableSetEntriesConditionallyShown =\n formElementConditionallyShown &&\n formElementConditionallyShown.type === 'repeatableSet'\n ? formElementConditionallyShown.entries\n : {}\n\n const { validationClassName } = useValidationClass({\n formElementsValid: !repeatableSetValidation,\n displayInvalidClassName: isDirty || displayValidationMessage,\n validClassName: 'ob-repeatable-set-element__valid',\n invalidClassName: 'ob-repeatable-set-element__invalid',\n })\n\n return (\n <div\n className={clsx('cypress-repeatable-set-element', validationClassName)}\n >\n <FormElementLabelContainer\n className={`ob-repeatable-set ${isEven ? 'even' : 'odd'}`}\n element={element}\n id={id}\n required={!!minSetEntries && minSetEntries > 0}\n >\n {entries.map((entry, index) => {\n return (\n <RepeatableSetEntry\n key={index}\n formId={formId}\n index={index}\n id={id}\n isEven={isEven}\n entry={entry}\n element={element}\n onChange={handleNestedChange}\n onLookup={onLookup}\n onRemove={handleRemoveEntry}\n formElementsConditionallyShown={\n repeatableSetEntriesConditionallyShown[index.toString()]\n }\n formElementsValidation={\n repeatableSetValidation &&\n repeatableSetValidation.entries[index.toString()]\n }\n displayValidationMessages={displayValidationMessage}\n onUpdateFormElements={onUpdateFormElements}\n />\n )\n })}\n {(!maxSetEntries || entries.length < maxSetEntries) && (\n <button\n type=\"button\"\n className=\"button ob-button ob-button__add is-primary cypress-add-repeatable-set\"\n onClick={handleAddEntry}\n disabled={element.readOnly}\n aria-label={element.addSetEntryLabel ? undefined : 'Add Entry'}\n >\n <span className=\"icon\">\n <MaterialIcon>add</MaterialIcon>\n </span>\n {!!element.addSetEntryLabel && (\n <span>{element.addSetEntryLabel}</span>\n )}\n </button>\n )}\n {(isDirty || displayValidationMessage) &&\n !!repeatableSetValidation &&\n !!repeatableSetValidation.set && (\n <div role=\"alert\" className=\"has-margin-top-8\">\n <div className=\"has-text-danger ob-error__text cypress-validation-message\">\n {repeatableSetValidation.set}\n </div>\n </div>\n )}\n </FormElementLabelContainer>\n </div>\n )\n}\n\nexport default React.memo(FormElementRepeatableSet)\n\ntype RepeatableSetEntryProps = {\n formId: number\n id: string\n index: number\n isEven: boolean\n entry: SubmissionTypes.S3SubmissionData['submission']\n element: FormTypes.RepeatableSetElement\n formElementsConditionallyShown: FormElementsConditionallyShown | undefined\n formElementsValidation: FormElementsValidation | undefined\n displayValidationMessages: boolean\n onChange: (\n index: number,\n formElement: FormTypes.FormElement,\n {\n value,\n executedLookups,\n }: Parameters<NestedFormElementValueChangeHandler>[1],\n ) => void\n onLookup: FormElementLookupHandler\n onRemove: (index: number) => unknown\n onUpdateFormElements: UpdateFormElementsHandler\n}\n\nconst RepeatableSetEntry = React.memo<RepeatableSetEntryProps>(\n function RepeatableSetEntry({\n formId,\n id,\n index,\n isEven,\n entry,\n element,\n formElementsConditionallyShown,\n displayValidationMessages,\n formElementsValidation,\n onChange,\n onLookup,\n onRemove,\n onUpdateFormElements,\n }: RepeatableSetEntryProps) {\n const [isConfirmingRemove, confirmRemove, cancelRemove] =\n useBooleanState(false)\n\n const handleChange: NestedFormElementValueChangeHandler = React.useCallback(\n (nestedElement, { value, executedLookups }) => {\n onChange(index, nestedElement, {\n value,\n executedLookups,\n })\n },\n [index, onChange],\n )\n\n const handleLookup = React.useCallback<FormElementLookupHandler>(\n (mergeLookupResults) => {\n onLookup((currentFormSubmission) => {\n let newEntry = {}\n const entries = currentFormSubmission.submission[\n element.name\n ] as Array<SubmissionTypes.S3SubmissionData['submission']>\n const repeatableSetExecutedLookups =\n (currentFormSubmission.executedLookups?.[\n element.name\n ] as ExecutedLookups[]) ?? Array.from(Array(entries.length))\n // if the repeatable set is prefilled or has minimum entries then executed lookups exists,\n // but is an empty array\n for (let i = 0; i < entries.length; i++) {\n if (!repeatableSetExecutedLookups[index]) {\n repeatableSetExecutedLookups[index] = {}\n }\n }\n let newExecutedLookups: ExecutedLookups = {}\n const elements = currentFormSubmission.elements.map((formElement) => {\n if (\n formElement.type === 'repeatableSet' &&\n formElement.name === element.name\n ) {\n const { elements, submission, executedLookups } =\n mergeLookupResults({\n elements: formElement.elements,\n submission: entries[index],\n lastElementUpdated: currentFormSubmission.lastElementUpdated,\n executedLookups: repeatableSetExecutedLookups[index] ?? {},\n })\n newEntry = submission\n newExecutedLookups = executedLookups as ExecutedLookups\n return {\n ...formElement,\n elements,\n }\n }\n return formElement\n })\n\n const submission = {\n ...currentFormSubmission.submission,\n [element.name]: entries.map((entry, i) => {\n if (i === index) {\n return newEntry\n }\n return entry\n }),\n }\n\n let updatedExecutedLookups = currentFormSubmission.executedLookups\n if (Array.isArray(repeatableSetExecutedLookups)) {\n updatedExecutedLookups = {\n ...currentFormSubmission.executedLookups,\n [element.name]: repeatableSetExecutedLookups.map((entry, i) => {\n if (i == index) {\n return newExecutedLookups\n }\n return entry\n }),\n }\n }\n\n return {\n elements,\n submission,\n executedLookups: updatedExecutedLookups,\n }\n })\n },\n [element.name, index, onLookup],\n )\n\n const { validationClassName } = useValidationClass({\n formElementsValid: !formElementsValidation,\n displayInvalidClassName: displayValidationMessages,\n validClassName: 'ob-repeatable-set__valid',\n invalidClassName: 'ob-repeatable-set__invalid',\n })\n\n const handleUpdateNestedFormElements =\n React.useCallback<UpdateFormElementsHandler>(\n (setter) => {\n onUpdateFormElements((formElements) => {\n return formElements.map((formElement) => {\n if (\n formElement.id === element.id &&\n formElement.type === 'repeatableSet'\n ) {\n return {\n ...formElement,\n elements: setter(formElement.elements),\n }\n }\n return formElement\n })\n })\n },\n [element.id, onUpdateFormElements],\n )\n\n return (\n <RepeatableSetIndexContext.Provider value={index}>\n <Modal\n isOpen={isConfirmingRemove}\n className=\"cypress-repeatable-set-prompt\"\n titleClassName=\"cypress-repeatable-set-remove-entry-header\"\n title={element.removeSetEntryLabel || 'Remove Entry'}\n actions={\n <>\n <button\n type=\"button\"\n className=\"button ob-button is-light cypress-cancel-repeatable-set\"\n onClick={cancelRemove}\n >\n Cancel\n </button>\n <button\n type=\"button\"\n className=\"button ob-button is-primary cypress-confirm-repeatable-set\"\n onClick={() => {\n cancelRemove()\n onRemove(index)\n }}\n autoFocus\n >\n Yes\n </button>\n </>\n }\n >\n Are you sure you want to remove this entry?\n </Modal>\n\n <div\n key={index}\n className={clsx(\n 'ob-repeatable-set__container cypress-repeatable-set-container',\n validationClassName,\n )}\n >\n <button\n type=\"button\"\n className=\"button ob-button ob-button_remove is-light cypress-remove-repeatable-set-entry\"\n onClick={confirmRemove}\n disabled={element.readOnly}\n aria-label={\n element.removeSetEntryLabel ? undefined : 'Remove Entry'\n }\n >\n <span className=\"icon\">\n <MaterialIcon>delete_outline</MaterialIcon>\n </span>\n {!!element.removeSetEntryLabel && (\n <span>{element.removeSetEntryLabel}</span>\n )}\n </button>\n\n <OneBlinkFormElements\n formId={formId}\n idPrefix={`${id}_entry-${index}_`}\n isEven={isEven}\n formElementsValidation={formElementsValidation}\n displayValidationMessages={displayValidationMessages}\n elements={element.elements}\n onChange={handleChange}\n onLookup={handleLookup}\n model={entry}\n parentElement={element}\n formElementsConditionallyShown={formElementsConditionallyShown}\n onUpdateFormElements={handleUpdateNestedFormElements}\n />\n </div>\n </RepeatableSetIndexContext.Provider>\n )\n },\n)\n"]}
|
|
@@ -6,6 +6,7 @@ import OneBlinkFormElements from '../components/renderer/OneBlinkFormElements';
|
|
|
6
6
|
import { checkSectionValidity } from '../services/form-validation';
|
|
7
7
|
import { HintBelowLabel, HintTooltip, } from '../components/renderer/FormElementLabelContainer';
|
|
8
8
|
import useValidationClass from '../hooks/useValidationClass';
|
|
9
|
+
import MaterialIcon from '../components/MaterialIcon';
|
|
9
10
|
function FormElementSection({ element, onLookup, displayValidationMessages, onUpdateFormElements, ...props }) {
|
|
10
11
|
const [isCollapsed, , , toggle] = useBooleanState(element.isCollapsed);
|
|
11
12
|
const [isDisplayingError, setIsDisplayingError] = React.useState(isCollapsed);
|
|
@@ -78,8 +79,8 @@ function FormElementSection({ element, onLookup, displayValidationMessages, onUp
|
|
|
78
79
|
(element.hintPosition === 'TOOLTIP' || !element.hintPosition) && (React.createElement(HintTooltip, { hint: element.hint, inputId: id }))),
|
|
79
80
|
React.createElement("div", { className: "ob-section__header-icon-container" },
|
|
80
81
|
!valid && displayValidationMessage && (React.createElement(Tooltip, { title: "Section has errors" },
|
|
81
|
-
React.createElement(
|
|
82
|
-
React.createElement(
|
|
82
|
+
React.createElement(MaterialIcon, { className: "has-text-danger cypress-section-invalid-icon section-invalid-icon fade-in" }, "warning"))),
|
|
83
|
+
React.createElement(MaterialIcon, { className: clsx('ob-section__header-icon', {
|
|
83
84
|
'is-rotated': !isCollapsed,
|
|
84
85
|
}) }, "expand_more")),
|
|
85
86
|
element.hint && element.hintPosition === 'BELOW_LABEL' && (React.createElement("div", { className: "ob-section__hint-text-container" },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormElementSection.js","sourceRoot":"","sources":["../../src/form-elements/FormElementSection.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEjD,OAAO,eAAe,MAAM,0BAA0B,CAAA;AACtD,OAAO,oBAEN,MAAM,6CAA6C,CAAA;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAMlE,OAAO,EACL,cAAc,EACd,WAAW,GACZ,MAAM,kDAAkD,CAAA;AACzD,OAAO,kBAAkB,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"FormElementSection.js","sourceRoot":"","sources":["../../src/form-elements/FormElementSection.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport clsx from 'clsx'\nimport { Collapse, Tooltip } from '@mui/material'\nimport { FormTypes } from '@oneblink/types'\nimport useBooleanState from '../hooks/useBooleanState'\nimport OneBlinkFormElements, {\n Props,\n} from '../components/renderer/OneBlinkFormElements'\nimport { checkSectionValidity } from '../services/form-validation'\nimport {\n FormElementLookupHandler,\n UpdateFormElementsHandler,\n ExecutedLookups,\n} from '../types/form'\nimport {\n HintBelowLabel,\n HintTooltip,\n} from '../components/renderer/FormElementLabelContainer'\nimport useValidationClass from '../hooks/useValidationClass'\nimport MaterialIcon from '../components/MaterialIcon'\n\nfunction FormElementSection<T extends FormTypes._NestedElementsElement>({\n element,\n onLookup,\n displayValidationMessages,\n onUpdateFormElements,\n ...props\n}: Omit<Props<T>, 'elements'> & {\n element: FormTypes.SectionElement\n}) {\n const [isCollapsed, , , toggle] = useBooleanState(element.isCollapsed)\n const [isDisplayingError, setIsDisplayingError] = React.useState(isCollapsed)\n\n const id = `${props['idPrefix']}${element.id}`\n\n React.useEffect(() => {\n if (isCollapsed && !isDisplayingError) {\n setIsDisplayingError(true)\n }\n }, [isCollapsed, isDisplayingError])\n\n const displayValidationMessage =\n displayValidationMessages || isDisplayingError\n\n const isValid = React.useMemo(\n () => !checkSectionValidity(element, props.formElementsValidation),\n [element, props.formElementsValidation],\n )\n\n const { validationClassName, valid } = useValidationClass({\n formElementsValid: isValid,\n displayInvalidClassName: displayValidationMessage,\n validClassName: 'ob-section__valid',\n invalidClassName: 'ob-section__invalid',\n })\n\n const handleLookup = React.useCallback<FormElementLookupHandler>(\n (mergeLookupResults) => {\n onLookup((currentFormSubmission) => {\n let model = currentFormSubmission.submission\n let newExecutedLookups: ExecutedLookups = {}\n const elements = currentFormSubmission.elements.map((formElement) => {\n if (formElement.type === 'section' && formElement.id === element.id) {\n const { elements, submission, executedLookups } =\n mergeLookupResults({\n elements: formElement.elements,\n submission: currentFormSubmission.submission,\n lastElementUpdated: currentFormSubmission.lastElementUpdated,\n executedLookups: currentFormSubmission.executedLookups,\n })\n model = submission\n newExecutedLookups = executedLookups\n return {\n ...formElement,\n elements,\n }\n }\n return formElement\n })\n\n return {\n elements,\n submission: model,\n lastElementUpdated: currentFormSubmission.lastElementUpdated,\n executedLookups: newExecutedLookups,\n }\n })\n },\n [element.id, onLookup],\n )\n\n const handleUpdateNestedFormElements =\n React.useCallback<UpdateFormElementsHandler>(\n (setter) => {\n onUpdateFormElements((formElements) => {\n return formElements.map((formElement) => {\n if (\n formElement.id === element.id &&\n formElement.type === 'section'\n ) {\n return {\n ...formElement,\n elements: setter(formElement.elements),\n }\n }\n return formElement\n })\n })\n },\n [element.id, onUpdateFormElements],\n )\n\n return (\n <div className={clsx('ob-section', validationClassName)}>\n <div\n className=\"ob-section__header cypress-section-header\"\n onClick={toggle}\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n toggle()\n }\n }}\n >\n <h3 className=\"ob-section__header-text title is-3\">\n {element.label}\n {element.hint &&\n (element.hintPosition === 'TOOLTIP' || !element.hintPosition) && (\n <HintTooltip hint={element.hint} inputId={id} />\n )}\n </h3>\n <div className=\"ob-section__header-icon-container\">\n {!valid && displayValidationMessage && (\n <Tooltip title=\"Section has errors\">\n <MaterialIcon className=\"has-text-danger cypress-section-invalid-icon section-invalid-icon fade-in\">\n warning\n </MaterialIcon>\n </Tooltip>\n )}\n <MaterialIcon\n className={clsx('ob-section__header-icon', {\n 'is-rotated': !isCollapsed,\n })}\n >\n expand_more\n </MaterialIcon>\n </div>\n {element.hint && element.hintPosition === 'BELOW_LABEL' && (\n <div className=\"ob-section__hint-text-container\">\n <HintBelowLabel hint={element.hint} inputId={id} />\n </div>\n )}\n </div>\n <hr className=\"ob-section__divider\" />\n <Collapse\n in={!isCollapsed}\n classes={{\n root: 'ob-section__content',\n entered: 'ob-section__expanded',\n hidden: 'ob-section__collapsed',\n }}\n >\n <OneBlinkFormElements\n {...props}\n displayValidationMessages={displayValidationMessage}\n onLookup={handleLookup}\n elements={element.elements}\n onUpdateFormElements={handleUpdateNestedFormElements}\n />\n </Collapse>\n </div>\n )\n}\n\nexport default React.memo(FormElementSection)\n"]}
|
|
@@ -4,6 +4,7 @@ import LookupButton from '../components/renderer/LookupButton';
|
|
|
4
4
|
import FormElementLabelContainer from '../components/renderer/FormElementLabelContainer';
|
|
5
5
|
import { LookupNotificationContext } from '../hooks/useLookupNotification';
|
|
6
6
|
import useElementAriaDescribedby from '../hooks/useElementAriaDescribedby';
|
|
7
|
+
import MaterialIcon from '../components/MaterialIcon';
|
|
7
8
|
function FormElementTelephone({ id, element, value, onChange, validationMessage, displayValidationMessage, isDirty, setIsDirty, }) {
|
|
8
9
|
const ariaDescribedby = useElementAriaDescribedby(id, element);
|
|
9
10
|
const text = typeof value === 'string' ? value : '';
|
|
@@ -17,7 +18,7 @@ function FormElementTelephone({ id, element, value, onChange, validationMessage,
|
|
|
17
18
|
value: e.target.value || undefined,
|
|
18
19
|
}), required: element.required, disabled: element.readOnly, onBlur: setIsDirty, "aria-describedby": ariaDescribedby }),
|
|
19
20
|
React.createElement("span", { className: "ob-input-icon icon is-small is-right" },
|
|
20
|
-
React.createElement(
|
|
21
|
+
React.createElement(MaterialIcon, { className: "is-size-5" }, "phone"))),
|
|
21
22
|
!!element.readOnly && !!value && (React.createElement("div", { className: "control" },
|
|
22
23
|
React.createElement(CopyToClipboardButton, { className: "button is-input-addon copy-button cypress-copy-to-clipboard-button", text: text }))),
|
|
23
24
|
React.createElement(LookupButton, { isInputButton: true, value: value, validationMessage: validationMessage, lookupButtonConfig: element.lookupButton })),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormElementTelephone.js","sourceRoot":"","sources":["../../src/form-elements/FormElementTelephone.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,qBAAqB,MAAM,8CAA8C,CAAA;AAChF,OAAO,YAAY,MAAM,qCAAqC,CAAA;AAE9D,OAAO,yBAAyB,MAAM,kDAAkD,CAAA;AAExF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC1E,OAAO,yBAAyB,MAAM,oCAAoC,CAAA;
|
|
1
|
+
{"version":3,"file":"FormElementTelephone.js","sourceRoot":"","sources":["../../src/form-elements/FormElementTelephone.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,qBAAqB,MAAM,8CAA8C,CAAA;AAChF,OAAO,YAAY,MAAM,qCAAqC,CAAA;AAE9D,OAAO,yBAAyB,MAAM,kDAAkD,CAAA;AAExF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC1E,OAAO,yBAAyB,MAAM,oCAAoC,CAAA;AAC1E,OAAO,YAAY,MAAM,4BAA4B,CAAA;AAWrD,SAAS,oBAAoB,CAAC,EAC5B,EAAE,EACF,OAAO,EACP,KAAK,EACL,QAAQ,EACR,iBAAiB,EACjB,wBAAwB,EACxB,OAAO,EACP,UAAU,GACJ;IACN,MAAM,eAAe,GAAG,yBAAyB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAA;IAC9D,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAEnD,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAA;IACnE,MAAM,6BAA6B,GACjC,CAAC,OAAO,IAAI,wBAAwB,CAAC,IAAI,CAAC,CAAC,iBAAiB,IAAI,CAAC,WAAW,CAAA;IAE9E,OAAO,CACL,6BAAK,SAAS,EAAC,2BAA2B;QACxC,oBAAC,yBAAyB,IACxB,SAAS,EAAC,cAAc,EACxB,EAAE,EAAE,EAAE,EACN,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAE1B,6BAAK,SAAS,EAAC,kBAAkB;gBAC/B,6BAAK,SAAS,EAAC,qCAAqC;oBAClD,+BACE,IAAI,EAAC,KAAK,EACV,WAAW,EAAE,OAAO,CAAC,gBAAgB,EACrC,EAAE,EAAE,EAAE,EACN,IAAI,EAAE,OAAO,CAAC,IAAI,EAClB,SAAS,EAAC,0CAA0C,EACpD,KAAK,EAAE,IAAI,EACX,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CACd,QAAQ,CAAC,OAAO,EAAE;4BAChB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,SAAS;yBACnC,CAAC,EAEJ,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAC1B,MAAM,EAAE,UAAU,sBACA,eAAe,GACjC;oBACF,8BAAM,SAAS,EAAC,sCAAsC;wBACpD,oBAAC,YAAY,IAAC,SAAS,EAAC,WAAW,YAAqB,CACnD,CACH;gBACL,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,IAAI,CAChC,6BAAK,SAAS,EAAC,SAAS;oBACtB,oBAAC,qBAAqB,IACpB,SAAS,EAAC,oEAAoE,EAC9E,IAAI,EAAE,IAAI,GACV,CACE,CACP;gBACD,oBAAC,YAAY,IACX,aAAa,QACb,KAAK,EAAE,KAAK,EACZ,iBAAiB,EAAE,iBAAiB,EACpC,kBAAkB,EAAE,OAAO,CAAC,YAAY,GACxC,CACE;YAEL,6BAA6B,IAAI,CAChC,6BAAK,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,kBAAkB;gBAC5C,6BAAK,SAAS,EAAC,2DAA2D,IACvE,iBAAiB,CACd,CACF,CACP,CACyB,CACxB,CACP,CAAA;AACH,CAAC;AAED,eAAe,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA","sourcesContent":["import * as React from 'react'\n\nimport CopyToClipboardButton from '../components/renderer/CopyToClipboardButton'\nimport LookupButton from '../components/renderer/LookupButton'\nimport { FormTypes } from '@oneblink/types'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport { FormElementValueChangeHandler, IsDirtyProps } from '../types/form'\nimport { LookupNotificationContext } from '../hooks/useLookupNotification'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\nimport MaterialIcon from '../components/MaterialIcon'\n\ntype Props = {\n id: string\n element: FormTypes.TelephoneElement\n value: unknown\n onChange: FormElementValueChangeHandler<string>\n displayValidationMessage: boolean\n validationMessage: string | undefined\n} & IsDirtyProps\n\nfunction FormElementTelephone({\n id,\n element,\n value,\n onChange,\n validationMessage,\n displayValidationMessage,\n isDirty,\n setIsDirty,\n}: Props) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const text = typeof value === 'string' ? value : ''\n\n const { isLookingUp } = React.useContext(LookupNotificationContext)\n const isDisplayingValidationMessage =\n (isDirty || displayValidationMessage) && !!validationMessage && !isLookingUp\n\n return (\n <div className=\"cypress-telephone-element\">\n <FormElementLabelContainer\n className=\"ob-telephone\"\n id={id}\n element={element}\n required={element.required}\n >\n <div className=\"field has-addons\">\n <div className=\"control is-expanded has-icons-right\">\n <input\n type=\"tel\"\n placeholder={element.placeholderValue}\n id={id}\n name={element.name}\n className=\"input ob-input cypress-telephone-control\"\n value={text}\n onChange={(e) =>\n onChange(element, {\n value: e.target.value || undefined,\n })\n }\n required={element.required}\n disabled={element.readOnly}\n onBlur={setIsDirty}\n aria-describedby={ariaDescribedby}\n />\n <span className=\"ob-input-icon icon is-small is-right\">\n <MaterialIcon className=\"is-size-5\">phone</MaterialIcon>\n </span>\n </div>\n {!!element.readOnly && !!value && (\n <div className=\"control\">\n <CopyToClipboardButton\n className=\"button is-input-addon copy-button cypress-copy-to-clipboard-button\"\n text={text}\n />\n </div>\n )}\n <LookupButton\n isInputButton\n value={value}\n validationMessage={validationMessage}\n lookupButtonConfig={element.lookupButton}\n />\n </div>\n\n {isDisplayingValidationMessage && (\n <div role=\"alert\" className=\"has-margin-top-8\">\n <div className=\"has-text-danger ob-error__text cypress-validation-message\">\n {validationMessage}\n </div>\n </div>\n )}\n </FormElementLabelContainer>\n </div>\n )\n}\n\nexport default React.memo(FormElementTelephone)\n"]}
|
|
@@ -6,6 +6,7 @@ import LookupButton from '../components/renderer/LookupButton';
|
|
|
6
6
|
import FormElementLabelContainer from '../components/renderer/FormElementLabelContainer';
|
|
7
7
|
import { LookupNotificationContext } from '../hooks/useLookupNotification';
|
|
8
8
|
import useElementAriaDescribedby from '../hooks/useElementAriaDescribedby';
|
|
9
|
+
import MaterialIcon from '../components/MaterialIcon';
|
|
9
10
|
function FormElementTime({ id, element, value, onChange, validationMessage, displayValidationMessage, isDirty, setIsDirty, }) {
|
|
10
11
|
const ariaDescribedby = useElementAriaDescribedby(id, element);
|
|
11
12
|
const htmlDivElementRef = React.useRef(null);
|
|
@@ -49,7 +50,7 @@ function FormElementTime({ id, element, value, onChange, validationMessage, disp
|
|
|
49
50
|
React.createElement("div", { className: "control is-expanded has-icons-right" },
|
|
50
51
|
React.createElement("input", { type: "time", id: id, name: element.name, placeholder: element.placeholderValue, disabled: element.readOnly, className: "input ob-input", "aria-describedby": ariaDescribedby }),
|
|
51
52
|
React.createElement("span", { className: "ob-input-icon icon is-small is-right" },
|
|
52
|
-
React.createElement(
|
|
53
|
+
React.createElement(MaterialIcon, { className: "is-size-5" }, "schedule"))),
|
|
53
54
|
!!element.readOnly && !!text && (React.createElement("div", { className: "control" },
|
|
54
55
|
React.createElement(CopyToClipboardButton, { className: "button is-input-addon copy-button cypress-copy-to-clipboard-button", text: text }))),
|
|
55
56
|
React.createElement(LookupButton, { isInputButton: true, value: value, validationMessage: validationMessage, lookupButtonConfig: element.lookupButton })),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormElementTime.js","sourceRoot":"","sources":["../../src/form-elements/FormElementTime.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAEpD,OAAO,qBAAqB,MAAM,8CAA8C,CAAA;AAChF,OAAO,YAAkC,MAAM,uBAAuB,CAAA;AACtE,OAAO,YAAY,MAAM,qCAAqC,CAAA;AAE9D,OAAO,yBAAyB,MAAM,kDAAkD,CAAA;AAExF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAC1E,OAAO,yBAAyB,MAAM,oCAAoC,CAAA;
|
|
1
|
+
{"version":3,"file":"FormElementTime.js","sourceRoot":"","sources":["../../src/form-elements/FormElementTime.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { localisationService } from '@oneblink/apps'\n\nimport CopyToClipboardButton from '../components/renderer/CopyToClipboardButton'\nimport useFlatpickr, { FlatpickrOptions } from '../hooks/useFlatpickr'\nimport LookupButton from '../components/renderer/LookupButton'\nimport { FormTypes } from '@oneblink/types'\nimport FormElementLabelContainer from '../components/renderer/FormElementLabelContainer'\nimport { FormElementValueChangeHandler, IsDirtyProps } from '../types/form'\nimport { LookupNotificationContext } from '../hooks/useLookupNotification'\nimport useElementAriaDescribedby from '../hooks/useElementAriaDescribedby'\nimport MaterialIcon from '../components/MaterialIcon'\n\ntype Props = {\n id: string\n element: FormTypes.TimeElement\n value: unknown | undefined\n onChange: FormElementValueChangeHandler<string>\n displayValidationMessage: boolean\n validationMessage: string | undefined\n} & IsDirtyProps\n\nfunction FormElementTime({\n id,\n element,\n value,\n onChange,\n validationMessage,\n displayValidationMessage,\n isDirty,\n setIsDirty,\n}: Props) {\n const ariaDescribedby = useElementAriaDescribedby(id, element)\n const htmlDivElementRef = React.useRef<HTMLDivElement>(null)\n\n const flatpickrOptions = React.useMemo(() => {\n const opts: FlatpickrOptions = {\n altInput: true,\n dateFormat: 'H:i',\n altFormat: localisationService.getFlatpickrFormats().time,\n allowInput: false,\n altInputClass: 'input ob-input cypress-time-control',\n minDate: undefined,\n maxDate: undefined,\n defaultDate: undefined,\n enableTime: true,\n noCalendar: true,\n time_24hr: false,\n onClose: setIsDirty,\n }\n\n return opts\n }, [setIsDirty])\n\n const handleChange = React.useCallback(\n (newValue: string | undefined) =>\n onChange(element, {\n value: newValue,\n }),\n [element, onChange],\n )\n\n useFlatpickr(\n {\n id,\n value,\n onChange: handleChange,\n label: element.label,\n },\n flatpickrOptions,\n htmlDivElementRef,\n )\n\n const text = React.useMemo(() => {\n if (typeof value !== 'string') {\n return null\n }\n return localisationService.formatTime(new Date(value))\n }, [value])\n\n const { isLookingUp } = React.useContext(LookupNotificationContext)\n const isDisplayingValidationMessage =\n (isDirty || displayValidationMessage) && !!validationMessage && !isLookingUp\n return (\n <div className=\"cypress-time-element\" ref={htmlDivElementRef}>\n <FormElementLabelContainer\n className=\"ob-time\"\n id={id}\n element={element}\n required={element.required}\n >\n <div className=\"field has-addons\">\n <div className=\"control is-expanded has-icons-right\">\n <input\n type=\"time\"\n id={id}\n name={element.name}\n placeholder={element.placeholderValue}\n disabled={element.readOnly}\n className=\"input ob-input\"\n aria-describedby={ariaDescribedby}\n />\n <span className=\"ob-input-icon icon is-small is-right\">\n <MaterialIcon className=\"is-size-5\">schedule</MaterialIcon>\n </span>\n </div>\n {!!element.readOnly && !!text && (\n <div className=\"control\">\n <CopyToClipboardButton\n className=\"button is-input-addon copy-button cypress-copy-to-clipboard-button\"\n text={text}\n />\n </div>\n )}\n <LookupButton\n isInputButton\n value={value}\n validationMessage={validationMessage}\n lookupButtonConfig={element.lookupButton}\n />\n </div>\n\n {isDisplayingValidationMessage && (\n <div role=\"alert\" className=\"has-margin-top-8\">\n <div className=\"has-text-danger ob-error__text cypress-validation-message\">\n {validationMessage}\n </div>\n </div>\n )}\n </FormElementLabelContainer>\n </div>\n )\n}\n\nexport default React.memo(FormElementTime)\n"]}
|
|
@@ -2,7 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import { formService } from '@oneblink/apps';
|
|
3
3
|
import { FormTypes, FreshdeskTypes } from '@oneblink/types';
|
|
4
4
|
import { LoadDataState } from './useLoadDataState';
|
|
5
|
-
import { UpdateFormElementsHandler } from '../
|
|
5
|
+
import { UpdateFormElementsHandler } from '../types/form';
|
|
6
6
|
type OptionsSetResult = {
|
|
7
7
|
formElementOptionsSet: FormTypes.FormElementOptionSet;
|
|
8
8
|
result?: formService.FormElementOptionsSetResult;
|
|
@@ -4,6 +4,7 @@ import { formService, localisationService, OneBlinkAppsError, } from '@oneblink/
|
|
|
4
4
|
import useLoadDataState from './useLoadDataState';
|
|
5
5
|
import OneBlinkAppsErrorOriginalMessage from '../components/renderer/OneBlinkAppsErrorOriginalMessage';
|
|
6
6
|
import useFormDefinition from './useFormDefinition';
|
|
7
|
+
import MaterialIcon from '../components/MaterialIcon';
|
|
7
8
|
export const FormElementOptionsContext = React.createContext([]);
|
|
8
9
|
export const FreshdeskFieldsStateContext = React.createContext(undefined);
|
|
9
10
|
export function FormElementOptionsContextProvider({ children, }) {
|
|
@@ -70,7 +71,7 @@ export function FormElementOptionsContextProvider({ children, }) {
|
|
|
70
71
|
if (error) {
|
|
71
72
|
return (React.createElement(React.Fragment, null,
|
|
72
73
|
React.createElement("div", { className: "has-text-centered" },
|
|
73
|
-
React.createElement(
|
|
74
|
+
React.createElement(MaterialIcon, { className: "has-text-warning icon-x-large" }, "error"),
|
|
74
75
|
React.createElement("h3", { className: "title is-3" }, error.title),
|
|
75
76
|
React.createElement("p", null, error.message),
|
|
76
77
|
React.createElement("p", { className: "has-text-grey" }, localisationService.formatDatetimeLong(new Date()))),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDynamicOptionsLoaderState.js","sourceRoot":"","sources":["../../src/hooks/useDynamicOptionsLoaderState.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACzE,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,gBAAmC,MAAM,oBAAoB,CAAA;AACpE,OAAO,gCAAgC,MAAM,yDAAyD,CAAA;AACtG,OAAO,iBAAiB,MAAM,qBAAqB,CAAA;AAQnD,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,CAAC,aAAa,CAE1D,EAAE,CAAC,CAAA;AACL,MAAM,CAAC,MAAM,2BAA2B,GAAG,KAAK,CAAC,aAAa,CAE5D,SAAS,CAAC,CAAA;AAEZ,MAAM,UAAU,iCAAiC,CAAC,EAChD,QAAQ,GAGT;IACC,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAA;IAEhC,MAAM,kBAAkB,GAAG,KAAK,CAAC,OAAO,CAAU,GAAG,EAAE;QACrD,OAAO,CAAC,CAAC,mBAAmB,CAAC,eAAe,CAC1C,IAAI,CAAC,QAAQ,EACb,CAAC,WAAW,EAAE,EAAE;YACd,MAAM,sBAAsB,GAC1B,eAAe,CAAC,YAAY,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAA;YAC5D,OAAO,CACL,CAAA,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,WAAW,MAAK,iBAAiB;gBACzD,CAAC,CAAC,sBAAsB,CAAC,kBAAkB,CAC5C,CAAA;QACH,CAAC,CACF,CAAA;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEnB,MAAM,mBAAmB,GAAG,KAAK,CAAC,WAAW,CAC3C,KAAK,EAAE,WAAW,EAA4C,EAAE;QAC9D,IAAI,kBAAkB,EAAE;YACtB,OAAO,MAAM,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,CAAA;SAClE;QACD,OAAO,EAAE,CAAA;IACX,CAAC,EACD,CAAC,IAAI,CAAC,EAAE,EAAE,kBAAkB,CAAC,CAC9B,CAAA;IAED,MAAM,CAAC,oBAAoB,CAAC,GAAG,gBAAgB,CAAC,mBAAmB,CAAC,CAAA;IAEpE,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAU,GAAG,EAAE;QACjD,OAAO,CAAC,CAAC,mBAAmB,CAAC,eAAe,CAC1C,IAAI,CAAC,QAAQ,EACb,CAAC,WAAW,EAAE,EAAE;YACd,MAAM,sBAAsB,GAC1B,eAAe,CAAC,YAAY,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAA;YAC5D,OAAO,CACL,CAAA,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,WAAW,MAAK,SAAS;gBACjD,CAAC,CAAC,sBAAsB,CAAC,kBAAkB,CAC5C,CAAA;QACH,CAAC,CACF,CAAA;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEnB,MAAM,0BAA0B,GAAG,KAAK,CAAC,WAAW,CAClD,KAAK,EAAE,WAAW,EAA+B,EAAE;QACjD,IAAI,CAAC,cAAc,EAAE;YACnB,OAAO,EAAE,CAAA;SACV;QACD,MAAM,sBAAsB,GAC1B,MAAM,WAAW,CAAC,yBAAyB,CACzC,IAAI,CAAC,cAAc,EACnB,WAAW,CACZ,CAAA;QACH,OAAO,sBAAsB,CAAC,GAAG,CAC/B,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;YAC1B,qBAAqB;SACtB,CAAC,CACH,CAAA;IACH,CAAC,EACD,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CACtC,CAAA;IAED,MAAM,CAAC,sBAAsB,EAAE,AAAD,EAAG,oBAAoB,CAAC,GAAG,gBAAgB,CACvE,0BAA0B,CAC3B,CAAA;IAED,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAC3C,IAAI,sBAAsB,CAAC,MAAM,KAAK,SAAS,EAAE;YAC/C,OAAO,sBAAsB,CAAC,MAAM,CAAA;SACrC;QACD,OAAO,EAAE,CAAA;IACX,CAAC,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAA;IAE5B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAgC,GAAG,EAAE;;QAC9D,IAAI,oBAAoB,CAAC,MAAM,KAAK,OAAO,EAAE;YAC3C,OAAO,oBAAoB,CAAC,KAAK,YAAY,iBAAiB;gBAC5D,CAAC,CAAC,oBAAoB,CAAC,KAAK;gBAC5B,CAAC,CAAC,IAAI,iBAAiB,CAAC,+BAA+B,EAAE;oBACrD,aAAa,EAAE,oBAAoB,CAAC,KAAK;iBAC1C,CAAC,CAAA;SACP;QACD,IAAI,sBAAsB,CAAC,MAAM,KAAK,OAAO,EAAE;YAC7C,OAAO,sBAAsB,CAAC,KAAK,YAAY,iBAAiB;gBAC9D,CAAC,CAAC,sBAAsB,CAAC,KAAK;gBAC9B,CAAC,CAAC,IAAI,iBAAiB,CAAC,+BAA+B,EAAE;oBACrD,aAAa,EAAE,sBAAsB,CAAC,KAAK;iBAC5C,CAAC,CAAA;SACP;QACD,KAAK,MAAM,gBAAgB,IAAI,iBAAiB,EAAE;YAChD,IAAI,CAAA,MAAA,gBAAgB,CAAC,MAAM,0CAAE,IAAI,MAAK,OAAO,EAAE;gBAC7C,OAAO,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAA;aACrC;SACF;IACH,CAAC,EAAE,CAAC,oBAAoB,EAAE,iBAAiB,EAAE,sBAAsB,CAAC,CAAC,CAAA;IAErE,IAAI,KAAK,EAAE;QACT,OAAO,CACL;YACE,6BAAK,SAAS,EAAC,mBAAmB;gBAChC,2BAAG,SAAS,EAAC,8CAA8C,YAAU;gBACrE,4BAAI,SAAS,EAAC,YAAY,IAAE,KAAK,CAAC,KAAK,CAAM;gBAC7C,+BAAI,KAAK,CAAC,OAAO,CAAK;gBACtB,2BAAG,SAAS,EAAC,eAAe,IACzB,mBAAmB,CAAC,kBAAkB,CAAC,IAAI,IAAI,EAAE,CAAC,CACjD,CACA;YAEN,oBAAC,gCAAgC,IAAC,KAAK,EAAE,KAAK,CAAC,aAAa,GAAI,CAC/D,CACJ,CAAA;KACF;IAED,OAAO,CACL;QACG,iBAAiB,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAC3C,oBAAC,KAAK,CAAC,QAAQ,IAAC,GAAG,EAAE,gBAAgB,CAAC,qBAAqB,CAAC,EAAE;YAC5D,oBAAC,cAAc,IACb,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE,IAAI,EACV,oBAAoB,EAAE,oBAAoB,GAC1C,CACa,CAClB,CAAC;QACF,oBAAC,yBAAyB,CAAC,QAAQ,IAAC,KAAK,EAAE,iBAAiB;YAC1D,oBAAC,2BAA2B,CAAC,QAAQ,IAAC,KAAK,EAAE,oBAAoB,IAC9D,QAAQ,CAC4B,CACJ,CACpC,CACJ,CAAA;AACH,CAAC;AAED,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,cAAc,CAAC,EACxD,IAAI,EACJ,gBAAgB,EAChB,oBAAoB,GAKrB;IACC,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAU,GAAG,EAAE;QAChD,OAAO,CAAC,CAAC,mBAAmB,CAAC,eAAe,CAC1C,IAAI,CAAC,QAAQ,EACb,CAAC,WAAW,EAAE,EAAE;YACd,MAAM,sBAAsB,GAC1B,eAAe,CAAC,YAAY,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAA;YAC5D,OAAO,CACL,CAAA,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,WAAW,MAAK,SAAS;gBACjD,sBAAsB,CAAC,kBAAkB;oBACvC,gBAAgB,CAAC,qBAAqB,CAAC,EAAE,CAC5C,CAAA;QACH,CAAC,CACF,CAAA;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAA;IAE9D,MAAM,mBAAmB,GAAG,KAAK,CAAC,WAAW,CAC3C,CAAC,MAAkC,EAAE,EAAE;QACrC,oBAAoB,CAAC,CAAC,wBAAwB,EAAE,EAAE;YAChD,OAAO,wBAAwB,CAAC,GAAG,CAAC,CAAC,uBAAuB,EAAE,EAAE;gBAC9D,IACE,uBAAuB,CAAC,qBAAqB,CAAC,EAAE;oBAChD,gBAAgB,CAAC,qBAAqB,CAAC,EAAE,EACzC;oBACA,OAAO;wBACL,GAAG,gBAAgB;wBACnB,MAAM;qBACP,CAAA;iBACF;qBAAM;oBACL,OAAO,uBAAuB,CAAA;iBAC/B;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,EACD,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CACzC,CAAA;IAED,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,aAAa,IAAI,gBAAgB,CAAC,MAAM,EAAE;YAC7C,OAAM;SACP;QAED,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAE5C;QAAA,CAAC,KAAK,IAAI,EAAE;YACX,IAAI;gBACF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,+BAA+B,CAC9D,gBAAgB,CAAC,qBAAqB,EACtC,IAAI,CAAC,qBAAqB,EAC1B,eAAe,CAAC,MAAM,CACvB,CAAA;gBACD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE;oBACnC,mBAAmB,CAAC,MAAM,CAAC,CAAA;iBAC5B;aACF;YAAC,OAAO,KAAK,EAAE;gBACd,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE;oBACnC,mBAAmB,CAAC;wBAClB,IAAI,EAAE,OAAO;wBACb,KAAK,EAAE,IAAI,iBAAiB,CAC1B,KAAK,YAAY,KAAK;4BACpB,CAAC,CAAC,KAAK,CAAC,OAAO;4BACf,CAAC,CAAC,+BAA+B,EACnC;4BACE,aAAa,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;yBAC1D,CACF;qBACF,CAAC,CAAA;iBACH;aACF;QACH,CAAC,CAAC,EAAE,CAAA;QAEJ,OAAO,GAAG,EAAE;YACV,eAAe,CAAC,KAAK,EAAE,CAAA;QACzB,CAAC,CAAA;IACH,CAAC,EAAE;QACD,IAAI,CAAC,qBAAqB;QAC1B,aAAa;QACb,gBAAgB,CAAC,qBAAqB;QACtC,gBAAgB,CAAC,MAAM;QACvB,mBAAmB;KACpB,CAAC,CAAA;IAEF,OAAO,yCAAK,CAAA;AACd,CAAC,CAAC,CAAA;AAEF,MAAM,UAAU,2BAA2B,CACzC,WAA6C,EAC7C,oBAA+C;IAE/C,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAA;IAChC,MAAM,iBAAiB,GAAG,KAAK,CAAC,UAAU,CAAC,yBAAyB,CAAC,CAAA;IACrE,MAAM,oBAAoB,GAAG,KAAK,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAA;IAE1E,MAAM,2BAA2B,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QACrD,IACE,CAAA,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,MAAM,MAAK,SAAS;YAC1C,gEAAgE;YAChE,WAAW,CAAC,WAAW,KAAK,iBAAiB;YAC7C,sEAAsE;YACtE,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,EACnC;YACA,OAAO,WAAW,CAAC,0BAA0B,CAC3C,oBAAoB,CAAC,MAAM,EAC3B,WAAW,CACZ,CAAA;SACF;IACH,CAAC,EAAE,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC,CAAA;IAEvC,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAA+B,GAAG,EAAE;QACxE;QACE,kDAAkD;QAClD,WAAW,CAAC,WAAW,KAAK,SAAS;YACrC,sEAAsE;YACtE,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,EAClC;YACA,OAAM;SACP;QACD,OAAO,iBAAiB,CAAC,IAAI,CAC3B,CAAC,gBAAgB,EAAE,EAAE,CACnB,gBAAgB,CAAC,qBAAqB,CAAC,EAAE;YACvC,WAAW,CAAC,kBAAkB,IAAI,gBAAgB,CAAC,MAAM,CAC9D,CAAA;IACH,CAAC,EAAE;QACD,WAAW,CAAC,kBAAkB;QAC9B,WAAW,CAAC,OAAO;QACnB,WAAW,CAAC,WAAW;QACvB,iBAAiB;KAClB,CAAC,CAAA;IAEF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,gBAAgB,IAAI,CAAC,2BAA2B,EAAE;YACrD,OAAM;SACP;QAED,oBAAoB,CAAC,CAAC,YAAY,EAAE,EAAE;YACpC,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,mBAAmB,EAAE,EAAE;;gBAC9C,IAAI,mBAAmB,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,EAAE;oBAC7C,QAAQ,MAAA,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,MAAM,0CAAE,IAAI,EAAE;wBACtC,KAAK,QAAQ,CAAC,CAAC;4BACb,IAAI,WAAW,CAAC,IAAI,KAAK,cAAc,EAAE;gCACvC,OAAO;oCACL,GAAG,mBAAmB;oCACtB,WAAW,EAAE,QAAQ;oCACrB,SAAS,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG;oCACtC,0BAA0B,EACxB,gBAAgB,CAAC,MAAM,CAAC,0BAA0B;iCACrD,CAAA;6BACF;4BACD,MAAK;yBACN;wBACD,KAAK,SAAS,CAAC,CAAC;4BACd,OAAO,WAAW,CAAC,uBAAuB,CACxC,IAAI,EACJ,WAAW,EACX,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAChC,CAAA;yBACF;qBACF;oBAED,IAAI,2BAA2B,EAAE;wBAC/B,OAAO;4BACL,GAAG,mBAAmB;4BACtB,OAAO,EACL,2BAA2B,CAAC,IAAI,KAAK,SAAS;gCAC5C,CAAC,CAAC,2BAA2B,CAAC,OAAO;gCACrC,CAAC,CAAC,EAAE;yBACT,CAAA;qBACF;iBACF;gBAED,OAAO,mBAAmB,CAAA;YAC5B,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,EAAE;QACD,IAAI;QACJ,WAAW;QACX,2BAA2B;QAC3B,oBAAoB;QACpB,gBAAgB;KACjB,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import * as React from 'react'\nimport { formElementsService, typeCastService } from '@oneblink/sdk-core'\nimport {\n formService,\n localisationService,\n OneBlinkAppsError,\n} from '@oneblink/apps'\nimport { FormTypes, FreshdeskTypes } from '@oneblink/types'\nimport useLoadDataState, { LoadDataState } from './useLoadDataState'\nimport OneBlinkAppsErrorOriginalMessage from '../components/renderer/OneBlinkAppsErrorOriginalMessage'\nimport useFormDefinition from './useFormDefinition'\nimport { UpdateFormElementsHandler } from '../typedoc'\n\ntype OptionsSetResult = {\n formElementOptionsSet: FormTypes.FormElementOptionSet\n result?: formService.FormElementOptionsSetResult\n}\n\nexport const FormElementOptionsContext = React.createContext<\n OptionsSetResult[]\n>([])\nexport const FreshdeskFieldsStateContext = React.createContext<\n LoadDataState<FreshdeskTypes.FreshdeskField[]> | undefined\n>(undefined)\n\nexport function FormElementOptionsContextProvider({\n children,\n}: {\n children: React.ReactNode\n}) {\n const form = useFormDefinition()\n\n const hasFreshdeskFields = React.useMemo<boolean>(() => {\n return !!formElementsService.findFormElement(\n form.elements,\n (formElement) => {\n const formElementWithOptions =\n typeCastService.formElements.toOptionsElement(formElement)\n return (\n formElementWithOptions?.optionsType === 'FRESHDESK_FIELD' &&\n !!formElementWithOptions.freshdeskFieldName\n )\n },\n )\n }, [form.elements])\n\n const loadFreshdeskFields = React.useCallback(\n async (abortSignal): Promise<FreshdeskTypes.FreshdeskField[]> => {\n if (hasFreshdeskFields) {\n return await formService.getFreshdeskFields(form.id, abortSignal)\n }\n return []\n },\n [form.id, hasFreshdeskFields],\n )\n\n const [freshdeskFieldsState] = useLoadDataState(loadFreshdeskFields)\n\n const hasOptionsSets = React.useMemo<boolean>(() => {\n return !!formElementsService.findFormElement(\n form.elements,\n (formElement) => {\n const formElementWithOptions =\n typeCastService.formElements.toOptionsElement(formElement)\n return (\n formElementWithOptions?.optionsType === 'DYNAMIC' &&\n !!formElementWithOptions.dynamicOptionSetId\n )\n },\n )\n }, [form.elements])\n\n const loadFormElementOptionsSets = React.useCallback(\n async (abortSignal): Promise<OptionsSetResult[]> => {\n if (!hasOptionsSets) {\n return []\n }\n const formElementOptionsSets =\n await formService.getFormElementOptionsSets(\n form.organisationId,\n abortSignal,\n )\n return formElementOptionsSets.map<OptionsSetResult>(\n (formElementOptionsSet) => ({\n formElementOptionsSet,\n }),\n )\n },\n [form.organisationId, hasOptionsSets],\n )\n\n const [optionsSetResultsState, , setOptionsSetResults] = useLoadDataState(\n loadFormElementOptionsSets,\n )\n\n const optionsSetResults = React.useMemo(() => {\n if (optionsSetResultsState.status === 'SUCCESS') {\n return optionsSetResultsState.result\n }\n return []\n }, [optionsSetResultsState])\n\n const error = React.useMemo<OneBlinkAppsError | undefined>(() => {\n if (freshdeskFieldsState.status === 'ERROR') {\n return freshdeskFieldsState.error instanceof OneBlinkAppsError\n ? freshdeskFieldsState.error\n : new OneBlinkAppsError('An unknown error has occurred', {\n originalError: freshdeskFieldsState.error,\n })\n }\n if (optionsSetResultsState.status === 'ERROR') {\n return optionsSetResultsState.error instanceof OneBlinkAppsError\n ? optionsSetResultsState.error\n : new OneBlinkAppsError('An unknown error has occurred', {\n originalError: optionsSetResultsState.error,\n })\n }\n for (const optionsSetResult of optionsSetResults) {\n if (optionsSetResult.result?.type === 'ERROR') {\n return optionsSetResult.result.error\n }\n }\n }, [freshdeskFieldsState, optionsSetResults, optionsSetResultsState])\n\n if (error) {\n return (\n <>\n <div className=\"has-text-centered\">\n <i className=\"material-icons has-text-warning icon-x-large\">error</i>\n <h3 className=\"title is-3\">{error.title}</h3>\n <p>{error.message}</p>\n <p className=\"has-text-grey\">\n {localisationService.formatDatetimeLong(new Date())}\n </p>\n </div>\n\n <OneBlinkAppsErrorOriginalMessage error={error.originalError} />\n </>\n )\n }\n\n return (\n <>\n {optionsSetResults.map((optionsSetResult) => (\n <React.Fragment key={optionsSetResult.formElementOptionsSet.id}>\n <LoadOptionsSet\n optionsSetResult={optionsSetResult}\n form={form}\n setOptionsSetResults={setOptionsSetResults}\n />\n </React.Fragment>\n ))}\n <FormElementOptionsContext.Provider value={optionsSetResults}>\n <FreshdeskFieldsStateContext.Provider value={freshdeskFieldsState}>\n {children}\n </FreshdeskFieldsStateContext.Provider>\n </FormElementOptionsContext.Provider>\n </>\n )\n}\n\nconst LoadOptionsSet = React.memo(function LoadOptionsSet({\n form,\n optionsSetResult,\n setOptionsSetResults,\n}: {\n form: FormTypes.Form\n optionsSetResult: OptionsSetResult\n setOptionsSetResults: React.Dispatch<React.SetStateAction<OptionsSetResult[]>>\n}) {\n const hasOptionsSet = React.useMemo<boolean>(() => {\n return !!formElementsService.findFormElement(\n form.elements,\n (formElement) => {\n const formElementWithOptions =\n typeCastService.formElements.toOptionsElement(formElement)\n return (\n formElementWithOptions?.optionsType === 'DYNAMIC' &&\n formElementWithOptions.dynamicOptionSetId ===\n optionsSetResult.formElementOptionsSet.id\n )\n },\n )\n }, [form.elements, optionsSetResult.formElementOptionsSet.id])\n\n const setOptionsSetResult = React.useCallback(\n (result: OptionsSetResult['result']) => {\n setOptionsSetResults((currentOptionsSetResults) => {\n return currentOptionsSetResults.map((currentOptionsSetResult) => {\n if (\n currentOptionsSetResult.formElementOptionsSet.id ===\n optionsSetResult.formElementOptionsSet.id\n ) {\n return {\n ...optionsSetResult,\n result,\n }\n } else {\n return currentOptionsSetResult\n }\n })\n })\n },\n [optionsSetResult, setOptionsSetResults],\n )\n\n React.useEffect(() => {\n if (!hasOptionsSet || optionsSetResult.result) {\n return\n }\n\n const abortController = new AbortController()\n\n ;(async () => {\n try {\n const result = await formService.getFormElementOptionsSetOptions(\n optionsSetResult.formElementOptionsSet,\n form.formsAppEnvironmentId,\n abortController.signal,\n )\n if (!abortController.signal.aborted) {\n setOptionsSetResult(result)\n }\n } catch (error) {\n if (!abortController.signal.aborted) {\n setOptionsSetResult({\n type: 'ERROR',\n error: new OneBlinkAppsError(\n error instanceof Error\n ? error.message\n : 'An unknown error has occurred',\n {\n originalError: error instanceof Error ? error : undefined,\n },\n ),\n })\n }\n }\n })()\n\n return () => {\n abortController.abort()\n }\n }, [\n form.formsAppEnvironmentId,\n hasOptionsSet,\n optionsSetResult.formElementOptionsSet,\n optionsSetResult.result,\n setOptionsSetResult,\n ])\n\n return <></>\n})\n\nexport function useLoadDynamicOptionsEffect(\n formElement: FormTypes.FormElementWithOptions,\n onUpdateFormElements: UpdateFormElementsHandler,\n) {\n const form = useFormDefinition()\n const optionsSetResults = React.useContext(FormElementOptionsContext)\n const freshdeskFieldsState = React.useContext(FreshdeskFieldsStateContext)\n\n const freshdeskFieldOptionsResult = React.useMemo(() => {\n if (\n freshdeskFieldsState?.status === 'SUCCESS' &&\n // We can stop here if the options are not coming from freshdesk\n formElement.optionsType === 'FRESHDESK_FIELD' &&\n // If the element already has options, we don't need to set them again\n !Array.isArray(formElement.options)\n ) {\n return formService.parseFreshdeskFieldOptions(\n freshdeskFieldsState.result,\n formElement,\n )\n }\n }, [formElement, freshdeskFieldsState])\n\n const optionsSetResult = React.useMemo<OptionsSetResult | undefined>(() => {\n if (\n // We can stop here if the options are not dynamic\n formElement.optionsType !== 'DYNAMIC' ||\n // If the element already has options, we don't need to set them again\n Array.isArray(formElement.options)\n ) {\n return\n }\n return optionsSetResults.find(\n (optionsSetResult) =>\n optionsSetResult.formElementOptionsSet.id ===\n formElement.dynamicOptionSetId && optionsSetResult.result,\n )\n }, [\n formElement.dynamicOptionSetId,\n formElement.options,\n formElement.optionsType,\n optionsSetResults,\n ])\n\n React.useEffect(() => {\n if (!optionsSetResult && !freshdeskFieldOptionsResult) {\n return\n }\n\n onUpdateFormElements((formElements) => {\n return formElements.map((existingFormElement) => {\n if (existingFormElement.id === formElement.id) {\n switch (optionsSetResult?.result?.type) {\n case 'SEARCH': {\n if (formElement.type === 'autocomplete') {\n return {\n ...existingFormElement,\n optionsType: 'SEARCH',\n searchUrl: optionsSetResult.result.url,\n searchQuerystringParameter:\n optionsSetResult.result.searchQuerystringParameter,\n }\n }\n break\n }\n case 'OPTIONS': {\n return formService.parseFormElementOptions(\n form,\n formElement,\n optionsSetResult.result.options,\n )\n }\n }\n\n if (freshdeskFieldOptionsResult) {\n return {\n ...existingFormElement,\n options:\n freshdeskFieldOptionsResult.type === 'OPTIONS'\n ? freshdeskFieldOptionsResult.options\n : [],\n }\n }\n }\n\n return existingFormElement\n })\n })\n }, [\n form,\n formElement,\n freshdeskFieldOptionsResult,\n onUpdateFormElements,\n optionsSetResult,\n ])\n}\n"]}
|
|
1
|
+
{"version":3,"file":"useDynamicOptionsLoaderState.js","sourceRoot":"","sources":["../../src/hooks/useDynamicOptionsLoaderState.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { formElementsService, typeCastService } from '@oneblink/sdk-core'\nimport {\n formService,\n localisationService,\n OneBlinkAppsError,\n} from '@oneblink/apps'\nimport { FormTypes, FreshdeskTypes } from '@oneblink/types'\nimport useLoadDataState, { LoadDataState } from './useLoadDataState'\nimport OneBlinkAppsErrorOriginalMessage from '../components/renderer/OneBlinkAppsErrorOriginalMessage'\nimport useFormDefinition from './useFormDefinition'\nimport MaterialIcon from '../components/MaterialIcon'\nimport { UpdateFormElementsHandler } from '../types/form'\n\ntype OptionsSetResult = {\n formElementOptionsSet: FormTypes.FormElementOptionSet\n result?: formService.FormElementOptionsSetResult\n}\n\nexport const FormElementOptionsContext = React.createContext<\n OptionsSetResult[]\n>([])\nexport const FreshdeskFieldsStateContext = React.createContext<\n LoadDataState<FreshdeskTypes.FreshdeskField[]> | undefined\n>(undefined)\n\nexport function FormElementOptionsContextProvider({\n children,\n}: {\n children: React.ReactNode\n}) {\n const form = useFormDefinition()\n\n const hasFreshdeskFields = React.useMemo<boolean>(() => {\n return !!formElementsService.findFormElement(\n form.elements,\n (formElement) => {\n const formElementWithOptions =\n typeCastService.formElements.toOptionsElement(formElement)\n return (\n formElementWithOptions?.optionsType === 'FRESHDESK_FIELD' &&\n !!formElementWithOptions.freshdeskFieldName\n )\n },\n )\n }, [form.elements])\n\n const loadFreshdeskFields = React.useCallback(\n async (abortSignal): Promise<FreshdeskTypes.FreshdeskField[]> => {\n if (hasFreshdeskFields) {\n return await formService.getFreshdeskFields(form.id, abortSignal)\n }\n return []\n },\n [form.id, hasFreshdeskFields],\n )\n\n const [freshdeskFieldsState] = useLoadDataState(loadFreshdeskFields)\n\n const hasOptionsSets = React.useMemo<boolean>(() => {\n return !!formElementsService.findFormElement(\n form.elements,\n (formElement) => {\n const formElementWithOptions =\n typeCastService.formElements.toOptionsElement(formElement)\n return (\n formElementWithOptions?.optionsType === 'DYNAMIC' &&\n !!formElementWithOptions.dynamicOptionSetId\n )\n },\n )\n }, [form.elements])\n\n const loadFormElementOptionsSets = React.useCallback(\n async (abortSignal): Promise<OptionsSetResult[]> => {\n if (!hasOptionsSets) {\n return []\n }\n const formElementOptionsSets =\n await formService.getFormElementOptionsSets(\n form.organisationId,\n abortSignal,\n )\n return formElementOptionsSets.map<OptionsSetResult>(\n (formElementOptionsSet) => ({\n formElementOptionsSet,\n }),\n )\n },\n [form.organisationId, hasOptionsSets],\n )\n\n const [optionsSetResultsState, , setOptionsSetResults] = useLoadDataState(\n loadFormElementOptionsSets,\n )\n\n const optionsSetResults = React.useMemo(() => {\n if (optionsSetResultsState.status === 'SUCCESS') {\n return optionsSetResultsState.result\n }\n return []\n }, [optionsSetResultsState])\n\n const error = React.useMemo<OneBlinkAppsError | undefined>(() => {\n if (freshdeskFieldsState.status === 'ERROR') {\n return freshdeskFieldsState.error instanceof OneBlinkAppsError\n ? freshdeskFieldsState.error\n : new OneBlinkAppsError('An unknown error has occurred', {\n originalError: freshdeskFieldsState.error,\n })\n }\n if (optionsSetResultsState.status === 'ERROR') {\n return optionsSetResultsState.error instanceof OneBlinkAppsError\n ? optionsSetResultsState.error\n : new OneBlinkAppsError('An unknown error has occurred', {\n originalError: optionsSetResultsState.error,\n })\n }\n for (const optionsSetResult of optionsSetResults) {\n if (optionsSetResult.result?.type === 'ERROR') {\n return optionsSetResult.result.error\n }\n }\n }, [freshdeskFieldsState, optionsSetResults, optionsSetResultsState])\n\n if (error) {\n return (\n <>\n <div className=\"has-text-centered\">\n <MaterialIcon className=\"has-text-warning icon-x-large\">\n error\n </MaterialIcon>\n <h3 className=\"title is-3\">{error.title}</h3>\n <p>{error.message}</p>\n <p className=\"has-text-grey\">\n {localisationService.formatDatetimeLong(new Date())}\n </p>\n </div>\n\n <OneBlinkAppsErrorOriginalMessage error={error.originalError} />\n </>\n )\n }\n\n return (\n <>\n {optionsSetResults.map((optionsSetResult) => (\n <React.Fragment key={optionsSetResult.formElementOptionsSet.id}>\n <LoadOptionsSet\n optionsSetResult={optionsSetResult}\n form={form}\n setOptionsSetResults={setOptionsSetResults}\n />\n </React.Fragment>\n ))}\n <FormElementOptionsContext.Provider value={optionsSetResults}>\n <FreshdeskFieldsStateContext.Provider value={freshdeskFieldsState}>\n {children}\n </FreshdeskFieldsStateContext.Provider>\n </FormElementOptionsContext.Provider>\n </>\n )\n}\n\nconst LoadOptionsSet = React.memo(function LoadOptionsSet({\n form,\n optionsSetResult,\n setOptionsSetResults,\n}: {\n form: FormTypes.Form\n optionsSetResult: OptionsSetResult\n setOptionsSetResults: React.Dispatch<React.SetStateAction<OptionsSetResult[]>>\n}) {\n const hasOptionsSet = React.useMemo<boolean>(() => {\n return !!formElementsService.findFormElement(\n form.elements,\n (formElement) => {\n const formElementWithOptions =\n typeCastService.formElements.toOptionsElement(formElement)\n return (\n formElementWithOptions?.optionsType === 'DYNAMIC' &&\n formElementWithOptions.dynamicOptionSetId ===\n optionsSetResult.formElementOptionsSet.id\n )\n },\n )\n }, [form.elements, optionsSetResult.formElementOptionsSet.id])\n\n const setOptionsSetResult = React.useCallback(\n (result: OptionsSetResult['result']) => {\n setOptionsSetResults((currentOptionsSetResults) => {\n return currentOptionsSetResults.map((currentOptionsSetResult) => {\n if (\n currentOptionsSetResult.formElementOptionsSet.id ===\n optionsSetResult.formElementOptionsSet.id\n ) {\n return {\n ...optionsSetResult,\n result,\n }\n } else {\n return currentOptionsSetResult\n }\n })\n })\n },\n [optionsSetResult, setOptionsSetResults],\n )\n\n React.useEffect(() => {\n if (!hasOptionsSet || optionsSetResult.result) {\n return\n }\n\n const abortController = new AbortController()\n\n ;(async () => {\n try {\n const result = await formService.getFormElementOptionsSetOptions(\n optionsSetResult.formElementOptionsSet,\n form.formsAppEnvironmentId,\n abortController.signal,\n )\n if (!abortController.signal.aborted) {\n setOptionsSetResult(result)\n }\n } catch (error) {\n if (!abortController.signal.aborted) {\n setOptionsSetResult({\n type: 'ERROR',\n error: new OneBlinkAppsError(\n error instanceof Error\n ? error.message\n : 'An unknown error has occurred',\n {\n originalError: error instanceof Error ? error : undefined,\n },\n ),\n })\n }\n }\n })()\n\n return () => {\n abortController.abort()\n }\n }, [\n form.formsAppEnvironmentId,\n hasOptionsSet,\n optionsSetResult.formElementOptionsSet,\n optionsSetResult.result,\n setOptionsSetResult,\n ])\n\n return <></>\n})\n\nexport function useLoadDynamicOptionsEffect(\n formElement: FormTypes.FormElementWithOptions,\n onUpdateFormElements: UpdateFormElementsHandler,\n) {\n const form = useFormDefinition()\n const optionsSetResults = React.useContext(FormElementOptionsContext)\n const freshdeskFieldsState = React.useContext(FreshdeskFieldsStateContext)\n\n const freshdeskFieldOptionsResult = React.useMemo(() => {\n if (\n freshdeskFieldsState?.status === 'SUCCESS' &&\n // We can stop here if the options are not coming from freshdesk\n formElement.optionsType === 'FRESHDESK_FIELD' &&\n // If the element already has options, we don't need to set them again\n !Array.isArray(formElement.options)\n ) {\n return formService.parseFreshdeskFieldOptions(\n freshdeskFieldsState.result,\n formElement,\n )\n }\n }, [formElement, freshdeskFieldsState])\n\n const optionsSetResult = React.useMemo<OptionsSetResult | undefined>(() => {\n if (\n // We can stop here if the options are not dynamic\n formElement.optionsType !== 'DYNAMIC' ||\n // If the element already has options, we don't need to set them again\n Array.isArray(formElement.options)\n ) {\n return\n }\n return optionsSetResults.find(\n (optionsSetResult) =>\n optionsSetResult.formElementOptionsSet.id ===\n formElement.dynamicOptionSetId && optionsSetResult.result,\n )\n }, [\n formElement.dynamicOptionSetId,\n formElement.options,\n formElement.optionsType,\n optionsSetResults,\n ])\n\n React.useEffect(() => {\n if (!optionsSetResult && !freshdeskFieldOptionsResult) {\n return\n }\n\n onUpdateFormElements((formElements) => {\n return formElements.map((existingFormElement) => {\n if (existingFormElement.id === formElement.id) {\n switch (optionsSetResult?.result?.type) {\n case 'SEARCH': {\n if (formElement.type === 'autocomplete') {\n return {\n ...existingFormElement,\n optionsType: 'SEARCH',\n searchUrl: optionsSetResult.result.url,\n searchQuerystringParameter:\n optionsSetResult.result.searchQuerystringParameter,\n }\n }\n break\n }\n case 'OPTIONS': {\n return formService.parseFormElementOptions(\n form,\n formElement,\n optionsSetResult.result.options,\n )\n }\n }\n\n if (freshdeskFieldOptionsResult) {\n return {\n ...existingFormElement,\n options:\n freshdeskFieldOptionsResult.type === 'OPTIONS'\n ? freshdeskFieldOptionsResult.options\n : [],\n }\n }\n }\n\n return existingFormElement\n })\n })\n }, [\n form,\n formElement,\n freshdeskFieldOptionsResult,\n onUpdateFormElements,\n optionsSetResult,\n ])\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { FormTypes, SubmissionTypes } from '@oneblink/types';
|
|
3
|
-
import { ExecutedLookups } from '../
|
|
3
|
+
import { ExecutedLookups } from '../types/form';
|
|
4
4
|
/**
|
|
5
5
|
* This function is a simple wrapper around the react hook `useState()`. The
|
|
6
6
|
* results can be passed to the [`<OneBlinkForm
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFormSubmissionState.js","sourceRoot":"","sources":["../../src/hooks/useFormSubmissionState.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,UAAU,MAAM,kBAAkB,CAAA;AAEzC,OAAO,mBAAmB,MAAM,mCAAmC,CAAA;AAEnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAC5C,IAAoB,EACpB,iBAAkE,EAClE,kBAA0C;IAE1C,OAAO,KAAK,CAAC,QAAQ,CAKlB,GAAG,EAAE;QACN,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QACnC,MAAM,WAAW,GAAG,mBAAmB,CACrC,UAAU,CAAC,QAAQ,EACnB,iBAAiB,IAAI,EAAE,CACxB,CAAA;QACD,OAAO;YACL,UAAU;YACV,UAAU,EAAE,WAAW;YACvB,kBAAkB;YAClB,eAAe,EAAE,EAAE;SACpB,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import * as React from 'react'\nimport _cloneDeep from 'lodash.clonedeep'\nimport { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport generateDefaultData from '../services/generate-default-data'\nimport { ExecutedLookups } from '../
|
|
1
|
+
{"version":3,"file":"useFormSubmissionState.js","sourceRoot":"","sources":["../../src/hooks/useFormSubmissionState.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,UAAU,MAAM,kBAAkB,CAAA;AAEzC,OAAO,mBAAmB,MAAM,mCAAmC,CAAA;AAEnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAC5C,IAAoB,EACpB,iBAAkE,EAClE,kBAA0C;IAE1C,OAAO,KAAK,CAAC,QAAQ,CAKlB,GAAG,EAAE;QACN,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QACnC,MAAM,WAAW,GAAG,mBAAmB,CACrC,UAAU,CAAC,QAAQ,EACnB,iBAAiB,IAAI,EAAE,CACxB,CAAA;QACD,OAAO;YACL,UAAU;YACV,UAAU,EAAE,WAAW;YACvB,kBAAkB;YAClB,eAAe,EAAE,EAAE;SACpB,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import * as React from 'react'\nimport _cloneDeep from 'lodash.clonedeep'\nimport { FormTypes, SubmissionTypes } from '@oneblink/types'\nimport generateDefaultData from '../services/generate-default-data'\nimport { ExecutedLookups } from '../types/form'\n/**\n * This function is a simple wrapper around the react hook `useState()`. The\n * results can be passed to the [`<OneBlinkForm\n * />`](https://oneblink.github.io/apps-react/somewhere) //TODO: Fix link\n * component.\n *\n * ## Example\n *\n * ```js\n * import {\n * useFormSubmissionState,\n * OneBlinkFormControlled,\n * } from '@oneblink/apps-react'\n *\n * function Uncontrolled({ form, initialSubmission, ...props }) {\n * const [{ definition, submission }, setFormSubmission] =\n * useFormSubmissionState(form, initialSubmission)\n *\n * return (\n * <OneBlinkFormControlled\n * {...props}\n * definition={definition}\n * submission={submission}\n * setFormSubmission={setFormSubmission}\n * lastElementUpdated={lastElementUpdated}\n * />\n * )\n * }\n * ```\n *\n * @param form The OneBlink Form to render\n * @param initialSubmission The initial submission data to populate the form\n * with\n * @param lastElementUpdated\n * @returns\n * @group Hooks\n */\nexport default function useFormSubmissionState(\n form: FormTypes.Form,\n initialSubmission?: SubmissionTypes.S3SubmissionData['submission'],\n lastElementUpdated?: FormTypes.FormElement,\n) {\n return React.useState<{\n definition: FormTypes.Form\n submission: SubmissionTypes.S3SubmissionData['submission']\n lastElementUpdated: FormTypes.FormElement | undefined\n executedLookups: ExecutedLookups\n }>(() => {\n const definition = _cloneDeep(form)\n const defaultData = generateDefaultData(\n definition.elements,\n initialSubmission || {},\n )\n return {\n definition,\n submission: defaultData,\n lastElementUpdated,\n executedLookups: {},\n }\n })\n}\n"]}
|
package/dist/styles/icons.scss
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
.icon
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
.ob-icon {
|
|
2
|
+
&.icon-small {
|
|
3
|
+
font-size: 18px;
|
|
4
|
+
}
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
6
|
+
&.icon-medium {
|
|
7
|
+
font-size: 36px;
|
|
8
|
+
}
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
10
|
+
&.icon-large {
|
|
11
|
+
font-size: 50px;
|
|
12
|
+
}
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
&.icon-x-large {
|
|
15
|
+
font-size: 100px;
|
|
16
|
+
}
|
|
15
17
|
}
|
package/dist/styles.css
CHANGED
|
@@ -9258,19 +9258,16 @@ textarea:disabled {
|
|
|
9258
9258
|
font-weight: 300;
|
|
9259
9259
|
}
|
|
9260
9260
|
|
|
9261
|
-
.icon-small {
|
|
9261
|
+
.ob-icon.icon-small {
|
|
9262
9262
|
font-size: 18px;
|
|
9263
9263
|
}
|
|
9264
|
-
|
|
9265
|
-
.icon-medium {
|
|
9264
|
+
.ob-icon.icon-medium {
|
|
9266
9265
|
font-size: 36px;
|
|
9267
9266
|
}
|
|
9268
|
-
|
|
9269
|
-
.icon-large {
|
|
9267
|
+
.ob-icon.icon-large {
|
|
9270
9268
|
font-size: 50px;
|
|
9271
9269
|
}
|
|
9272
|
-
|
|
9273
|
-
.icon-x-large {
|
|
9270
|
+
.ob-icon.icon-x-large {
|
|
9274
9271
|
font-size: 100px;
|
|
9275
9272
|
}
|
|
9276
9273
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mui-color.js","sourceRoot":"","sources":["../../src/types/mui-color.ts"],"names":[],"mappings":"","sourcesContent":["import { Palette, PaletteColor } from '@mui/material'\n\nexport type Color = keyof {\n [T in keyof Palette as Palette[T] extends PaletteColor ? T : never]: unknown\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oneblink/apps-react",
|
|
3
3
|
"description": "Helper functions for OneBlink apps in ReactJS.",
|
|
4
|
-
"version": "5.12.
|
|
4
|
+
"version": "5.12.1-beta.1",
|
|
5
5
|
"author": "OneBlink <developers@oneblink.io> (https://oneblink.io)",
|
|
6
6
|
"bugs": {
|
|
7
7
|
"url": "https://github.com/oneblink/apps-react/issues"
|
|
@@ -10,8 +10,7 @@
|
|
|
10
10
|
"@arcgis/core": "^4.28.10",
|
|
11
11
|
"@emotion/react": "^11.11.3",
|
|
12
12
|
"@emotion/styled": "^11.11.0",
|
|
13
|
-
"@
|
|
14
|
-
"@oneblink/sdk-core": "^6.0.0-beta.3",
|
|
13
|
+
"@oneblink/sdk-core": "^6.0.1-beta.2",
|
|
15
14
|
"@react-google-maps/api": "2.19.2",
|
|
16
15
|
"blueimp-load-image": "^5.16.0",
|
|
17
16
|
"bulma": "^0.9.4",
|