@oneblink/apps-react 13.0.0-beta.8 → 13.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/OneBlinkFormBase.js +10 -10
  2. package/dist/OneBlinkFormBase.js.map +1 -1
  3. package/dist/OneBlinkReadOnlyForm.d.ts +2 -1
  4. package/dist/OneBlinkReadOnlyForm.js +2 -1
  5. package/dist/OneBlinkReadOnlyForm.js.map +1 -1
  6. package/dist/apps/approvals-service.d.ts +2 -60
  7. package/dist/apps/approvals-service.js +1 -181
  8. package/dist/apps/approvals-service.js.map +1 -1
  9. package/dist/apps/services/api/submissions.d.ts +2 -1
  10. package/dist/apps/services/api/submissions.js +3 -1
  11. package/dist/apps/services/api/submissions.js.map +1 -1
  12. package/dist/apps/submission-service.d.ts +4 -1
  13. package/dist/apps/submission-service.js +3 -1
  14. package/dist/apps/submission-service.js.map +1 -1
  15. package/dist/form-elements/FormElementForm.js +7 -1
  16. package/dist/form-elements/FormElementForm.js.map +1 -1
  17. package/dist/hooks/useFormIsDirty.d.ts +18 -0
  18. package/dist/hooks/useFormIsDirty.js +44 -1
  19. package/dist/hooks/useFormIsDirty.js.map +1 -1
  20. package/dist/hooks/useFormValidation.d.ts +2 -2
  21. package/dist/hooks/useFormValidation.js +5 -2
  22. package/dist/hooks/useFormValidation.js.map +1 -1
  23. package/dist/index.d.ts +1 -1
  24. package/dist/index.js +1 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/services/dynamic-elements.d.ts +7 -0
  27. package/dist/services/dynamic-elements.js +16 -2
  28. package/dist/services/dynamic-elements.js.map +1 -1
  29. package/dist/services/form-validation/extensions.d.ts +2 -1
  30. package/dist/services/form-validation/extensions.js +2 -1
  31. package/dist/services/form-validation/extensions.js.map +1 -1
  32. package/dist/services/form-validation/getApproverEditableFormElementIds.d.ts +2 -0
  33. package/dist/services/form-validation/getApproverEditableFormElementIds.js +14 -0
  34. package/dist/services/form-validation/getApproverEditableFormElementIds.js.map +1 -0
  35. package/dist/services/form-validation/validateSubmission.d.ts +2 -1
  36. package/dist/services/form-validation/validateSubmission.js +17 -3
  37. package/dist/services/form-validation/validateSubmission.js.map +1 -1
  38. package/dist/services/getFlowInstanceNodesWithMeta.d.ts +70 -0
  39. package/dist/services/getFlowInstanceNodesWithMeta.js +247 -0
  40. package/dist/services/getFlowInstanceNodesWithMeta.js.map +1 -0
  41. package/dist/utils/read-only-form-elements.d.ts +22 -0
  42. package/dist/utils/read-only-form-elements.js +70 -0
  43. package/dist/utils/read-only-form-elements.js.map +1 -1
  44. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"OneBlinkReadOnlyForm.js","sourceRoot":"","sources":["../src/OneBlinkReadOnlyForm.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,gBAEN,MAAM,oBAAoB,CAAA;AAC3B,OAAO,sBAAsB,MAAM,gCAAgC,CAAA;AAGnE,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;AAErB,SAAS,gCAAgC,CAAC,EACxC,IAAI,EACJ,iBAAiB,EACjB,GAAG,IAAI,EACsD;IAC7D,MAAM,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,iBAAiB,CAAC,GACpE,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;IAEjD,OAAO,CACL,KAAC,gBAAgB,OACX,IAAI,EACR,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,IAAI,EACd,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,IAAI,EACd,QAAQ,EAAE,IAAI,EACd,iBAAiB,EAAE,iBAAiB,EACpC,qBAAqB,EAAE,KAAK,EAC5B,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,EAAE,GAChB,CACH,CAAA;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAgC;IAC5D,IAAI,KAAK,CAAC,sBAAsB,EAAE,CAAC;QACjC,OAAO,CACL,KAAC,gBAAgB,OACX,KAAK,EACT,QAAQ,EAAE,KAAK,EACf,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,IAAI,EACd,QAAQ,EAAE,IAAI,EACd,qBAAqB,EAAE,KAAK,GAC5B,CACH,CAAA;IACH,CAAC;IAED,OAAO,KAAC,gCAAgC,OAAK,KAAK,GAAI,CAAA;AACxD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyFG;AACH,eAAe,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA","sourcesContent":["import * as React from 'react'\nimport OneBlinkFormBase, {\n OneBlinkReadOnlyFormProps,\n} from './OneBlinkFormBase'\nimport useFormSubmissionState from './hooks/useFormSubmissionState'\nimport { FormTypes } from '@oneblink/types'\n\nconst noop = () => {}\n\nfunction UncontrolledOneBlinkReadOnlyForm({\n form,\n initialSubmission,\n ...rest\n}: Extract<OneBlinkReadOnlyFormProps, { form: FormTypes.Form }>) {\n const [{ submission, definition, executedLookups }, setFormSubmission] =\n useFormSubmissionState(form, initialSubmission)\n\n return (\n <OneBlinkFormBase\n {...rest}\n definition={definition}\n submission={submission}\n disabled={true}\n isReadOnly={true}\n onCancel={noop}\n onSubmit={noop}\n setFormSubmission={setFormSubmission}\n isPendingQueueEnabled={false}\n executedLookups={executedLookups}\n sectionState={[]}\n />\n )\n}\n\nfunction OneBlinkReadOnlyForm(props: OneBlinkReadOnlyFormProps) {\n if (props.editableFormElementIds) {\n return (\n <OneBlinkFormBase\n {...props}\n disabled={false}\n isReadOnly={true}\n onCancel={noop}\n onSubmit={noop}\n isPendingQueueEnabled={false}\n />\n )\n }\n\n return <UncontrolledOneBlinkReadOnlyForm {...props} />\n}\n\n/**\n * Component for rendering a OneBlink Form in read-only mode. By default, all\n * inputs are read-only. Pass `editableFormElementIds` with controlled\n * submission props (`definition`, `submission`, `setFormSubmission`,\n * `executedLookups`) to keep selected inputs editable. This component does\n * **not** render the submit, cancel or save draft buttons.\n *\n * It is also recommended to import the `css` from this library as well.\n *\n * ```js\n * import { OneBlinkReadOnlyForm } from '@oneblink/apps-react'\n * import '@oneblink/apps-react/dist/styles.css'\n * ```\n *\n * #### Example\n *\n * ```tsx\n * import React from 'react'\n * import ReactDOM from 'react-dom'\n * import {\n * FormTypes\n * IsOfflineContextProvider,\n * OneBlinkReadOnlyForm,\n * useFormSubmissionState,\n * useIsMounted,\n * } from '@oneblink/apps-react'\n * import '@oneblink/apps-react/dist/styles.css'\n *\n * const googleMapsApiKey = 'ENTER_YOUR_MAPS_API_KEY_HERE'\n * const formsAppId = 1\n * const form: FormTypes.Form = {\n * id: 1,\n * name: 'Name of Form',\n * description: '',\n * organisationId: 'abc123',\n * formsAppEnvironmentId: 1,\n * formsAppIds: [],\n * elements: [],\n * isAuthenticated: false,\n * isMultiPage: false,\n * isInfoPage: false,\n * publishStartDate: null,\n * publishEndDate: null,\n * postSubmissionAction: 'FORMS_LIBRARY',\n * submissionEvents: [],\n * tags: [],\n * }\n *\n * function FormContainer() {\n * const isMounted = useIsMounted()\n * const [\n * { definition, submission, executedLookups },\n * setFormSubmission,\n * ] = useFormSubmissionState(form)\n *\n * const handleFormError = React.useCallback(() => {\n * // handle form rendering error caused by a misconfigured form here...\n * }, [isMounted])\n *\n * return (\n * <OneBlinkReadOnlyForm\n * googleMapsApiKey={googleMapsApiKey}\n * definition={definition}\n * submission={submission}\n * setFormSubmission={setFormSubmission}\n * executedLookups={executedLookups}\n * audience=\"APPROVER\"\n * editableFormElementIds={['element-id']}\n * />\n * )\n * }\n *\n * function App() {\n * return (\n * <IsOfflineContextProvider>\n * <FormContainer />\n * </IsOfflineContextProvider>\n * )\n * }\n *\n * const root = document.getElementById('root')\n * if (root) {\n * ReactDOM.render(<App />, root)\n * }\n * ```\n *\n * @param props\n * @returns\n * @group Components\n */\nexport default React.memo(OneBlinkReadOnlyForm)\n"]}
