@oneblink/apps-react 9.0.2-beta.2 → 9.1.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -391,6 +391,50 @@ async function getFormElementOptionsSetOptions(formElementOptionsSet, { formsApp
391
391
  };
392
392
  }
393
393
  }
394
+ case 'SALESFORCE_PICKLIST': {
395
+ const formElementOptionSetEnvironmentSalesforcePicklist = formElementOptionsSet.environments.find((environment) => environment.formsAppEnvironmentId === formsAppEnvironmentId);
396
+ if (!formElementOptionSetEnvironmentSalesforcePicklist) {
397
+ return {
398
+ type: 'ERROR',
399
+ error: new OneBlinkAppsError(`Dynamic list configuration has not been completed yet. Please contact your administrator to rectify the issue.`, {
400
+ title: 'Misconfigured Dynamic List',
401
+ originalError: new Error(JSON.stringify({
402
+ formElementOptionsSetId: formElementOptionsSet.id,
403
+ formElementOptionsSetName: formElementOptionsSet.name,
404
+ formsAppEnvironmentId,
405
+ }, null, 2)),
406
+ }),
407
+ };
408
+ }
409
+ try {
410
+ const { options } = await getRequest(`${tenants.current.apiOrigin}/forms/${formId}/salesforce-picklist-options?formElementOptionsSetId=${formElementOptionsSet.id}`, abortSignal);
411
+ return {
412
+ type: 'OPTIONS',
413
+ options,
414
+ };
415
+ }
416
+ catch (error) {
417
+ Sentry.captureException(error);
418
+ return {
419
+ type: 'ERROR',
420
+ error: new OneBlinkAppsError(`Options could not be loaded. Please contact your administrator to rectify the issue.`, {
421
+ title: 'Invalid List Response',
422
+ httpStatusCode: error.status,
423
+ originalError: new OneBlinkAppsError(JSON.stringify({
424
+ formsAppEnvironmentId,
425
+ formElementOptionsSetId: formElementOptionsSet.id,
426
+ formElementOptionsSetName: formElementOptionsSet.name,
427
+ salesforceObject: formElementOptionSetEnvironmentSalesforcePicklist.object
428
+ .label,
429
+ salesforceField: formElementOptionSetEnvironmentSalesforcePicklist.field
430
+ .label,
431
+ }, null, 2), {
432
+ originalError: error,
433
+ }),
434
+ }),
435
+ };
436
+ }
437
+ }
394
438
  case 'GOOD_TO_GO_CUSTOM_FIELD': {
395
439
  const formElementOptionSetEnvironmentGoodToGoCustomField = formElementOptionsSet.environments.find((environment) => environment.formsAppEnvironmentId === formsAppEnvironmentId);
396
440
  if (!formElementOptionSetEnvironmentGoodToGoCustomField) {
@@ -1 +1 @@
1
- {"version":3,"file":"form-service.js","sourceRoot":"","sources":["../../src/apps/form-service.ts"],"names":[],"mappings":"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","sourcesContent":["import { formElementsService, typeCastService } from '@oneblink/sdk-core'\nimport { EnvironmentTypes, FormTypes, FreshdeskTypes } from '@oneblink/types'\nimport OneBlinkAppsError from './services/errors/oneBlinkAppsError'\nimport { isOffline } from './offline-service'\nimport { isLoggedIn } from './services/cognito'\nimport {\n fetchWithError,\n generateHeaders,\n HTTPError,\n searchRequest,\n getRequest,\n} from './services/fetch'\nimport tenants from './tenants'\n\nimport Sentry from './Sentry'\nexport * from './services/integration-elements'\n\n/**\n * Get an array of OneBlink Forms.\n *\n * #### Example\n *\n * ```js\n * const formsAppId = 1\n * const forms = await formService.getForms(formAppId)\n * ```\n *\n * @param formsAppId\n * @param abortSignal\n * @returns\n */\nasync function getForms(\n formsAppId: number,\n abortSignal?: AbortSignal,\n): Promise<FormTypes.Form[]> {\n const url = `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/forms`\n return searchRequest<{ forms: FormTypes.Form[] }>(\n url,\n {\n injectForms: true,\n },\n abortSignal,\n )\n .then(({ forms }) => forms)\n .catch((error) => {\n Sentry.captureException(error)\n console.error('Error retrieving forms', error)\n\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 'The application you are attempting to view requires authentication. 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(\n 'We could not find the application you are looking for. Please contact your administrator to ensure the application configuration has been completed successfully.',\n {\n originalError: error,\n title: 'Unknown Application',\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\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 OneBlink Form by id or slug.\n *\n * #### Example\n *\n * ```js\n * const form = await formService.getForm({\n * formId: 1,\n * formAppId: 1, // `formsAppId` is optional\n * formsAppEnvironmentId: undefined,\n * formSlug: undefined,\n * toCompleteTask: false,\n * })\n *\n * // OR\n *\n * const form = await formService.getForm({\n * formSlug: 'audit',\n * formAppId: 1,\n * formsAppEnvironmentId: undefined,\n * formId: undefined,\n * toCompleteTask: false,\n * })\n *\n * // OR\n *\n * const form = await formService.getForm({\n * formSlug: 'audit',\n * formsAppEnvironmentId: 1,\n * formAppId: undefined,\n * formId: undefined,\n * toCompleteTask: false,\n * })\n * ```\n *\n * @param options\n * @returns\n */\nasync function getForm({\n formsAppId,\n formsAppEnvironmentId,\n abortSignal,\n formSlug,\n toCompleteTask,\n formId,\n}: {\n formSlug: string | undefined\n formId: number | undefined\n formsAppId: number | undefined\n formsAppEnvironmentId: number | undefined\n toCompleteTask?: boolean\n abortSignal?: AbortSignal\n}): Promise<FormTypes.Form> {\n return (\n (() => {\n const queryParams = {\n toCompleteTask,\n }\n if (formSlug) {\n if (!Number.isNaN(formsAppEnvironmentId)) {\n return searchRequest<FormTypes.Form>(\n `${tenants.current.apiOrigin}/forms-app-environments/${formsAppEnvironmentId}/forms/${formSlug}`,\n queryParams,\n abortSignal,\n )\n }\n\n if (!Number.isNaN(formsAppId)) {\n return searchRequest<FormTypes.Form>(\n `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/forms/${formSlug}`,\n queryParams,\n abortSignal,\n )\n }\n }\n\n return searchRequest<FormTypes.Form>(\n `${tenants.current.apiOrigin}/form-definitions/${formId}`,\n queryParams,\n abortSignal,\n )\n })()\n // If we could not find a form by Id for any reason,\n // we will try and get it from cache from the all forms endpoint\n .catch((error) => {\n if (typeof formsAppId !== 'number' || Number.isNaN(formsAppId)) {\n throw error\n }\n\n return getForms(formsAppId, abortSignal)\n .catch(() => {\n // Ignore getForms() error and throw the error from attempt to get form by id\n throw error\n })\n .then((forms) => {\n const form = forms.find(\n (form) =>\n form.id === formId || (formSlug && form.slug === formSlug),\n )\n if (form) {\n return form\n }\n throw error\n })\n })\n .catch((error) => {\n Sentry.captureException(error)\n console.warn(\n 'Error retrieving form from API',\n {\n formsAppId,\n formsAppEnvironmentId,\n formSlug,\n formId,\n },\n error,\n )\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline and do not have a local copy of this form available, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'The form you are attempting to complete requires authentication. 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 complete this form. 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 let message =\n 'We could not find the form you are looking for. Please contact your administrator to ensure your form configuration has been completed successfully.'\n const requiresLogin = !isLoggedIn()\n if (requiresLogin) {\n message +=\n ' Try logging in if you believe this form requires authentication.'\n }\n throw new OneBlinkAppsError(message, {\n originalError: error,\n title: 'Unknown Form',\n httpStatusCode: error.status,\n requiresLogin,\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\ntype FormElementLookupResult = FormTypes.FormElementLookup & {\n url: string | null\n records: FormTypes.FormElementLookupStaticDataRecord[] | null\n runLookupOnClear: boolean\n}\n\n/**\n * Get an array of OneBlink Form Element Lookups.\n *\n * #### Example\n *\n * ```js\n * const organisationId = '1234567890ABCDEFG'\n * const formsAppEnvironmentId = 1\n * const formElementLookups = await formService.getFormElementLookups(\n * organisationId,\n * formsAppEnvironmentId,\n * )\n * ```\n *\n * @param organisationId\n * @param formsAppEnvironmentId\n * @param abortSignal\n * @returns\n */\nasync function getFormElementLookups(\n organisationId: string,\n formsAppEnvironmentId: number,\n abortSignal?: AbortSignal,\n): Promise<FormElementLookupResult[]> {\n try {\n const data = await searchRequest<{\n formElementLookups: FormTypes.FormElementLookup[]\n }>(\n `${tenants.current.apiOrigin}/form-element-lookups`,\n {\n organisationId,\n },\n abortSignal,\n )\n return data.formElementLookups.map((formElementLookup) => ({\n ...formElementLookup,\n url: getFormElementLookupUrl(formElementLookup, formsAppEnvironmentId),\n records: getFormElementLookupRecords(\n formElementLookup,\n formsAppEnvironmentId,\n ),\n runLookupOnClear: getFormElementLookupRunLookupOnClear(\n formElementLookup,\n formsAppEnvironmentId,\n ),\n }))\n } catch (error) {\n Sentry.captureException(error)\n console.warn(\n `Error retrieving form element lookups for organisationId ${organisationId}`,\n error,\n )\n throw error\n }\n}\nfunction getFormElementLookupUrl(\n formElementLookup: FormTypes.FormElementLookup,\n formsAppEnvironmentId: number,\n) {\n if (formElementLookup.type === 'STATIC_DATA') {\n return null\n }\n\n return formElementLookup.environments.reduce<string | null>(\n (url, formElementLookupEnvironment) => {\n if (\n !url &&\n formElementLookupEnvironment.formsAppEnvironmentId ===\n formsAppEnvironmentId\n ) {\n return formElementLookupEnvironment.url\n }\n return url\n },\n null,\n )\n}\nfunction getFormElementLookupRecords(\n formElementLookup: FormTypes.FormElementLookup,\n formsAppEnvironmentId: number,\n) {\n if (formElementLookup.type !== 'STATIC_DATA') {\n return null\n }\n\n return formElementLookup.environments.reduce<\n FormTypes.FormElementLookupStaticDataRecord[] | null\n >((records, formElementLookupEnvironment) => {\n if (\n !records &&\n formElementLookupEnvironment.formsAppEnvironmentId ===\n formsAppEnvironmentId\n ) {\n return formElementLookupEnvironment.records\n }\n return records\n }, null)\n}\nfunction getFormElementLookupRunLookupOnClear(\n formElementLookup: FormTypes.FormElementLookup,\n formsAppEnvironmentId: number,\n) {\n if (formElementLookup.type === 'STATIC_DATA') {\n return formElementLookup.environments.some(\n (formElementLookupEnvironment) => {\n return (\n formElementLookupEnvironment.formsAppEnvironmentId ===\n formsAppEnvironmentId &&\n formElementLookupEnvironment.records.some((record) => {\n return record.inputType === 'UNDEFINED'\n })\n )\n },\n )\n }\n\n return formElementLookup.environments.some((formElementLookupEnvironment) => {\n return (\n formElementLookupEnvironment.formsAppEnvironmentId ===\n formsAppEnvironmentId && formElementLookupEnvironment.runLookupOnClear\n )\n })\n}\n\n/**\n * Get a OneBlink Form Element Lookup.\n *\n * #### Example\n *\n * ```js\n * const organisationId = '1234567890ABCDEFG'\n * const formsAppEnvironmentId = 1\n * const formElementLookupId = 1\n * const formElementLookup = await formService.getFormElementLookupById(\n * organisationId,\n * formsAppEnvironmentId,\n * formElementLookupId,\n * )\n * if (formElementLookup) {\n * // Use lookup\n * }\n * ```\n *\n * @param organisationId\n * @param formsAppEnvironmentId\n * @param formElementLookupId\n * @param abortSignal\n * @returns\n */\nasync function getFormElementLookupById(\n organisationId: string,\n formsAppEnvironmentId: number,\n formElementLookupId: number,\n abortSignal?: AbortSignal,\n): Promise<FormElementLookupResult | undefined> {\n return getFormElementLookups(\n organisationId,\n formsAppEnvironmentId,\n abortSignal,\n ).then((formElementLookups) =>\n formElementLookups.find(\n (formElementLookup) => formElementLookup.id === formElementLookupId,\n ),\n )\n}\n\n/**\n * Get a list of options sets for an organisation.\n *\n * @param organisationId The identifier for the organisation to fetch options\n * sets for\n * @param abortSignal A signal to abort any asynchronous processing\n * @returns An array of options sets\n */\nasync function getFormElementOptionsSets(\n organisationId: string,\n abortSignal: AbortSignal,\n): Promise<Array<FormTypes.FormElementOptionSet>> {\n const { formElementDynamicOptionSets } = await searchRequest<{\n formElementDynamicOptionSets: Array<FormTypes.FormElementOptionSet>\n }>(\n `${tenants.current.apiOrigin}/form-element-options/dynamic`,\n {\n organisationId,\n },\n abortSignal,\n )\n return formElementDynamicOptionSets\n}\n\ntype FormElementOptionsSetResult =\n | {\n type: 'OPTIONS'\n options: unknown\n }\n | {\n type: 'SEARCH'\n url: string\n searchQuerystringParameter: string\n }\n | {\n type: 'ERROR'\n error: OneBlinkAppsError\n }\n\n/**\n * Get the options for an options set.\n *\n * @param formElementOptionsSet The form element options set to generate options\n * from\n * @param options The environment and form to pull options from\n * @param abortSignal A signal to abort any asynchronous processing\n * @returns A result object containing potential options or a predictable error\n */\nasync function getFormElementOptionsSetOptions(\n formElementOptionsSet: FormTypes.FormElementOptionSet,\n {\n formsAppEnvironmentId,\n formId,\n }: {\n formsAppEnvironmentId: number\n formId: number\n },\n abortSignal: AbortSignal,\n): Promise<FormElementOptionsSetResult> {\n switch (formElementOptionsSet.type) {\n case 'HCMS_CATEGORIES':\n case 'STATIC': {\n const formElementOptionsSetEnvironment =\n formElementOptionsSet.environments.find(\n (environment: FormTypes.FormElementOptionSetEnvironmentStatic) =>\n environment.formsAppEnvironmentId === formsAppEnvironmentId,\n )\n if (formElementOptionsSetEnvironment) {\n return {\n type: 'OPTIONS',\n options: formElementOptionsSetEnvironment.options,\n }\n }\n return {\n type: 'ERROR',\n error: new OneBlinkAppsError(\n `List environment configuration has not been completed yet. Please contact your administrator to rectify the issue.`,\n {\n title: 'Misconfigured List',\n originalError: new Error(\n JSON.stringify(\n {\n formElementOptionsSetId: formElementOptionsSet.id,\n formElementOptionsSetName: formElementOptionsSet.name,\n formsAppEnvironmentId,\n },\n null,\n 2,\n ),\n ),\n },\n ),\n }\n }\n case 'SHAREPOINT_LIST_COLUMN': {\n const formElementOptionSetEnvironmentSharePointListColumn =\n formElementOptionsSet.environments.find(\n (environment) =>\n environment.formsAppEnvironmentId === formsAppEnvironmentId,\n )\n if (!formElementOptionSetEnvironmentSharePointListColumn) {\n return {\n type: 'ERROR',\n error: new OneBlinkAppsError(\n `Dynamic list configuration has not been completed yet. Please contact your administrator to rectify the issue.`,\n {\n title: 'Misconfigured Dynamic List',\n originalError: new Error(\n JSON.stringify(\n {\n formElementOptionsSetId: formElementOptionsSet.id,\n formElementOptionsSetName: formElementOptionsSet.name,\n formsAppEnvironmentId,\n },\n null,\n 2,\n ),\n ),\n },\n ),\n }\n }\n\n try {\n const { options } = await getRequest<{ options: unknown }>(\n `${tenants.current.apiOrigin}/forms/${formId}/sharepoint-list-column-options?formElementOptionsSetId=${formElementOptionsSet.id}`,\n abortSignal,\n )\n return {\n type: 'OPTIONS',\n options,\n }\n } catch (error) {\n Sentry.captureException(error)\n return {\n type: 'ERROR',\n error: new OneBlinkAppsError(\n `Options could not be loaded. Please contact your administrator to rectify the issue.`,\n {\n title: 'Invalid List Response',\n httpStatusCode: (error as HTTPError).status,\n originalError: new OneBlinkAppsError(\n JSON.stringify(\n {\n formsAppEnvironmentId,\n formElementOptionsSetId: formElementOptionsSet.id,\n formElementOptionsSetName: formElementOptionsSet.name,\n sharepointSite:\n formElementOptionSetEnvironmentSharePointListColumn\n .sharepointSite.displayName,\n sharepointList:\n formElementOptionSetEnvironmentSharePointListColumn\n .sharepointList.displayName,\n sharepointColumn:\n formElementOptionSetEnvironmentSharePointListColumn\n .sharepointColumn.displayName,\n },\n null,\n 2,\n ),\n {\n originalError: error as HTTPError,\n },\n ),\n },\n ),\n }\n }\n }\n case 'GOOD_TO_GO_CUSTOM_FIELD': {\n const formElementOptionSetEnvironmentGoodToGoCustomField =\n formElementOptionsSet.environments.find(\n (environment) =>\n environment.formsAppEnvironmentId === formsAppEnvironmentId,\n )\n if (!formElementOptionSetEnvironmentGoodToGoCustomField) {\n return {\n type: 'ERROR',\n error: new OneBlinkAppsError(\n `Dynamic list configuration has not been completed yet. Please contact your administrator to rectify the issue.`,\n {\n title: 'Misconfigured Dynamic List',\n originalError: new Error(\n JSON.stringify(\n {\n formElementOptionsSetId: formElementOptionsSet.id,\n formElementOptionsSetName: formElementOptionsSet.name,\n formsAppEnvironmentId,\n },\n null,\n 2,\n ),\n ),\n },\n ),\n }\n }\n\n try {\n const { options } = await getRequest<{ options: unknown }>(\n `${tenants.current.apiOrigin}/forms/${formId}/good-to-go-custom-field-options?formElementOptionsSetId=${formElementOptionsSet.id}`,\n abortSignal,\n )\n return {\n type: 'OPTIONS',\n options,\n }\n } catch (error) {\n Sentry.captureException(error)\n return {\n type: 'ERROR',\n error: new OneBlinkAppsError(\n `Options could not be loaded. Please contact your administrator to rectify the issue.`,\n {\n title: 'Invalid List Response',\n httpStatusCode: (error as HTTPError).status,\n originalError: new OneBlinkAppsError(\n JSON.stringify(\n {\n formsAppEnvironmentId,\n formElementOptionsSetId: formElementOptionsSet.id,\n formElementOptionsSetName: formElementOptionsSet.name,\n goodToGoCustomField:\n formElementOptionSetEnvironmentGoodToGoCustomField\n .goodToGoCustomField.displayName,\n },\n null,\n 2,\n ),\n {\n originalError: error as HTTPError,\n },\n ),\n },\n ),\n }\n }\n }\n case 'HOSTED_API':\n case 'URL':\n default: {\n const formElementOptionsSetEnvironment =\n formElementOptionsSet.environments.find(\n (environment: FormTypes.FormElementOptionSetEnvironmentUrl) =>\n environment.formsAppEnvironmentId === formsAppEnvironmentId,\n )\n if (!formElementOptionsSetEnvironment) {\n return {\n type: 'ERROR',\n error: new OneBlinkAppsError(\n `Dynamic list configuration has not been completed yet. Please contact your administrator to rectify the issue.`,\n {\n title: 'Misconfigured Dynamic List',\n originalError: new Error(\n JSON.stringify(\n {\n formElementOptionsSetId: formElementOptionsSet.id,\n formElementOptionsSetName: formElementOptionsSet.name,\n formsAppEnvironmentId,\n },\n null,\n 2,\n ),\n ),\n },\n ),\n }\n }\n\n if (formElementOptionsSetEnvironment.searchQuerystringParameter) {\n return {\n type: 'SEARCH',\n url: formElementOptionsSetEnvironment.url,\n searchQuerystringParameter:\n formElementOptionsSetEnvironment.searchQuerystringParameter,\n }\n }\n\n try {\n const headers = await generateHeaders()\n const response = await fetchWithError(\n formElementOptionsSetEnvironment.url,\n {\n headers,\n signal: abortSignal,\n },\n )\n\n if (!response.ok) {\n const text = await response.text()\n throw new Error(text)\n }\n\n const options = await response.json()\n return {\n type: 'OPTIONS',\n options,\n }\n } catch (error) {\n Sentry.captureException(error)\n return {\n type: 'ERROR',\n error: new OneBlinkAppsError(\n `Options could not be loaded. Please contact your administrator to rectify the issue.`,\n {\n title: 'Invalid List Response',\n httpStatusCode: (error as HTTPError).status,\n originalError: new OneBlinkAppsError(\n JSON.stringify(\n {\n formElementOptionsSetId: formElementOptionsSet.id,\n formElementOptionsSetName: formElementOptionsSet.name,\n formElementOptionsSetUrl:\n formElementOptionsSetEnvironment.url,\n formsAppEnvironmentId,\n },\n null,\n 2,\n ),\n {\n originalError: error as HTTPError,\n },\n ),\n },\n ),\n }\n }\n }\n }\n}\n\n/**\n * @param form The form definition the form element is in. Used to generate\n * conditional logic for the\n * @param element The form element to have options appended to\n * @param data The untrusted options that need to be parsed.\n * @returns A new form element. The element passed in is not mutated.\n */\nfunction parseFormElementOptions(\n form: FormTypes.Form,\n element: FormTypes.FormElementWithOptions,\n options: unknown,\n): FormTypes.FormElementWithOptions {\n const dynamicOptions =\n formElementsService.parseDynamicFormElementOptions(options)\n const conditionallyShowOptionsElementIds: string[] = []\n const formElementOptions = dynamicOptions.map<FormTypes.ChoiceElementOption>(\n (option) => {\n const optionsMap = (option.attributes || []).reduce<\n Record<string, FormTypes.ChoiceElementOptionAttribute>\n >((memo, { label, value }) => {\n if (\n !element.attributesMapping ||\n !Array.isArray(element.attributesMapping)\n ) {\n return memo\n }\n const attribute = element.attributesMapping.find(\n (map) => map.attribute === label,\n )\n if (!attribute) return memo\n\n const elementId = attribute.elementId\n const predicateElement = formElementsService.findFormElement(\n form.elements,\n (el) => el.id === elementId,\n )\n if (!predicateElement) {\n return memo\n }\n\n const predicateElementWithOptions =\n typeCastService.formElements.toOptionsElement(predicateElement)\n if (!predicateElementWithOptions) {\n return memo\n }\n\n const predicateOption = predicateElementWithOptions.options?.find(\n (option) => option.value === value,\n )\n memo[elementId] = memo[elementId] || {\n elementId,\n optionIds: [],\n }\n memo[elementId].optionIds.push(\n predicateOption?.id || predicateOption?.value || value,\n )\n\n conditionallyShowOptionsElementIds.push(elementId)\n return memo\n }, {})\n\n return {\n ...option,\n id: option.value,\n attributes: Object.keys(optionsMap).map((key) => optionsMap[key]),\n }\n },\n )\n\n return {\n ...element,\n options: formElementOptions,\n conditionallyShowOptionsElementIds,\n }\n}\n\n/**\n * Load the options for Form Elements that are using a OneBlink List. Useful to\n * cache all the dynamic options when first opening an application.\n *\n * @param forms\n * @param abortSignal\n * @returns\n */\nasync function loadFormElementDynamicOptions(\n forms: FormTypes.Form[],\n abortSignal: AbortSignal,\n): Promise<void> {\n await Promise.all([\n (async () => {\n const formWithFreshdeskFields = forms.find((form) => {\n return formElementsService.findFormElement(form.elements, (el) => {\n const formElementWithOptions =\n typeCastService.formElements.toOptionsElement(el)\n return (\n formElementWithOptions?.optionsType === 'FRESHDESK_FIELD' &&\n !!formElementWithOptions.freshdeskFieldName\n )\n })\n }, [])\n if (formWithFreshdeskFields) {\n await getFreshdeskFields(formWithFreshdeskFields.id, abortSignal)\n }\n })(),\n (async () => {\n // Get the lists id for each element\n const formElementOptionsSetIds = forms.reduce((ids: number[], form) => {\n formElementsService.forEachFormElementWithOptions(\n form.elements,\n (el) => {\n if (\n el.optionsType === 'DYNAMIC' &&\n typeof el.dynamicOptionSetId === 'number'\n ) {\n ids.push(el.dynamicOptionSetId)\n }\n },\n )\n return ids\n }, [])\n\n if (!formElementOptionsSetIds.length) {\n return\n }\n\n // Get the lists for all the ids\n const organisationId = forms[0].organisationId\n const allFormElementOptionsSets = await getFormElementOptionsSets(\n organisationId,\n abortSignal,\n )\n\n const formElementOptionsSets = allFormElementOptionsSets.filter(\n ({ id }) => formElementOptionsSetIds.includes(id || 0),\n )\n\n // Get the options for all the lists\n await Promise.all(\n formElementOptionsSets.map(async (formElementOptionsSet) => {\n await getFormElementOptionsSetOptions(\n formElementOptionsSet,\n {\n formsAppEnvironmentId: forms[0].formsAppEnvironmentId,\n formId: forms[0].id,\n },\n abortSignal,\n )\n }),\n )\n })(),\n (async () => {\n //Check if there are any forms with a lookup\n const isThereAFormWithLookup = forms.some((form) => {\n const element = formElementsService.findFormElement(\n form.elements,\n (el) => {\n const lookupElement =\n typeCastService.formElements.toLookupElement(el)\n if (lookupElement) {\n if (lookupElement.isDataLookup || lookupElement.isElementLookup) {\n return true\n }\n }\n return false\n },\n )\n return !!element\n })\n\n if (!isThereAFormWithLookup) {\n return\n }\n\n //Obtain all lookups\n const organisationId = forms[0].organisationId\n const formsAppEnvironmentId = forms[0].formsAppEnvironmentId\n await getFormElementLookups(\n organisationId,\n formsAppEnvironmentId,\n abortSignal,\n )\n })(),\n ])\n}\n\n/**\n * Get the Freshdesk Fields associated with a form\n *\n * @param formId The identifier for the form to fetch freshdesk fields for\n * @param abortSignal A signal to abort any asynchronous processing\n * @returns An array of Freshdesk Fields\n */\nasync function getFreshdeskFields(\n formId: number,\n abortSignal: AbortSignal,\n): Promise<FreshdeskTypes.FreshdeskField[]> {\n return await getRequest<FreshdeskTypes.FreshdeskField[]>(\n `${tenants.current.apiOrigin}/forms/${formId}/freshdesk-fields`,\n abortSignal,\n )\n}\n\n/**\n * Parse Freshdesk Field options associated with a form element as form element\n * options.\n *\n * @param freshdeskFields An array of Freshdesk Fields\n * @param element The element to array of Freshdesk Fields\n * @returns An object containing valid options or a predictable error\n */\nfunction parseFreshdeskFieldOptions(\n freshdeskFields: FreshdeskTypes.FreshdeskField[],\n element: FormTypes.FormElementWithOptions,\n):\n | {\n type: 'OPTIONS'\n options: FormTypes.ChoiceElementOption[]\n }\n | {\n type: 'ERROR'\n error: OneBlinkAppsError\n } {\n const freshdeskField = freshdeskFields.find(\n (freshdeskField) => element.freshdeskFieldName === freshdeskField.name,\n )\n if (!freshdeskField) {\n return {\n type: 'ERROR',\n error: new OneBlinkAppsError(\n `Freshdesk Field does not exist. Please contact your administrator to rectify the issue.`,\n {\n title: 'Missing Freshdesk Field',\n originalError: new Error(JSON.stringify(element, null, 2)),\n },\n ),\n }\n }\n const options = freshdeskField.options\n if (!Array.isArray(options)) {\n return {\n type: 'ERROR',\n error: new OneBlinkAppsError(\n `Freshdesk Field does not have options. Please contact your administrator to rectify the issue.`,\n {\n title: 'Invalid Freshdesk Field',\n originalError: new Error(\n JSON.stringify({ element, freshdeskField }, null, 2),\n ),\n },\n ),\n }\n }\n\n return {\n type: 'OPTIONS',\n options: mapNestedOptions(options) || [],\n }\n}\n\nconst mapNestedOptions = (\n options: FreshdeskTypes.FreshdeskFieldOption[] | undefined,\n): FormTypes.ChoiceElementOption[] | undefined => {\n return options?.map<FormTypes.ChoiceElementOption>(\n ({ value, label, options: nestedOptions }) => ({\n id: value.toString(),\n value: value.toString(),\n label,\n options: mapNestedOptions(\n nestedOptions,\n ) as FormTypes.DynamicChoiceElementOption[],\n }),\n )\n}\n\n/**\n * Get configuration for a OneBlink Form.\n *\n * #### Example\n *\n * ```js\n * const formId = 1\n * const configuration = await formService.getFormConfiguration(formId)\n * ```\n *\n * @param formId\n * @param abortSignal\n * @returns\n */\nasync function getFormConfiguration(\n formId: number,\n abortSignal?: AbortSignal,\n): Promise<EnvironmentTypes.FormsAppEnvironmentConfiguration> {\n const url = `${tenants.current.apiOrigin}/forms/${formId}/configuration`\n\n try {\n return await getRequest<EnvironmentTypes.FormsAppEnvironmentConfiguration>(\n url,\n abortSignal,\n )\n } catch (err) {\n Sentry.captureException(err)\n\n const error = err as HTTPError\n\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline and do not have a local copy of this form available, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n\n switch (error.status) {\n case 400:\n case 404: {\n throw new OneBlinkAppsError(\n 'We could not find the form you are looking for. Please contact support if the problem persists.',\n {\n originalError: error,\n title: 'Unknown Form',\n httpStatusCode: error.status,\n },\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 {\n FormElementOptionsSetResult,\n getForms,\n getForm,\n FormElementLookupResult,\n getFormElementLookups,\n getFormElementLookupById,\n getFormElementOptionsSets,\n getFormElementOptionsSetOptions,\n parseFormElementOptions,\n getFreshdeskFields,\n parseFreshdeskFieldOptions,\n loadFormElementDynamicOptions,\n getFormConfiguration,\n}\n"]}
1
+ {"version":3,"file":"form-service.js","sourceRoot":"","sources":["../../src/apps/form-service.ts"],"names":[],"mappings":"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","sourcesContent":["import { formElementsService, typeCastService } from '@oneblink/sdk-core'\nimport { EnvironmentTypes, FormTypes, FreshdeskTypes } from '@oneblink/types'\nimport OneBlinkAppsError from './services/errors/oneBlinkAppsError'\nimport { isOffline } from './offline-service'\nimport { isLoggedIn } from './services/cognito'\nimport {\n fetchWithError,\n generateHeaders,\n HTTPError,\n searchRequest,\n getRequest,\n} from './services/fetch'\nimport tenants from './tenants'\n\nimport Sentry from './Sentry'\nexport * from './services/integration-elements'\n\n/**\n * Get an array of OneBlink Forms.\n *\n * #### Example\n *\n * ```js\n * const formsAppId = 1\n * const forms = await formService.getForms(formAppId)\n * ```\n *\n * @param formsAppId\n * @param abortSignal\n * @returns\n */\nasync function getForms(\n formsAppId: number,\n abortSignal?: AbortSignal,\n): Promise<FormTypes.Form[]> {\n const url = `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/forms`\n return searchRequest<{ forms: FormTypes.Form[] }>(\n url,\n {\n injectForms: true,\n },\n abortSignal,\n )\n .then(({ forms }) => forms)\n .catch((error) => {\n Sentry.captureException(error)\n console.error('Error retrieving forms', error)\n\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 'The application you are attempting to view requires authentication. 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(\n 'We could not find the application you are looking for. Please contact your administrator to ensure the application configuration has been completed successfully.',\n {\n originalError: error,\n title: 'Unknown Application',\n requiresAccessRequest: true,\n httpStatusCode: error.status,\n },\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 OneBlink Form by id or slug.\n *\n * #### Example\n *\n * ```js\n * const form = await formService.getForm({\n * formId: 1,\n * formAppId: 1, // `formsAppId` is optional\n * formsAppEnvironmentId: undefined,\n * formSlug: undefined,\n * toCompleteTask: false,\n * })\n *\n * // OR\n *\n * const form = await formService.getForm({\n * formSlug: 'audit',\n * formAppId: 1,\n * formsAppEnvironmentId: undefined,\n * formId: undefined,\n * toCompleteTask: false,\n * })\n *\n * // OR\n *\n * const form = await formService.getForm({\n * formSlug: 'audit',\n * formsAppEnvironmentId: 1,\n * formAppId: undefined,\n * formId: undefined,\n * toCompleteTask: false,\n * })\n * ```\n *\n * @param options\n * @returns\n */\nasync function getForm({\n formsAppId,\n formsAppEnvironmentId,\n abortSignal,\n formSlug,\n toCompleteTask,\n formId,\n}: {\n formSlug: string | undefined\n formId: number | undefined\n formsAppId: number | undefined\n formsAppEnvironmentId: number | undefined\n toCompleteTask?: boolean\n abortSignal?: AbortSignal\n}): Promise<FormTypes.Form> {\n return (\n (() => {\n const queryParams = {\n toCompleteTask,\n }\n if (formSlug) {\n if (!Number.isNaN(formsAppEnvironmentId)) {\n return searchRequest<FormTypes.Form>(\n `${tenants.current.apiOrigin}/forms-app-environments/${formsAppEnvironmentId}/forms/${formSlug}`,\n queryParams,\n abortSignal,\n )\n }\n\n if (!Number.isNaN(formsAppId)) {\n return searchRequest<FormTypes.Form>(\n `${tenants.current.apiOrigin}/forms-apps/${formsAppId}/forms/${formSlug}`,\n queryParams,\n abortSignal,\n )\n }\n }\n\n return searchRequest<FormTypes.Form>(\n `${tenants.current.apiOrigin}/form-definitions/${formId}`,\n queryParams,\n abortSignal,\n )\n })()\n // If we could not find a form by Id for any reason,\n // we will try and get it from cache from the all forms endpoint\n .catch((error) => {\n if (typeof formsAppId !== 'number' || Number.isNaN(formsAppId)) {\n throw error\n }\n\n return getForms(formsAppId, abortSignal)\n .catch(() => {\n // Ignore getForms() error and throw the error from attempt to get form by id\n throw error\n })\n .then((forms) => {\n const form = forms.find(\n (form) =>\n form.id === formId || (formSlug && form.slug === formSlug),\n )\n if (form) {\n return form\n }\n throw error\n })\n })\n .catch((error) => {\n Sentry.captureException(error)\n console.warn(\n 'Error retrieving form from API',\n {\n formsAppId,\n formsAppEnvironmentId,\n formSlug,\n formId,\n },\n error,\n )\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline and do not have a local copy of this form available, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n\n switch (error.status) {\n case 401: {\n throw new OneBlinkAppsError(\n 'The form you are attempting to complete requires authentication. 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 complete this form. 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 let message =\n 'We could not find the form you are looking for. Please contact your administrator to ensure your form configuration has been completed successfully.'\n const requiresLogin = !isLoggedIn()\n if (requiresLogin) {\n message +=\n ' Try logging in if you believe this form requires authentication.'\n }\n throw new OneBlinkAppsError(message, {\n originalError: error,\n title: 'Unknown Form',\n httpStatusCode: error.status,\n requiresLogin,\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\ntype FormElementLookupResult = FormTypes.FormElementLookup & {\n url: string | null\n records: FormTypes.FormElementLookupStaticDataRecord[] | null\n runLookupOnClear: boolean\n}\n\n/**\n * Get an array of OneBlink Form Element Lookups.\n *\n * #### Example\n *\n * ```js\n * const organisationId = '1234567890ABCDEFG'\n * const formsAppEnvironmentId = 1\n * const formElementLookups = await formService.getFormElementLookups(\n * organisationId,\n * formsAppEnvironmentId,\n * )\n * ```\n *\n * @param organisationId\n * @param formsAppEnvironmentId\n * @param abortSignal\n * @returns\n */\nasync function getFormElementLookups(\n organisationId: string,\n formsAppEnvironmentId: number,\n abortSignal?: AbortSignal,\n): Promise<FormElementLookupResult[]> {\n try {\n const data = await searchRequest<{\n formElementLookups: FormTypes.FormElementLookup[]\n }>(\n `${tenants.current.apiOrigin}/form-element-lookups`,\n {\n organisationId,\n },\n abortSignal,\n )\n return data.formElementLookups.map((formElementLookup) => ({\n ...formElementLookup,\n url: getFormElementLookupUrl(formElementLookup, formsAppEnvironmentId),\n records: getFormElementLookupRecords(\n formElementLookup,\n formsAppEnvironmentId,\n ),\n runLookupOnClear: getFormElementLookupRunLookupOnClear(\n formElementLookup,\n formsAppEnvironmentId,\n ),\n }))\n } catch (error) {\n Sentry.captureException(error)\n console.warn(\n `Error retrieving form element lookups for organisationId ${organisationId}`,\n error,\n )\n throw error\n }\n}\nfunction getFormElementLookupUrl(\n formElementLookup: FormTypes.FormElementLookup,\n formsAppEnvironmentId: number,\n) {\n if (formElementLookup.type === 'STATIC_DATA') {\n return null\n }\n\n return formElementLookup.environments.reduce<string | null>(\n (url, formElementLookupEnvironment) => {\n if (\n !url &&\n formElementLookupEnvironment.formsAppEnvironmentId ===\n formsAppEnvironmentId\n ) {\n return formElementLookupEnvironment.url\n }\n return url\n },\n null,\n )\n}\nfunction getFormElementLookupRecords(\n formElementLookup: FormTypes.FormElementLookup,\n formsAppEnvironmentId: number,\n) {\n if (formElementLookup.type !== 'STATIC_DATA') {\n return null\n }\n\n return formElementLookup.environments.reduce<\n FormTypes.FormElementLookupStaticDataRecord[] | null\n >((records, formElementLookupEnvironment) => {\n if (\n !records &&\n formElementLookupEnvironment.formsAppEnvironmentId ===\n formsAppEnvironmentId\n ) {\n return formElementLookupEnvironment.records\n }\n return records\n }, null)\n}\nfunction getFormElementLookupRunLookupOnClear(\n formElementLookup: FormTypes.FormElementLookup,\n formsAppEnvironmentId: number,\n) {\n if (formElementLookup.type === 'STATIC_DATA') {\n return formElementLookup.environments.some(\n (formElementLookupEnvironment) => {\n return (\n formElementLookupEnvironment.formsAppEnvironmentId ===\n formsAppEnvironmentId &&\n formElementLookupEnvironment.records.some((record) => {\n return record.inputType === 'UNDEFINED'\n })\n )\n },\n )\n }\n\n return formElementLookup.environments.some((formElementLookupEnvironment) => {\n return (\n formElementLookupEnvironment.formsAppEnvironmentId ===\n formsAppEnvironmentId && formElementLookupEnvironment.runLookupOnClear\n )\n })\n}\n\n/**\n * Get a OneBlink Form Element Lookup.\n *\n * #### Example\n *\n * ```js\n * const organisationId = '1234567890ABCDEFG'\n * const formsAppEnvironmentId = 1\n * const formElementLookupId = 1\n * const formElementLookup = await formService.getFormElementLookupById(\n * organisationId,\n * formsAppEnvironmentId,\n * formElementLookupId,\n * )\n * if (formElementLookup) {\n * // Use lookup\n * }\n * ```\n *\n * @param organisationId\n * @param formsAppEnvironmentId\n * @param formElementLookupId\n * @param abortSignal\n * @returns\n */\nasync function getFormElementLookupById(\n organisationId: string,\n formsAppEnvironmentId: number,\n formElementLookupId: number,\n abortSignal?: AbortSignal,\n): Promise<FormElementLookupResult | undefined> {\n return getFormElementLookups(\n organisationId,\n formsAppEnvironmentId,\n abortSignal,\n ).then((formElementLookups) =>\n formElementLookups.find(\n (formElementLookup) => formElementLookup.id === formElementLookupId,\n ),\n )\n}\n\n/**\n * Get a list of options sets for an organisation.\n *\n * @param organisationId The identifier for the organisation to fetch options\n * sets for\n * @param abortSignal A signal to abort any asynchronous processing\n * @returns An array of options sets\n */\nasync function getFormElementOptionsSets(\n organisationId: string,\n abortSignal: AbortSignal,\n): Promise<Array<FormTypes.FormElementOptionSet>> {\n const { formElementDynamicOptionSets } = await searchRequest<{\n formElementDynamicOptionSets: Array<FormTypes.FormElementOptionSet>\n }>(\n `${tenants.current.apiOrigin}/form-element-options/dynamic`,\n {\n organisationId,\n },\n abortSignal,\n )\n return formElementDynamicOptionSets\n}\n\ntype FormElementOptionsSetResult =\n | {\n type: 'OPTIONS'\n options: unknown\n }\n | {\n type: 'SEARCH'\n url: string\n searchQuerystringParameter: string\n }\n | {\n type: 'ERROR'\n error: OneBlinkAppsError\n }\n\n/**\n * Get the options for an options set.\n *\n * @param formElementOptionsSet The form element options set to generate options\n * from\n * @param options The environment and form to pull options from\n * @param abortSignal A signal to abort any asynchronous processing\n * @returns A result object containing potential options or a predictable error\n */\nasync function getFormElementOptionsSetOptions(\n formElementOptionsSet: FormTypes.FormElementOptionSet,\n {\n formsAppEnvironmentId,\n formId,\n }: {\n formsAppEnvironmentId: number\n formId: number\n },\n abortSignal: AbortSignal,\n): Promise<FormElementOptionsSetResult> {\n switch (formElementOptionsSet.type) {\n case 'HCMS_CATEGORIES':\n case 'STATIC': {\n const formElementOptionsSetEnvironment =\n formElementOptionsSet.environments.find(\n (environment: FormTypes.FormElementOptionSetEnvironmentStatic) =>\n environment.formsAppEnvironmentId === formsAppEnvironmentId,\n )\n if (formElementOptionsSetEnvironment) {\n return {\n type: 'OPTIONS',\n options: formElementOptionsSetEnvironment.options,\n }\n }\n return {\n type: 'ERROR',\n error: new OneBlinkAppsError(\n `List environment configuration has not been completed yet. Please contact your administrator to rectify the issue.`,\n {\n title: 'Misconfigured List',\n originalError: new Error(\n JSON.stringify(\n {\n formElementOptionsSetId: formElementOptionsSet.id,\n formElementOptionsSetName: formElementOptionsSet.name,\n formsAppEnvironmentId,\n },\n null,\n 2,\n ),\n ),\n },\n ),\n }\n }\n case 'SHAREPOINT_LIST_COLUMN': {\n const formElementOptionSetEnvironmentSharePointListColumn =\n formElementOptionsSet.environments.find(\n (environment) =>\n environment.formsAppEnvironmentId === formsAppEnvironmentId,\n )\n if (!formElementOptionSetEnvironmentSharePointListColumn) {\n return {\n type: 'ERROR',\n error: new OneBlinkAppsError(\n `Dynamic list configuration has not been completed yet. Please contact your administrator to rectify the issue.`,\n {\n title: 'Misconfigured Dynamic List',\n originalError: new Error(\n JSON.stringify(\n {\n formElementOptionsSetId: formElementOptionsSet.id,\n formElementOptionsSetName: formElementOptionsSet.name,\n formsAppEnvironmentId,\n },\n null,\n 2,\n ),\n ),\n },\n ),\n }\n }\n\n try {\n const { options } = await getRequest<{ options: unknown }>(\n `${tenants.current.apiOrigin}/forms/${formId}/sharepoint-list-column-options?formElementOptionsSetId=${formElementOptionsSet.id}`,\n abortSignal,\n )\n return {\n type: 'OPTIONS',\n options,\n }\n } catch (error) {\n Sentry.captureException(error)\n return {\n type: 'ERROR',\n error: new OneBlinkAppsError(\n `Options could not be loaded. Please contact your administrator to rectify the issue.`,\n {\n title: 'Invalid List Response',\n httpStatusCode: (error as HTTPError).status,\n originalError: new OneBlinkAppsError(\n JSON.stringify(\n {\n formsAppEnvironmentId,\n formElementOptionsSetId: formElementOptionsSet.id,\n formElementOptionsSetName: formElementOptionsSet.name,\n sharepointSite:\n formElementOptionSetEnvironmentSharePointListColumn\n .sharepointSite.displayName,\n sharepointList:\n formElementOptionSetEnvironmentSharePointListColumn\n .sharepointList.displayName,\n sharepointColumn:\n formElementOptionSetEnvironmentSharePointListColumn\n .sharepointColumn.displayName,\n },\n null,\n 2,\n ),\n {\n originalError: error as HTTPError,\n },\n ),\n },\n ),\n }\n }\n }\n case 'SALESFORCE_PICKLIST': {\n const formElementOptionSetEnvironmentSalesforcePicklist =\n formElementOptionsSet.environments.find(\n (environment) =>\n environment.formsAppEnvironmentId === formsAppEnvironmentId,\n )\n if (!formElementOptionSetEnvironmentSalesforcePicklist) {\n return {\n type: 'ERROR',\n error: new OneBlinkAppsError(\n `Dynamic list configuration has not been completed yet. Please contact your administrator to rectify the issue.`,\n {\n title: 'Misconfigured Dynamic List',\n originalError: new Error(\n JSON.stringify(\n {\n formElementOptionsSetId: formElementOptionsSet.id,\n formElementOptionsSetName: formElementOptionsSet.name,\n formsAppEnvironmentId,\n },\n null,\n 2,\n ),\n ),\n },\n ),\n }\n }\n\n try {\n const { options } = await getRequest<{ options: unknown }>(\n `${tenants.current.apiOrigin}/forms/${formId}/salesforce-picklist-options?formElementOptionsSetId=${formElementOptionsSet.id}`,\n abortSignal,\n )\n return {\n type: 'OPTIONS',\n options,\n }\n } catch (error) {\n Sentry.captureException(error)\n return {\n type: 'ERROR',\n error: new OneBlinkAppsError(\n `Options could not be loaded. Please contact your administrator to rectify the issue.`,\n {\n title: 'Invalid List Response',\n httpStatusCode: (error as HTTPError).status,\n originalError: new OneBlinkAppsError(\n JSON.stringify(\n {\n formsAppEnvironmentId,\n formElementOptionsSetId: formElementOptionsSet.id,\n formElementOptionsSetName: formElementOptionsSet.name,\n salesforceObject:\n formElementOptionSetEnvironmentSalesforcePicklist.object\n .label,\n salesforceField:\n formElementOptionSetEnvironmentSalesforcePicklist.field\n .label,\n },\n null,\n 2,\n ),\n {\n originalError: error as HTTPError,\n },\n ),\n },\n ),\n }\n }\n }\n case 'GOOD_TO_GO_CUSTOM_FIELD': {\n const formElementOptionSetEnvironmentGoodToGoCustomField =\n formElementOptionsSet.environments.find(\n (environment) =>\n environment.formsAppEnvironmentId === formsAppEnvironmentId,\n )\n if (!formElementOptionSetEnvironmentGoodToGoCustomField) {\n return {\n type: 'ERROR',\n error: new OneBlinkAppsError(\n `Dynamic list configuration has not been completed yet. Please contact your administrator to rectify the issue.`,\n {\n title: 'Misconfigured Dynamic List',\n originalError: new Error(\n JSON.stringify(\n {\n formElementOptionsSetId: formElementOptionsSet.id,\n formElementOptionsSetName: formElementOptionsSet.name,\n formsAppEnvironmentId,\n },\n null,\n 2,\n ),\n ),\n },\n ),\n }\n }\n\n try {\n const { options } = await getRequest<{ options: unknown }>(\n `${tenants.current.apiOrigin}/forms/${formId}/good-to-go-custom-field-options?formElementOptionsSetId=${formElementOptionsSet.id}`,\n abortSignal,\n )\n return {\n type: 'OPTIONS',\n options,\n }\n } catch (error) {\n Sentry.captureException(error)\n return {\n type: 'ERROR',\n error: new OneBlinkAppsError(\n `Options could not be loaded. Please contact your administrator to rectify the issue.`,\n {\n title: 'Invalid List Response',\n httpStatusCode: (error as HTTPError).status,\n originalError: new OneBlinkAppsError(\n JSON.stringify(\n {\n formsAppEnvironmentId,\n formElementOptionsSetId: formElementOptionsSet.id,\n formElementOptionsSetName: formElementOptionsSet.name,\n goodToGoCustomField:\n formElementOptionSetEnvironmentGoodToGoCustomField\n .goodToGoCustomField.displayName,\n },\n null,\n 2,\n ),\n {\n originalError: error as HTTPError,\n },\n ),\n },\n ),\n }\n }\n }\n case 'HOSTED_API':\n case 'URL':\n default: {\n const formElementOptionsSetEnvironment =\n formElementOptionsSet.environments.find(\n (environment: FormTypes.FormElementOptionSetEnvironmentUrl) =>\n environment.formsAppEnvironmentId === formsAppEnvironmentId,\n )\n if (!formElementOptionsSetEnvironment) {\n return {\n type: 'ERROR',\n error: new OneBlinkAppsError(\n `Dynamic list configuration has not been completed yet. Please contact your administrator to rectify the issue.`,\n {\n title: 'Misconfigured Dynamic List',\n originalError: new Error(\n JSON.stringify(\n {\n formElementOptionsSetId: formElementOptionsSet.id,\n formElementOptionsSetName: formElementOptionsSet.name,\n formsAppEnvironmentId,\n },\n null,\n 2,\n ),\n ),\n },\n ),\n }\n }\n\n if (formElementOptionsSetEnvironment.searchQuerystringParameter) {\n return {\n type: 'SEARCH',\n url: formElementOptionsSetEnvironment.url,\n searchQuerystringParameter:\n formElementOptionsSetEnvironment.searchQuerystringParameter,\n }\n }\n\n try {\n const headers = await generateHeaders()\n const response = await fetchWithError(\n formElementOptionsSetEnvironment.url,\n {\n headers,\n signal: abortSignal,\n },\n )\n\n if (!response.ok) {\n const text = await response.text()\n throw new Error(text)\n }\n\n const options = await response.json()\n return {\n type: 'OPTIONS',\n options,\n }\n } catch (error) {\n Sentry.captureException(error)\n return {\n type: 'ERROR',\n error: new OneBlinkAppsError(\n `Options could not be loaded. Please contact your administrator to rectify the issue.`,\n {\n title: 'Invalid List Response',\n httpStatusCode: (error as HTTPError).status,\n originalError: new OneBlinkAppsError(\n JSON.stringify(\n {\n formElementOptionsSetId: formElementOptionsSet.id,\n formElementOptionsSetName: formElementOptionsSet.name,\n formElementOptionsSetUrl:\n formElementOptionsSetEnvironment.url,\n formsAppEnvironmentId,\n },\n null,\n 2,\n ),\n {\n originalError: error as HTTPError,\n },\n ),\n },\n ),\n }\n }\n }\n }\n}\n\n/**\n * @param form The form definition the form element is in. Used to generate\n * conditional logic for the\n * @param element The form element to have options appended to\n * @param data The untrusted options that need to be parsed.\n * @returns A new form element. The element passed in is not mutated.\n */\nfunction parseFormElementOptions(\n form: FormTypes.Form,\n element: FormTypes.FormElementWithOptions,\n options: unknown,\n): FormTypes.FormElementWithOptions {\n const dynamicOptions =\n formElementsService.parseDynamicFormElementOptions(options)\n const conditionallyShowOptionsElementIds: string[] = []\n const formElementOptions = dynamicOptions.map<FormTypes.ChoiceElementOption>(\n (option) => {\n const optionsMap = (option.attributes || []).reduce<\n Record<string, FormTypes.ChoiceElementOptionAttribute>\n >((memo, { label, value }) => {\n if (\n !element.attributesMapping ||\n !Array.isArray(element.attributesMapping)\n ) {\n return memo\n }\n const attribute = element.attributesMapping.find(\n (map) => map.attribute === label,\n )\n if (!attribute) return memo\n\n const elementId = attribute.elementId\n const predicateElement = formElementsService.findFormElement(\n form.elements,\n (el) => el.id === elementId,\n )\n if (!predicateElement) {\n return memo\n }\n\n const predicateElementWithOptions =\n typeCastService.formElements.toOptionsElement(predicateElement)\n if (!predicateElementWithOptions) {\n return memo\n }\n\n const predicateOption = predicateElementWithOptions.options?.find(\n (option) => option.value === value,\n )\n memo[elementId] = memo[elementId] || {\n elementId,\n optionIds: [],\n }\n memo[elementId].optionIds.push(\n predicateOption?.id || predicateOption?.value || value,\n )\n\n conditionallyShowOptionsElementIds.push(elementId)\n return memo\n }, {})\n\n return {\n ...option,\n id: option.value,\n attributes: Object.keys(optionsMap).map((key) => optionsMap[key]),\n }\n },\n )\n\n return {\n ...element,\n options: formElementOptions,\n conditionallyShowOptionsElementIds,\n }\n}\n\n/**\n * Load the options for Form Elements that are using a OneBlink List. Useful to\n * cache all the dynamic options when first opening an application.\n *\n * @param forms\n * @param abortSignal\n * @returns\n */\nasync function loadFormElementDynamicOptions(\n forms: FormTypes.Form[],\n abortSignal: AbortSignal,\n): Promise<void> {\n await Promise.all([\n (async () => {\n const formWithFreshdeskFields = forms.find((form) => {\n return formElementsService.findFormElement(form.elements, (el) => {\n const formElementWithOptions =\n typeCastService.formElements.toOptionsElement(el)\n return (\n formElementWithOptions?.optionsType === 'FRESHDESK_FIELD' &&\n !!formElementWithOptions.freshdeskFieldName\n )\n })\n }, [])\n if (formWithFreshdeskFields) {\n await getFreshdeskFields(formWithFreshdeskFields.id, abortSignal)\n }\n })(),\n (async () => {\n // Get the lists id for each element\n const formElementOptionsSetIds = forms.reduce((ids: number[], form) => {\n formElementsService.forEachFormElementWithOptions(\n form.elements,\n (el) => {\n if (\n el.optionsType === 'DYNAMIC' &&\n typeof el.dynamicOptionSetId === 'number'\n ) {\n ids.push(el.dynamicOptionSetId)\n }\n },\n )\n return ids\n }, [])\n\n if (!formElementOptionsSetIds.length) {\n return\n }\n\n // Get the lists for all the ids\n const organisationId = forms[0].organisationId\n const allFormElementOptionsSets = await getFormElementOptionsSets(\n organisationId,\n abortSignal,\n )\n\n const formElementOptionsSets = allFormElementOptionsSets.filter(\n ({ id }) => formElementOptionsSetIds.includes(id || 0),\n )\n\n // Get the options for all the lists\n await Promise.all(\n formElementOptionsSets.map(async (formElementOptionsSet) => {\n await getFormElementOptionsSetOptions(\n formElementOptionsSet,\n {\n formsAppEnvironmentId: forms[0].formsAppEnvironmentId,\n formId: forms[0].id,\n },\n abortSignal,\n )\n }),\n )\n })(),\n (async () => {\n //Check if there are any forms with a lookup\n const isThereAFormWithLookup = forms.some((form) => {\n const element = formElementsService.findFormElement(\n form.elements,\n (el) => {\n const lookupElement =\n typeCastService.formElements.toLookupElement(el)\n if (lookupElement) {\n if (lookupElement.isDataLookup || lookupElement.isElementLookup) {\n return true\n }\n }\n return false\n },\n )\n return !!element\n })\n\n if (!isThereAFormWithLookup) {\n return\n }\n\n //Obtain all lookups\n const organisationId = forms[0].organisationId\n const formsAppEnvironmentId = forms[0].formsAppEnvironmentId\n await getFormElementLookups(\n organisationId,\n formsAppEnvironmentId,\n abortSignal,\n )\n })(),\n ])\n}\n\n/**\n * Get the Freshdesk Fields associated with a form\n *\n * @param formId The identifier for the form to fetch freshdesk fields for\n * @param abortSignal A signal to abort any asynchronous processing\n * @returns An array of Freshdesk Fields\n */\nasync function getFreshdeskFields(\n formId: number,\n abortSignal: AbortSignal,\n): Promise<FreshdeskTypes.FreshdeskField[]> {\n return await getRequest<FreshdeskTypes.FreshdeskField[]>(\n `${tenants.current.apiOrigin}/forms/${formId}/freshdesk-fields`,\n abortSignal,\n )\n}\n\n/**\n * Parse Freshdesk Field options associated with a form element as form element\n * options.\n *\n * @param freshdeskFields An array of Freshdesk Fields\n * @param element The element to array of Freshdesk Fields\n * @returns An object containing valid options or a predictable error\n */\nfunction parseFreshdeskFieldOptions(\n freshdeskFields: FreshdeskTypes.FreshdeskField[],\n element: FormTypes.FormElementWithOptions,\n):\n | {\n type: 'OPTIONS'\n options: FormTypes.ChoiceElementOption[]\n }\n | {\n type: 'ERROR'\n error: OneBlinkAppsError\n } {\n const freshdeskField = freshdeskFields.find(\n (freshdeskField) => element.freshdeskFieldName === freshdeskField.name,\n )\n if (!freshdeskField) {\n return {\n type: 'ERROR',\n error: new OneBlinkAppsError(\n `Freshdesk Field does not exist. Please contact your administrator to rectify the issue.`,\n {\n title: 'Missing Freshdesk Field',\n originalError: new Error(JSON.stringify(element, null, 2)),\n },\n ),\n }\n }\n const options = freshdeskField.options\n if (!Array.isArray(options)) {\n return {\n type: 'ERROR',\n error: new OneBlinkAppsError(\n `Freshdesk Field does not have options. Please contact your administrator to rectify the issue.`,\n {\n title: 'Invalid Freshdesk Field',\n originalError: new Error(\n JSON.stringify({ element, freshdeskField }, null, 2),\n ),\n },\n ),\n }\n }\n\n return {\n type: 'OPTIONS',\n options: mapNestedOptions(options) || [],\n }\n}\n\nconst mapNestedOptions = (\n options: FreshdeskTypes.FreshdeskFieldOption[] | undefined,\n): FormTypes.ChoiceElementOption[] | undefined => {\n return options?.map<FormTypes.ChoiceElementOption>(\n ({ value, label, options: nestedOptions }) => ({\n id: value.toString(),\n value: value.toString(),\n label,\n options: mapNestedOptions(\n nestedOptions,\n ) as FormTypes.DynamicChoiceElementOption[],\n }),\n )\n}\n\n/**\n * Get configuration for a OneBlink Form.\n *\n * #### Example\n *\n * ```js\n * const formId = 1\n * const configuration = await formService.getFormConfiguration(formId)\n * ```\n *\n * @param formId\n * @param abortSignal\n * @returns\n */\nasync function getFormConfiguration(\n formId: number,\n abortSignal?: AbortSignal,\n): Promise<EnvironmentTypes.FormsAppEnvironmentConfiguration> {\n const url = `${tenants.current.apiOrigin}/forms/${formId}/configuration`\n\n try {\n return await getRequest<EnvironmentTypes.FormsAppEnvironmentConfiguration>(\n url,\n abortSignal,\n )\n } catch (err) {\n Sentry.captureException(err)\n\n const error = err as HTTPError\n\n if (isOffline()) {\n throw new OneBlinkAppsError(\n 'You are currently offline and do not have a local copy of this form available, please connect to the internet and try again',\n {\n originalError: error,\n isOffline: true,\n },\n )\n }\n\n switch (error.status) {\n case 400:\n case 404: {\n throw new OneBlinkAppsError(\n 'We could not find the form you are looking for. Please contact support if the problem persists.',\n {\n originalError: error,\n title: 'Unknown Form',\n httpStatusCode: error.status,\n },\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 {\n FormElementOptionsSetResult,\n getForms,\n getForm,\n FormElementLookupResult,\n getFormElementLookups,\n getFormElementLookupById,\n getFormElementOptionsSets,\n getFormElementOptionsSetOptions,\n parseFormElementOptions,\n getFreshdeskFields,\n parseFreshdeskFieldOptions,\n loadFormElementDynamicOptions,\n getFormConfiguration,\n}\n"]}
@@ -2,7 +2,7 @@ import * as React from 'react';
2
2
  import { ArcGISTypes, FormTypes } from '@oneblink/types';
3
3
  import { ArcGISWebMapElementValue } from '@oneblink/types/typescript/arcgis';
4
4
  import { FormElementValueChangeHandler } from '../types/form';
5
- import '../styles/arcgis-external.css';
5
+ import '@arcgis/core/assets/esri/themes/light/main.css';
6
6
  type Props = {
7
7
  element: FormTypes.ArcGISWebMapElement;
8
8
  id: string;
@@ -22,7 +22,7 @@ import { v4 as uuid } from 'uuid';
22
22
  import OnLoading from '../components/renderer/OnLoading';
23
23
  import MaterialIcon from './MaterialIcon';
24
24
  import useIsPageVisible from '../hooks/useIsPageVisible';
25
- import '../styles/arcgis-external.css';
25
+ import '@arcgis/core/assets/esri/themes/light/main.css';
26
26
  function DrawingOptionsList({ options, sketchTool, onClose, sketchToolType, setSelectedGraphicAttributes, }) {
27
27
  if (!sketchTool.current)
28
28
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGISWebMap.js","sourceRoot":"","sources":["../../src/components/ArcGISWebMap.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { ArcGISTypes, FormTypes } from '@oneblink/types'\nimport MapView from '@arcgis/core/views/MapView'\nimport WebMap from '@arcgis/core/WebMap'\nimport Home from '@arcgis/core/widgets/Home'\nimport Search from '@arcgis/core/widgets/Search'\nimport Zoom from '@arcgis/core/widgets/Zoom'\nimport LayerList from '@arcgis/core/widgets/LayerList'\nimport Expand from '@arcgis/core/widgets/Expand'\nimport BaseMapGallery from '@arcgis/core/widgets/BasemapGallery'\nimport Sketch from '@arcgis/core/widgets/Sketch'\nimport GraphicsLayer from '@arcgis/core/layers/GraphicsLayer'\nimport Graphic from '@arcgis/core/Graphic'\nimport Popup from '@arcgis/core/widgets/Popup'\nimport {\n Point,\n Polygon,\n SpatialReference,\n Polyline,\n} from '@arcgis/core/geometry'\nimport TextSymbol from '@arcgis/core/symbols/TextSymbol'\nimport * as geometryEngine from '@arcgis/core/geometry/geometryEngine'\nimport { Box, Divider, IconButton } from '@mui/material'\nimport throttle from 'lodash.throttle'\nimport { localisationService } from '../apps'\nimport { v4 as uuid } from 'uuid'\n\nimport OnLoading from '../components/renderer/OnLoading'\nimport MaterialIcon from './MaterialIcon'\n\nimport useIsPageVisible from '../hooks/useIsPageVisible'\nimport { ArcGISWebMapElementValue } from '@oneblink/types/typescript/arcgis'\nimport { FormElementValueChangeHandler } from '../types/form'\nimport '../styles/arcgis-external.css'\nimport Layer from '@arcgis/core/layers/Layer'\n\ntype Props = {\n element: FormTypes.ArcGISWebMapElement\n id: string\n value: ArcGISWebMapElementValue | undefined\n onChange: FormElementValueChangeHandler<ArcGISWebMapElementValue>\n automatedSnapshotFileName: string\n 'aria-describedby'?: string\n takeScreenShotRef: React.RefObject<\n | ((view?: ArcGISTypes.ArcGISWebMapElementValue['view']) => Promise<{\n dataUrl: string\n }>)\n | null\n >\n}\n\ntype SketchCreateTool = Parameters<Sketch['create']>[0]\n\nfunction DrawingOptionsList({\n options,\n sketchTool,\n onClose,\n sketchToolType,\n setSelectedGraphicAttributes,\n}: {\n options: { id: string; label: string; value: string; description?: string }[]\n onClose: () => void\n sketchTool: React.RefObject<Sketch | null>\n sketchToolType: SketchCreateTool\n setSelectedGraphicAttributes: (opt: {\n label: string\n value: string\n description?: string\n }) => void\n}) {\n if (!sketchTool.current) return null\n return (\n <div className=\"esri-widget\">\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <b style={{ padding: '0.5rem' }}>Select an option</b>\n <IconButton\n onClick={(e) => {\n e.stopPropagation()\n onClose()\n }}\n size=\"small\"\n data-cypress=\"copy-to-clip-board-button\"\n >\n <MaterialIcon fontSize=\"small\">close</MaterialIcon>\n </IconButton>\n </Box>\n <Divider sx={{ backgroundColor: 'unset', margin: '0px 8px' }} />\n <Box sx={{ maxHeight: '200px', overflowY: 'auto' }}>\n {options?.map(({ id, value, label, description }) => (\n <div\n key={id}\n className=\"ob-list__item is-clickable\"\n style={{ alignItems: 'center' }}\n onClick={() => {\n onClose()\n sketchTool?.current?.create(sketchToolType)\n setSelectedGraphicAttributes({ value, label, description })\n }}\n >\n {label}\n </div>\n ))}\n </Box>\n </div>\n )\n}\n\nfunction FormElementArcGISWebMap({\n element,\n id,\n value,\n onChange,\n takeScreenShotRef,\n automatedSnapshotFileName,\n ...props\n}: Props) {\n const ref = React.useRef<HTMLDivElement | null>(null)\n const layerPanelRef = React.useRef<Expand>(null)\n const mapGalleryPanelRef = React.useRef<Expand>(null)\n const sketchToolRef = React.useRef<Sketch>(null)\n const drawingLayerRef = React.useRef<GraphicsLayer>(null)\n const selectedGraphicForUpdate = React.useRef<string | undefined>(undefined)\n const mapViewRef = React.useRef<MapView>(null)\n const measurementLayerRef = React.useRef<GraphicsLayer>(null)\n const defaultLayersRef = React.useRef<Layer[]>(null)\n\n const [loadError, setLoadError] = React.useState<Error>()\n const [isLoading, setIsLoading] = React.useState<boolean>(false)\n const isPageVisible = useIsPageVisible()\n const [selectedGraphicAttributes, setSelectedGraphicAttributes] =\n React.useState<{\n value: string\n label: string\n description?: string\n }>()\n // only used when an allowed drawing tool also has a list of graphic attribute options to display to the user\n const [activeSketchToolMenu, setActiveSketchToolMenu] =\n React.useState<SketchCreateTool>()\n\n const updateDrawingInputSubmissionValue = React.useCallback(() => {\n const updatedGraphics = drawingLayerRef.current?.graphics\n .toArray()\n .map((graphic) => graphic.toJSON())\n\n onChange(element, {\n value: (existingValue) => ({\n ...(existingValue || {}),\n drawingLayer: updatedGraphics,\n userInput: updatedGraphics,\n // Remove automated snapshot images when drawing again\n snapshotImages: existingValue?.snapshotImages?.filter(\n (snapshotImage) =>\n snapshotImage.fileName !== automatedSnapshotFileName,\n ),\n }),\n })\n }, [automatedSnapshotFileName, element, onChange])\n\n const updateMapViewSubmissionValue = React.useCallback(() => {\n const zoom = mapViewRef.current?.zoom\n const latitude = mapViewRef.current?.center.latitude\n const longitude = mapViewRef.current?.center.longitude\n if (zoom && latitude && longitude) {\n onChange(element, {\n value: (existingValue) => ({\n ...(existingValue || {}),\n view: {\n zoom,\n latitude,\n longitude,\n },\n }),\n })\n }\n }, [element, onChange])\n\n const getGeometryPoints = (\n geom: __esri.Geometry,\n spatialRef: SpatialReference,\n ) => {\n if (geom.type === 'polygon') {\n const polygon = geom as Polygon\n return polygon.rings[0].map(\n (ring) =>\n new Point({\n x: ring[0],\n y: ring[1],\n spatialReference: spatialRef,\n }),\n )\n } else if (geom.type === 'polyline') {\n const polyline = geom as Polyline\n return polyline.paths[0].map(\n (path) =>\n new Point({\n x: path[0],\n y: path[1],\n spatialReference: spatialRef,\n }),\n )\n }\n }\n\n const addMeasurementLabels = React.useCallback(\n (graphics: __esri.Graphic[]) => {\n if (!element.measurementDimensionsEnabled) return\n const spatialRef = new SpatialReference({ wkid: 3857 })\n const measurementLayer = measurementLayerRef.current\n const mapView = mapViewRef.current\n if (!measurementLayer || !mapView) return\n measurementLayer.removeAll()\n\n for (const graphic of graphics) {\n const geom = graphic.geometry\n if (!geom || (geom.type !== 'polygon' && geom.type !== 'polyline'))\n continue\n\n const points = getGeometryPoints(geom, spatialRef)\n if (!points) continue\n\n const { distanceUnit, distanceUnitShortName } =\n localisationService.getDistanceUnits()\n if (distanceUnit !== 'meters' && distanceUnit !== 'feet') {\n console.warn(\n 'Unsupported distance unit provided in tenant configuration: ',\n distanceUnit,\n )\n return\n }\n const graphics: Graphic[] = []\n\n for (let i = 1; i < points.length; i++) {\n const point = points[i]\n const previousPoint = points[i - 1]\n if (\n typeof point.latitude !== 'number' ||\n typeof point.longitude !== 'number' ||\n typeof previousPoint.latitude !== 'number' ||\n typeof previousPoint.longitude !== 'number'\n ) {\n continue\n }\n const x1 = point.x\n const x2 = previousPoint.x\n const y1 = point.y\n const y2 = previousPoint.y\n\n const midpoint = new Point({\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2,\n spatialReference: spatialRef,\n })\n\n // Angle of the measurement label - this will be rotated to be parallel with the polygon or polyline edge\n const dx = x2 - x1\n const dy = y2 - y1\n const radians = Math.atan2(dy, dx)\n let angle = radians * (-180 / Math.PI)\n if (angle > 90 || angle < -90) {\n angle += 180\n }\n\n // offset of the measurement label against the edge of the polygon/polyline it's measuring\n const pixelOffset = 10\n const normalAngle = radians + Math.PI / 2\n const offsetScreenX = pixelOffset * Math.cos(normalAngle)\n const offsetScreenY = pixelOffset * Math.sin(normalAngle)\n\n const screenPoint = mapView.toScreen(midpoint)\n if (!screenPoint) {\n continue\n }\n screenPoint.x += offsetScreenX\n screenPoint.y -= offsetScreenY\n const offsetMapPoint = mapView.toMap(screenPoint)\n\n const polyline = new Polyline({\n paths: [\n [\n [point.longitude, point.latitude],\n [previousPoint.longitude, previousPoint.latitude],\n ],\n ],\n spatialReference: { wkid: 4326 },\n })\n const distance = geometryEngine.geodesicLength(polyline, distanceUnit)\n graphics.push(\n new Graphic({\n geometry: offsetMapPoint,\n symbol: new TextSymbol({\n text: distance.toFixed(0) + distanceUnitShortName,\n color: 'black',\n haloColor: 'white',\n haloSize: 1,\n angle,\n }),\n }),\n )\n }\n\n measurementLayer.addMany(graphics)\n mapViewRef.current?.map?.reorder(\n measurementLayer,\n mapViewRef.current?.map?.layers.length,\n )\n }\n },\n [element],\n )\n\n const clearMeasurementLabels = React.useCallback(() => {\n if (measurementLayerRef.current) {\n measurementLayerRef.current.removeAll()\n }\n }, [])\n\n React.useEffect(() => {\n if (element.readOnly) return\n // event listeners for drawing tool creates/updates/deletes\n // these need to be removed and recreated when the submission value changes\n // to ensure they always have access to the latest submission value\n const createListener = sketchToolRef.current?.on(\n 'create',\n throttle((sketchEvent: __esri.SketchCreateEvent) => {\n if (sketchEvent.state === 'active') {\n addMeasurementLabels([sketchEvent.graphic])\n }\n if (sketchEvent.state === 'complete') {\n if (selectedGraphicAttributes) {\n sketchEvent.graphic.attributes = {\n name: selectedGraphicAttributes.value,\n label: selectedGraphicAttributes.label,\n description: selectedGraphicAttributes.description,\n }\n setSelectedGraphicAttributes(undefined)\n }\n updateDrawingInputSubmissionValue()\n clearMeasurementLabels()\n }\n if (sketchEvent.state === 'cancel') {\n setSelectedGraphicAttributes(undefined)\n clearMeasurementLabels()\n }\n }, 100),\n )\n\n const updateListener = sketchToolRef.current?.on(\n 'update',\n throttle((sketchEvent: __esri.SketchUpdateEvent) => {\n if (sketchEvent.state === 'active') {\n addMeasurementLabels(sketchEvent.graphics)\n }\n if (sketchEvent.state === 'complete') {\n // only update the submission value if the graphic's geometry was actually changed\n if (\n JSON.stringify(sketchEvent.graphics[0].geometry?.toJSON()) !==\n selectedGraphicForUpdate.current\n ) {\n updateDrawingInputSubmissionValue()\n }\n selectedGraphicForUpdate.current = undefined\n clearMeasurementLabels()\n }\n if (sketchEvent.state === 'start') {\n selectedGraphicForUpdate.current = JSON.stringify(\n sketchEvent.graphics[0].geometry?.clone().toJSON(),\n )\n addMeasurementLabels(sketchEvent.graphics)\n }\n }, 100),\n )\n\n const deleteListener = sketchToolRef.current?.on('delete', () => {\n mapViewRef.current?.closePopup()\n updateDrawingInputSubmissionValue()\n clearMeasurementLabels()\n })\n\n const mapViewChangeListener = mapViewRef.current?.watch(\n 'stationary',\n () => {\n const mapView = mapViewRef.current\n if (mapView && mapView.stationary) {\n const hasViewChanged =\n mapView.zoom !== value?.view?.zoom ||\n mapView.center.longitude !== value?.view?.longitude ||\n mapView.center.latitude !== value?.view?.latitude\n if (hasViewChanged) {\n updateMapViewSubmissionValue()\n }\n }\n },\n )\n\n const sketchToolListener = sketchToolRef.current?.viewModel.watch(\n 'activeTool',\n () => {\n if (selectedGraphicAttributes) {\n return\n }\n const activeTool = sketchToolRef.current?.activeTool\n const hasGraphicAttributeOptions = !!element.allowedDrawingTools?.find(\n (tool) => tool.type === activeTool,\n )?.graphicAttributeOptions?.length\n\n if (activeTool) {\n if (\n hasGraphicAttributeOptions &&\n (activeTool === 'point' ||\n activeTool === 'polygon' ||\n activeTool === 'circle' ||\n activeTool === 'rectangle' ||\n activeTool === 'polyline')\n ) {\n // the sketch.create() fn only allows active tools of the above 5 types\n // hence we must check above to keep the types happy further down the line\n sketchToolRef.current?.cancel()\n setActiveSketchToolMenu(activeTool)\n } else {\n setActiveSketchToolMenu(undefined)\n }\n }\n },\n )\n\n mapViewRef.current?.on('click', (event) => {\n mapViewRef.current?.hitTest(event).then((response) => {\n // the \"hit test\" will typically yield the graphic we want to display the popup for,\n // and an ArcGIS built-in graphic which highlights the selected graphic.\n // By filtering for the graphic with the \"label\" attribute, we're able to reliably\n // get the graphic we want to display the popup for.\n const result = response.results\n .filter((r) => r.type === 'graphic')\n .find((r) => !!r.graphic.attributes?.label)\n\n if (result) {\n mapViewRef.current?.openPopup({\n title: result.graphic.attributes.label,\n content: result.graphic.attributes.description,\n })\n }\n })\n })\n\n return () => {\n createListener?.remove()\n updateListener?.remove()\n deleteListener?.remove()\n mapViewChangeListener?.remove()\n sketchToolListener?.remove()\n }\n }, [\n isLoading,\n value,\n updateDrawingInputSubmissionValue,\n updateMapViewSubmissionValue,\n element,\n selectedGraphicAttributes,\n addMeasurementLabels,\n clearMeasurementLabels,\n ])\n\n const stringifedLayersRef = React.useRef<string>('')\n\n const onSubmissionValueChange = React.useCallback(() => {\n const view = mapViewRef.current\n const map = mapViewRef.current?.map\n if (!view || !map) return\n\n // if the layers have changed or if the map has no layers, remove all layers and repaint\n const currentStringifedLayers = JSON.stringify(value?.layers)\n if (\n stringifedLayersRef.current !== currentStringifedLayers ||\n !map.layers.length\n ) {\n stringifedLayersRef.current = currentStringifedLayers\n // remove all layers and repaint\n map.layers.removeAll()\n if (defaultLayersRef.current) {\n // redraw default layers first\n defaultLayersRef.current.forEach((layer) => {\n map.add(layer)\n })\n }\n\n if (value?.layers) {\n for (const layer of value.layers) {\n const newLayer = new GraphicsLayer({\n title: layer.title as string,\n id: layer.id,\n })\n newLayer.addMany(layer.graphics.map((g) => Graphic.fromJSON(g)))\n newLayer.visible =\n typeof layer.visible === 'boolean' ? layer.visible : true\n map.layers.add(newLayer)\n }\n }\n }\n\n // add the web map's drawing and measurement layers back\n const drawingLayer = drawingLayerRef.current\n if (value?.drawingLayer && drawingLayer) {\n drawingLayer.removeAll()\n drawingLayer.addMany(value.drawingLayer.map((g) => Graphic.fromJSON(g)))\n map.layers.add(drawingLayer)\n map.layers.reorder(drawingLayer, map.layers.length - 1)\n }\n if (measurementLayerRef.current) {\n map.layers.add(measurementLayerRef.current)\n map.layers.reorder(measurementLayerRef.current, map.layers.length - 1)\n }\n if (value?.view) {\n view.zoom = value.view.zoom\n view.center = new Point({\n latitude: value.view.latitude,\n longitude: value.view.longitude,\n })\n }\n }, [value])\n\n React.useEffect(() => {\n if (!isLoading && mapViewRef.current) {\n onSubmissionValueChange()\n }\n // only run the above when the submission value changes or the map finishes loading\n }, [onSubmissionValueChange, isLoading])\n\n const drawingOptionsContainerId = `OneBlinkDrawingOptionsSelector-${element.id}`\n\n React.useEffect(() => {\n const loadMap = async () => {\n try {\n const map = new WebMap({\n portalItem: {\n id: element.webMapId,\n },\n basemap: element.basemapId || 'streets',\n })\n await map.load()\n\n const view = new MapView({\n map,\n container: ref.current || undefined,\n popup: new Popup({\n dockEnabled: true,\n dockOptions: {\n buttonEnabled: false,\n breakpoint: false,\n position: 'bottom-left',\n },\n }),\n })\n\n // remove default widgets\n const components = view.ui.getComponents()\n for (const component of components) {\n view.ui.remove(component)\n }\n\n if (element.addressSearchWidgetEnabled) {\n view.ui.add(\n new Search({\n view,\n }),\n 'top-left',\n )\n }\n\n if (element.homeWidgetEnabled) {\n view.ui.add(\n new Home({\n view,\n }),\n 'top-left',\n )\n }\n\n view.ui.add(\n new Zoom({\n view,\n }),\n 'bottom-right',\n )\n\n const layerList = new LayerList({\n view,\n })\n\n layerPanelRef.current = new Expand({\n expandIcon: 'layers',\n view,\n content: layerList,\n expanded: element.showLayerPanel,\n mode: 'floating',\n visible: false,\n })\n\n view.ui.add(layerPanelRef.current, 'top-right')\n\n const baseMapGallery = new BaseMapGallery({ view })\n\n mapGalleryPanelRef.current = new Expand({\n expandIcon: 'basemap',\n view,\n content: baseMapGallery,\n mode: 'floating',\n visible: false,\n })\n\n view.ui.add(mapGalleryPanelRef.current, 'top-left')\n\n let drawingLayerId: string | undefined\n let measurementLayerId: string | undefined\n if (!element.readOnly && element.allowedDrawingTools?.length) {\n drawingLayerId = uuid()\n const drawingLayer = new GraphicsLayer({\n id: drawingLayerId,\n title: 'Drawing',\n })\n drawingLayerRef.current = drawingLayer\n map.layers.add(drawingLayer)\n\n // Add measurement layer above drawing layer\n if (element.measurementDimensionsEnabled) {\n measurementLayerId = uuid()\n const measurementLayer = new GraphicsLayer({\n id: measurementLayerId,\n title: 'Measurements',\n listMode: 'hide',\n })\n measurementLayerRef.current = measurementLayer\n map.layers.add(measurementLayer)\n }\n\n const sketch = new Sketch({\n view,\n layer: drawingLayer,\n creationMode: 'single',\n layout: 'vertical',\n availableCreateTools: (\n ['point', 'polyline', 'polygon', 'rectangle', 'circle'] as const\n ).filter((createTool) =>\n element.allowedDrawingTools?.find(\n (tool) => tool.type === createTool,\n ),\n ),\n // hiding the below by default\n visibleElements: {\n duplicateButton: false,\n settingsMenu: false,\n undoRedoMenu: false,\n selectionTools: {\n 'lasso-selection': false,\n 'rectangle-selection': false,\n },\n },\n })\n sketchToolRef.current = sketch\n view.ui.add(sketch, 'bottom-right')\n view.ui.add(drawingOptionsContainerId, 'bottom-right')\n }\n\n // once the view has loaded\n view.when(() => {\n mapViewRef.current = view\n\n // when updating the map on submission value change,\n // we completely wipe all layers and redraw from scratch.\n // The below caters for web maps that load in with pre-existing layers,\n // which is usually the case when a web map id is provided.\n // We will store these pre-existing layers and ensure they're passed\n // to any redraw logic. We take layers from map.layers (as opposed to map.allLayers)\n // as this omits system generated layers like the basemap, which aren't removed when\n // we redraw regardless.\n defaultLayersRef.current = map.layers\n .toArray()\n .filter(\n (l) => l.id !== measurementLayerId && l.id !== drawingLayerId,\n )\n\n takeScreenShotRef.current = async (\n viewToScreenShot?: ArcGISTypes.ArcGISWebMapElementValue['view'],\n ) => {\n if (viewToScreenShot) {\n await view.goTo(\n {\n center: [\n viewToScreenShot.longitude,\n viewToScreenShot.latitude,\n ],\n zoom: viewToScreenShot.zoom,\n },\n {\n animate: true,\n },\n )\n console.log('waiting for view to render visible')\n await new Promise((resolve) => {\n if (!view.updating) {\n resolve(undefined)\n } else {\n const handle = view.watch('updating', (updating) => {\n if (!updating) {\n handle.remove()\n resolve(undefined)\n }\n })\n }\n })\n }\n const screenshot = await view.takeScreenshot()\n return {\n dataUrl: screenshot.dataUrl,\n }\n }\n setIsLoading(false)\n })\n } catch (e) {\n console.warn('Error while trying to load arcgis web map ', e)\n setLoadError(e as Error)\n setIsLoading(false)\n }\n }\n\n if (!mapViewRef.current && !isLoading) {\n setIsLoading(true)\n loadMap()\n }\n }, [drawingOptionsContainerId, element, isLoading, takeScreenShotRef, value])\n\n React.useEffect(() => {\n if (!isLoading) {\n if (isPageVisible) {\n if (layerPanelRef.current) {\n layerPanelRef.current.visible = true\n }\n if (mapGalleryPanelRef.current) {\n mapGalleryPanelRef.current.visible = true\n }\n } else {\n if (layerPanelRef.current) {\n layerPanelRef.current.visible = false\n }\n if (mapGalleryPanelRef.current) {\n mapGalleryPanelRef.current.visible = false\n }\n }\n }\n }, [isPageVisible, isLoading])\n\n if (loadError) {\n return (\n <figure className=\"ob-figure\">\n <div className=\"figure-content has-text-centered\">\n <MaterialIcon className=\"icon-large has-margin-bottom-6 has-text-warning\">\n error\n </MaterialIcon>\n <h4 className=\"title is-4\">We were unable to display your web map</h4>\n <p>{loadError.message}</p>\n </div>\n </figure>\n )\n }\n\n return (\n <>\n {isLoading && (\n <div className=\"figure-content-absolute-center\">\n <OnLoading small />\n </div>\n )}\n <div\n className=\"arcgis-web-map\"\n ref={ref}\n id={id}\n aria-describedby={props['aria-describedby']}\n />\n <div id={drawingOptionsContainerId}>\n {!!activeSketchToolMenu && sketchToolRef && (\n <DrawingOptionsList\n options={\n element.allowedDrawingTools?.find(\n (tool) => tool.type === activeSketchToolMenu,\n )?.graphicAttributeOptions || []\n }\n onClose={() => setActiveSketchToolMenu(undefined)}\n setSelectedGraphicAttributes={(opt) => {\n setSelectedGraphicAttributes(opt)\n }}\n sketchToolType={activeSketchToolMenu}\n sketchTool={sketchToolRef}\n />\n )}\n </div>\n </>\n )\n}\n\nexport default React.memo(FormElementArcGISWebMap)\n"]}
1
+ {"version":3,"file":"ArcGISWebMap.js","sourceRoot":"","sources":["../../src/components/ArcGISWebMap.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from 'react'\nimport { ArcGISTypes, FormTypes } from '@oneblink/types'\nimport MapView from '@arcgis/core/views/MapView'\nimport WebMap from '@arcgis/core/WebMap'\nimport Home from '@arcgis/core/widgets/Home'\nimport Search from '@arcgis/core/widgets/Search'\nimport Zoom from '@arcgis/core/widgets/Zoom'\nimport LayerList from '@arcgis/core/widgets/LayerList'\nimport Expand from '@arcgis/core/widgets/Expand'\nimport BaseMapGallery from '@arcgis/core/widgets/BasemapGallery'\nimport Sketch from '@arcgis/core/widgets/Sketch'\nimport GraphicsLayer from '@arcgis/core/layers/GraphicsLayer'\nimport Graphic from '@arcgis/core/Graphic'\nimport Popup from '@arcgis/core/widgets/Popup'\nimport {\n Point,\n Polygon,\n SpatialReference,\n Polyline,\n} from '@arcgis/core/geometry'\nimport TextSymbol from '@arcgis/core/symbols/TextSymbol'\nimport * as geometryEngine from '@arcgis/core/geometry/geometryEngine'\nimport { Box, Divider, IconButton } from '@mui/material'\nimport throttle from 'lodash.throttle'\nimport { localisationService } from '../apps'\nimport { v4 as uuid } from 'uuid'\n\nimport OnLoading from '../components/renderer/OnLoading'\nimport MaterialIcon from './MaterialIcon'\n\nimport useIsPageVisible from '../hooks/useIsPageVisible'\nimport { ArcGISWebMapElementValue } from '@oneblink/types/typescript/arcgis'\nimport { FormElementValueChangeHandler } from '../types/form'\nimport '@arcgis/core/assets/esri/themes/light/main.css'\nimport Layer from '@arcgis/core/layers/Layer'\n\ntype Props = {\n element: FormTypes.ArcGISWebMapElement\n id: string\n value: ArcGISWebMapElementValue | undefined\n onChange: FormElementValueChangeHandler<ArcGISWebMapElementValue>\n automatedSnapshotFileName: string\n 'aria-describedby'?: string\n takeScreenShotRef: React.RefObject<\n | ((view?: ArcGISTypes.ArcGISWebMapElementValue['view']) => Promise<{\n dataUrl: string\n }>)\n | null\n >\n}\n\ntype SketchCreateTool = Parameters<Sketch['create']>[0]\n\nfunction DrawingOptionsList({\n options,\n sketchTool,\n onClose,\n sketchToolType,\n setSelectedGraphicAttributes,\n}: {\n options: { id: string; label: string; value: string; description?: string }[]\n onClose: () => void\n sketchTool: React.RefObject<Sketch | null>\n sketchToolType: SketchCreateTool\n setSelectedGraphicAttributes: (opt: {\n label: string\n value: string\n description?: string\n }) => void\n}) {\n if (!sketchTool.current) return null\n return (\n <div className=\"esri-widget\">\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <b style={{ padding: '0.5rem' }}>Select an option</b>\n <IconButton\n onClick={(e) => {\n e.stopPropagation()\n onClose()\n }}\n size=\"small\"\n data-cypress=\"copy-to-clip-board-button\"\n >\n <MaterialIcon fontSize=\"small\">close</MaterialIcon>\n </IconButton>\n </Box>\n <Divider sx={{ backgroundColor: 'unset', margin: '0px 8px' }} />\n <Box sx={{ maxHeight: '200px', overflowY: 'auto' }}>\n {options?.map(({ id, value, label, description }) => (\n <div\n key={id}\n className=\"ob-list__item is-clickable\"\n style={{ alignItems: 'center' }}\n onClick={() => {\n onClose()\n sketchTool?.current?.create(sketchToolType)\n setSelectedGraphicAttributes({ value, label, description })\n }}\n >\n {label}\n </div>\n ))}\n </Box>\n </div>\n )\n}\n\nfunction FormElementArcGISWebMap({\n element,\n id,\n value,\n onChange,\n takeScreenShotRef,\n automatedSnapshotFileName,\n ...props\n}: Props) {\n const ref = React.useRef<HTMLDivElement | null>(null)\n const layerPanelRef = React.useRef<Expand>(null)\n const mapGalleryPanelRef = React.useRef<Expand>(null)\n const sketchToolRef = React.useRef<Sketch>(null)\n const drawingLayerRef = React.useRef<GraphicsLayer>(null)\n const selectedGraphicForUpdate = React.useRef<string | undefined>(undefined)\n const mapViewRef = React.useRef<MapView>(null)\n const measurementLayerRef = React.useRef<GraphicsLayer>(null)\n const defaultLayersRef = React.useRef<Layer[]>(null)\n\n const [loadError, setLoadError] = React.useState<Error>()\n const [isLoading, setIsLoading] = React.useState<boolean>(false)\n const isPageVisible = useIsPageVisible()\n const [selectedGraphicAttributes, setSelectedGraphicAttributes] =\n React.useState<{\n value: string\n label: string\n description?: string\n }>()\n // only used when an allowed drawing tool also has a list of graphic attribute options to display to the user\n const [activeSketchToolMenu, setActiveSketchToolMenu] =\n React.useState<SketchCreateTool>()\n\n const updateDrawingInputSubmissionValue = React.useCallback(() => {\n const updatedGraphics = drawingLayerRef.current?.graphics\n .toArray()\n .map((graphic) => graphic.toJSON())\n\n onChange(element, {\n value: (existingValue) => ({\n ...(existingValue || {}),\n drawingLayer: updatedGraphics,\n userInput: updatedGraphics,\n // Remove automated snapshot images when drawing again\n snapshotImages: existingValue?.snapshotImages?.filter(\n (snapshotImage) =>\n snapshotImage.fileName !== automatedSnapshotFileName,\n ),\n }),\n })\n }, [automatedSnapshotFileName, element, onChange])\n\n const updateMapViewSubmissionValue = React.useCallback(() => {\n const zoom = mapViewRef.current?.zoom\n const latitude = mapViewRef.current?.center.latitude\n const longitude = mapViewRef.current?.center.longitude\n if (zoom && latitude && longitude) {\n onChange(element, {\n value: (existingValue) => ({\n ...(existingValue || {}),\n view: {\n zoom,\n latitude,\n longitude,\n },\n }),\n })\n }\n }, [element, onChange])\n\n const getGeometryPoints = (\n geom: __esri.Geometry,\n spatialRef: SpatialReference,\n ) => {\n if (geom.type === 'polygon') {\n const polygon = geom as Polygon\n return polygon.rings[0].map(\n (ring) =>\n new Point({\n x: ring[0],\n y: ring[1],\n spatialReference: spatialRef,\n }),\n )\n } else if (geom.type === 'polyline') {\n const polyline = geom as Polyline\n return polyline.paths[0].map(\n (path) =>\n new Point({\n x: path[0],\n y: path[1],\n spatialReference: spatialRef,\n }),\n )\n }\n }\n\n const addMeasurementLabels = React.useCallback(\n (graphics: __esri.Graphic[]) => {\n if (!element.measurementDimensionsEnabled) return\n const spatialRef = new SpatialReference({ wkid: 3857 })\n const measurementLayer = measurementLayerRef.current\n const mapView = mapViewRef.current\n if (!measurementLayer || !mapView) return\n measurementLayer.removeAll()\n\n for (const graphic of graphics) {\n const geom = graphic.geometry\n if (!geom || (geom.type !== 'polygon' && geom.type !== 'polyline'))\n continue\n\n const points = getGeometryPoints(geom, spatialRef)\n if (!points) continue\n\n const { distanceUnit, distanceUnitShortName } =\n localisationService.getDistanceUnits()\n if (distanceUnit !== 'meters' && distanceUnit !== 'feet') {\n console.warn(\n 'Unsupported distance unit provided in tenant configuration: ',\n distanceUnit,\n )\n return\n }\n const graphics: Graphic[] = []\n\n for (let i = 1; i < points.length; i++) {\n const point = points[i]\n const previousPoint = points[i - 1]\n if (\n typeof point.latitude !== 'number' ||\n typeof point.longitude !== 'number' ||\n typeof previousPoint.latitude !== 'number' ||\n typeof previousPoint.longitude !== 'number'\n ) {\n continue\n }\n const x1 = point.x\n const x2 = previousPoint.x\n const y1 = point.y\n const y2 = previousPoint.y\n\n const midpoint = new Point({\n x: (x1 + x2) / 2,\n y: (y1 + y2) / 2,\n spatialReference: spatialRef,\n })\n\n // Angle of the measurement label - this will be rotated to be parallel with the polygon or polyline edge\n const dx = x2 - x1\n const dy = y2 - y1\n const radians = Math.atan2(dy, dx)\n let angle = radians * (-180 / Math.PI)\n if (angle > 90 || angle < -90) {\n angle += 180\n }\n\n // offset of the measurement label against the edge of the polygon/polyline it's measuring\n const pixelOffset = 10\n const normalAngle = radians + Math.PI / 2\n const offsetScreenX = pixelOffset * Math.cos(normalAngle)\n const offsetScreenY = pixelOffset * Math.sin(normalAngle)\n\n const screenPoint = mapView.toScreen(midpoint)\n if (!screenPoint) {\n continue\n }\n screenPoint.x += offsetScreenX\n screenPoint.y -= offsetScreenY\n const offsetMapPoint = mapView.toMap(screenPoint)\n\n const polyline = new Polyline({\n paths: [\n [\n [point.longitude, point.latitude],\n [previousPoint.longitude, previousPoint.latitude],\n ],\n ],\n spatialReference: { wkid: 4326 },\n })\n const distance = geometryEngine.geodesicLength(polyline, distanceUnit)\n graphics.push(\n new Graphic({\n geometry: offsetMapPoint,\n symbol: new TextSymbol({\n text: distance.toFixed(0) + distanceUnitShortName,\n color: 'black',\n haloColor: 'white',\n haloSize: 1,\n angle,\n }),\n }),\n )\n }\n\n measurementLayer.addMany(graphics)\n mapViewRef.current?.map?.reorder(\n measurementLayer,\n mapViewRef.current?.map?.layers.length,\n )\n }\n },\n [element],\n )\n\n const clearMeasurementLabels = React.useCallback(() => {\n if (measurementLayerRef.current) {\n measurementLayerRef.current.removeAll()\n }\n }, [])\n\n React.useEffect(() => {\n if (element.readOnly) return\n // event listeners for drawing tool creates/updates/deletes\n // these need to be removed and recreated when the submission value changes\n // to ensure they always have access to the latest submission value\n const createListener = sketchToolRef.current?.on(\n 'create',\n throttle((sketchEvent: __esri.SketchCreateEvent) => {\n if (sketchEvent.state === 'active') {\n addMeasurementLabels([sketchEvent.graphic])\n }\n if (sketchEvent.state === 'complete') {\n if (selectedGraphicAttributes) {\n sketchEvent.graphic.attributes = {\n name: selectedGraphicAttributes.value,\n label: selectedGraphicAttributes.label,\n description: selectedGraphicAttributes.description,\n }\n setSelectedGraphicAttributes(undefined)\n }\n updateDrawingInputSubmissionValue()\n clearMeasurementLabels()\n }\n if (sketchEvent.state === 'cancel') {\n setSelectedGraphicAttributes(undefined)\n clearMeasurementLabels()\n }\n }, 100),\n )\n\n const updateListener = sketchToolRef.current?.on(\n 'update',\n throttle((sketchEvent: __esri.SketchUpdateEvent) => {\n if (sketchEvent.state === 'active') {\n addMeasurementLabels(sketchEvent.graphics)\n }\n if (sketchEvent.state === 'complete') {\n // only update the submission value if the graphic's geometry was actually changed\n if (\n JSON.stringify(sketchEvent.graphics[0].geometry?.toJSON()) !==\n selectedGraphicForUpdate.current\n ) {\n updateDrawingInputSubmissionValue()\n }\n selectedGraphicForUpdate.current = undefined\n clearMeasurementLabels()\n }\n if (sketchEvent.state === 'start') {\n selectedGraphicForUpdate.current = JSON.stringify(\n sketchEvent.graphics[0].geometry?.clone().toJSON(),\n )\n addMeasurementLabels(sketchEvent.graphics)\n }\n }, 100),\n )\n\n const deleteListener = sketchToolRef.current?.on('delete', () => {\n mapViewRef.current?.closePopup()\n updateDrawingInputSubmissionValue()\n clearMeasurementLabels()\n })\n\n const mapViewChangeListener = mapViewRef.current?.watch(\n 'stationary',\n () => {\n const mapView = mapViewRef.current\n if (mapView && mapView.stationary) {\n const hasViewChanged =\n mapView.zoom !== value?.view?.zoom ||\n mapView.center.longitude !== value?.view?.longitude ||\n mapView.center.latitude !== value?.view?.latitude\n if (hasViewChanged) {\n updateMapViewSubmissionValue()\n }\n }\n },\n )\n\n const sketchToolListener = sketchToolRef.current?.viewModel.watch(\n 'activeTool',\n () => {\n if (selectedGraphicAttributes) {\n return\n }\n const activeTool = sketchToolRef.current?.activeTool\n const hasGraphicAttributeOptions = !!element.allowedDrawingTools?.find(\n (tool) => tool.type === activeTool,\n )?.graphicAttributeOptions?.length\n\n if (activeTool) {\n if (\n hasGraphicAttributeOptions &&\n (activeTool === 'point' ||\n activeTool === 'polygon' ||\n activeTool === 'circle' ||\n activeTool === 'rectangle' ||\n activeTool === 'polyline')\n ) {\n // the sketch.create() fn only allows active tools of the above 5 types\n // hence we must check above to keep the types happy further down the line\n sketchToolRef.current?.cancel()\n setActiveSketchToolMenu(activeTool)\n } else {\n setActiveSketchToolMenu(undefined)\n }\n }\n },\n )\n\n mapViewRef.current?.on('click', (event) => {\n mapViewRef.current?.hitTest(event).then((response) => {\n // the \"hit test\" will typically yield the graphic we want to display the popup for,\n // and an ArcGIS built-in graphic which highlights the selected graphic.\n // By filtering for the graphic with the \"label\" attribute, we're able to reliably\n // get the graphic we want to display the popup for.\n const result = response.results\n .filter((r) => r.type === 'graphic')\n .find((r) => !!r.graphic.attributes?.label)\n\n if (result) {\n mapViewRef.current?.openPopup({\n title: result.graphic.attributes.label,\n content: result.graphic.attributes.description,\n })\n }\n })\n })\n\n return () => {\n createListener?.remove()\n updateListener?.remove()\n deleteListener?.remove()\n mapViewChangeListener?.remove()\n sketchToolListener?.remove()\n }\n }, [\n isLoading,\n value,\n updateDrawingInputSubmissionValue,\n updateMapViewSubmissionValue,\n element,\n selectedGraphicAttributes,\n addMeasurementLabels,\n clearMeasurementLabels,\n ])\n\n const stringifedLayersRef = React.useRef<string>('')\n\n const onSubmissionValueChange = React.useCallback(() => {\n const view = mapViewRef.current\n const map = mapViewRef.current?.map\n if (!view || !map) return\n\n // if the layers have changed or if the map has no layers, remove all layers and repaint\n const currentStringifedLayers = JSON.stringify(value?.layers)\n if (\n stringifedLayersRef.current !== currentStringifedLayers ||\n !map.layers.length\n ) {\n stringifedLayersRef.current = currentStringifedLayers\n // remove all layers and repaint\n map.layers.removeAll()\n if (defaultLayersRef.current) {\n // redraw default layers first\n defaultLayersRef.current.forEach((layer) => {\n map.add(layer)\n })\n }\n\n if (value?.layers) {\n for (const layer of value.layers) {\n const newLayer = new GraphicsLayer({\n title: layer.title as string,\n id: layer.id,\n })\n newLayer.addMany(layer.graphics.map((g) => Graphic.fromJSON(g)))\n newLayer.visible =\n typeof layer.visible === 'boolean' ? layer.visible : true\n map.layers.add(newLayer)\n }\n }\n }\n\n // add the web map's drawing and measurement layers back\n const drawingLayer = drawingLayerRef.current\n if (value?.drawingLayer && drawingLayer) {\n drawingLayer.removeAll()\n drawingLayer.addMany(value.drawingLayer.map((g) => Graphic.fromJSON(g)))\n map.layers.add(drawingLayer)\n map.layers.reorder(drawingLayer, map.layers.length - 1)\n }\n if (measurementLayerRef.current) {\n map.layers.add(measurementLayerRef.current)\n map.layers.reorder(measurementLayerRef.current, map.layers.length - 1)\n }\n if (value?.view) {\n view.zoom = value.view.zoom\n view.center = new Point({\n latitude: value.view.latitude,\n longitude: value.view.longitude,\n })\n }\n }, [value])\n\n React.useEffect(() => {\n if (!isLoading && mapViewRef.current) {\n onSubmissionValueChange()\n }\n // only run the above when the submission value changes or the map finishes loading\n }, [onSubmissionValueChange, isLoading])\n\n const drawingOptionsContainerId = `OneBlinkDrawingOptionsSelector-${element.id}`\n\n React.useEffect(() => {\n const loadMap = async () => {\n try {\n const map = new WebMap({\n portalItem: {\n id: element.webMapId,\n },\n basemap: element.basemapId || 'streets',\n })\n await map.load()\n\n const view = new MapView({\n map,\n container: ref.current || undefined,\n popup: new Popup({\n dockEnabled: true,\n dockOptions: {\n buttonEnabled: false,\n breakpoint: false,\n position: 'bottom-left',\n },\n }),\n })\n\n // remove default widgets\n const components = view.ui.getComponents()\n for (const component of components) {\n view.ui.remove(component)\n }\n\n if (element.addressSearchWidgetEnabled) {\n view.ui.add(\n new Search({\n view,\n }),\n 'top-left',\n )\n }\n\n if (element.homeWidgetEnabled) {\n view.ui.add(\n new Home({\n view,\n }),\n 'top-left',\n )\n }\n\n view.ui.add(\n new Zoom({\n view,\n }),\n 'bottom-right',\n )\n\n const layerList = new LayerList({\n view,\n })\n\n layerPanelRef.current = new Expand({\n expandIcon: 'layers',\n view,\n content: layerList,\n expanded: element.showLayerPanel,\n mode: 'floating',\n visible: false,\n })\n\n view.ui.add(layerPanelRef.current, 'top-right')\n\n const baseMapGallery = new BaseMapGallery({ view })\n\n mapGalleryPanelRef.current = new Expand({\n expandIcon: 'basemap',\n view,\n content: baseMapGallery,\n mode: 'floating',\n visible: false,\n })\n\n view.ui.add(mapGalleryPanelRef.current, 'top-left')\n\n let drawingLayerId: string | undefined\n let measurementLayerId: string | undefined\n if (!element.readOnly && element.allowedDrawingTools?.length) {\n drawingLayerId = uuid()\n const drawingLayer = new GraphicsLayer({\n id: drawingLayerId,\n title: 'Drawing',\n })\n drawingLayerRef.current = drawingLayer\n map.layers.add(drawingLayer)\n\n // Add measurement layer above drawing layer\n if (element.measurementDimensionsEnabled) {\n measurementLayerId = uuid()\n const measurementLayer = new GraphicsLayer({\n id: measurementLayerId,\n title: 'Measurements',\n listMode: 'hide',\n })\n measurementLayerRef.current = measurementLayer\n map.layers.add(measurementLayer)\n }\n\n const sketch = new Sketch({\n view,\n layer: drawingLayer,\n creationMode: 'single',\n layout: 'vertical',\n availableCreateTools: (\n ['point', 'polyline', 'polygon', 'rectangle', 'circle'] as const\n ).filter((createTool) =>\n element.allowedDrawingTools?.find(\n (tool) => tool.type === createTool,\n ),\n ),\n // hiding the below by default\n visibleElements: {\n duplicateButton: false,\n settingsMenu: false,\n undoRedoMenu: false,\n selectionTools: {\n 'lasso-selection': false,\n 'rectangle-selection': false,\n },\n },\n })\n sketchToolRef.current = sketch\n view.ui.add(sketch, 'bottom-right')\n view.ui.add(drawingOptionsContainerId, 'bottom-right')\n }\n\n // once the view has loaded\n view.when(() => {\n mapViewRef.current = view\n\n // when updating the map on submission value change,\n // we completely wipe all layers and redraw from scratch.\n // The below caters for web maps that load in with pre-existing layers,\n // which is usually the case when a web map id is provided.\n // We will store these pre-existing layers and ensure they're passed\n // to any redraw logic. We take layers from map.layers (as opposed to map.allLayers)\n // as this omits system generated layers like the basemap, which aren't removed when\n // we redraw regardless.\n defaultLayersRef.current = map.layers\n .toArray()\n .filter(\n (l) => l.id !== measurementLayerId && l.id !== drawingLayerId,\n )\n\n takeScreenShotRef.current = async (\n viewToScreenShot?: ArcGISTypes.ArcGISWebMapElementValue['view'],\n ) => {\n if (viewToScreenShot) {\n await view.goTo(\n {\n center: [\n viewToScreenShot.longitude,\n viewToScreenShot.latitude,\n ],\n zoom: viewToScreenShot.zoom,\n },\n {\n animate: true,\n },\n )\n console.log('waiting for view to render visible')\n await new Promise((resolve) => {\n if (!view.updating) {\n resolve(undefined)\n } else {\n const handle = view.watch('updating', (updating) => {\n if (!updating) {\n handle.remove()\n resolve(undefined)\n }\n })\n }\n })\n }\n const screenshot = await view.takeScreenshot()\n return {\n dataUrl: screenshot.dataUrl,\n }\n }\n setIsLoading(false)\n })\n } catch (e) {\n console.warn('Error while trying to load arcgis web map ', e)\n setLoadError(e as Error)\n setIsLoading(false)\n }\n }\n\n if (!mapViewRef.current && !isLoading) {\n setIsLoading(true)\n loadMap()\n }\n }, [drawingOptionsContainerId, element, isLoading, takeScreenShotRef, value])\n\n React.useEffect(() => {\n if (!isLoading) {\n if (isPageVisible) {\n if (layerPanelRef.current) {\n layerPanelRef.current.visible = true\n }\n if (mapGalleryPanelRef.current) {\n mapGalleryPanelRef.current.visible = true\n }\n } else {\n if (layerPanelRef.current) {\n layerPanelRef.current.visible = false\n }\n if (mapGalleryPanelRef.current) {\n mapGalleryPanelRef.current.visible = false\n }\n }\n }\n }, [isPageVisible, isLoading])\n\n if (loadError) {\n return (\n <figure className=\"ob-figure\">\n <div className=\"figure-content has-text-centered\">\n <MaterialIcon className=\"icon-large has-margin-bottom-6 has-text-warning\">\n error\n </MaterialIcon>\n <h4 className=\"title is-4\">We were unable to display your web map</h4>\n <p>{loadError.message}</p>\n </div>\n </figure>\n )\n }\n\n return (\n <>\n {isLoading && (\n <div className=\"figure-content-absolute-center\">\n <OnLoading small />\n </div>\n )}\n <div\n className=\"arcgis-web-map\"\n ref={ref}\n id={id}\n aria-describedby={props['aria-describedby']}\n />\n <div id={drawingOptionsContainerId}>\n {!!activeSketchToolMenu && sketchToolRef && (\n <DrawingOptionsList\n options={\n element.allowedDrawingTools?.find(\n (tool) => tool.type === activeSketchToolMenu,\n )?.graphicAttributeOptions || []\n }\n onClose={() => setActiveSketchToolMenu(undefined)}\n setSelectedGraphicAttributes={(opt) => {\n setSelectedGraphicAttributes(opt)\n }}\n sketchToolType={activeSketchToolMenu}\n sketchTool={sketchToolRef}\n />\n )}\n </div>\n </>\n )\n}\n\nexport default React.memo(FormElementArcGISWebMap)\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@oneblink/apps-react",
3
3
  "description": "Helper functions for OneBlink apps in ReactJS.",
4
- "version": "9.0.2-beta.2",
4
+ "version": "9.1.0-beta.1",
5
5
  "author": "OneBlink <developers@oneblink.io> (https://oneblink.io)",
6
6
  "bugs": {
7
7
  "url": "https://github.com/oneblink/apps-react/issues"
@@ -12,7 +12,7 @@
12
12
  "@emotion/react": "^11.14.0",
13
13
  "@emotion/styled": "^11.14.1",
14
14
  "@nylas/react": "^3.1.2",
15
- "@oneblink/sdk-core": "^9.0.0",
15
+ "@oneblink/sdk-core": "^9.1.0-beta.2",
16
16
  "@oneblink/storage": "^5.0.0-beta.2",
17
17
  "@react-google-maps/api": "^2.20.8",
18
18
  "@react-input/mask": "^2.0.4",
@@ -1 +0,0 @@
1
- @import url('https://js.arcgis.com/4.29/@arcgis/core/assets/esri/themes/light/main.css');