UNPKG

@flatfile/plugin-space-configure-from-template

Version:

A plugin for configuring a Flatfile Space from a Space Template.

1 lines 7.21 kB
{"version":3,"sources":["../src/space.configure.from.template.ts"],"names":["api","FlatfileClient","configureSpaceFromTemplate","callback","listener","jobHandler","event","tick","spaceId","environmentId","appId","spaceTemplates","spaceTemplate","spaceTemplateId","workbookConfigs","workbook","sheet","workbookIds","workbookConfig","documents","document","error"],"mappings":"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","file":"index.browser.cjs","sourcesContent":["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 * `configureSpaceFromTemplate` 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 {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 configureSpaceFromTemplate(\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 try {\n const { spaceId, environmentId, appId } = event.context\n\n // Get all the space templates for the app sorted by creation date, oldest first\n const spaceTemplates = await api.spaces.list({\n appId,\n isAppTemplate: true,\n sortField: 'createdAt',\n sortDirection: 'asc',\n })\n\n if (spaceTemplates.data.length === 0) {\n throw new Error('No space template found')\n }\n\n // Get the oldest space template\n const spaceTemplate = spaceTemplates.data[0]\n const spaceTemplateId = spaceTemplate.id\n\n // Get all the workbooks for the space template\n const workbooks = await api.workbooks.list({\n spaceId: spaceTemplateId,\n })\n\n // Convert workbooks from the template to workbook configs\n const workbookConfigs: Flatfile.CreateWorkbookConfig[] =\n workbooks.data.map((workbook) => ({\n name: workbook.name,\n labels: workbook.labels,\n spaceId: spaceId,\n environmentId: environmentId,\n namespace: spaceTemplate.namespace,\n sheets: workbook.sheets.map((sheet) => ({\n ...sheet.config,\n })),\n actions: workbook.actions,\n settings: workbook.settings,\n metadata: workbook.metadata,\n treatments: workbook.treatments,\n }))\n\n // Create the workbooks\n const workbookIds = await Promise.all(\n workbookConfigs.map(async (workbookConfig) => {\n const workbook = await api.workbooks.create(workbookConfig)\n return workbook.data.id\n })\n )\n\n await tick(50, 'Workbook created')\n\n // Set some metadata on the space\n await api.spaces.update(spaceId, {\n primaryWorkbookId:\n workbookIds && workbookIds.length > 0 ? workbookIds[0] : '',\n settings: spaceTemplate.settings || {},\n metadata: spaceTemplate.metadata || {},\n actions: spaceTemplate.actions || [],\n access: spaceTemplate.access || [],\n labels: spaceTemplate.labels,\n translationsPath: spaceTemplate.translationsPath || '',\n languageOverride: spaceTemplate.languageOverride || '',\n })\n\n // Get all the documents for the space template...\n const documents = await api.documents.list(spaceTemplateId)\n\n // ...and create them in the new space\n for (const document of documents.data) {\n await api.documents.create(spaceId, document)\n }\n\n if (callback) {\n await callback(event, workbookIds, tick)\n }\n return { info: 'Space configured' }\n } catch (error: any) {\n console.log('Space configuration failed with error:', error)\n throw new Error('Space configuration failed')\n }\n })\n )\n }\n}\n"]}