@evoke-platform/ui-components 1.5.0-testing.11 → 1.5.0-testing.12

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.
@@ -1,8 +1,8 @@
1
1
  import { useNotification, } from '@evoke-platform/context';
2
- import { debounce, isEmpty, isObject } from 'lodash';
2
+ import { debounce, isEmpty } from 'lodash';
3
3
  import React, { useCallback, useEffect, useState } from 'react';
4
4
  import { Skeleton } from '../../../../../core';
5
- import { getMiddleObject, getPrefixedUrl, transformToWhere } from '../../../utils';
5
+ import { getMiddleObject, getPrefixedUrl, retrieveCustomErrorMessage, transformToWhere } from '../../../utils';
6
6
  import { DropdownRepeatableFieldInput } from './DropdownRepeatableFieldInput';
7
7
  export const DropdownRepeatableField = (props) => {
8
8
  const { id, property, criteria, instance, readOnly, apiServices, initialMiddleObjectInstances, middleObject, getMiddleObjectInstances, fieldHeight, viewLayout, } = props;
@@ -127,43 +127,41 @@ export const DropdownRepeatableField = (props) => {
127
127
  fetchEndObjectInstances();
128
128
  }
129
129
  }, [fetchEndObjectInstances, layoutLoaded]);
130
- const saveMiddleInstance = (endObjectId, endObjectName) => {
130
+ const saveMiddleInstance = async (endObjectId, endObjectName) => {
131
131
  if (property.objectId) {
132
132
  const middleObject = getMiddleObject(instance, property, endObjectId, endObjectName);
133
- apiServices.post(getPrefixedUrl(`/objects/${property.objectId}/instances/actions`), { actionId: `_create`, input: middleObject }, (error, newInstance) => {
134
- if (!error && newInstance && isObject(newInstance)) {
135
- setMiddleObjectInstances((prevObjectInstances) => [
136
- ...prevObjectInstances,
137
- newInstance,
138
- ]);
139
- }
140
- else {
141
- if (error) {
142
- setSnackbarError({
143
- showAlert: true,
144
- message: 'An error occured while adding an instance',
145
- isError: true,
146
- });
147
- setDropDownSelections(middleObjectInstances);
148
- }
149
- }
150
- });
151
- }
152
- };
153
- const removeMiddleInstance = (instanceId) => {
154
- apiServices.post(getPrefixedUrl(`/objects/${property.objectId}/instances/${instanceId}/actions`), { actionId: '_delete' }, (error, res) => {
155
- if (!error) {
156
- setMiddleObjectInstances((prevInstances) => prevInstances.filter((curr) => curr.id !== instanceId));
133
+ try {
134
+ const newInstance = await apiServices.post(getPrefixedUrl(`/objects/${property.objectId}/instances/actions`), { actionId: `_create`, input: middleObject });
135
+ setMiddleObjectInstances((prevObjectInstances) => [
136
+ ...prevObjectInstances,
137
+ newInstance,
138
+ ]);
157
139
  }
158
- else {
159
- setDropDownSelections(middleObjectInstances);
140
+ catch (err) {
160
141
  setSnackbarError({
161
142
  showAlert: true,
162
- message: 'An error occurred while deleting the instance',
143
+ message: retrieveCustomErrorMessage(err) ??
144
+ 'An error occured while adding an instance',
163
145
  isError: true,
164
146
  });
147
+ setDropDownSelections(middleObjectInstances);
165
148
  }
166
- });
149
+ }
150
+ };
151
+ const removeMiddleInstance = async (instanceId) => {
152
+ try {
153
+ await apiServices.post(getPrefixedUrl(`/objects/${property.objectId}/instances/${instanceId}/actions`), { actionId: '_delete' });
154
+ setMiddleObjectInstances((prevInstances) => prevInstances.filter((curr) => curr.id !== instanceId));
155
+ }
156
+ catch (err) {
157
+ setDropDownSelections(middleObjectInstances);
158
+ setSnackbarError({
159
+ showAlert: true,
160
+ message: retrieveCustomErrorMessage(err) ??
161
+ 'An error occurred while deleting the instance',
162
+ isError: true,
163
+ });
164
+ }
167
165
  };
168
166
  return initialLoading ? (React.createElement(Skeleton, null)) : (React.createElement(React.Fragment, null, middleObjectInstances && endObject && (React.createElement(DropdownRepeatableFieldInput, { id: id, property: property, readOnly: readOnly || !middleObject.actions?.some((action) => action.id === '_create'), layout: layout, middleObjectInstances: middleObjectInstances, endObjectInstances: endObjectInstances ?? [], endObject: endObject, searchValue: searchValue ?? '', loading: loading, handleSaveMiddleInstance: saveMiddleInstance, handleRemoveMiddleInstance: removeMiddleInstance, setSearchValue: setSearchValue, setSnackbarError: setSnackbarError, snackbarError: snackbarError, selectedOptions: selectedOptions, setSelectedOptions: setSelectedOptions, setDropdownSelections: setDropDownSelections, fieldHeight: fieldHeight }))));
169
167
  };
@@ -7,7 +7,7 @@ import sift from 'sift';
7
7
  import { Edit, TrashCan } from '../../../../../icons';
8
8
  import { Button, IconButton, Skeleton, Snackbar, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Tooltip, Typography, } from '../../../../core';
9
9
  import { Box } from '../../../../layout';
10
- import { getPrefixedUrl, normalizeDateTime } from '../../utils';
10
+ import { getPrefixedUrl, normalizeDateTime, retrieveCustomErrorMessage } from '../../utils';
11
11
  import { ActionDialog } from './ActionDialog';
12
12
  import { DocumentViewerCell } from './DocumentViewerCell';
13
13
  const styles = {
@@ -251,11 +251,10 @@ const RepeatableField = (props) => {
251
251
  isSuccessful = true;
252
252
  }
253
253
  catch (err) {
254
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
255
- error = err.response?.data?.error;
256
254
  setSnackbarError({
257
255
  showAlert: true,
258
- message: error?.message ?? `An error occurred while creating an instance`,
256
+ message: retrieveCustomErrorMessage(err) ??
257
+ `An error occurred while creating an instance`,
259
258
  isError: true,
260
259
  });
261
260
  setSubmitting && setSubmitting(false);
@@ -285,11 +284,9 @@ const RepeatableField = (props) => {
285
284
  isSuccessful = true;
286
285
  }
287
286
  catch (err) {
288
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
289
- error = err.response?.data?.error;
290
287
  setSnackbarError({
291
288
  showAlert: true,
292
- message: error?.message ??
289
+ message: retrieveCustomErrorMessage(err) ??
293
290
  `An error occurred while ${actionType === 'delete' ? ' deleting' : ' updating'} an instance`,
294
291
  isError: true,
295
292
  });
@@ -1,4 +1,4 @@
1
- import { ActionInput, ActionInputType, ApiServices, FormEntry, InputParameter, InputParameterReference, Obj, ObjectInstance, Property, PropertyType, UserAccount } from '@evoke-platform/context';
1
+ import { ActionInput, ActionInputType, ApiServices, AxiosError, FormEntry, InputParameter, InputParameterReference, Obj, ObjectInstance, Property, PropertyType, UserAccount } from '@evoke-platform/context';
2
2
  import { ReactComponent } from '@formio/react';
3
3
  import { LocalDateTime } from '@js-joda/core';
4
4
  import { AutocompleteOption } from '../../core';
@@ -50,3 +50,4 @@ export declare function isPropertyVisible(conditional: {
50
50
  }, formData: Record<string, unknown>): boolean;
51
51
  export declare function normalizeDateTime(dateTime: LocalDateTime): string;
52
52
  export declare function normalizeDates(instances: ObjectInstance[], object?: Obj): void;
53
+ export declare function retrieveCustomErrorMessage(error: AxiosError<any>): string | undefined;
@@ -129,12 +129,12 @@ export function convertFormToComponents(entries, parameters, object) {
129
129
  }
130
130
  else if (entry.type === 'input') {
131
131
  const displayOptions = entry.display;
132
- const parameter = parameters.find((parameter) => parameter.id === entry.parameterId);
132
+ const parameter = parameters.find((parameter) => entry.type === 'input' && parameter.id === entry.parameterId);
133
133
  if (!parameter) {
134
134
  return;
135
135
  }
136
- let property = object.properties?.find((p) => p.id === entry.parameterId) ?? {
137
- id: entry.parameterId,
136
+ let property = object.properties?.find((p) => entry.type === 'input' && p.id === entry.parameterId) ?? {
137
+ id: entry.type === 'input' ? entry.parameterId : undefined,
138
138
  };
139
139
  if (property.id?.includes('.')) {
140
140
  const topLevelProperty = object.properties?.find((p) => p.id === property.id?.split('.')[0] && (p.type === 'address' || p.type === 'user'));
@@ -163,7 +163,7 @@ export function convertFormToComponents(entries, parameters, object) {
163
163
  type,
164
164
  multiple: ['array', 'document'].includes(parameter.type),
165
165
  data: {
166
- values: entry.enumWithLabels,
166
+ values: entry.type === 'input' ? entry.enumWithLabels : undefined,
167
167
  },
168
168
  property: property,
169
169
  defaultToCurrentTime: displayOptions?.defaultValue === 'currentTime' && parameter.type === 'time' ? true : false,
@@ -1286,6 +1286,9 @@ export function normalizeDates(instances, object) {
1286
1286
  });
1287
1287
  });
1288
1288
  }
1289
+ export function retrieveCustomErrorMessage(error) {
1290
+ return error?.response?.data?.error?.statusCode !== 500 ? error?.response?.data?.error?.message : undefined;
1291
+ }
1289
1292
  /**
1290
1293
  * Given an object entry in a JsonLogic object, map it to the correct value.
1291
1294
  * @param entry An entry in a JsonLogic object.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evoke-platform/ui-components",
3
- "version": "1.5.0-testing.11",
3
+ "version": "1.5.0-testing.12",
4
4
  "description": "",
5
5
  "main": "dist/published/index.js",
6
6
  "module": "dist/published/index.js",