1
+ {"version":3,"file":"OneBlinkReadOnlyForm.js","sourceRoot":"","sources":["../src/OneBlinkReadOnlyForm.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,gBAA+C,MAAM,oBAAoB,CAAA;AAChF,OAAO,sBAAsB,MAAM,gCAAgC,CAAA;AAGnE,MAAM,IAAI,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;AAErB,SAAS,gCAAgC,CAAC,EACxC,IAAI,EACJ,iBAAiB,EACjB,GAAG,IAAI,EACsD;IAC7D,MAAM,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,EAAE,iBAAiB,CAAC,GACpE,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;IAEjD,OAAO,CACL,KAAC,gBAAgB,OACX,IAAI,EACR,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,IAAI,EACd,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,IAAI,EACd,QAAQ,EAAE,IAAI,EACd,iBAAiB,EAAE,iBAAiB,EACpC,qBAAqB,EAAE,KAAK,EAC5B,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,EAAE,GAChB,CACH,CAAA;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAgC;IAC5D,IAAI,KAAK,CAAC,sBAAsB,EAAE,CAAC;QACjC,OAAO,CACL,KAAC,gBAAgB,OACX,KAAK,EACT,QAAQ,EAAE,KAAK,EACf,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,IAAI,EACd,QAAQ,EAAE,IAAI,EACd,qBAAqB,EAAE,KAAK,GAC5B,CACH,CAAA;IACH,CAAC;IAED,OAAO,KAAC,gCAAgC,OAAK,KAAK,GAAI,CAAA;AACxD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0FG;AACH,eAAe,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA","sourcesContent":["import * as React from 'react'\nimport OneBlinkFormBase, { OneBlinkReadOnlyFormProps } from './OneBlinkFormBase'\nimport useFormSubmissionState from './hooks/useFormSubmissionState'\nimport { FormTypes } from '@oneblink/types'\n\nconst noop = () => {}\n\nfunction UncontrolledOneBlinkReadOnlyForm({\n form,\n initialSubmission,\n ...rest\n}: Extract<OneBlinkReadOnlyFormProps, { form: FormTypes.Form }>) {\n const [{ submission, definition, executedLookups }, setFormSubmission] =\n useFormSubmissionState(form, initialSubmission)\n\n return (\n <OneBlinkFormBase\n {...rest}\n definition={definition}\n submission={submission}\n disabled={true}\n isReadOnly={true}\n onCancel={noop}\n onSubmit={noop}\n setFormSubmission={setFormSubmission}\n isPendingQueueEnabled={false}\n executedLookups={executedLookups}\n sectionState={[]}\n />\n )\n}\n\nfunction OneBlinkReadOnlyForm(props: OneBlinkReadOnlyFormProps) {\n if (props.editableFormElementIds) {\n return (\n <OneBlinkFormBase\n {...props}\n disabled={false}\n isReadOnly={true}\n onCancel={noop}\n onSubmit={noop}\n isPendingQueueEnabled={false}\n />\n )\n }\n\n return <UncontrolledOneBlinkReadOnlyForm {...props} />\n}\n\n/**\n * Component for rendering a OneBlink Form in read-only mode. By default, all\n * inputs are read-only. Pass `editableFormElementIds` with controlled\n * submission props (`definition`, `submission`, `setFormSubmission`,\n * `executedLookups`) to keep selected inputs editable. Selecting a `form` or\n * `infoPage` element makes all of its descendants editable. This component does\n * **not** render the submit, cancel or save draft buttons.\n *\n * It is also recommended to import the `css` from this library as well.\n *\n * ```js\n * import { OneBlinkReadOnlyForm } from '@oneblink/apps-react'\n * import '@oneblink/apps-react/dist/styles.css'\n * ```\n *\n * #### Example\n *\n * ```tsx\n * import React from 'react'\n * import ReactDOM from 'react-dom'\n * import {\n * FormTypes\n * IsOfflineContextProvider,\n * OneBlinkReadOnlyForm,\n * useFormSubmissionState,\n * useIsMounted,\n * } from '@oneblink/apps-react'\n * import '@oneblink/apps-react/dist/styles.css'\n *\n * const googleMapsApiKey = 'ENTER_YOUR_MAPS_API_KEY_HERE'\n * const formsAppId = 1\n * const form: FormTypes.Form = {\n * id: 1,\n * name: 'Name of Form',\n * description: '',\n * organisationId: 'abc123',\n * formsAppEnvironmentId: 1,\n * formsAppIds: [],\n * elements: [],\n * isAuthenticated: false,\n * isMultiPage: false,\n * isInfoPage: false,\n * publishStartDate: null,\n * publishEndDate: null,\n * postSubmissionAction: 'FORMS_LIBRARY',\n * submissionEvents: [],\n * tags: [],\n * }\n *\n * function FormContainer() {\n * const isMounted = useIsMounted()\n * const [\n * { definition, submission, executedLookups },\n * setFormSubmission,\n * ] = useFormSubmissionState(form)\n *\n * const handleFormError = React.useCallback(() => {\n * // handle form rendering error caused by a misconfigured form here...\n * }, [isMounted])\n *\n * return (\n * <OneBlinkReadOnlyForm\n * googleMapsApiKey={googleMapsApiKey}\n * definition={definition}\n * submission={submission}\n * setFormSubmission={setFormSubmission}\n * executedLookups={executedLookups}\n * audience=\"APPROVER\"\n * editableFormElementIds={['element-id']}\n * />\n * )\n * }\n *\n * function App() {\n * return (\n * <IsOfflineContextProvider>\n * <FormContainer />\n * </IsOfflineContextProvider>\n * )\n * }\n *\n * const root = document.getElementById('root')\n * if (root) {\n * ReactDOM.render(<App />, root)\n * }\n * ```\n *\n * @param props\n * @returns\n * @group Components\n */\nexport default React.memo(OneBlinkReadOnlyForm)\n"]}
@@ -1,4 +1,5 @@
1
1
  import { SubmissionTypes, ApprovalTypes, FormTypes } from '@oneblink/types';
2
+ export { getFlowInstanceNodesWithMeta } from '../services/getFlowInstanceNodesWithMeta';
2
3
  export type FormSubmissionApprovalsResponse = {
3
4
  approvals: Array<{
4
5
  formSubmissionApproval: ApprovalTypes.FormSubmissionApproval;
@@ -10,6 +11,7 @@ export type FormSubmissionApprovalsResponse = {
10
11
  export type FormApprovalFlowInstanceHistory = {
11
12
  formApprovalFlowInstance: ApprovalTypes.FormApprovalFlowInstance;
12
13
  formSubmissionMeta: SubmissionTypes.FormSubmissionMeta;
14
+ formSubmissionMetaEdits: SubmissionTypes.FormSubmissionMetaEdit[];
13
15
  formSubmissionApprovals: ApprovalTypes.FormSubmissionApproval[];
14
16
  successfulFormSubmissionPayment?: SubmissionTypes.FormSubmissionPayment;
15
17
  };
@@ -328,63 +330,3 @@ export declare function deleteApprovalAdditionalNote({ formSubmissionApprovalId,
328
330
  export declare function getFormSubmissionApprovalStatus(formSubmissionApprovalId: string, abortSignal?: AbortSignal): Promise<{
329
331
  status: ApprovalTypes.NewFormSubmissionApproval['status'];
330
332
  }>;
331
- /**
332
- * Inputs a form approval flow instance and set of form submission approvals and
333
- * returns a flattened array of nodes/steps with inlcuded metadata.
334
- *
335
- * #### Example
336
- *
337
- * ```js
338
- * const formApprovalFlowInstance = {
339
- * steps: [
340
- * {
341
- * type: 'STANDARD',
342
- * group: 'oneblink:administrator',
343
- * isSkipped: false,
344
- * label: 'Manager Approval',
345
- * approvalFormId: '1234',
346
- * },
347
- * {
348
- * type: 'CONCURRENT',
349
- * nodes: [
350
- * {
351
- * label: 'HR Review',
352
- * group: 'oneblink:administrator',
353
- * isSkipped: false,
354
- * approvalFormId: '1234',
355
- * },
356
- * {
357
- * label: 'Finance Review',
358
- * group: 'oneblink:administrator',
359
- * isSkipped: false,
360
- * approvalFormId: '1234',
361
- * },
362
- * ],
363
- * },
364
- * ],
365
- * }
366
- *
367
- * const formSubmissionApprovals = [
368
- * {
369
- * id: 'approval1',
370
- * stepLabel: 'Manager Approval',
371
- * status: 'APPROVED',
372
- * createdAt: '2024-03-20T10:00:00Z',
373
- * updatedAt: '2024-03-20T10:00:00Z',
374
- * updatedBy: 'fake@fake.com',
375
- * group: 'oneblink:administrator',
376
- * approvalFormId: '1234',
377
- * },
378
- * ]
379
- *
380
- * const nodesWithMeta = getFlowInstanceNodesWithMeta(
381
- * formApprovalFlowInstance,
382
- * formSubmissionApprovals,
383
- * )
384
- * ```
385
- *
386
- * @param formApprovalFlowInstance
387
- * @param formSubmissionApprovals
388
- * @returns ApprovalTypes.FlowInstanceNodeWithMeta[]
389
- */
390
- export declare function getFlowInstanceNodesWithMeta(formApprovalFlowInstance: ApprovalTypes.FormApprovalFlowInstance, formSubmissionApprovals: ApprovalTypes.FormSubmissionApproval[]): ApprovalTypes.FlowInstanceNodeWithMeta[];
@@ -3,6 +3,7 @@ import { isOffline } from './offline-service';
3
3
  import { deleteRequest, getRequest, putRequest, searchRequest, postRequest, } from './services/fetch';
4
4
  import tenants from './tenants';
5
5
  import Sentry from './Sentry';
6
+ export { getFlowInstanceNodesWithMeta } from '../services/getFlowInstanceNodesWithMeta';
6
7
  /**
7
8
  * Get an Object containing FormSubmissionApprovals assigned to the current user
8
9
  * and the Form definitions in those approvals.
@@ -803,185 +804,4 @@ export async function getFormSubmissionApprovalStatus(formSubmissionApprovalId,
803
804
  }
804
805
  }
805
806
  }
806
- const possibleStatuses = [
807
- {
808
- label: 'Awaiting Approval',
809
- value: 'PENDING',
810
- },
811
- {
812
- label: 'Approved',
813
- value: 'APPROVED',
814
- },
815
- {
816
- label: 'Clarification Requested',
817
- value: 'CLARIFICATION_REQUIRED',
818
- },
819
- {
820
- label: 'Clarification Received',
821
- value: 'CLARIFICATION_RECEIVED',
822
- },
823
- {
824
- label: 'Denied',
825
- value: 'CLOSED',
826
- },
827
- ];
828
- function findLatestFormSubmissionApproval(flowInstanceNode, formSubmissionApprovals) {
829
- return formSubmissionApprovals.reduce((lastUpdatedFormSubmissionApproval, formSubmissionApproval) => {
830
- if (formSubmissionApproval.stepLabel === flowInstanceNode.label &&
831
- (!lastUpdatedFormSubmissionApproval ||
832
- lastUpdatedFormSubmissionApproval.updatedAt <
833
- formSubmissionApproval.updatedAt)) {
834
- return formSubmissionApproval;
835
- }
836
- return lastUpdatedFormSubmissionApproval;
837
- }, undefined);
838
- }
839
- function getFormApprovalFlowInstanceNodes(steps) {
840
- return steps.reduce((memo, step) => {
841
- switch (step.type) {
842
- case 'CONCURRENT': {
843
- const parentStepLabelsId = step.nodes
844
- .map(({ label }) => label)
845
- .join('_');
846
- for (const node of step.nodes) {
847
- const index = step.nodes.indexOf(node);
848
- memo.push({
849
- ...node,
850
- parentStepLabelsId,
851
- isConcurrentWithPrevious: index !== 0,
852
- isConcurrentWithNext: index < step.nodes.length - 1,
853
- });
854
- }
855
- break;
856
- }
857
- case 'STANDARD':
858
- default: {
859
- memo.push({
860
- ...step,
861
- isConcurrentWithPrevious: false,
862
- isConcurrentWithNext: false,
863
- parentStepLabelsId: step.label,
864
- });
865
- break;
866
- }
867
- }
868
- return memo;
869
- }, []);
870
- }
871
- /**
872
- * Inputs a form approval flow instance and set of form submission approvals and
873
- * returns a flattened array of nodes/steps with inlcuded metadata.
874
- *
875
- * #### Example
876
- *
877
- * ```js
878
- * const formApprovalFlowInstance = {
879
- * steps: [
880
- * {
881
- * type: 'STANDARD',
882
- * group: 'oneblink:administrator',
883
- * isSkipped: false,
884
- * label: 'Manager Approval',
885
- * approvalFormId: '1234',
886
- * },
887
- * {
888
- * type: 'CONCURRENT',
889
- * nodes: [
890
- * {
891
- * label: 'HR Review',
892
- * group: 'oneblink:administrator',
893
- * isSkipped: false,
894
- * approvalFormId: '1234',
895
- * },
896
- * {
897
- * label: 'Finance Review',
898
- * group: 'oneblink:administrator',
899
- * isSkipped: false,
900
- * approvalFormId: '1234',
901
- * },
902
- * ],
903
- * },
904
- * ],
905
- * }
906
- *
907
- * const formSubmissionApprovals = [
908
- * {
909
- * id: 'approval1',
910
- * stepLabel: 'Manager Approval',
911
- * status: 'APPROVED',
912
- * createdAt: '2024-03-20T10:00:00Z',
913
- * updatedAt: '2024-03-20T10:00:00Z',
914
- * updatedBy: 'fake@fake.com',
915
- * group: 'oneblink:administrator',
916
- * approvalFormId: '1234',
917
- * },
918
- * ]
919
- *
920
- * const nodesWithMeta = getFlowInstanceNodesWithMeta(
921
- * formApprovalFlowInstance,
922
- * formSubmissionApprovals,
923
- * )
924
- * ```
925
- *
926
- * @param formApprovalFlowInstance
927
- * @param formSubmissionApprovals
928
- * @returns ApprovalTypes.FlowInstanceNodeWithMeta[]
929
- */
930
- export function getFlowInstanceNodesWithMeta(formApprovalFlowInstance, formSubmissionApprovals) {
931
- const formApprovalFlowInstanceNodes = getFormApprovalFlowInstanceNodes(formApprovalFlowInstance.steps);
932
- let isDenied = false;
933
- let isClarificationRequired = false;
934
- return formApprovalFlowInstanceNodes.map((step) => {
935
- const associatedApproval = findLatestFormSubmissionApproval(step, formSubmissionApprovals);
936
- const status = possibleStatuses.find(({ value }) => value === (associatedApproval === null || associatedApproval === void 0 ? void 0 : associatedApproval.status));
937
- let isDeniedInConcurrentStep = false;
938
- let isClarificationRequiredInConcurrentStep = false;
939
- if ((status === null || status === void 0 ? void 0 : status.value) === 'PENDING') {
940
- const siblingNodes = formApprovalFlowInstanceNodes.filter(({ parentStepLabelsId, label }) => parentStepLabelsId === step.parentStepLabelsId &&
941
- label !== step.label);
942
- for (const siblingNode of siblingNodes) {
943
- const formSubmissionApproval = findLatestFormSubmissionApproval(siblingNode, formSubmissionApprovals);
944
- if ((formSubmissionApproval === null || formSubmissionApproval === void 0 ? void 0 : formSubmissionApproval.status) === 'CLOSED') {
945
- isDeniedInConcurrentStep = true;
946
- }
947
- if ((formSubmissionApproval === null || formSubmissionApproval === void 0 ? void 0 : formSubmissionApproval.status) === 'CLARIFICATION_REQUIRED') {
948
- isClarificationRequiredInConcurrentStep = true;
949
- }
950
- }
951
- }
952
- const isAfterDeniedStep = isDenied;
953
- if ((status === null || status === void 0 ? void 0 : status.value) === 'CLOSED') {
954
- isDenied = true;
955
- }
956
- const isAfterClarificationRequiredStep = isClarificationRequired;
957
- if ((status === null || status === void 0 ? void 0 : status.value) === 'CLARIFICATION_REQUIRED') {
958
- isClarificationRequired = true;
959
- }
960
- let description = 'Awaiting previous approvals';
961
- if (step.isSkipped) {
962
- description = 'Skipped based on form submission';
963
- }
964
- else if (status) {
965
- const updatedByText = (associatedApproval === null || associatedApproval === void 0 ? void 0 : associatedApproval.updatedBy)
966
- ? ` by ${associatedApproval.updatedBy}`
967
- : '';
968
- description = `${status.label}${updatedByText}`;
969
- }
970
- else if (isAfterDeniedStep) {
971
- description = 'Denied in a previous step';
972
- }
973
- else if (isAfterClarificationRequiredStep) {
974
- description = 'Sent for clarification in a previous step';
975
- }
976
- return {
977
- ...step,
978
- status,
979
- isDeniedInConcurrentStep,
980
- isAfterDeniedStep,
981
- isClarificationRequiredInConcurrentStep,
982
- isAfterClarificationRequiredStep,
983
- description,
984
- };
985
- });
986
- }
987
807
  //# sourceMappingURL=approvals-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"approvals-service.js","sourceRoot":"","sources":["../../src/apps/approvals-service.ts"],"names":[],"mappings":"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","sourcesContent":["import { SubmissionTypes, ApprovalTypes, FormTypes } from '@oneblink/types'\nimport OneBlinkAppsError from './services/errors/oneBlinkAppsError'\nimport { isOffline } from './offline-service'\nimport {\n deleteRequest,\n getRequest,\n putRequest,\n searchRequest,\n postRequest,\n HTTPError,\n} from './services/fetch'\nimport tenants from './tenants'\nimport Sentry from './Sentry'\n\nexport type FormSubmissionApprovalsResponse = {\n approvals: Array<{\n formSubmissionApproval: ApprovalTypes.FormSubmissionApproval\n formApprovalFlowInstance: ApprovalTypes.FormApprovalFlowInstance\n formSubmissionMeta: SubmissionTypes.FormSubmissionMeta\n latestSuccessfulFormSubmissionPayment:\n | SubmissionTypes.FormSubmissionPayment\n | undefined\n }>\n}\n\nexport type FormApprovalFlowInstanceHistory = {\n formApprovalFlowInstance: ApprovalTypes.FormApprovalFlowInstance\n formSubmissionMeta: SubmissionTypes.FormSubmissionMeta\n formSubmissionApprovals: ApprovalTypes.FormSubmissionApproval[]\n successfulFormSubmissionPayment?: SubmissionTypes.FormSubmissionPayment\n}\n\nexport type FormSubmissionApprovalResponse = {\n formSubmissionMeta: SubmissionTypes.FormSubmissionMeta\n formApprovalFlowInstance: ApprovalTypes.FormApprovalFlowInstance\n formSubmissionApproval: ApprovalTypes.FormSubmissionApproval\n form: FormTypes.Form\n successfulFormSubmissionPayment?: SubmissionTypes.FormSubmissionPayment\n history: FormApprovalFlowInstanceHistory[]\n}\n\nexport type FormSubmissionsAdministrationApprovalsResponse = {\n approvals: Array<\n FormApprovalFlowInstanceHistory & {\n history: Array<FormApprovalFlowInstanceHistory>\n }\n >\n meta: {\n limit: number\n offset: number\n nextOffset?: number\n }\n}\n\n/**\n * Get an Object containing FormSubmissionApprovals assigned to the current user\n * and the Form definitions in those approvals.\n *\n * #### Example\n *\n * ```js\n * const formsAppId = 1\n * const {\n * formSubmissionApprovals,\n * formApprovalFlowInstances,\n * forms,\n * formSubmissionMeta,\n * } = await approvalsService.getFormSubmissionApprovals(formAppId)\n * ```\n *\n * @param formsAppId\n * @param abortSignal\n * @returns\n */\nexport async function getFormSubmissionApprovals(\n formsAppId: number,\n abortSignal?: AbortSignal,\n): Promise<FormSubmissionApprovalsResponse> {\n try {\n return await getRequest<FormSubmissionApprovalsResponse>(\n `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/my-approvals`,\n abortSignal,\n )\n } catch (err) {\n Sentry.captureException(err)\n console.error('Error retrieving form submission approvals', err)\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline and do not have a local copy of this app available, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot view your pending approvals without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\n/**\n * Get a single FormSubmissionApproval belonging to the given id.\n *\n * #### Example\n *\n * ```js\n * const formSubmissionApprovalId = 'd27966cc-128d-48a2-b681-6ad52012e113'\n * const {\n * formSubmissionApproval,\n * formApprovalFlowInstance,\n * formSubmissionMeta,\n * form,\n * history,\n * } = await approvalsService.getFormSubmissionApproval(\n * formSubmissionApprovalId,\n * )\n * ```\n *\n * @param formSubmissionApprovalId\n * @param abortSignal\n * @returns\n */\nexport async function getFormSubmissionApproval(\n formSubmissionApprovalId: string,\n abortSignal?: AbortSignal,\n): Promise<FormSubmissionApprovalResponse> {\n try {\n const result = await getRequest<FormSubmissionApprovalResponse>(\n `${tenants.current.apiOrigin}/form-submission-approvals/${formSubmissionApprovalId}`,\n abortSignal,\n )\n return result\n } catch (err) {\n Sentry.captureException(err)\n console.error('Error retrieving form submission approval', err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline and do not have a local copy of this app available, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot action this pending submission without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\n/**\n * Update a single FormSubmissionApproval assigned to the current user.\n *\n * #### Example\n *\n * ```js\n * const formSubmissionApproval = {\n * id: 'd27966cc-128d-48a2-b681-6ad52012e113',\n * status: 'APPROVED',\n * username: 'email@example.com',\n * formApprovalFlowInstanceId: 1,\n * notificationEmailAddress: 'email@example.com',\n * notes: 'Great work!!!',\n * internalNotes: 'It was not really that great...',\n * cannedResponseKey: 'my_canned_response_key',\n * createdAt: '2021-02-21T22:57:56.257Z',\n * updatedAt: '2021-02-21T22:57:56.257Z',\n * }\n * const updatedFormSubmissionApproval =\n * await approvalsService.updateFormSubmissionApproval(\n * formSubmissionApproval,\n * )\n * ```\n *\n * @param formSubmissionApproval\n * @param abortSignal\n * @returns\n */\nexport async function updateFormSubmissionApproval(\n formSubmissionApproval: ApprovalTypes.FormSubmissionApproval,\n abortSignal?: AbortSignal,\n): Promise<ApprovalTypes.FormSubmissionApproval> {\n try {\n return await putRequest<ApprovalTypes.FormSubmissionApproval>(\n `${tenants.current.apiOrigin}/form-submission-approvals/${formSubmissionApproval.id}`,\n formSubmissionApproval,\n abortSignal,\n )\n } catch (err) {\n Sentry.captureException(err)\n console.error('Error updating form submission approval', err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot action this pending submission without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404:\n case 409: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\n/**\n * @deprecated Use \"reopenFormApprovalFlowInstance()\" instead\n * @internal\n */\nexport const reopenFormSubmissionApproval = reopenFormApprovalFlowInstance\n\n/**\n * As an administrator, reopen a submission that has been approved or denied.\n *\n * #### Example\n *\n * ```js\n * await approvalsService.reopenFormApprovalFlowInstance({\n * formApprovalFlowInstanceId: 1,\n * notificationEmailAddress: 'email@example.com',\n * notes: 'Great work!!!',\n * internalNotes: 'It was not really that great...',\n * cannedResponseKey: 'my_canned_response_key',\n * })\n * ```\n *\n * @param options\n * @param abortSignal\n * @returns\n */\nexport async function reopenFormApprovalFlowInstance(\n {\n formApprovalFlowInstanceId,\n ...payload\n }: {\n formApprovalFlowInstanceId: number\n notificationEmailAddress: string\n notes: string\n internalNotes?: string\n cannedResponseKey?: string\n },\n abortSignal?: AbortSignal,\n): Promise<ApprovalTypes.FormSubmissionApproval> {\n console.log('Reopening form approval flow instance', {\n formApprovalFlowInstanceId,\n ...payload,\n })\n try {\n return await postRequest<ApprovalTypes.FormSubmissionApproval>(\n `${tenants.current.apiOrigin}/form-approval-flow-instances/${formApprovalFlowInstanceId}/reopen`,\n payload,\n abortSignal,\n )\n } catch (err) {\n console.error('Error reopening form approval flow instance', err)\n Sentry.captureException(err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot reopen this approval without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this approval. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404:\n case 409: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\n/**\n * As an administrator, close a submission that has been approved.\n *\n * #### Example\n *\n * ```js\n * await approvalsService.closeFormApprovalFlowInstance({\n * formApprovalFlowInstanceId: 1,\n * notificationEmailAddress: ['email@example.com'],\n * notes: 'Great work!!!',\n * internalNotes: 'It was not really that great...',\n * cannedResponseKey: 'my_canned_response_key',\n * })\n * ```\n *\n * @param options\n * @param abortSignal\n * @returns\n */\nexport async function closeFormApprovalFlowInstance(\n {\n formApprovalFlowInstanceId,\n ...payload\n }: {\n formApprovalFlowInstanceId: number\n notificationEmailAddress?: string[]\n notes?: string\n internalNotes?: string\n cannedResponseKey?: string\n },\n abortSignal?: AbortSignal,\n): Promise<ApprovalTypes.FormSubmissionApproval> {\n console.log('Closing form approval flow instance', {\n formApprovalFlowInstanceId,\n ...payload,\n })\n try {\n return await postRequest<ApprovalTypes.FormSubmissionApproval>(\n `${tenants.current.apiOrigin}/form-approval-flow-instances/${formApprovalFlowInstanceId}/close`,\n payload,\n abortSignal,\n )\n } catch (err) {\n console.log('Error closing form approval flow instance', err)\n Sentry.captureException(err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot close this approval without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this approval. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404:\n case 409: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\nexport type FormApprovalFlowResponse = {\n forms: FormTypes.Form[]\n}\n\nexport async function getFormApprovalFlows(\n formsAppId: number,\n abortSignal?: AbortSignal,\n): Promise<FormApprovalFlowResponse> {\n try {\n return await getRequest<FormApprovalFlowResponse>(\n `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/form-approval-flows`,\n abortSignal,\n )\n } catch (err) {\n Sentry.captureException(err)\n console.error('Error retrieving form approval flows', err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot access form approval flows without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\n/**\n * Get an Object containing approvals for the app regardless of approval groups\n * and meta for paging. Must be an Approvals Administrator.\n *\n * #### Example\n *\n * ```js\n * const formsAppId = 1\n * const limit = 50\n * const offset = 0\n * const { approvals, meta } =\n * await approvalsService.getFormSubmissionAdministrationApprovals({\n * formAppId,\n * limit,\n * offset,\n * })\n * ```\n *\n * @param options\n * @param abortSignal\n * @returns\n */\nexport async function getFormSubmissionAdministrationApprovals(\n {\n formsAppId,\n ...rest\n }: {\n formsAppId: number\n formId?: number\n externalId?: string\n submissionId?: string\n formApprovalFlowInstanceId?: number\n submittedAfterDateTime?: string\n submittedBeforeDateTime?: string\n limit: number\n offset: number\n statuses?: string[]\n updatedAfterDateTime?: string\n updatedBeforeDateTime?: string\n lastUpdatedBy?: string[]\n submissionTitle?: string\n },\n abortSignal?: AbortSignal,\n): Promise<FormSubmissionsAdministrationApprovalsResponse> {\n try {\n return await searchRequest<FormSubmissionsAdministrationApprovalsResponse>(\n `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/approvals`,\n {\n ...rest,\n },\n abortSignal,\n )\n } catch (err) {\n Sentry.captureException(err)\n console.error(\n 'Error retrieving administrator form submission approvals',\n err,\n )\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline and do not have a local copy of this app available, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot view approvals without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\nexport type FormApprovalUsernamesResponse = {\n usernames: Array<{ username: string }>\n}\n/**\n * Get an array containing usernames that have updated approvals in the within\n * the formsAppId associated with the passed `formsAppId`. Must be an Approvals\n * Administrator.\n *\n * #### Example\n *\n * ```js\n * const formsAppId = 1\n * const { usernames } =\n * await approvalsService.getFormApprovalUsernames(formsAppId)\n * ```\n *\n * @param formsAppId\n * @param abortSignal\n * @returns\n */\nexport async function getFormApprovalUsernames(\n formsAppId: number,\n abortSignal?: AbortSignal,\n): Promise<FormApprovalUsernamesResponse> {\n try {\n return await getRequest<FormApprovalUsernamesResponse>(\n `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/approvals/usernames`,\n abortSignal,\n )\n } catch (err) {\n Sentry.captureException(err)\n console.error('Error retrieving form approval usernames', err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot access form approval usernames without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\n/**\n * Create an additional note for a form submission approval.\n *\n * #### Example\n *\n * ```js\n * const formSubmissionApprovalId = 'd96ff812-f263-4a66-868d-e259a1fe4157'\n * const newFormSubmissionApprovalNote = {\n * note: 'this is my note',\n * }\n * const createdFormSubmissionApprovalNote =\n * await approvalsService.createApprovalAdditionalNote({\n * formSubmissionApprovalId,\n * newFormSubmissionApprovalNote,\n * })\n * ```\n *\n * @param options\n * @returns\n */\nexport async function createApprovalAdditionalNote({\n formSubmissionApprovalId,\n newFormSubmissionApprovalNote,\n abortSignal,\n}: {\n formSubmissionApprovalId: string\n newFormSubmissionApprovalNote: ApprovalTypes.NewFormSubmissionApprovalNote\n abortSignal?: AbortSignal\n}): Promise<ApprovalTypes.FormSubmissionApprovalNote> {\n try {\n return await postRequest<ApprovalTypes.FormSubmissionApprovalNote>(\n `${tenants.current.apiOrigin}/form-submission-approvals/${formSubmissionApprovalId}/additional-notes`,\n newFormSubmissionApprovalNote,\n abortSignal,\n )\n } catch (err) {\n console.error('Error creating form submission approval note', err)\n if (abortSignal?.aborted) {\n throw err\n }\n\n Sentry.captureException(err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot create additional notes without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\n/**\n * Update an additional note for a form submission approval.\n *\n * #### Example\n *\n * ```js\n * const formSubmissionApprovalId = 'd96ff812-f263-4a66-868d-e259a1fe4157'\n * const formSubmissionApprovalNote = {\n * id: '1e84dee3-0dc0-4abe-b2cf-d15d62fd9d0b',\n * note: 'this is my note',\n * createdAt: '2022-06-24T03:16:34.696Z',\n * createdBy: {\n * username: 'user@domain.com',\n * },\n * updatedAt: '2022-06-24T03:16:34.696Z',\n * lastUpdatedBy: {\n * username: 'user@domain.com',\n * },\n * }\n * const updatedFormSubmissionApprovalNote =\n * await approvalsService.updateApprovalAdditionalNote({\n * formSubmissionApprovalId,\n * formSubmissionApprovalNote,\n * })\n * ```\n *\n * @param options\n * @returns\n */\nexport async function updateApprovalAdditionalNote({\n formSubmissionApprovalId,\n formSubmissionApprovalNote,\n abortSignal,\n}: {\n formSubmissionApprovalId: string\n formSubmissionApprovalNote: ApprovalTypes.FormSubmissionApprovalNote\n abortSignal?: AbortSignal\n}): Promise<ApprovalTypes.FormSubmissionApprovalNote> {\n try {\n return await putRequest<ApprovalTypes.FormSubmissionApprovalNote>(\n `${tenants.current.apiOrigin}/form-submission-approvals/${formSubmissionApprovalId}/additional-notes/${formSubmissionApprovalNote.id}`,\n formSubmissionApprovalNote,\n abortSignal,\n )\n } catch (err) {\n console.error('Error updating form submission approval note', err)\n if (abortSignal?.aborted) {\n throw err\n }\n\n Sentry.captureException(err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot update additional notes without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\n/**\n * Delete an additional note for a form submission approval.\n *\n * #### Example\n *\n * ```js\n * const formSubmissionApprovalId = 'd96ff812-f263-4a66-868d-e259a1fe4157'\n * const formSubmissionApprovalNoteId = '1e84dee3-0dc0-4abe-b2cf-d15d62fd9d0b',\n * const updatedFormSubmissionApprovalNote =\n * await approvalsService.deleteApprovalAdditionalNote({\n * formSubmissionApprovalId,\n * formSubmissionApprovalNoteId,\n * })\n * ```\n *\n * @param options\n * @returns\n */\nexport async function deleteApprovalAdditionalNote({\n formSubmissionApprovalId,\n formSubmissionApprovalNoteId,\n abortSignal,\n}: {\n formSubmissionApprovalId: string\n formSubmissionApprovalNoteId: string\n abortSignal?: AbortSignal\n}): Promise<void> {\n try {\n return await deleteRequest(\n `${tenants.current.apiOrigin}/form-submission-approvals/${formSubmissionApprovalId}/additional-notes/${formSubmissionApprovalNoteId}`,\n abortSignal,\n )\n } catch (err) {\n console.error('Error updating form submission approval note', err)\n if (abortSignal?.aborted) {\n throw err\n }\n\n Sentry.captureException(err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot delete additional notes without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\n/**\n * Get the status of a single FormSubmissionApproval for the given id.\n *\n * #### Example\n *\n * ```js\n * const formSubmissionApprovalId = 'd27966cc-128d-48a2-b681-6ad52012e113'\n * const { status } =\n * await approvalsService.getFormSubmissionApprovalStatus(\n * formSubmissionApprovalId,\n * )\n * ```\n *\n * @param formSubmissionApprovalId\n * @param abortSignal\n * @returns\n */\nexport async function getFormSubmissionApprovalStatus(\n formSubmissionApprovalId: string,\n abortSignal?: AbortSignal,\n): Promise<{ status: ApprovalTypes.NewFormSubmissionApproval['status'] }> {\n try {\n const result = await getRequest<{\n status: ApprovalTypes.NewFormSubmissionApproval['status']\n }>(\n `${tenants.current.apiOrigin}/form-submission-approvals/${formSubmissionApprovalId}/status`,\n abortSignal,\n )\n return result\n } catch (err) {\n Sentry.captureException(err)\n console.error('Error retrieving form submission approval status', err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline and do not have a local copy of this app available, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot action this pending submission without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\nconst possibleStatuses = [\n {\n label: 'Awaiting Approval',\n value: 'PENDING',\n },\n {\n label: 'Approved',\n value: 'APPROVED',\n },\n {\n label: 'Clarification Requested',\n value: 'CLARIFICATION_REQUIRED',\n },\n {\n label: 'Clarification Received',\n value: 'CLARIFICATION_RECEIVED',\n },\n {\n label: 'Denied',\n value: 'CLOSED',\n },\n]\n\nfunction findLatestFormSubmissionApproval(\n flowInstanceNode: ReturnType<typeof getFormApprovalFlowInstanceNodes>[0],\n formSubmissionApprovals: ApprovalTypes.FormSubmissionApproval[],\n) {\n return formSubmissionApprovals.reduce<\n ApprovalTypes.FormSubmissionApproval | undefined\n >((lastUpdatedFormSubmissionApproval, formSubmissionApproval) => {\n if (\n formSubmissionApproval.stepLabel === flowInstanceNode.label &&\n (!lastUpdatedFormSubmissionApproval ||\n lastUpdatedFormSubmissionApproval.updatedAt <\n formSubmissionApproval.updatedAt)\n ) {\n return formSubmissionApproval\n }\n return lastUpdatedFormSubmissionApproval\n }, undefined)\n}\n\nfunction getFormApprovalFlowInstanceNodes(\n steps: ApprovalTypes.FormApprovalFlowInstanceStep[],\n) {\n return steps.reduce<\n Array<\n ApprovalTypes.FormApprovalFlowInstanceNode &\n Pick<\n ApprovalTypes.FlowInstanceNodeMeta,\n | 'parentStepLabelsId'\n | 'isConcurrentWithPrevious'\n | 'isConcurrentWithNext'\n >\n >\n >((memo, step) => {\n switch (step.type) {\n case 'CONCURRENT': {\n const parentStepLabelsId = step.nodes\n .map(({ label }) => label)\n .join('_')\n for (const node of step.nodes) {\n const index = step.nodes.indexOf(node)\n memo.push({\n ...node,\n parentStepLabelsId,\n isConcurrentWithPrevious: index !== 0,\n isConcurrentWithNext: index < step.nodes.length - 1,\n })\n }\n break\n }\n case 'STANDARD':\n default: {\n memo.push({\n ...step,\n isConcurrentWithPrevious: false,\n isConcurrentWithNext: false,\n parentStepLabelsId: step.label,\n })\n break\n }\n }\n return memo\n }, [])\n}\n\n/**\n * Inputs a form approval flow instance and set of form submission approvals and\n * returns a flattened array of nodes/steps with inlcuded metadata.\n *\n * #### Example\n *\n * ```js\n * const formApprovalFlowInstance = {\n * steps: [\n * {\n * type: 'STANDARD',\n * group: 'oneblink:administrator',\n * isSkipped: false,\n * label: 'Manager Approval',\n * approvalFormId: '1234',\n * },\n * {\n * type: 'CONCURRENT',\n * nodes: [\n * {\n * label: 'HR Review',\n * group: 'oneblink:administrator',\n * isSkipped: false,\n * approvalFormId: '1234',\n * },\n * {\n * label: 'Finance Review',\n * group: 'oneblink:administrator',\n * isSkipped: false,\n * approvalFormId: '1234',\n * },\n * ],\n * },\n * ],\n * }\n *\n * const formSubmissionApprovals = [\n * {\n * id: 'approval1',\n * stepLabel: 'Manager Approval',\n * status: 'APPROVED',\n * createdAt: '2024-03-20T10:00:00Z',\n * updatedAt: '2024-03-20T10:00:00Z',\n * updatedBy: 'fake@fake.com',\n * group: 'oneblink:administrator',\n * approvalFormId: '1234',\n * },\n * ]\n *\n * const nodesWithMeta = getFlowInstanceNodesWithMeta(\n * formApprovalFlowInstance,\n * formSubmissionApprovals,\n * )\n * ```\n *\n * @param formApprovalFlowInstance\n * @param formSubmissionApprovals\n * @returns ApprovalTypes.FlowInstanceNodeWithMeta[]\n */\nexport function getFlowInstanceNodesWithMeta(\n formApprovalFlowInstance: ApprovalTypes.FormApprovalFlowInstance,\n formSubmissionApprovals: ApprovalTypes.FormSubmissionApproval[],\n): ApprovalTypes.FlowInstanceNodeWithMeta[] {\n const formApprovalFlowInstanceNodes = getFormApprovalFlowInstanceNodes(\n formApprovalFlowInstance.steps,\n )\n let isDenied = false\n let isClarificationRequired = false\n return formApprovalFlowInstanceNodes.map((step) => {\n const associatedApproval = findLatestFormSubmissionApproval(\n step,\n formSubmissionApprovals,\n )\n const status = possibleStatuses.find(\n ({ value }) => value === associatedApproval?.status,\n )\n\n let isDeniedInConcurrentStep = false\n let isClarificationRequiredInConcurrentStep = false\n if (status?.value === 'PENDING') {\n const siblingNodes = formApprovalFlowInstanceNodes.filter(\n ({ parentStepLabelsId, label }) =>\n parentStepLabelsId === step.parentStepLabelsId &&\n label !== step.label,\n )\n for (const siblingNode of siblingNodes) {\n const formSubmissionApproval = findLatestFormSubmissionApproval(\n siblingNode,\n formSubmissionApprovals,\n )\n if (formSubmissionApproval?.status === 'CLOSED') {\n isDeniedInConcurrentStep = true\n }\n if (formSubmissionApproval?.status === 'CLARIFICATION_REQUIRED') {\n isClarificationRequiredInConcurrentStep = true\n }\n }\n }\n\n const isAfterDeniedStep = isDenied\n if (status?.value === 'CLOSED') {\n isDenied = true\n }\n\n const isAfterClarificationRequiredStep = isClarificationRequired\n if (status?.value === 'CLARIFICATION_REQUIRED') {\n isClarificationRequired = true\n }\n\n let description = 'Awaiting previous approvals'\n if (step.isSkipped) {\n description = 'Skipped based on form submission'\n } else if (status) {\n const updatedByText = associatedApproval?.updatedBy\n ? ` by ${associatedApproval.updatedBy}`\n : ''\n description = `${status.label}${updatedByText}`\n } else if (isAfterDeniedStep) {\n description = 'Denied in a previous step'\n } else if (isAfterClarificationRequiredStep) {\n description = 'Sent for clarification in a previous step'\n }\n\n return {\n ...step,\n status,\n isDeniedInConcurrentStep,\n isAfterDeniedStep,\n isClarificationRequiredInConcurrentStep,\n isAfterClarificationRequiredStep,\n description,\n }\n })\n}\n"]}
1
+ {"version":3,"file":"approvals-service.js","sourceRoot":"","sources":["../../src/apps/approvals-service.ts"],"names":[],"mappings":"AACA,OAAO,iBAAiB,MAAM,qCAAqC,CAAA;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EACL,aAAa,EACb,UAAU,EACV,UAAU,EACV,aAAa,EACb,WAAW,GAEZ,MAAM,kBAAkB,CAAA;AACzB,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,EAAE,4BAA4B,EAAE,MAAM,0CAA0C,CAAA;AA2CvF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,UAAkB,EAClB,WAAyB;IAEzB,IAAI,CAAC;QACH,OAAO,MAAM,UAAU,CACrB,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,eAAe,UAAU,eAAe,EACpE,WAAW,CACZ,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;QAC5B,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,GAAG,CAAC,CAAA;QAChE,MAAM,KAAK,GAAG,GAAgB,CAAA;QAC9B,IAAI,SAAS,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,iBAAiB,CACzB,4HAA4H,EAC5H;gBACE,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,IAAI;aAChB,CACF,CAAA;QACH,CAAC;QACD,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,8FAA8F,EAC9F;oBACE,aAAa,EAAE,KAAK;oBACpB,aAAa,EAAE,IAAI;oBACnB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,oHAAoH,EACpH;oBACE,aAAa,EAAE,KAAK;oBACpB,qBAAqB,EAAE,IAAI;oBAC3B,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE;oBACzC,KAAK,EAAE,iBAAiB;oBACxB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,iBAAiB,CACzB,gFAAgF,EAChF;oBACE,aAAa,EAAE,KAAK;oBACpB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,wBAAgC,EAChC,WAAyB;IAEzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,8BAA8B,wBAAwB,EAAE,EACpF,WAAW,CACZ,CAAA;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;QAC5B,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,GAAG,CAAC,CAAA;QAE/D,MAAM,KAAK,GAAG,GAAgB,CAAA;QAC9B,IAAI,SAAS,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,iBAAiB,CACzB,4HAA4H,EAC5H;gBACE,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,IAAI;aAChB,CACF,CAAA;QACH,CAAC;QACD,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,iGAAiG,EACjG;oBACE,aAAa,EAAE,KAAK;oBACpB,aAAa,EAAE,IAAI;oBACnB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,oHAAoH,EACpH;oBACE,aAAa,EAAE,KAAK;oBACpB,qBAAqB,EAAE,IAAI;oBAC3B,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE;oBACzC,KAAK,EAAE,iBAAiB;oBACxB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,iBAAiB,CACzB,gFAAgF,EAChF;oBACE,aAAa,EAAE,KAAK;oBACpB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,sBAA4D,EAC5D,WAAyB;IAEzB,IAAI,CAAC;QACH,OAAO,MAAM,UAAU,CACrB,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,8BAA8B,sBAAsB,CAAC,EAAE,EAAE,EACrF,sBAAsB,EACtB,WAAW,CACZ,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;QAC5B,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,GAAG,CAAC,CAAA;QAE7D,MAAM,KAAK,GAAG,GAAgB,CAAA;QAC9B,IAAI,SAAS,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,iBAAiB,CACzB,yEAAyE,EACzE;gBACE,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,IAAI;aAChB,CACF,CAAA;QACH,CAAC;QACD,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,iGAAiG,EACjG;oBACE,aAAa,EAAE,KAAK;oBACpB,aAAa,EAAE,IAAI;oBACnB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,oHAAoH,EACpH;oBACE,aAAa,EAAE,KAAK;oBACpB,qBAAqB,EAAE,IAAI;oBAC3B,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE;oBACzC,KAAK,EAAE,iBAAiB;oBACxB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,iBAAiB,CACzB,gFAAgF,EAChF;oBACE,aAAa,EAAE,KAAK;oBACpB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,8BAA8B,CAAA;AAE1E;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,EACE,0BAA0B,EAC1B,GAAG,OAAO,EAOX,EACD,WAAyB;IAEzB,OAAO,CAAC,GAAG,CAAC,uCAAuC,EAAE;QACnD,0BAA0B;QAC1B,GAAG,OAAO;KACX,CAAC,CAAA;IACF,IAAI,CAAC;QACH,OAAO,MAAM,WAAW,CACtB,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,iCAAiC,0BAA0B,SAAS,EAChG,OAAO,EACP,WAAW,CACZ,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,GAAG,CAAC,CAAA;QACjE,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;QAE5B,MAAM,KAAK,GAAG,GAAgB,CAAA;QAC9B,IAAI,SAAS,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,iBAAiB,CACzB,yEAAyE,EACzE;gBACE,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,IAAI;aAChB,CACF,CAAA;QACH,CAAC;QACD,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,uFAAuF,EACvF;oBACE,aAAa,EAAE,KAAK;oBACpB,aAAa,EAAE,IAAI;oBACnB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,iHAAiH,EACjH;oBACE,aAAa,EAAE,KAAK;oBACpB,qBAAqB,EAAE,IAAI;oBAC3B,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE;oBACzC,KAAK,EAAE,iBAAiB;oBACxB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,iBAAiB,CACzB,gFAAgF,EAChF;oBACE,aAAa,EAAE,KAAK;oBACpB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,EACE,0BAA0B,EAC1B,GAAG,OAAO,EAOX,EACD,WAAyB;IAEzB,OAAO,CAAC,GAAG,CAAC,qCAAqC,EAAE;QACjD,0BAA0B;QAC1B,GAAG,OAAO;KACX,CAAC,CAAA;IACF,IAAI,CAAC;QACH,OAAO,MAAM,WAAW,CACtB,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,iCAAiC,0BAA0B,QAAQ,EAC/F,OAAO,EACP,WAAW,CACZ,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,2CAA2C,EAAE,GAAG,CAAC,CAAA;QAC7D,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;QAE5B,MAAM,KAAK,GAAG,GAAgB,CAAA;QAC9B,IAAI,SAAS,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,iBAAiB,CACzB,yEAAyE,EACzE;gBACE,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,IAAI;aAChB,CACF,CAAA;QACH,CAAC;QACD,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,sFAAsF,EACtF;oBACE,aAAa,EAAE,KAAK;oBACpB,aAAa,EAAE,IAAI;oBACnB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,iHAAiH,EACjH;oBACE,aAAa,EAAE,KAAK;oBACpB,qBAAqB,EAAE,IAAI;oBAC3B,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE;oBACzC,KAAK,EAAE,iBAAiB;oBACxB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,iBAAiB,CACzB,gFAAgF,EAChF;oBACE,aAAa,EAAE,KAAK;oBACpB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAMD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,UAAkB,EAClB,WAAyB;IAEzB,IAAI,CAAC;QACH,OAAO,MAAM,UAAU,CACrB,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,eAAe,UAAU,sBAAsB,EAC3E,WAAW,CACZ,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;QAC5B,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAA;QAE1D,MAAM,KAAK,GAAG,GAAgB,CAAA;QAC9B,IAAI,SAAS,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,iBAAiB,CACzB,yEAAyE,EACzE;gBACE,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,IAAI;aAChB,CACF,CAAA;QACH,CAAC;QACD,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,6FAA6F,EAC7F;oBACE,aAAa,EAAE,KAAK;oBACpB,aAAa,EAAE,IAAI;oBACnB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,oHAAoH,EACpH;oBACE,aAAa,EAAE,KAAK;oBACpB,qBAAqB,EAAE,IAAI;oBAC3B,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE;oBACzC,KAAK,EAAE,iBAAiB;oBACxB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,iBAAiB,CACzB,gFAAgF,EAChF;oBACE,aAAa,EAAE,KAAK;oBACpB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,KAAK,UAAU,wCAAwC,CAC5D,EACE,UAAU,EACV,GAAG,IAAI,EAgBR,EACD,WAAyB;IAEzB,IAAI,CAAC;QACH,OAAO,MAAM,aAAa,CACxB,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,eAAe,UAAU,YAAY,EACjE;YACE,GAAG,IAAI;SACR,EACD,WAAW,CACZ,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;QAC5B,OAAO,CAAC,KAAK,CACX,0DAA0D,EAC1D,GAAG,CACJ,CAAA;QAED,MAAM,KAAK,GAAG,GAAgB,CAAA;QAC9B,IAAI,SAAS,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,iBAAiB,CACzB,4HAA4H,EAC5H;gBACE,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,IAAI;aAChB,CACF,CAAA;QACH,CAAC;QACD,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,iFAAiF,EACjF;oBACE,aAAa,EAAE,KAAK;oBACpB,aAAa,EAAE,IAAI;oBACnB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,oHAAoH,EACpH;oBACE,aAAa,EAAE,KAAK;oBACpB,qBAAqB,EAAE,IAAI;oBAC3B,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE;oBACzC,KAAK,EAAE,iBAAiB;oBACxB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,iBAAiB,CACzB,gFAAgF,EAChF;oBACE,aAAa,EAAE,KAAK;oBACpB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAKD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,UAAkB,EAClB,WAAyB;IAEzB,IAAI,CAAC;QACH,OAAO,MAAM,UAAU,CACrB,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,eAAe,UAAU,sBAAsB,EAC3E,WAAW,CACZ,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;QAC5B,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,GAAG,CAAC,CAAA;QAE9D,MAAM,KAAK,GAAG,GAAgB,CAAA;QAC9B,IAAI,SAAS,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,iBAAiB,CACzB,yEAAyE,EACzE;gBACE,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,IAAI;aAChB,CACF,CAAA;QACH,CAAC;QACD,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,iGAAiG,EACjG;oBACE,aAAa,EAAE,KAAK;oBACpB,aAAa,EAAE,IAAI;oBACnB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,oHAAoH,EACpH;oBACE,aAAa,EAAE,KAAK;oBACpB,qBAAqB,EAAE,IAAI;oBAC3B,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE;oBACzC,KAAK,EAAE,iBAAiB;oBACxB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,iBAAiB,CACzB,gFAAgF,EAChF;oBACE,aAAa,EAAE,KAAK;oBACpB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,EACjD,wBAAwB,EACxB,6BAA6B,EAC7B,WAAW,GAKZ;IACC,IAAI,CAAC;QACH,OAAO,MAAM,WAAW,CACtB,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,8BAA8B,wBAAwB,mBAAmB,EACrG,6BAA6B,EAC7B,WAAW,CACZ,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,GAAG,CAAC,CAAA;QAClE,IAAI,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,EAAE,CAAC;YACzB,MAAM,GAAG,CAAA;QACX,CAAC;QAED,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;QAE5B,MAAM,KAAK,GAAG,GAAgB,CAAA;QAC9B,IAAI,SAAS,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,iBAAiB,CACzB,yEAAyE,EACzE;gBACE,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,IAAI;aAChB,CACF,CAAA;QACH,CAAC;QACD,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,0FAA0F,EAC1F;oBACE,aAAa,EAAE,KAAK;oBACpB,aAAa,EAAE,IAAI;oBACnB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,oHAAoH,EACpH;oBACE,aAAa,EAAE,KAAK;oBACpB,qBAAqB,EAAE,IAAI;oBAC3B,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE;oBACzC,KAAK,EAAE,iBAAiB;oBACxB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,iBAAiB,CACzB,gFAAgF,EAChF;oBACE,aAAa,EAAE,KAAK;oBACpB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,EACjD,wBAAwB,EACxB,0BAA0B,EAC1B,WAAW,GAKZ;IACC,IAAI,CAAC;QACH,OAAO,MAAM,UAAU,CACrB,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,8BAA8B,wBAAwB,qBAAqB,0BAA0B,CAAC,EAAE,EAAE,EACtI,0BAA0B,EAC1B,WAAW,CACZ,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,GAAG,CAAC,CAAA;QAClE,IAAI,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,EAAE,CAAC;YACzB,MAAM,GAAG,CAAA;QACX,CAAC;QAED,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;QAE5B,MAAM,KAAK,GAAG,GAAgB,CAAA;QAC9B,IAAI,SAAS,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,iBAAiB,CACzB,yEAAyE,EACzE;gBACE,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,IAAI;aAChB,CACF,CAAA;QACH,CAAC;QACD,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,0FAA0F,EAC1F;oBACE,aAAa,EAAE,KAAK;oBACpB,aAAa,EAAE,IAAI;oBACnB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,oHAAoH,EACpH;oBACE,aAAa,EAAE,KAAK;oBACpB,qBAAqB,EAAE,IAAI;oBAC3B,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE;oBACzC,KAAK,EAAE,iBAAiB;oBACxB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,iBAAiB,CACzB,gFAAgF,EAChF;oBACE,aAAa,EAAE,KAAK;oBACpB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,EACjD,wBAAwB,EACxB,4BAA4B,EAC5B,WAAW,GAKZ;IACC,IAAI,CAAC;QACH,OAAO,MAAM,aAAa,CACxB,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,8BAA8B,wBAAwB,qBAAqB,4BAA4B,EAAE,EACrI,WAAW,CACZ,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,GAAG,CAAC,CAAA;QAClE,IAAI,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,EAAE,CAAC;YACzB,MAAM,GAAG,CAAA;QACX,CAAC;QAED,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;QAE5B,MAAM,KAAK,GAAG,GAAgB,CAAA;QAC9B,IAAI,SAAS,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,iBAAiB,CACzB,yEAAyE,EACzE;gBACE,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,IAAI;aAChB,CACF,CAAA;QACH,CAAC;QACD,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,0FAA0F,EAC1F;oBACE,aAAa,EAAE,KAAK;oBACpB,aAAa,EAAE,IAAI;oBACnB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,oHAAoH,EACpH;oBACE,aAAa,EAAE,KAAK;oBACpB,qBAAqB,EAAE,IAAI;oBAC3B,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE;oBACzC,KAAK,EAAE,iBAAiB;oBACxB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,iBAAiB,CACzB,gFAAgF,EAChF;oBACE,aAAa,EAAE,KAAK;oBACpB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,wBAAgC,EAChC,WAAyB;IAEzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAG7B,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,8BAA8B,wBAAwB,SAAS,EAC3F,WAAW,CACZ,CAAA;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAA;QAC5B,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,GAAG,CAAC,CAAA;QAEtE,MAAM,KAAK,GAAG,GAAgB,CAAA;QAC9B,IAAI,SAAS,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,iBAAiB,CACzB,4HAA4H,EAC5H;gBACE,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,IAAI;aAChB,CACF,CAAA;QACH,CAAC;QACD,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,iGAAiG,EACjG;oBACE,aAAa,EAAE,KAAK;oBACpB,aAAa,EAAE,IAAI;oBACnB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CACzB,oHAAoH,EACpH;oBACE,aAAa,EAAE,KAAK;oBACpB,qBAAqB,EAAE,IAAI;oBAC3B,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;YACD,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC,CAAC,CAAC;gBACT,MAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,OAAO,EAAE;oBACzC,KAAK,EAAE,iBAAiB;oBACxB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,IAAI,iBAAiB,CACzB,gFAAgF,EAChF;oBACE,aAAa,EAAE,KAAK;oBACpB,cAAc,EAAE,KAAK,CAAC,MAAM;iBAC7B,CACF,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import { SubmissionTypes, ApprovalTypes, FormTypes } from '@oneblink/types'\nimport OneBlinkAppsError from './services/errors/oneBlinkAppsError'\nimport { isOffline } from './offline-service'\nimport {\n deleteRequest,\n getRequest,\n putRequest,\n searchRequest,\n postRequest,\n HTTPError,\n} from './services/fetch'\nimport tenants from './tenants'\nimport Sentry from './Sentry'\nexport { getFlowInstanceNodesWithMeta } from '../services/getFlowInstanceNodesWithMeta'\n\nexport type FormSubmissionApprovalsResponse = {\n approvals: Array<{\n formSubmissionApproval: ApprovalTypes.FormSubmissionApproval\n formApprovalFlowInstance: ApprovalTypes.FormApprovalFlowInstance\n formSubmissionMeta: SubmissionTypes.FormSubmissionMeta\n latestSuccessfulFormSubmissionPayment:\n | SubmissionTypes.FormSubmissionPayment\n | undefined\n }>\n}\n\nexport type FormApprovalFlowInstanceHistory = {\n formApprovalFlowInstance: ApprovalTypes.FormApprovalFlowInstance\n formSubmissionMeta: SubmissionTypes.FormSubmissionMeta\n formSubmissionMetaEdits: SubmissionTypes.FormSubmissionMetaEdit[]\n formSubmissionApprovals: ApprovalTypes.FormSubmissionApproval[]\n successfulFormSubmissionPayment?: SubmissionTypes.FormSubmissionPayment\n}\n\nexport type FormSubmissionApprovalResponse = {\n formSubmissionMeta: SubmissionTypes.FormSubmissionMeta\n formApprovalFlowInstance: ApprovalTypes.FormApprovalFlowInstance\n formSubmissionApproval: ApprovalTypes.FormSubmissionApproval\n form: FormTypes.Form\n successfulFormSubmissionPayment?: SubmissionTypes.FormSubmissionPayment\n history: FormApprovalFlowInstanceHistory[]\n}\n\nexport type FormSubmissionsAdministrationApprovalsResponse = {\n approvals: Array<\n FormApprovalFlowInstanceHistory & {\n history: Array<FormApprovalFlowInstanceHistory>\n }\n >\n meta: {\n limit: number\n offset: number\n nextOffset?: number\n }\n}\n\n/**\n * Get an Object containing FormSubmissionApprovals assigned to the current user\n * and the Form definitions in those approvals.\n *\n * #### Example\n *\n * ```js\n * const formsAppId = 1\n * const {\n * formSubmissionApprovals,\n * formApprovalFlowInstances,\n * forms,\n * formSubmissionMeta,\n * } = await approvalsService.getFormSubmissionApprovals(formAppId)\n * ```\n *\n * @param formsAppId\n * @param abortSignal\n * @returns\n */\nexport async function getFormSubmissionApprovals(\n formsAppId: number,\n abortSignal?: AbortSignal,\n): Promise<FormSubmissionApprovalsResponse> {\n try {\n return await getRequest<FormSubmissionApprovalsResponse>(\n `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/my-approvals`,\n abortSignal,\n )\n } catch (err) {\n Sentry.captureException(err)\n console.error('Error retrieving form submission approvals', err)\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline and do not have a local copy of this app available, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot view your pending approvals without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\n/**\n * Get a single FormSubmissionApproval belonging to the given id.\n *\n * #### Example\n *\n * ```js\n * const formSubmissionApprovalId = 'd27966cc-128d-48a2-b681-6ad52012e113'\n * const {\n * formSubmissionApproval,\n * formApprovalFlowInstance,\n * formSubmissionMeta,\n * form,\n * history,\n * } = await approvalsService.getFormSubmissionApproval(\n * formSubmissionApprovalId,\n * )\n * ```\n *\n * @param formSubmissionApprovalId\n * @param abortSignal\n * @returns\n */\nexport async function getFormSubmissionApproval(\n formSubmissionApprovalId: string,\n abortSignal?: AbortSignal,\n): Promise<FormSubmissionApprovalResponse> {\n try {\n const result = await getRequest<FormSubmissionApprovalResponse>(\n `${tenants.current.apiOrigin}/form-submission-approvals/${formSubmissionApprovalId}`,\n abortSignal,\n )\n return result\n } catch (err) {\n Sentry.captureException(err)\n console.error('Error retrieving form submission approval', err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline and do not have a local copy of this app available, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot action this pending submission without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\n/**\n * Update a single FormSubmissionApproval assigned to the current user.\n *\n * #### Example\n *\n * ```js\n * const formSubmissionApproval = {\n * id: 'd27966cc-128d-48a2-b681-6ad52012e113',\n * status: 'APPROVED',\n * username: 'email@example.com',\n * formApprovalFlowInstanceId: 1,\n * notificationEmailAddress: 'email@example.com',\n * notes: 'Great work!!!',\n * internalNotes: 'It was not really that great...',\n * cannedResponseKey: 'my_canned_response_key',\n * createdAt: '2021-02-21T22:57:56.257Z',\n * updatedAt: '2021-02-21T22:57:56.257Z',\n * }\n * const updatedFormSubmissionApproval =\n * await approvalsService.updateFormSubmissionApproval(\n * formSubmissionApproval,\n * )\n * ```\n *\n * @param formSubmissionApproval\n * @param abortSignal\n * @returns\n */\nexport async function updateFormSubmissionApproval(\n formSubmissionApproval: ApprovalTypes.FormSubmissionApproval,\n abortSignal?: AbortSignal,\n): Promise<ApprovalTypes.FormSubmissionApproval> {\n try {\n return await putRequest<ApprovalTypes.FormSubmissionApproval>(\n `${tenants.current.apiOrigin}/form-submission-approvals/${formSubmissionApproval.id}`,\n formSubmissionApproval,\n abortSignal,\n )\n } catch (err) {\n Sentry.captureException(err)\n console.error('Error updating form submission approval', err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot action this pending submission without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404:\n case 409: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\n/**\n * @deprecated Use \"reopenFormApprovalFlowInstance()\" instead\n * @internal\n */\nexport const reopenFormSubmissionApproval = reopenFormApprovalFlowInstance\n\n/**\n * As an administrator, reopen a submission that has been approved or denied.\n *\n * #### Example\n *\n * ```js\n * await approvalsService.reopenFormApprovalFlowInstance({\n * formApprovalFlowInstanceId: 1,\n * notificationEmailAddress: 'email@example.com',\n * notes: 'Great work!!!',\n * internalNotes: 'It was not really that great...',\n * cannedResponseKey: 'my_canned_response_key',\n * })\n * ```\n *\n * @param options\n * @param abortSignal\n * @returns\n */\nexport async function reopenFormApprovalFlowInstance(\n {\n formApprovalFlowInstanceId,\n ...payload\n }: {\n formApprovalFlowInstanceId: number\n notificationEmailAddress: string\n notes: string\n internalNotes?: string\n cannedResponseKey?: string\n },\n abortSignal?: AbortSignal,\n): Promise<ApprovalTypes.FormSubmissionApproval> {\n console.log('Reopening form approval flow instance', {\n formApprovalFlowInstanceId,\n ...payload,\n })\n try {\n return await postRequest<ApprovalTypes.FormSubmissionApproval>(\n `${tenants.current.apiOrigin}/form-approval-flow-instances/${formApprovalFlowInstanceId}/reopen`,\n payload,\n abortSignal,\n )\n } catch (err) {\n console.error('Error reopening form approval flow instance', err)\n Sentry.captureException(err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot reopen this approval without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this approval. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404:\n case 409: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\n/**\n * As an administrator, close a submission that has been approved.\n *\n * #### Example\n *\n * ```js\n * await approvalsService.closeFormApprovalFlowInstance({\n * formApprovalFlowInstanceId: 1,\n * notificationEmailAddress: ['email@example.com'],\n * notes: 'Great work!!!',\n * internalNotes: 'It was not really that great...',\n * cannedResponseKey: 'my_canned_response_key',\n * })\n * ```\n *\n * @param options\n * @param abortSignal\n * @returns\n */\nexport async function closeFormApprovalFlowInstance(\n {\n formApprovalFlowInstanceId,\n ...payload\n }: {\n formApprovalFlowInstanceId: number\n notificationEmailAddress?: string[]\n notes?: string\n internalNotes?: string\n cannedResponseKey?: string\n },\n abortSignal?: AbortSignal,\n): Promise<ApprovalTypes.FormSubmissionApproval> {\n console.log('Closing form approval flow instance', {\n formApprovalFlowInstanceId,\n ...payload,\n })\n try {\n return await postRequest<ApprovalTypes.FormSubmissionApproval>(\n `${tenants.current.apiOrigin}/form-approval-flow-instances/${formApprovalFlowInstanceId}/close`,\n payload,\n abortSignal,\n )\n } catch (err) {\n console.log('Error closing form approval flow instance', err)\n Sentry.captureException(err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot close this approval without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this approval. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404:\n case 409: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\nexport type FormApprovalFlowResponse = {\n forms: FormTypes.Form[]\n}\n\nexport async function getFormApprovalFlows(\n formsAppId: number,\n abortSignal?: AbortSignal,\n): Promise<FormApprovalFlowResponse> {\n try {\n return await getRequest<FormApprovalFlowResponse>(\n `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/form-approval-flows`,\n abortSignal,\n )\n } catch (err) {\n Sentry.captureException(err)\n console.error('Error retrieving form approval flows', err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot access form approval flows without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\n/**\n * Get an Object containing approvals for the app regardless of approval groups\n * and meta for paging. Must be an Approvals Administrator.\n *\n * #### Example\n *\n * ```js\n * const formsAppId = 1\n * const limit = 50\n * const offset = 0\n * const { approvals, meta } =\n * await approvalsService.getFormSubmissionAdministrationApprovals({\n * formAppId,\n * limit,\n * offset,\n * })\n * ```\n *\n * @param options\n * @param abortSignal\n * @returns\n */\nexport async function getFormSubmissionAdministrationApprovals(\n {\n formsAppId,\n ...rest\n }: {\n formsAppId: number\n formId?: number\n externalId?: string\n submissionId?: string\n formApprovalFlowInstanceId?: number\n submittedAfterDateTime?: string\n submittedBeforeDateTime?: string\n limit: number\n offset: number\n statuses?: string[]\n updatedAfterDateTime?: string\n updatedBeforeDateTime?: string\n lastUpdatedBy?: string[]\n submissionTitle?: string\n },\n abortSignal?: AbortSignal,\n): Promise<FormSubmissionsAdministrationApprovalsResponse> {\n try {\n return await searchRequest<FormSubmissionsAdministrationApprovalsResponse>(\n `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/approvals`,\n {\n ...rest,\n },\n abortSignal,\n )\n } catch (err) {\n Sentry.captureException(err)\n console.error(\n 'Error retrieving administrator form submission approvals',\n err,\n )\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline and do not have a local copy of this app available, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot view approvals without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\nexport type FormApprovalUsernamesResponse = {\n usernames: Array<{ username: string }>\n}\n/**\n * Get an array containing usernames that have updated approvals in the within\n * the formsAppId associated with the passed `formsAppId`. Must be an Approvals\n * Administrator.\n *\n * #### Example\n *\n * ```js\n * const formsAppId = 1\n * const { usernames } =\n * await approvalsService.getFormApprovalUsernames(formsAppId)\n * ```\n *\n * @param formsAppId\n * @param abortSignal\n * @returns\n */\nexport async function getFormApprovalUsernames(\n formsAppId: number,\n abortSignal?: AbortSignal,\n): Promise<FormApprovalUsernamesResponse> {\n try {\n return await getRequest<FormApprovalUsernamesResponse>(\n `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/approvals/usernames`,\n abortSignal,\n )\n } catch (err) {\n Sentry.captureException(err)\n console.error('Error retrieving form approval usernames', err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot access form approval usernames without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\n/**\n * Create an additional note for a form submission approval.\n *\n * #### Example\n *\n * ```js\n * const formSubmissionApprovalId = 'd96ff812-f263-4a66-868d-e259a1fe4157'\n * const newFormSubmissionApprovalNote = {\n * note: 'this is my note',\n * }\n * const createdFormSubmissionApprovalNote =\n * await approvalsService.createApprovalAdditionalNote({\n * formSubmissionApprovalId,\n * newFormSubmissionApprovalNote,\n * })\n * ```\n *\n * @param options\n * @returns\n */\nexport async function createApprovalAdditionalNote({\n formSubmissionApprovalId,\n newFormSubmissionApprovalNote,\n abortSignal,\n}: {\n formSubmissionApprovalId: string\n newFormSubmissionApprovalNote: ApprovalTypes.NewFormSubmissionApprovalNote\n abortSignal?: AbortSignal\n}): Promise<ApprovalTypes.FormSubmissionApprovalNote> {\n try {\n return await postRequest<ApprovalTypes.FormSubmissionApprovalNote>(\n `${tenants.current.apiOrigin}/form-submission-approvals/${formSubmissionApprovalId}/additional-notes`,\n newFormSubmissionApprovalNote,\n abortSignal,\n )\n } catch (err) {\n console.error('Error creating form submission approval note', err)\n if (abortSignal?.aborted) {\n throw err\n }\n\n Sentry.captureException(err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot create additional notes without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\n/**\n * Update an additional note for a form submission approval.\n *\n * #### Example\n *\n * ```js\n * const formSubmissionApprovalId = 'd96ff812-f263-4a66-868d-e259a1fe4157'\n * const formSubmissionApprovalNote = {\n * id: '1e84dee3-0dc0-4abe-b2cf-d15d62fd9d0b',\n * note: 'this is my note',\n * createdAt: '2022-06-24T03:16:34.696Z',\n * createdBy: {\n * username: 'user@domain.com',\n * },\n * updatedAt: '2022-06-24T03:16:34.696Z',\n * lastUpdatedBy: {\n * username: 'user@domain.com',\n * },\n * }\n * const updatedFormSubmissionApprovalNote =\n * await approvalsService.updateApprovalAdditionalNote({\n * formSubmissionApprovalId,\n * formSubmissionApprovalNote,\n * })\n * ```\n *\n * @param options\n * @returns\n */\nexport async function updateApprovalAdditionalNote({\n formSubmissionApprovalId,\n formSubmissionApprovalNote,\n abortSignal,\n}: {\n formSubmissionApprovalId: string\n formSubmissionApprovalNote: ApprovalTypes.FormSubmissionApprovalNote\n abortSignal?: AbortSignal\n}): Promise<ApprovalTypes.FormSubmissionApprovalNote> {\n try {\n return await putRequest<ApprovalTypes.FormSubmissionApprovalNote>(\n `${tenants.current.apiOrigin}/form-submission-approvals/${formSubmissionApprovalId}/additional-notes/${formSubmissionApprovalNote.id}`,\n formSubmissionApprovalNote,\n abortSignal,\n )\n } catch (err) {\n console.error('Error updating form submission approval note', err)\n if (abortSignal?.aborted) {\n throw err\n }\n\n Sentry.captureException(err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot update additional notes without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\n/**\n * Delete an additional note for a form submission approval.\n *\n * #### Example\n *\n * ```js\n * const formSubmissionApprovalId = 'd96ff812-f263-4a66-868d-e259a1fe4157'\n * const formSubmissionApprovalNoteId = '1e84dee3-0dc0-4abe-b2cf-d15d62fd9d0b',\n * const updatedFormSubmissionApprovalNote =\n * await approvalsService.deleteApprovalAdditionalNote({\n * formSubmissionApprovalId,\n * formSubmissionApprovalNoteId,\n * })\n * ```\n *\n * @param options\n * @returns\n */\nexport async function deleteApprovalAdditionalNote({\n formSubmissionApprovalId,\n formSubmissionApprovalNoteId,\n abortSignal,\n}: {\n formSubmissionApprovalId: string\n formSubmissionApprovalNoteId: string\n abortSignal?: AbortSignal\n}): Promise<void> {\n try {\n return await deleteRequest(\n `${tenants.current.apiOrigin}/form-submission-approvals/${formSubmissionApprovalId}/additional-notes/${formSubmissionApprovalNoteId}`,\n abortSignal,\n )\n } catch (err) {\n console.error('Error updating form submission approval note', err)\n if (abortSignal?.aborted) {\n throw err\n }\n\n Sentry.captureException(err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot delete additional notes without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n\n/**\n * Get the status of a single FormSubmissionApproval for the given id.\n *\n * #### Example\n *\n * ```js\n * const formSubmissionApprovalId = 'd27966cc-128d-48a2-b681-6ad52012e113'\n * const { status } =\n * await approvalsService.getFormSubmissionApprovalStatus(\n * formSubmissionApprovalId,\n * )\n * ```\n *\n * @param formSubmissionApprovalId\n * @param abortSignal\n * @returns\n */\nexport async function getFormSubmissionApprovalStatus(\n formSubmissionApprovalId: string,\n abortSignal?: AbortSignal,\n): Promise<{ status: ApprovalTypes.NewFormSubmissionApproval['status'] }> {\n try {\n const result = await getRequest<{\n status: ApprovalTypes.NewFormSubmissionApproval['status']\n }>(\n `${tenants.current.apiOrigin}/form-submission-approvals/${formSubmissionApprovalId}/status`,\n abortSignal,\n )\n return result\n } catch (err) {\n Sentry.captureException(err)\n console.error('Error retrieving form submission approval status', err)\n\n const error = err as HTTPError\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline and do not have a local copy of this app available, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'You cannot action this pending submission without first logging in. Please login and try again.',\n {\n originalError: error,\n requiresLogin: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 403: {\n throw new OneBlinkAppsError(\n 'You do not have access to this application. Please contact your administrator to gain the correct level of access.',\n {\n originalError: error,\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\n )\n }\n case 400:\n case 404: {\n throw new OneBlinkAppsError(error.message, {\n title: 'Invalid Request',\n httpStatusCode: error.status,\n })\n }\n default: {\n throw new OneBlinkAppsError(\n 'An unknown error has occurred. Please contact support if the problem persists.',\n {\n originalError: error,\n httpStatusCode: error.status,\n },\n )\n }\n }\n }\n}\n"]}
@@ -23,11 +23,12 @@ export declare function uploadFormSubmissionEdit({ submission, definition, submi
23
23
  }): Promise<import("@oneblink/storage/dist/http-handlers/types").OneBlinkResponse<{
24
24
  formSubmissionEditId: string;
25
25
  }>>;
26
- export declare function downloadFormSubmission({ formId, submissionId, abortSignal, versionId, }: {
26
+ export declare function downloadFormSubmission({ formId, submissionId, abortSignal, versionId, asSubmitted, }: {
27
27
  formId: number;
28
28
  submissionId: string;
29
29
  abortSignal?: AbortSignal;
30
30
  versionId?: string;
31
+ asSubmitted?: boolean;
31
32
  }): Promise<{
32
33
  data: SubmissionTypes.S3SubmissionData;
33
34
  versionId: string | undefined;
@@ -127,12 +127,13 @@ export async function uploadFormSubmissionEdit({ submission, definition, submiss
127
127
  throw handleError(error);
128
128
  }
129
129
  }
130
- export async function downloadFormSubmission({ formId, submissionId, abortSignal, versionId, }) {
130
+ export async function downloadFormSubmission({ formId, submissionId, abortSignal, versionId, asSubmitted, }) {
131
131
  try {
132
132
  console.log('Attempting to download form submission data:', {
133
133
  formId,
134
134
  submissionId,
135
135
  versionId,
136
+ asSubmitted,
136
137
  });
137
138
  const oneblinkDownloader = generateOneBlinkDownloader();
138
139
  const result = await oneblinkDownloader.downloadSubmission({
@@ -140,6 +141,7 @@ export async function downloadFormSubmission({ formId, submissionId, abortSignal
140
141
  submissionId,
141
142
  abortSignal,
142
143
  versionId,
144
+ asSubmitted,
143
145
  });
144
146
  if (!result) {
145
147
  throw new OneBlinkAppsError("This submission has been removed based on your administrator's retention policy.", {