@flatfile/plugin-space-configure
Version:
A plugin for configuring a Flatfile Space.
1 lines • 10.4 kB
Source Map (JSON)
{"version":3,"sources":["../src/utils/data.checklist.ts","../src/data.checklist.ts","../src/space.configure.ts"],"names":["api","FlatfileClient","dataChecklist","spaceId","workbooks","body","workbook","sheets","sheet","fieldTable","field","constraints","constraint","documents","checklistDocument","document","dataChecklistPlugin","listener","event","configureSpace","setupFactory","callback","jobHandler","tick","environmentId","setup","workbookIds","workbookConfig"],"mappings":"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","file":"index.cjs","sourcesContent":["import { Flatfile, FlatfileClient } from '@flatfile/api'\n\nconst api = new FlatfileClient()\n\nexport const dataChecklist = async (spaceId: Flatfile.SpaceId) => {\n const { data: workbooks } = await api.workbooks.list({ spaceId })\n\n let body = `<div class=\"my-doc\">\\n`\n\n for (const workbook of workbooks) {\n if (\n workbook.labels.includes('file') &&\n workbook.name.startsWith('[file]')\n ) {\n console.log(`Skipping file workbook \\`${workbook.name}\\``)\n continue\n }\n\n const { data: sheets } = await api.sheets.list({ workbookId: workbook.id })\n body += ` <h2>${workbook.name}</h2>`\n\n for (const sheet of sheets) {\n const fields = sheet.config.fields\n const fieldTable = fields\n .map((field) => {\n const constraints = field.constraints\n ?.map(\n (constraint) =>\n `<span style=\"color: #d97a71; background-color: #fff0ef; padding: 2px 6px; border-radius: 5px; margin-left: 8px;\">${constraint.type}</span>`\n )\n .join('')\n return `\n <tr>\n <td style=\"padding:8px; border-bottom:1px solid #f3f2f2;\">${field.label}${constraints ?? ''}</td>\n <td style=\"padding:8px; border-bottom:1px solid #f3f2f2;\"><span style=\"color: #2e424b; background-color: #f0f0f0; padding: 2px 6px; border-radius: 5px;\">${field.type}</span></td>\n <td style=\"padding:8px; border-bottom:1px solid #f3f2f2;\">${field.description || ''}</td>\n </tr>`\n })\n .join('')\n\n body += `\n<h3>${sheet.name}</h3>\n<table style=\"width:100%; border-collapse: collapse;\">\n<thead>\n <tr>\n <th style=\"text-align:left; padding:8px; border-bottom:1px solid #ddd; width: 25%;\">Field Name</th>\n <th style=\"text-align:left; padding:8px; border-bottom:1px solid #ddd; width: 10%;\">Data Type</th>\n <th style=\"text-align:left; padding:8px; border-bottom:1px solid #ddd; width: 65%;\">Description</th>\n </tr>\n</thead>\n<tbody>${fieldTable}\n</tbody>\n</table>`\n }\n }\n\n body += `\\n</div>`\n\n const { data: documents } = await api.documents.list(spaceId)\n const checklistDocument = documents.find(\n (document) => document.title === 'Data Checklist'\n )\n if (checklistDocument) {\n await api.documents.update(spaceId, checklistDocument.id, {\n title: 'Data Checklist',\n body,\n })\n } else {\n await api.documents.create(spaceId, {\n title: 'Data Checklist',\n body,\n })\n }\n}\n","import type { Flatfile } from '@flatfile/api'\nimport type { FlatfileEvent, FlatfileListener } from '@flatfile/listener'\nimport { dataChecklist } from './utils/data.checklist'\n\nexport function dataChecklistPlugin() {\n return function (listener: FlatfileListener) {\n listener.on(\n ['workbook:created', 'workbook:updated'],\n async (event: FlatfileEvent) => {\n const { spaceId } = event.context\n console.log(\n `\\`dataChecklist\\` firing on \\`${event.topic}\\` for space \\`${spaceId}\\``\n )\n await dataChecklist(spaceId as Flatfile.SpaceId)\n }\n )\n }\n}\n","import type { Flatfile } from '@flatfile/api'\nimport { FlatfileClient } from '@flatfile/api'\nimport type { FlatfileEvent, FlatfileListener } from '@flatfile/listener'\nimport { type TickFunction, jobHandler } from '@flatfile/plugin-job-handler'\n\nconst api = new FlatfileClient()\n\n/**\n * `configureSpace` is a higher-order function that creates a plugin to configure a\n * workspace using the Flatfile API. This function takes a setup factory that may either\n * be a static setup configuration or a function that creates a setup configuration\n * given a FlatfileEvent.\n *\n * When the job:ready for space:configure is emitted, the plugin will extract the necessary IDs, create a\n * configuration using the provided setup factory, create a workbook with this configuration,\n * and update the space with the workbook ID as the primary workbook ID.\n *\n * @param {SetupFactory} setup - The setup factory used to create the configuration for the workbook.\n * This can either be a static Setup object or a function that creates a Setup object given a FlatfileEvent.\n *\n * @param {Function} callback - A callback function that is called after the workbook is created.\n *\n * @returns {Function} Returns a function that takes a FlatfileListener, adding a \"space:configure\" event listener\n * and configuring the space when the event is emitted.\n */\nexport function configureSpace(\n setupFactory: SetupFactory,\n callback?: (\n event: FlatfileEvent,\n workbookIds: string[],\n tick: TickFunction\n ) => any | Promise<any>\n) {\n return function (listener: FlatfileListener) {\n listener.use(\n jobHandler('space:configure', async (event, tick) => {\n const { spaceId, environmentId } = event.context\n const setup =\n typeof setupFactory === 'function'\n ? await setupFactory(event)\n : setupFactory\n const workbookIds = await Promise.all(\n setup.workbooks.map(async (workbookConfig) => {\n const workbook = await api.workbooks.create({\n spaceId,\n environmentId,\n name: 'Workbook',\n ...workbookConfig,\n })\n return workbook.data.id\n })\n )\n await tick(50, 'Workbook created')\n\n if (setup.config?.maintainWorkbookOrder) {\n if (!setup.space) {\n setup.space = {}\n }\n\n setup.space.settings = {\n sidebarConfig: {\n workbookSidebarOrder: workbookIds,\n },\n }\n }\n\n await api.spaces.update(spaceId, {\n environmentId: environmentId,\n primaryWorkbookId:\n workbookIds && workbookIds.length > 0 ? workbookIds[0] : '',\n ...setup.space,\n })\n\n if (setup.documents) {\n for (const document of setup.documents) {\n await api.documents.create(spaceId, document)\n }\n }\n\n if (callback) {\n await callback(event, workbookIds, tick)\n }\n return { info: 'Space configured' }\n })\n )\n }\n}\n\nexport type SetupFactory =\n | Setup\n | ((event: FlatfileEvent) => Setup | Promise<Setup>)\nexport type Setup = {\n workbooks: PartialWb[]\n space?: Partial<Flatfile.SpaceConfig>\n documents?: Flatfile.DocumentConfig[]\n config?: {\n maintainWorkbookOrder?: boolean\n }\n}\nexport type PartialWb = Partial<Flatfile.CreateWorkbookConfig>\n"]}