From 92a2d68a8120075bbba9df686dbf7158a3b1d37f Mon Sep 17 00:00:00 2001 From: Ali BARIN Date: Sat, 15 Oct 2022 22:16:10 +0200 Subject: [PATCH] feat: add defineTrigger and defineAction --- packages/backend/package.json | 4 +- .../scheduler/common/get-date-time-object.ts | 3 +- packages/backend/src/apps/scheduler/index.ts | 1 - .../scheduler/triggers/every-day/index.ts | 9 ++- .../scheduler/triggers/every-hour/index.ts | 11 +-- .../scheduler/triggers/every-month/index.ts | 73 ++++++++++--------- .../scheduler/triggers/every-week/index.ts | 9 ++- .../actions/find-message/find-message.ts | 2 +- .../apps/slack/actions/find-message/index.ts | 8 +- .../send-a-message-to-channel/index.ts | 8 +- .../apps/twitter/triggers/my-tweets/index.ts | 8 +- .../triggers/new-follower-of-me/index.ts | 8 +- .../twitter/triggers/search-tweets/index.ts | 8 +- .../twitter/triggers/user-tweets/index.ts | 8 +- .../backend/src/helpers/app-info-converter.ts | 12 ++- packages/backend/src/helpers/define-action.ts | 5 ++ .../backend/src/helpers/define-trigger.ts | 5 ++ packages/backend/src/helpers/get-app.ts | 24 +++--- packages/backend/src/services/action.ts | 2 +- packages/types/index.d.ts | 62 ++++++++-------- .../web/src/components/FlowStep/index.tsx | 2 +- .../web/src/components/InputCreator/index.tsx | 2 +- packages/web/src/hooks/useDynamicData.ts | 4 +- 23 files changed, 147 insertions(+), 131 deletions(-) create mode 100644 packages/backend/src/helpers/define-action.ts create mode 100644 packages/backend/src/helpers/define-trigger.ts diff --git a/packages/backend/package.json b/packages/backend/package.json index 03ec212a..9590711a 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -4,7 +4,7 @@ "license": "AGPL-3.0", "description": "The open source Zapier alternative. Build workflow automation without spending time and money.", "scripts": { - "dev": "ts-node-dev src/server.ts", + "dev": "ts-node-dev --exit-child src/server.ts", "worker": "nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/worker.ts", "build": "tsc && yarn copy-statics", "build:watch": "nodemon --watch 'src/**/*.ts' --watch 'bin/**/*.ts' --exec yarn build --ext ts", @@ -134,4 +134,4 @@ "publishConfig": { "access": "public" } -} +} \ No newline at end of file diff --git a/packages/backend/src/apps/scheduler/common/get-date-time-object.ts b/packages/backend/src/apps/scheduler/common/get-date-time-object.ts index 9a48cbf2..f4bae73e 100644 --- a/packages/backend/src/apps/scheduler/common/get-date-time-object.ts +++ b/packages/backend/src/apps/scheduler/common/get-date-time-object.ts @@ -1,4 +1,5 @@ import { DateTime } from 'luxon'; +import { IJSONObject } from '@automatisch/types'; export default function getDateTimeObjectRepresentation(dateTime: DateTime) { const defaults = dateTime.toObject(); @@ -10,5 +11,5 @@ export default function getDateTimeObjectRepresentation(dateTime: DateTime) { pretty_time: dateTime.toLocaleString(DateTime.TIME_WITH_SECONDS), pretty_day_of_week: dateTime.toFormat('cccc'), day_of_week: dateTime.weekday, - }; + } as IJSONObject; } diff --git a/packages/backend/src/apps/scheduler/index.ts b/packages/backend/src/apps/scheduler/index.ts index 60f6c4c4..94c6e6bb 100644 --- a/packages/backend/src/apps/scheduler/index.ts +++ b/packages/backend/src/apps/scheduler/index.ts @@ -6,5 +6,4 @@ export default { authDocUrl: "https://automatisch.io/docs/connections/scheduler", primaryColor: "0059F7", supportsConnections: false, - requiresAuthentication: false, }; diff --git a/packages/backend/src/apps/scheduler/triggers/every-day/index.ts b/packages/backend/src/apps/scheduler/triggers/every-day/index.ts index 1946925a..eb4bf570 100644 --- a/packages/backend/src/apps/scheduler/triggers/every-day/index.ts +++ b/packages/backend/src/apps/scheduler/triggers/every-day/index.ts @@ -1,10 +1,11 @@ import { DateTime } from 'luxon'; import { IGlobalVariable, IJSONValue } from '@automatisch/types'; +import defineTrigger from '../../../../helpers/define-trigger'; import cronTimes from '../../common/cron-times'; import getNextCronDateTime from '../../common/get-next-cron-date-time'; import getDateTimeObjectRepresentation from '../../common/get-date-time-object'; -export default { +export default defineTrigger({ name: 'Every day', key: 'everyDay', description: 'Triggers every day.', @@ -154,14 +155,14 @@ export default { return cronTimes.everyDayExcludingWeekendsAt(parameters.hour as number); }, - async run($: IGlobalVariable) { + async run($) { const nextCronDateTime = getNextCronDateTime( this.getInterval($.step.parameters) ); const dateTime = DateTime.now(); const dateTimeObjectRepresentation = getDateTimeObjectRepresentation( $.execution.testRun ? nextCronDateTime : dateTime - ) as IJSONValue; + ); const dataItem = { raw: dateTimeObjectRepresentation, @@ -172,4 +173,4 @@ export default { return { data: [dataItem] }; }, -}; +}); diff --git a/packages/backend/src/apps/scheduler/triggers/every-hour/index.ts b/packages/backend/src/apps/scheduler/triggers/every-hour/index.ts index 2d08dee3..dce95040 100644 --- a/packages/backend/src/apps/scheduler/triggers/every-hour/index.ts +++ b/packages/backend/src/apps/scheduler/triggers/every-hour/index.ts @@ -1,10 +1,11 @@ import { DateTime } from 'luxon'; -import { IGlobalVariable, IJSONValue } from '@automatisch/types'; +import { IGlobalVariable } from '@automatisch/types'; +import defineTrigger from '../../../../helpers/define-trigger'; import cronTimes from '../../common/cron-times'; import getNextCronDateTime from '../../common/get-next-cron-date-time'; import getDateTimeObjectRepresentation from '../../common/get-date-time-object'; -export default { +export default defineTrigger({ name: 'Every hour', key: 'everyHour', description: 'Triggers every hour.', @@ -48,14 +49,14 @@ export default { return cronTimes.everyHourExcludingWeekends; }, - async run($: IGlobalVariable) { + async run($) { const nextCronDateTime = getNextCronDateTime( this.getInterval($.step.parameters) ); const dateTime = DateTime.now(); const dateTimeObjectRepresentation = getDateTimeObjectRepresentation( $.execution.testRun ? nextCronDateTime : dateTime - ) as IJSONValue; + ); const dataItem = { raw: dateTimeObjectRepresentation, @@ -66,4 +67,4 @@ export default { return { data: [dataItem] }; }, -}; +}); diff --git a/packages/backend/src/apps/scheduler/triggers/every-month/index.ts b/packages/backend/src/apps/scheduler/triggers/every-month/index.ts index f2a40d8c..cbbdebd1 100644 --- a/packages/backend/src/apps/scheduler/triggers/every-month/index.ts +++ b/packages/backend/src/apps/scheduler/triggers/every-month/index.ts @@ -1,10 +1,11 @@ import { DateTime } from 'luxon'; -import { IGlobalVariable, IJSONValue } from '@automatisch/types'; +import { IGlobalVariable } from '@automatisch/types'; +import defineTrigger from '../../../../helpers/define-trigger'; import cronTimes from '../../common/cron-times'; import getNextCronDateTime from '../../common/get-next-cron-date-time'; import getDateTimeObjectRepresentation from '../../common/get-date-time-object'; -export default { +export default defineTrigger({ name: 'Every month', key: 'everyMonth', description: 'Triggers every month.', @@ -22,127 +23,127 @@ export default { variables: false, options: [ { - label: 1, + label: '1', value: 1, }, { - label: 2, + label: '2', value: 2, }, { - label: 3, + label: '3', value: 3, }, { - label: 4, + label: '4', value: 4, }, { - label: 5, + label: '5', value: 5, }, { - label: 6, + label: '6', value: 6, }, { - label: 7, + label: '7', value: 7, }, { - label: 8, + label: '8', value: 8, }, { - label: 9, + label: '9', value: 9, }, { - label: 10, + label: '10', value: 10, }, { - label: 11, + label: '11', value: 11, }, { - label: 12, + label: '12', value: 12, }, { - label: 13, + label: '13', value: 13, }, { - label: 14, + label: '14', value: 14, }, { - label: 15, + label: '15', value: 15, }, { - label: 16, + label: '16', value: 16, }, { - label: 17, + label: '17', value: 17, }, { - label: 18, + label: '18', value: 18, }, { - label: 19, + label: '19', value: 19, }, { - label: 20, + label: '20', value: 20, }, { - label: 21, + label: '21', value: 21, }, { - label: 22, + label: '22', value: 22, }, { - label: 23, + label: '23', value: 23, }, { - label: 24, + label: '24', value: 24, }, { - label: 25, + label: '25', value: 25, }, { - label: 26, + label: '26', value: 26, }, { - label: 27, + label: '27', value: 27, }, { - label: 28, + label: '28', value: 28, }, { - label: 29, + label: '29', value: 29, }, { - label: 30, + label: '30', value: 30, }, { - label: 31, + label: '31', value: 31, }, ], @@ -270,14 +271,14 @@ export default { return interval; }, - async run($: IGlobalVariable) { + async run($) { const nextCronDateTime = getNextCronDateTime( this.getInterval($.step.parameters) ); const dateTime = DateTime.now(); const dateTimeObjectRepresentation = getDateTimeObjectRepresentation( $.execution.testRun ? nextCronDateTime : dateTime - ) as IJSONValue; + ); const dataItem = { raw: dateTimeObjectRepresentation, @@ -288,4 +289,4 @@ export default { return { data: [dataItem] }; }, -}; +}); diff --git a/packages/backend/src/apps/scheduler/triggers/every-week/index.ts b/packages/backend/src/apps/scheduler/triggers/every-week/index.ts index 7204eebc..ccdcdb04 100644 --- a/packages/backend/src/apps/scheduler/triggers/every-week/index.ts +++ b/packages/backend/src/apps/scheduler/triggers/every-week/index.ts @@ -1,10 +1,11 @@ import { DateTime } from 'luxon'; import { IGlobalVariable, IJSONValue } from '@automatisch/types'; +import defineTrigger from '../../../../helpers/define-trigger'; import cronTimes from '../../common/cron-times'; import getNextCronDateTime from '../../common/get-next-cron-date-time'; import getDateTimeObjectRepresentation from '../../common/get-date-time-object'; -export default { +export default defineTrigger({ name: 'Every week', key: 'everyWeek', description: 'Triggers every week.', @@ -174,14 +175,14 @@ export default { return interval; }, - async run($: IGlobalVariable) { + async run($) { const nextCronDateTime = getNextCronDateTime( this.getInterval($.step.parameters) ); const dateTime = DateTime.now(); const dateTimeObjectRepresentation = getDateTimeObjectRepresentation( $.execution.testRun ? nextCronDateTime : dateTime - ) as IJSONValue; + ); const dataItem = { raw: dateTimeObjectRepresentation, @@ -192,4 +193,4 @@ export default { return { data: [dataItem] }; }, -}; +}); diff --git a/packages/backend/src/apps/slack/actions/find-message/find-message.ts b/packages/backend/src/apps/slack/actions/find-message/find-message.ts index 31206bb6..05ac902f 100644 --- a/packages/backend/src/apps/slack/actions/find-message/find-message.ts +++ b/packages/backend/src/apps/slack/actions/find-message/find-message.ts @@ -28,7 +28,7 @@ const findMessage = async ($: IGlobalVariable, options: FindMessageOptions) => { const message: IActionOutput = { data: { - raw: data?.data?.messages.matches[0], + raw: data?.messages.matches[0], }, error: response?.integrationError || (!data.ok && data), }; diff --git a/packages/backend/src/apps/slack/actions/find-message/index.ts b/packages/backend/src/apps/slack/actions/find-message/index.ts index 26d7a333..679ce201 100644 --- a/packages/backend/src/apps/slack/actions/find-message/index.ts +++ b/packages/backend/src/apps/slack/actions/find-message/index.ts @@ -1,7 +1,7 @@ -import { IGlobalVariable } from '@automatisch/types'; +import defineAction from '../../../../helpers/define-action'; import findMessage from './find-message'; -export default { +export default defineAction({ name: 'Find message', key: 'findMessage', description: 'Find a Slack message using the Slack Search feature.', @@ -71,7 +71,7 @@ export default { }, ], - async run($: IGlobalVariable) { + async run($) { const parameters = $.step.parameters; const query = parameters.query as string; const sortBy = parameters.sortBy as string; @@ -87,4 +87,4 @@ export default { return messages; }, -}; +}); diff --git a/packages/backend/src/apps/slack/actions/send-a-message-to-channel/index.ts b/packages/backend/src/apps/slack/actions/send-a-message-to-channel/index.ts index d5806108..5f7ef5fe 100644 --- a/packages/backend/src/apps/slack/actions/send-a-message-to-channel/index.ts +++ b/packages/backend/src/apps/slack/actions/send-a-message-to-channel/index.ts @@ -1,7 +1,7 @@ -import { IGlobalVariable } from '@automatisch/types'; +import defineAction from '../../../../helpers/define-action'; import postMessage from './post-message'; -export default { +export default defineAction({ name: 'Send a message to channel', key: 'sendMessageToChannel', description: 'Send a message to a specific channel you specify.', @@ -48,7 +48,7 @@ export default { }, ], - async run($: IGlobalVariable) { + async run($) { const channelId = $.step.parameters.channel as string; const text = $.step.parameters.message as string; @@ -56,4 +56,4 @@ export default { return message; }, -}; +}); diff --git a/packages/backend/src/apps/twitter/triggers/my-tweets/index.ts b/packages/backend/src/apps/twitter/triggers/my-tweets/index.ts index 7e33be4f..32562090 100644 --- a/packages/backend/src/apps/twitter/triggers/my-tweets/index.ts +++ b/packages/backend/src/apps/twitter/triggers/my-tweets/index.ts @@ -1,7 +1,7 @@ -import { IGlobalVariable } from '@automatisch/types'; +import defineTrigger from '../../../../helpers/define-trigger'; import getUserTweets from '../../common/get-user-tweets'; -export default { +export default defineTrigger({ name: 'My Tweets', key: 'myTweets', pollInterval: 15, @@ -17,9 +17,9 @@ export default { }, ], - async run($: IGlobalVariable) { + async run($) { return await getUserTweets($, { currentUser: true, }); }, -}; +}); diff --git a/packages/backend/src/apps/twitter/triggers/new-follower-of-me/index.ts b/packages/backend/src/apps/twitter/triggers/new-follower-of-me/index.ts index 4a873ea0..e4d875d8 100644 --- a/packages/backend/src/apps/twitter/triggers/new-follower-of-me/index.ts +++ b/packages/backend/src/apps/twitter/triggers/new-follower-of-me/index.ts @@ -1,7 +1,7 @@ -import { IGlobalVariable } from '@automatisch/types'; +import defineTrigger from '../../../../helpers/define-trigger'; import myFollowers from './my-followers'; -export default { +export default defineTrigger({ name: 'New follower of me', key: 'myFollowers', pollInterval: 15, @@ -17,7 +17,7 @@ export default { }, ], - async run($: IGlobalVariable) { + async run($) { return await myFollowers($, $.flow.lastInternalId); }, -}; +}); diff --git a/packages/backend/src/apps/twitter/triggers/search-tweets/index.ts b/packages/backend/src/apps/twitter/triggers/search-tweets/index.ts index 0d10ed8c..b2bb95fe 100644 --- a/packages/backend/src/apps/twitter/triggers/search-tweets/index.ts +++ b/packages/backend/src/apps/twitter/triggers/search-tweets/index.ts @@ -1,7 +1,7 @@ -import { IGlobalVariable } from '@automatisch/types'; +import defineTrigger from '../../../../helpers/define-trigger'; import searchTweets from './search-tweets'; -export default { +export default defineTrigger({ name: 'Search Tweets', key: 'searchTweets', pollInterval: 15, @@ -30,7 +30,7 @@ export default { }, ], - async run($: IGlobalVariable) { + async run($) { return await searchTweets($); }, -}; +}); diff --git a/packages/backend/src/apps/twitter/triggers/user-tweets/index.ts b/packages/backend/src/apps/twitter/triggers/user-tweets/index.ts index db576159..723d21bc 100644 --- a/packages/backend/src/apps/twitter/triggers/user-tweets/index.ts +++ b/packages/backend/src/apps/twitter/triggers/user-tweets/index.ts @@ -1,7 +1,7 @@ -import { IGlobalVariable } from '@automatisch/types'; +import defineTrigger from '../../../../helpers/define-trigger'; import getUserTweets from '../../common/get-user-tweets'; -export default { +export default defineTrigger({ name: 'User Tweets', key: 'userTweets', pollInterval: 15, @@ -29,9 +29,9 @@ export default { }, ], - async run($: IGlobalVariable) { + async run($) { return await getUserTweets($, { currentUser: false, }); }, -}; +}); diff --git a/packages/backend/src/helpers/app-info-converter.ts b/packages/backend/src/helpers/app-info-converter.ts index 8ea38c2a..99936eb1 100644 --- a/packages/backend/src/helpers/app-info-converter.ts +++ b/packages/backend/src/helpers/app-info-converter.ts @@ -9,10 +9,14 @@ const appInfoConverter = (rawAppData: IApp) => { if (rawAppData.auth?.fields) { rawAppData.auth.fields = rawAppData.auth.fields.map((field) => { - return { - ...field, - value: field.value?.replace('{WEB_APP_URL}', appConfig.webAppUrl), - }; + if (typeof field.value === 'string') { + return { + ...field, + value: field.value.replace('{WEB_APP_URL}', appConfig.webAppUrl), + }; + } + + return field }); } diff --git a/packages/backend/src/helpers/define-action.ts b/packages/backend/src/helpers/define-action.ts new file mode 100644 index 00000000..bc21ceb9 --- /dev/null +++ b/packages/backend/src/helpers/define-action.ts @@ -0,0 +1,5 @@ +import { IAction } from '@automatisch/types'; + +export default function defineAction(actionDefinition: IAction): IAction { + return actionDefinition; +} diff --git a/packages/backend/src/helpers/define-trigger.ts b/packages/backend/src/helpers/define-trigger.ts new file mode 100644 index 00000000..3e093858 --- /dev/null +++ b/packages/backend/src/helpers/define-trigger.ts @@ -0,0 +1,5 @@ +import { ITrigger } from '@automatisch/types'; + +export default function defineTrigger(triggerDefinition: ITrigger): ITrigger { + return triggerDefinition; +} diff --git a/packages/backend/src/helpers/get-app.ts b/packages/backend/src/helpers/get-app.ts index da620bbf..b3e9f5d4 100644 --- a/packages/backend/src/helpers/get-app.ts +++ b/packages/backend/src/helpers/get-app.ts @@ -16,17 +16,13 @@ async function getFileContent( path: string, stripFuncs: boolean ): Promise { - try { - const fileContent = await getDefaultExport(path); + const fileContent = await getDefaultExport(path); - if (stripFuncs) { - return stripFunctions(fileContent); - } - - return fileContent; - } catch (err) { - return null; + if (stripFuncs) { + return stripFunctions(fileContent); } + + return fileContent; } async function getChildrenContentInDirectory( @@ -55,10 +51,12 @@ async function getChildrenContentInDirectory( const getApp = async (appKey: string, stripFuncs = true) => { const appData: IApp = await getDefaultExport(`../apps/${appKey}`); - appData.auth = await getFileContent( - `../apps/${appKey}/auth`, - stripFuncs - ); + if (appData.supportsConnections) { + appData.auth = await getFileContent( + `../apps/${appKey}/auth`, + stripFuncs + ); + } appData.triggers = await getChildrenContentInDirectory( `${appKey}/triggers`, stripFuncs diff --git a/packages/backend/src/services/action.ts b/packages/backend/src/services/action.ts index bbac7990..e05948cf 100644 --- a/packages/backend/src/services/action.ts +++ b/packages/backend/src/services/action.ts @@ -48,7 +48,7 @@ export const processAction = async (options: ProcessActionOptions) => { status: actionOutput.error ? 'failure' : 'success', dataIn: computedParameters, dataOut: actionOutput.error ? null : actionOutput.data.raw, - errorDetails: actionOutput.error, + errorDetails: actionOutput.error ? actionOutput.error : null, }); return { flowId, stepId, executionId, executionStep }; diff --git a/packages/types/index.d.ts b/packages/types/index.d.ts index e860fc56..a404dd1f 100644 --- a/packages/types/index.d.ts +++ b/packages/types/index.d.ts @@ -90,45 +90,45 @@ export interface IFieldDropdown { label: string; type: 'dropdown'; required: boolean; - readOnly: boolean; - value: string; - placeholder: string | null; - description: string; - docUrl: string; - clickToCopy: boolean; + readOnly?: boolean; + value?: string | boolean; + placeholder?: string | null; + description?: string; + docUrl?: string; + clickToCopy?: boolean; + variables?: boolean; + dependsOn?: string[]; + options?: IFieldDropdownOption[]; + source?: IFieldDropdownSource; +} + +export interface IFieldDropdownSource { + type: string; name: string; - variables: boolean; - dependsOn: string[]; - options: IFieldDropdownOption[]; - source: { - type: string; + arguments: { name: string; - arguments: { - name: string; - value: string; - }[]; - }; + value: string; + }[]; } export interface IFieldDropdownOption { label: string; - value: boolean | string; + value: boolean | string | number; } export interface IFieldText { key: string; label: string; type: 'string'; - required: boolean; - readOnly: boolean; - value: string; - placeholder: string | null; - description: string; - docUrl: string; - clickToCopy: boolean; - name: string; - variables: boolean; - dependsOn: string[]; + required?: boolean; + readOnly?: boolean; + value?: string; + placeholder?: string | null; + description?: string; + docUrl?: string; + clickToCopy?: boolean; + variables?: boolean; + dependsOn?: string[]; } export type IField = IFieldDropdown | IFieldText; @@ -202,11 +202,11 @@ export interface ITriggerDataItem { export interface ITrigger { name: string; key: string; - pollInterval: number; + pollInterval?: number; description: string; - dedupeStrategy: 'greatest' | 'unique' | 'last'; + dedupeStrategy?: 'greatest' | 'unique' | 'last'; substeps: ISubstep[]; - getInterval(parameters: IGlobalVariable['step']['parameters']): string; + getInterval?(parameters: IGlobalVariable['step']['parameters']): string; run($: IGlobalVariable): Promise; } @@ -238,7 +238,7 @@ export interface IAuthentication { export interface ISubstep { key: string; name: string; - arguments: IField[]; + arguments?: IField[]; } export type IHttpClientParams = { diff --git a/packages/web/src/components/FlowStep/index.tsx b/packages/web/src/components/FlowStep/index.tsx index 5b77edb5..a30ff26b 100644 --- a/packages/web/src/components/FlowStep/index.tsx +++ b/packages/web/src/components/FlowStep/index.tsx @@ -69,7 +69,7 @@ function generateValidationSchema(substeps: ISubstep[]) { } // if the field depends on another field, add the dependsOn required validation - if (dependsOn?.length > 0) { + if (Array.isArray(dependsOn) && dependsOn.length > 0) { for (const dependsOnKey of dependsOn) { const missingDependencyValueMessage = `We're having trouble loading '${key}' data as required field '${dependsOnKey}' is missing.`; diff --git a/packages/web/src/components/InputCreator/index.tsx b/packages/web/src/components/InputCreator/index.tsx index cfedf0f3..ced9757e 100644 --- a/packages/web/src/components/InputCreator/index.tsx +++ b/packages/web/src/components/InputCreator/index.tsx @@ -22,7 +22,7 @@ type RawOption = { }; const optionGenerator = (options: RawOption[]): IFieldDropdownOption[] => options?.map(({ name, value }) => ({ label: name as string, value: value })); -const getOption = (options: IFieldDropdownOption[], value: string) => options?.find(option => option.value === value); +const getOption = (options: IFieldDropdownOption[], value?: string | boolean) => options?.find(option => option.value === value); export default function InputCreator(props: InputCreatorProps): React.ReactElement { const { diff --git a/packages/web/src/hooks/useDynamicData.ts b/packages/web/src/hooks/useDynamicData.ts index f5375a7c..15839bac 100644 --- a/packages/web/src/hooks/useDynamicData.ts +++ b/packages/web/src/hooks/useDynamicData.ts @@ -4,13 +4,13 @@ import { useFormContext } from 'react-hook-form'; import set from 'lodash/set'; import type { UseFormReturn } from 'react-hook-form'; import isEqual from 'lodash/isEqual'; -import type { IField, IFieldDropdown, IJSONObject } from '@automatisch/types'; +import type { IField, IFieldDropdownSource, IJSONObject } from '@automatisch/types'; import { GET_DATA } from 'graphql/queries/get-data'; const variableRegExp = /({.*?})/g; -function computeArguments(args: IFieldDropdown["source"]["arguments"], getValues: UseFormReturn["getValues"]): IJSONObject { +function computeArguments(args: IFieldDropdownSource["arguments"], getValues: UseFormReturn["getValues"]): IJSONObject { const initialValue = {}; return args.reduce( (result, { name, value }) => {