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..ff7e44c15 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 + */ + keepRequiredFields?: 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 keepRequiredFields option + const isRequired = field.constraints?.some( + (constraint) => constraint.type === 'required' + ) + return options.keepRequiredFields && isRequired + }) return fields.length > 0 ? fields : null })