From c9c963a5ec42f8588f6d7b082865cf1eb5e33571 Mon Sep 17 00:00:00 2001 From: Carl Brugger Date: Mon, 10 Mar 2025 09:11:52 -0500 Subject: [PATCH 1/2] viewMapped retain required fields option --- .changeset/two-queens-happen.md | 5 +++++ package-lock.json | 4 ++-- plugins/view-mapped/src/view-mapped.ts | 22 ++++++++++++++++++---- 3 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 .changeset/two-queens-happen.md diff --git a/.changeset/two-queens-happen.md b/.changeset/two-queens-happen.md new file mode 100644 index 000000000..8b2465124 --- /dev/null +++ b/.changeset/two-queens-happen.md @@ -0,0 +1,5 @@ +--- +'@flatfile/plugin-view-mapped': minor +--- + +This release introduces an option to retain required fields diff --git a/package-lock.json b/package-lock.json index 50a4563be..80abecfe6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17508,7 +17508,7 @@ }, "plugins/constraints": { "name": "@flatfile/plugin-constraints", - "version": "8.0.1", + "version": "8.0.2", "license": "ISC", "devDependencies": { "@flatfile/bundler-config-tsup": "^0.2.0", @@ -17858,7 +17858,7 @@ }, "plugins/space-configure": { "name": "@flatfile/plugin-space-configure", - "version": "0.10.0", + "version": "0.10.1", "license": "ISC", "dependencies": { "@flatfile/plugin-job-handler": "^0.8.1" diff --git a/plugins/view-mapped/src/view-mapped.ts b/plugins/view-mapped/src/view-mapped.ts index 86caf242d..a22a00043 100644 --- a/plugins/view-mapped/src/view-mapped.ts +++ b/plugins/view-mapped/src/view-mapped.ts @@ -7,10 +7,17 @@ const api = new FlatfileClient() const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)) +interface ViewMappedOptions { + /** + * If true, the plugin will skip removal of required fields + */ + skipRequiredFields?: boolean +} + /** * This plugin allows you to make the post-mapping sheet only display mapped data */ -export function viewMappedPlugin() { +export function viewMappedPlugin(options: ViewMappedOptions) { return (listener: FlatfileListener) => { // Defining what needs to be done when Flatfile is done mapping columns based on user input during the Mapping stage of the import process listener.on('job:completed', { job: 'workbook:map' }, async (event) => { @@ -98,9 +105,16 @@ export function viewMappedPlugin() { // Looping over each sheet in "workbook" and filtering for fields with metadata "mapped: true". Saving mapped fields per each sheet inside of "filteredWorkbookFields" varibable const filteredWorkbookFields = workbook.sheets.map((sheet) => { - const fields = sheet.config.fields.filter( - (field) => field.metadata && field.metadata.mapped === true - ) + const fields = sheet.config.fields.filter((field) => { + // Keep mapped fields + if (field.metadata?.mapped === true) return true + + // Handle required fields based on skipRequiredFields option + const isRequired = field.constraints?.some( + (constraint) => constraint.type === 'required' + ) + return !options.skipRequiredFields && isRequired + }) return fields.length > 0 ? fields : null }) From 43da7892cd7c8823445c1e03e4d331bb7f5b3d38 Mon Sep 17 00:00:00 2001 From: Elisa Dinsmore Date: Mon, 10 Mar 2025 12:54:54 -0400 Subject: [PATCH 2/2] modified default behavior and name of parameter --- plugins/view-mapped/src/view-mapped.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/view-mapped/src/view-mapped.ts b/plugins/view-mapped/src/view-mapped.ts index a22a00043..ff7e44c15 100644 --- a/plugins/view-mapped/src/view-mapped.ts +++ b/plugins/view-mapped/src/view-mapped.ts @@ -11,7 +11,7 @@ interface ViewMappedOptions { /** * If true, the plugin will skip removal of required fields */ - skipRequiredFields?: boolean + keepRequiredFields?: boolean } /** @@ -109,11 +109,11 @@ export function viewMappedPlugin(options: ViewMappedOptions) { // Keep mapped fields if (field.metadata?.mapped === true) return true - // Handle required fields based on skipRequiredFields option + // Handle required fields based on keepRequiredFields option const isRequired = field.constraints?.some( (constraint) => constraint.type === 'required' ) - return !options.skipRequiredFields && isRequired + return options.keepRequiredFields && isRequired }) return fields.length > 0 ? fields : null })