From a17781dfa67b1a8cac23cf265d041b74ffd6338e Mon Sep 17 00:00:00 2001 From: Abdullah bin Amir <38984510+abdullahbaa5@users.noreply.github.com> Date: Mon, 27 May 2024 12:46:42 +0400 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Add=20NocoDB=20block=20(#1365)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #970 #997 Fully integrate NocoDB. Added all API Functions: - List Table Records - Create Table Records - Update Table Records - Delete Table Records - Read Table Record - Count Table Records - List Linked Records - Link Records - Unlink Records Optional Todo: - Save responses of non-get requests in a variable (error validation try-catch is added and logged so i do not think so it is much needed) You are free to implement any extra validation/function :D --------- Co-authored-by: Baptiste Arnaud --- .../forge/components/ForgedBlockSettings.tsx | 9 +- .../components/zodLayouts/ZodFieldLayout.tsx | 3 +- .../components/zodLayouts/ZodObjectLayout.tsx | 27 +- .../editor/blocks/integrations/anthropic.mdx | 5 - .../editor/blocks/integrations/nocodb.mdx | 31 +++ .../blocks/integrations/nocodb-table-id.jpg | Bin 0 -> 80939 bytes .../images/blocks/integrations/nocodb.jpg | Bin 0 -> 112416 bytes apps/docs/mint.json | 3 +- apps/docs/openapi/builder.json | 236 ++++++++++++++++++ apps/docs/openapi/viewer.json | 236 ++++++++++++++++++ .../difyAi/actions/createChatMessage.ts | 17 +- .../blocks/nocodb/actions/createRecord.ts | 61 +++++ .../blocks/nocodb/actions/searchRecords.ts | 136 ++++++++++ .../nocodb/actions/updateExistingRecord.ts | 103 ++++++++ packages/forge/blocks/nocodb/auth.ts | 24 ++ packages/forge/blocks/nocodb/constants.ts | 15 ++ .../helpers/convertFilterToWhereClause.ts | 50 ++++ .../nocodb/helpers/parseRecordCreateBody.ts | 12 + .../nocodb/helpers/parseRecordsUpdateBody.ts | 16 ++ .../nocodb/helpers/parseSearchParams.ts | 8 + packages/forge/blocks/nocodb/index.ts | 16 ++ packages/forge/blocks/nocodb/logo.tsx | 34 +++ packages/forge/blocks/nocodb/package.json | 18 ++ packages/forge/blocks/nocodb/schemas.ts | 6 + packages/forge/blocks/nocodb/tsconfig.json | 11 + packages/forge/blocks/nocodb/types.ts | 10 + packages/forge/core/index.ts | 55 +++- .../forge/core/zod/extendWithTypebotLayout.ts | 2 +- .../core/zod/helpers/evaluateIsHidden.ts | 9 + packages/forge/repository/constants.ts | 1 + packages/forge/repository/credentials.ts | 3 + packages/forge/repository/definitions.ts | 2 + packages/forge/repository/package.json | 3 +- packages/forge/repository/schemas.ts | 3 + pnpm-lock.yaml | 31 +++ 35 files changed, 1158 insertions(+), 38 deletions(-) create mode 100644 apps/docs/editor/blocks/integrations/nocodb.mdx create mode 100644 apps/docs/images/blocks/integrations/nocodb-table-id.jpg create mode 100644 apps/docs/images/blocks/integrations/nocodb.jpg create mode 100644 packages/forge/blocks/nocodb/actions/createRecord.ts create mode 100644 packages/forge/blocks/nocodb/actions/searchRecords.ts create mode 100644 packages/forge/blocks/nocodb/actions/updateExistingRecord.ts create mode 100644 packages/forge/blocks/nocodb/auth.ts create mode 100644 packages/forge/blocks/nocodb/constants.ts create mode 100644 packages/forge/blocks/nocodb/helpers/convertFilterToWhereClause.ts create mode 100644 packages/forge/blocks/nocodb/helpers/parseRecordCreateBody.ts create mode 100644 packages/forge/blocks/nocodb/helpers/parseRecordsUpdateBody.ts create mode 100644 packages/forge/blocks/nocodb/helpers/parseSearchParams.ts create mode 100644 packages/forge/blocks/nocodb/index.ts create mode 100644 packages/forge/blocks/nocodb/logo.tsx create mode 100644 packages/forge/blocks/nocodb/package.json create mode 100644 packages/forge/blocks/nocodb/schemas.ts create mode 100644 packages/forge/blocks/nocodb/tsconfig.json create mode 100644 packages/forge/blocks/nocodb/types.ts create mode 100644 packages/forge/core/zod/helpers/evaluateIsHidden.ts diff --git a/apps/builder/src/features/forge/components/ForgedBlockSettings.tsx b/apps/builder/src/features/forge/components/ForgedBlockSettings.tsx index 26c79f026..e96c3b3f2 100644 --- a/apps/builder/src/features/forge/components/ForgedBlockSettings.tsx +++ b/apps/builder/src/features/forge/components/ForgedBlockSettings.tsx @@ -6,12 +6,14 @@ import { ZodObjectLayout } from './zodLayouts/ZodObjectLayout' import { ZodActionDiscriminatedUnion } from './zodLayouts/ZodActionDiscriminatedUnion' import { useForgedBlock } from '../hooks/useForgedBlock' import { ForgedBlock } from '@typebot.io/forge-repository/types' +import { useState } from 'react' type Props = { block: ForgedBlock onOptionsChange: (options: BlockOptions) => void } export const ForgedBlockSettings = ({ block, onOptionsChange }: Props) => { + const [keySuffix, setKeySuffix] = useState(0) const { blockDef, blockSchema, actionDef } = useForgedBlock( block.type, block.options?.action @@ -32,7 +34,10 @@ export const ForgedBlockSettings = ({ block, onOptionsChange }: Props) => { const actionOptions = actionOptionsKeys.reduce( (acc, key) => ({ ...acc, - [key]: undefined, + [key]: + block.options[key] && typeof block.options[key] !== 'object' + ? block.options[key] + : undefined, }), {} ) @@ -40,6 +45,7 @@ export const ForgedBlockSettings = ({ block, onOptionsChange }: Props) => { ...updates, ...actionOptions, }) + setKeySuffix((prev) => prev + 1) } // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -85,6 +91,7 @@ export const ForgedBlockSettings = ({ block, onOptionsChange }: Props) => { /> )} void }): ReactNode[] => { - const layout = getZodInnerSchema(schema)._def.layout - if (layout?.isHidden) return [] - return Object.keys(schema.shape).reduce<{ + const innerSchema = getZodInnerSchema(schema) + const shape = + 'shape' in innerSchema ? innerSchema.shape : innerSchema._def.shape() + const layout = innerSchema._def.layout + if (evaluateIsHidden(layout?.isHidden, blockOptions)) return [] + return Object.keys(shape).reduce<{ nodes: ReactNode[] accordionsCreated: string[] }>( (nodes, key, index) => { if (ignoreKeys?.includes(key)) return nodes - const keySchema = getZodInnerSchema(schema.shape[key]) + const keySchema = getZodInnerSchema(shape[key]) const layout = keySchema._def.layout as | ZodLayoutMetadata | undefined - if (layout?.isHidden) return nodes + if (evaluateIsHidden(layout?.isHidden, blockOptions)) return nodes if ( layout && layout.accordion && @@ -60,7 +64,7 @@ export const ZodObjectLayout = ({ if (nodes.accordionsCreated.includes(layout.accordion)) return nodes const accordionKeys = getObjectKeysWithSameAccordionAttr( layout.accordion, - schema + shape ) return { nodes: [ @@ -77,7 +81,7 @@ export const ZodObjectLayout = ({ {accordionKeys.map((accordionKey, idx) => ( onDataChange({ ...data, [accordionKey]: val }) @@ -118,12 +122,9 @@ export const ZodObjectLayout = ({ ).nodes } -const getObjectKeysWithSameAccordionAttr = ( - accordion: string, - schema: z.ZodObject -) => - Object.keys(schema.shape).reduce((keys, currentKey) => { - const l = schema.shape[currentKey]._def.layout as +const getObjectKeysWithSameAccordionAttr = (accordion: string, shape: any) => + Object.keys(shape).reduce((keys, currentKey) => { + const l = shape[currentKey]._def.layout as | ZodLayoutMetadata | undefined return !l?.accordion || l.accordion !== accordion diff --git a/apps/docs/editor/blocks/integrations/anthropic.mdx b/apps/docs/editor/blocks/integrations/anthropic.mdx index 3eae320b5..c5503c6fd 100644 --- a/apps/docs/editor/blocks/integrations/anthropic.mdx +++ b/apps/docs/editor/blocks/integrations/anthropic.mdx @@ -2,11 +2,6 @@ title: Anthropic --- - - There is an ongoing issue with Anthropic block streaming capabilities. We are - working on a fix and will update this page once the issue is resolved. - - ## Create Message With the Anthropic block, you can create chat messages based on your user queries and display the answer back to your typebot using Claude AI. diff --git a/apps/docs/editor/blocks/integrations/nocodb.mdx b/apps/docs/editor/blocks/integrations/nocodb.mdx new file mode 100644 index 000000000..2989b8edb --- /dev/null +++ b/apps/docs/editor/blocks/integrations/nocodb.mdx @@ -0,0 +1,31 @@ +--- +title: NocoDB +--- + +With the NocoDB block, you can create, update or get data from your NocoDB tables. + +## How to find my `Table ID`? + +To find your `Table ID`, you need to go to your NocoDB dashboard and click on the 3 dots button next to your table name. + + + NocoDB table ID + + +## Search Records + +This action allows you to search for existing records in a table. It requires your `Table ID` and can optionally take a `View ID` to search in a specific view. + + + NocoDB block example + + +You can configure the filter to return `All`, `First`, `Last` or `Random` found records. + +Then all you need to do is to map the found fields to variables that you can re-use on your bot. diff --git a/apps/docs/images/blocks/integrations/nocodb-table-id.jpg b/apps/docs/images/blocks/integrations/nocodb-table-id.jpg new file mode 100644 index 0000000000000000000000000000000000000000..43dbd2eb5723049b0c88a257513dc1b0bac86f8e GIT binary patch literal 80939 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ɣkGEBUlT-LyRq(0x(*4aIO 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 e`D { + try { + if (!fields || fields.length === 0) return + await ky.post( + `${baseUrl ?? defaultBaseUrl}/api/v2/tables/${tableId}/records`, + { + headers: { + 'xc-token': apiKey, + }, + json: parseRecordsCreateBody(fields), + } + ) + } catch (error) { + if (error instanceof HTTPError) + return logs.add({ + status: 'error', + description: error.message, + details: await error.response.text(), + }) + console.error(error) + } + }, + }, +}) diff --git a/packages/forge/blocks/nocodb/actions/searchRecords.ts b/packages/forge/blocks/nocodb/actions/searchRecords.ts new file mode 100644 index 000000000..c60f4fba6 --- /dev/null +++ b/packages/forge/blocks/nocodb/actions/searchRecords.ts @@ -0,0 +1,136 @@ +import { createAction, option } from '@typebot.io/forge' +import { auth } from '../auth' +import ky, { HTTPError } from 'ky' +import { ListTableRecordsResponse } from '../types' +import { isDefined } from '@typebot.io/lib' +import { parseSearchParams } from '../helpers/parseSearchParams' +import { convertFilterToWhereClause } from '../helpers/convertFilterToWhereClause' +import { + defaultBaseUrl, + defaultLimitForSearch, + filterOperators, +} from '../constants' + +export const searchRecords = createAction({ + auth, + name: 'Search Records', + options: option.object({ + tableId: option.string.layout({ + label: 'Table ID', + moreInfoTooltip: + 'Can be found by clicking on the 3 dots next to the table name.', + isRequired: true, + }), + viewId: option.string.layout({ + label: 'View ID', + moreInfoTooltip: + 'Can be found by clicking on the 3 dots next to the view name.', + }), + returnType: option.enum(['All', 'First', 'Last', 'Random']).layout({ + accordion: 'Filter', + defaultValue: 'All', + }), + filter: option + .filter({ + operators: filterOperators, + isJoinerHidden: ({ filter }) => + !filter?.comparisons || filter.comparisons.length < 2, + }) + .layout({ + accordion: 'Filter', + }), + responseMapping: option + .array( + option.object({ + fieldName: option.string.layout({ + label: 'Enter a field name', + }), + variableId: option.string.layout({ + inputType: 'variableDropdown', + }), + }) + ) + .layout({ + accordion: 'Response Mapping', + }), + }), + getSetVariableIds: ({ responseMapping }) => + responseMapping?.map((r) => r.variableId).filter(isDefined) ?? [], + run: { + server: async ({ + credentials: { baseUrl, apiKey }, + options: { tableId, responseMapping, filter, returnType, viewId }, + variables, + logs, + }) => { + if (!apiKey) return logs.add('API key is required') + try { + const data = await ky + .get( + `${baseUrl ?? defaultBaseUrl}/api/v2/tables/${tableId}/records`, + { + headers: { + 'xc-token': apiKey, + }, + searchParams: parseSearchParams({ + where: convertFilterToWhereClause(filter), + viewId, + limit: defaultLimitForSearch, + }), + } + ) + .json() + + let filterIndex: number | undefined = undefined + + if (returnType && returnType !== 'All') { + const total = data.pageInfo.totalRows + if (returnType === 'First') { + filterIndex = 0 + } else if (returnType === 'Last') { + filterIndex = total - 1 + } else if (returnType === 'Random') { + filterIndex = Math.floor(Math.random() * total) + } + } + + const filteredList = + isDefined(filterIndex) && data.list[filterIndex] + ? [data.list[filterIndex]] + : data.list + + if (filteredList.length === 0) + return logs.add({ + status: 'info', + description: `Couldn't find any rows matching the filter`, + details: JSON.stringify(filter, null, 2), + }) + + responseMapping?.forEach((mapping) => { + if (!mapping.fieldName || !mapping.variableId) return + if (!filteredList[0][mapping.fieldName]) { + logs.add(`Field ${mapping.fieldName} does not exist in the table`) + return + } + + const items = filteredList.map( + (item) => item[mapping.fieldName as string] + ) + + variables.set( + mapping.variableId, + items.length === 1 ? items[0] : items + ) + }) + } catch (error) { + if (error instanceof HTTPError) + return logs.add({ + status: 'error', + description: error.message, + details: await error.response.text(), + }) + console.error(error) + } + }, + }, +}) diff --git a/packages/forge/blocks/nocodb/actions/updateExistingRecord.ts b/packages/forge/blocks/nocodb/actions/updateExistingRecord.ts new file mode 100644 index 000000000..563cc6617 --- /dev/null +++ b/packages/forge/blocks/nocodb/actions/updateExistingRecord.ts @@ -0,0 +1,103 @@ +import { createAction, option } from '@typebot.io/forge' +import { auth } from '../auth' +import ky, { HTTPError } from 'ky' +import { parseRecordsUpdateBody } from '../helpers/parseRecordsUpdateBody' +import { + defaultBaseUrl, + defaultLimitForSearch, + filterOperators, +} from '../constants' +import { parseSearchParams } from '../helpers/parseSearchParams' +import { convertFilterToWhereClause } from '../helpers/convertFilterToWhereClause' +import { ListTableRecordsResponse } from '../types' + +export const updateExistingRecord = createAction({ + auth, + name: 'Update Existing Record', + options: option.object({ + tableId: option.string.layout({ + label: 'Table ID', + isRequired: true, + moreInfoTooltip: + 'Can be found by clicking on the 3 dots next to the table name.', + }), + viewId: option.string.layout({ + label: 'View ID', + moreInfoTooltip: + 'Can be found by clicking on the 3 dots next to the view name.', + }), + filter: option + .filter({ + operators: filterOperators, + isJoinerHidden: ({ filter }) => + !filter?.comparisons || filter.comparisons.length < 2, + }) + .layout({ + accordion: 'Select Records', + }), + updates: option + .array( + option.object({ + fieldName: option.string.layout({ + label: 'Enter a field name', + }), + value: option.string.layout({ + placeholder: 'Enter a value', + }), + }) + ) + .layout({ + accordion: 'Updates', + }), + }), + run: { + server: async ({ + credentials: { baseUrl, apiKey }, + options: { tableId, filter, viewId, updates }, + logs, + }) => { + if (!apiKey) return logs.add('API key is required') + if (!updates) return logs.add('At least one update is required') + if (!filter?.comparisons || filter.comparisons.length === 0) + return logs.add('At least one filter is required') + try { + const listData = await ky + .get( + `${baseUrl ?? defaultBaseUrl}/api/v2/tables/${tableId}/records`, + { + headers: { + 'xc-token': apiKey, + }, + searchParams: parseSearchParams({ + where: convertFilterToWhereClause(filter), + viewId, + limit: defaultLimitForSearch, + }), + } + ) + .json() + + await ky.patch( + `${baseUrl ?? defaultBaseUrl}/api/v2/tables/${tableId}/records`, + { + headers: { + 'xc-token': apiKey, + }, + json: parseRecordsUpdateBody( + listData.list.map((item) => item.Id), + updates + ), + } + ) + } catch (error) { + if (error instanceof HTTPError) + return logs.add({ + status: 'error', + description: error.message, + details: await error.response.text(), + }) + console.error(error) + } + }, + }, +}) diff --git a/packages/forge/blocks/nocodb/auth.ts b/packages/forge/blocks/nocodb/auth.ts new file mode 100644 index 000000000..9fefa6d6a --- /dev/null +++ b/packages/forge/blocks/nocodb/auth.ts @@ -0,0 +1,24 @@ +import { option, AuthDefinition } from '@typebot.io/forge' +import { defaultBaseUrl } from './constants' + +export const auth = { + type: 'encryptedCredentials', + name: 'NocoDB account', + schema: option.object({ + baseUrl: option.string.layout({ + label: 'Base URL', + isRequired: true, + helperText: 'Change it only if you are self-hosting NocoDB.', + withVariableButton: false, + defaultValue: defaultBaseUrl, + }), + apiKey: option.string.layout({ + label: 'API Token', + isRequired: true, + helperText: + 'You can generate an API token [here](https://app.nocodb.com/#/account/tokens)', + inputType: 'password', + withVariableButton: false, + }), + }), +} satisfies AuthDefinition diff --git a/packages/forge/blocks/nocodb/constants.ts b/packages/forge/blocks/nocodb/constants.ts new file mode 100644 index 000000000..5de409cef --- /dev/null +++ b/packages/forge/blocks/nocodb/constants.ts @@ -0,0 +1,15 @@ +export const defaultBaseUrl = 'https://app.nocodb.com' + +export const filterOperators = [ + 'Equal to', + 'Not equal', + 'Contains', + 'Greater than', + 'Less than', + 'Is set', + 'Is empty', + 'Starts with', + 'Ends with', +] as const + +export const defaultLimitForSearch = 1000 diff --git a/packages/forge/blocks/nocodb/helpers/convertFilterToWhereClause.ts b/packages/forge/blocks/nocodb/helpers/convertFilterToWhereClause.ts new file mode 100644 index 000000000..a66503cf8 --- /dev/null +++ b/packages/forge/blocks/nocodb/helpers/convertFilterToWhereClause.ts @@ -0,0 +1,50 @@ +// See `where`: https://docs.nocodb.com/0.109.7/developer-resources/rest-apis/#query-params +// Example: (colName,eq,colValue)~or(colName2,gt,colValue2) + +import { isEmpty } from '@typebot.io/lib' + +export const convertFilterToWhereClause = ( + filter: + | { + comparisons: { + input?: string + operator?: string + value?: string + }[] + joiner?: 'AND' | 'OR' + } + | undefined +): string | undefined => { + if (!filter || !filter.comparisons || filter.comparisons.length === 0) return + + const where = filter.comparisons + .map((comparison) => { + if (!comparison.value) return '' + + switch (comparison.operator) { + case 'Not equal': + return `(${comparison.input},ne,${comparison.value})` + case 'Contains': + return `(${comparison.input},like,%${comparison.value}%)` + case 'Greater than': + return `(${comparison.input},gt,${comparison.value})` + case 'Less than': + return `(${comparison.input},lt,${comparison.value})` + case 'Is set': + return `(${comparison.input},isnot,null)` + case 'Is empty': + return `(${comparison.input},is,null)` + case 'Starts with': + return `(${comparison.input},like,${comparison.value}%)` + case 'Ends with': + return `(${comparison.input},like,%${comparison.value})` + default: + return `(${comparison.input},eq,${comparison.value})` + } + }) + .filter(Boolean) + .join('~' + (filter.joiner === 'OR' ? 'or' : 'and')) + + if (isEmpty(where)) return + return where +} diff --git a/packages/forge/blocks/nocodb/helpers/parseRecordCreateBody.ts b/packages/forge/blocks/nocodb/helpers/parseRecordCreateBody.ts new file mode 100644 index 000000000..8d84af00e --- /dev/null +++ b/packages/forge/blocks/nocodb/helpers/parseRecordCreateBody.ts @@ -0,0 +1,12 @@ +export const parseRecordsCreateBody = ( + fields: { key?: string; value?: string }[] +): Record => { + const record: Record = {} + + fields.forEach(({ key, value }) => { + if (!key || !value) return + record[key] = value + }) + + return record +} diff --git a/packages/forge/blocks/nocodb/helpers/parseRecordsUpdateBody.ts b/packages/forge/blocks/nocodb/helpers/parseRecordsUpdateBody.ts new file mode 100644 index 000000000..60fe8eaad --- /dev/null +++ b/packages/forge/blocks/nocodb/helpers/parseRecordsUpdateBody.ts @@ -0,0 +1,16 @@ +export const parseRecordsUpdateBody = ( + ids: string[], + updates: { fieldName?: string; value?: string }[] +): Record[] => + ids.map((id) => { + const record: Record = { + Id: id, + } + + updates.forEach(({ fieldName, value }) => { + if (!fieldName) return + record[fieldName] = value ?? null + }) + + return record + }) diff --git a/packages/forge/blocks/nocodb/helpers/parseSearchParams.ts b/packages/forge/blocks/nocodb/helpers/parseSearchParams.ts new file mode 100644 index 000000000..97a2fa0bb --- /dev/null +++ b/packages/forge/blocks/nocodb/helpers/parseSearchParams.ts @@ -0,0 +1,8 @@ +export const parseSearchParams = ( + records: Record +): Record => { + return Object.entries(records).reduce((acc, [key, value]) => { + if (value === null || value === undefined) return acc + return { ...acc, [key]: value.toString() } + }, {}) +} diff --git a/packages/forge/blocks/nocodb/index.ts b/packages/forge/blocks/nocodb/index.ts new file mode 100644 index 000000000..1d8428817 --- /dev/null +++ b/packages/forge/blocks/nocodb/index.ts @@ -0,0 +1,16 @@ +import { createBlock } from '@typebot.io/forge' +import { NocodbLogo } from './logo' +import { auth } from './auth' +import { searchRecords } from './actions/searchRecords' +import { createRecord } from './actions/createRecord' +import { updateExistingRecord } from './actions/updateExistingRecord' + +export const nocodbBlock = createBlock({ + id: 'nocodb', + name: 'NocoDB', + docsUrl: 'https://docs.typebot.io/forge/blocks/nocodb', + tags: ['database'], + LightLogo: NocodbLogo, + auth, + actions: [searchRecords, createRecord, updateExistingRecord], +}) diff --git a/packages/forge/blocks/nocodb/logo.tsx b/packages/forge/blocks/nocodb/logo.tsx new file mode 100644 index 000000000..42a3ea752 --- /dev/null +++ b/packages/forge/blocks/nocodb/logo.tsx @@ -0,0 +1,34 @@ +/** @jsxImportSource react */ + +export const NocodbLogo = (props: React.SVGProps) => ( + + + + + + + + + + +) diff --git a/packages/forge/blocks/nocodb/package.json b/packages/forge/blocks/nocodb/package.json new file mode 100644 index 000000000..b253c35d5 --- /dev/null +++ b/packages/forge/blocks/nocodb/package.json @@ -0,0 +1,18 @@ +{ + "name": "@typebot.io/nocodb-block", + "version": "1.0.0", + "description": "", + "main": "index.ts", + "keywords": [], + "license": "AGPL-3.0-or-later", + "devDependencies": { + "@typebot.io/forge": "workspace:*", + "@typebot.io/lib": "workspace:*", + "@typebot.io/tsconfig": "workspace:*", + "@types/react": "18.2.15", + "typescript": "5.3.2" + }, + "dependencies": { + "ky": "1.2.3" + } +} diff --git a/packages/forge/blocks/nocodb/schemas.ts b/packages/forge/blocks/nocodb/schemas.ts new file mode 100644 index 000000000..b6510c579 --- /dev/null +++ b/packages/forge/blocks/nocodb/schemas.ts @@ -0,0 +1,6 @@ +// Do not edit this file manually +import { parseBlockCredentials, parseBlockSchema } from '@typebot.io/forge' +import { nocodbBlock } from '.' + +export const nocodbBlockSchema = parseBlockSchema(nocodbBlock) +export const nocodbCredentialsSchema = parseBlockCredentials(nocodbBlock) diff --git a/packages/forge/blocks/nocodb/tsconfig.json b/packages/forge/blocks/nocodb/tsconfig.json new file mode 100644 index 000000000..950c0c115 --- /dev/null +++ b/packages/forge/blocks/nocodb/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@typebot.io/tsconfig/base.json", + "include": ["**/*.ts", "**/*.tsx"], + "exclude": ["node_modules"], + "compilerOptions": { + "lib": ["ESNext", "DOM"], + "noEmit": true, + "jsx": "preserve", + "jsxImportSource": "react" + } +} diff --git a/packages/forge/blocks/nocodb/types.ts b/packages/forge/blocks/nocodb/types.ts new file mode 100644 index 000000000..d3a95997b --- /dev/null +++ b/packages/forge/blocks/nocodb/types.ts @@ -0,0 +1,10 @@ +export type ListTableRecordsResponse = { + list: Array> + pageInfo: { + totalRows: number + page: number + pageSize: number + isFirstPage: boolean + isLastPage: boolean + } +} diff --git a/packages/forge/core/index.ts b/packages/forge/core/index.ts index 30e3f4961..cf2ed7e8c 100644 --- a/packages/forge/core/index.ts +++ b/packages/forge/core/index.ts @@ -110,18 +110,6 @@ export const option = { z.enum(values).optional(), number: z.number().or(variableStringSchema).optional(), array: (schema: T) => z.array(schema).optional(), - keyValueList: z - .array( - z.object({ - key: z.string().optional().layout({ - label: 'Key', - }), - value: z.string().optional().layout({ - label: 'Value', - }), - }) - ) - .optional(), discriminatedUnion: < T extends string, J extends [ @@ -165,6 +153,49 @@ export const option = { }) ) .optional(), + filter: ({ + operators = defaultFilterOperators, + isJoinerHidden, + }: { + operators?: readonly [string, ...string[]] + isJoinerHidden: (currentObj: Record) => boolean + }) => + z + .object({ + comparisons: z.array( + z.object({ + input: z.string().optional().layout({ label: 'Enter a field ' }), + operator: z + .enum(operators) + .optional() + .layout({ defaultValue: 'Equal to' }), + value: z + .string() + .optional() + .layout({ placeholder: 'Enter a value' }), + }) + ), + joiner: z.enum(['AND', 'OR']).optional().layout({ + placeholder: 'Select joiner', + isHidden: isJoinerHidden, + }), + }) + .optional(), } +const defaultFilterOperators = [ + 'Equal to', + 'Not equal', + 'Contains', + 'Does not contain', + 'Greater than', + 'Less than', + 'Is set', + 'Is empty', + 'Starts with', + 'Ends with', + 'Matches regex', + 'Does not match regex', +] as const + export type * from './types' diff --git a/packages/forge/core/zod/extendWithTypebotLayout.ts b/packages/forge/core/zod/extendWithTypebotLayout.ts index 87b805ef1..ee41291d7 100644 --- a/packages/forge/core/zod/extendWithTypebotLayout.ts +++ b/packages/forge/core/zod/extendWithTypebotLayout.ts @@ -20,7 +20,7 @@ export interface ZodLayoutMetadata< itemLabel?: T extends OptionableZodType> ? string : never isOrdered?: T extends OptionableZodType> ? boolean : never moreInfoTooltip?: string - isHidden?: boolean + isHidden?: boolean | ((currentObj: Record) => boolean) isDebounceDisabled?: boolean hiddenItems?: string[] } diff --git a/packages/forge/core/zod/helpers/evaluateIsHidden.ts b/packages/forge/core/zod/helpers/evaluateIsHidden.ts new file mode 100644 index 000000000..6a97761d0 --- /dev/null +++ b/packages/forge/core/zod/helpers/evaluateIsHidden.ts @@ -0,0 +1,9 @@ +export const evaluateIsHidden = ( + isHidden: boolean | ((obj: any) => boolean) | undefined, + obj: any +): boolean => { + if (typeof isHidden === 'function') { + return isHidden(obj) + } + return isHidden ?? false +} diff --git a/packages/forge/repository/constants.ts b/packages/forge/repository/constants.ts index 6d89dcd58..034313869 100644 --- a/packages/forge/repository/constants.ts +++ b/packages/forge/repository/constants.ts @@ -13,4 +13,5 @@ export const forgedBlockIds = [ 'anthropic', 'together-ai', 'open-router', + 'nocodb', ] as const satisfies ForgedBlock['type'][] diff --git a/packages/forge/repository/credentials.ts b/packages/forge/repository/credentials.ts index ab9e6996c..a32d9136d 100644 --- a/packages/forge/repository/credentials.ts +++ b/packages/forge/repository/credentials.ts @@ -20,6 +20,8 @@ import { togetherAiBlock } from '@typebot.io/together-ai-block' import { togetherAiCredentialsSchema } from '@typebot.io/together-ai-block/schemas' import { zemanticAiBlock } from '@typebot.io/zemantic-ai-block' import { zemanticAiCredentialsSchema } from '@typebot.io/zemantic-ai-block/schemas' +import { nocodbBlock } from '@typebot.io/nocodb-block' +import { nocodbCredentialsSchema } from '@typebot.io/nocodb-block/schemas' export const forgedCredentialsSchemas = { [openAIBlock.id]: openAICredentialsSchema, @@ -33,4 +35,5 @@ export const forgedCredentialsSchemas = { [anthropicBlock.id]: anthropicCredentialsSchema, [togetherAiBlock.id]: togetherAiCredentialsSchema, [openRouterBlock.id]: openRouterCredentialsSchema, + [nocodbBlock.id]: nocodbCredentialsSchema, } diff --git a/packages/forge/repository/definitions.ts b/packages/forge/repository/definitions.ts index 2ba958c09..e2c2db916 100644 --- a/packages/forge/repository/definitions.ts +++ b/packages/forge/repository/definitions.ts @@ -10,6 +10,7 @@ import { chatNodeBlock } from '@typebot.io/chat-node-block' import { calComBlock } from '@typebot.io/cal-com-block' import { zemanticAiBlock } from '@typebot.io/zemantic-ai-block' import { openAIBlock } from '@typebot.io/openai-block' +import { nocodbBlock } from '@typebot.io/nocodb-block' export const forgedBlocks = { [openAIBlock.id]: openAIBlock, @@ -23,4 +24,5 @@ export const forgedBlocks = { [anthropicBlock.id]: anthropicBlock, [togetherAiBlock.id]: togetherAiBlock, [openRouterBlock.id]: openRouterBlock, + [nocodbBlock.id]: nocodbBlock, } diff --git a/packages/forge/repository/package.json b/packages/forge/repository/package.json index 779a0845b..d18c05bc1 100644 --- a/packages/forge/repository/package.json +++ b/packages/forge/repository/package.json @@ -17,6 +17,7 @@ "@typebot.io/elevenlabs-block": "workspace:*", "@typebot.io/anthropic-block": "workspace:*", "@typebot.io/together-ai-block": "workspace:*", - "@typebot.io/open-router-block": "workspace:*" + "@typebot.io/open-router-block": "workspace:*", + "@typebot.io/nocodb-block": "workspace:*" } } diff --git a/packages/forge/repository/schemas.ts b/packages/forge/repository/schemas.ts index 29da58a1b..6f0d53168 100644 --- a/packages/forge/repository/schemas.ts +++ b/packages/forge/repository/schemas.ts @@ -21,6 +21,8 @@ import { togetherAiBlock } from '@typebot.io/together-ai-block' import { togetherAiBlockSchema } from '@typebot.io/together-ai-block/schemas' import { zemanticAiBlock } from '@typebot.io/zemantic-ai-block' import { zemanticAiBlockSchema } from '@typebot.io/zemantic-ai-block/schemas' +import { nocodbBlock } from '@typebot.io/nocodb-block' +import { nocodbBlockSchema } from '@typebot.io/nocodb-block/schemas' export const forgedBlockSchemas = { [openAIBlock.id]: openAIBlockSchema, @@ -34,4 +36,5 @@ export const forgedBlockSchemas = { [anthropicBlock.id]: anthropicBlockSchema, [togetherAiBlock.id]: togetherAiBlockSchema, [openRouterBlock.id]: openRouterBlockSchema, + [nocodbBlock.id]: nocodbBlockSchema, } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c04af5da5..c0409fb4e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1420,6 +1420,28 @@ importers: specifier: 5.4.5 version: 5.4.5 + packages/forge/blocks/nocodb: + dependencies: + ky: + specifier: 1.2.3 + version: 1.2.3 + devDependencies: + '@typebot.io/forge': + specifier: workspace:* + version: link:../../core + '@typebot.io/lib': + specifier: workspace:* + version: link:../../../lib + '@typebot.io/tsconfig': + specifier: workspace:* + version: link:../../../tsconfig + '@types/react': + specifier: 18.2.15 + version: 18.2.15 + typescript: + specifier: 5.3.2 + version: 5.3.2 + packages/forge/blocks/openRouter: devDependencies: '@typebot.io/forge': @@ -1596,6 +1618,9 @@ importers: '@typebot.io/mistral-block': specifier: workspace:* version: link:../blocks/mistral + '@typebot.io/nocodb-block': + specifier: workspace:* + version: link:../blocks/nocodb '@typebot.io/open-router-block': specifier: workspace:* version: link:../blocks/openRouter @@ -22392,6 +22417,12 @@ packages: hasBin: true dev: false + /typescript@5.3.2: + resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + /typescript@5.4.5: resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'}