Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/two-queens-happen.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@flatfile/plugin-view-mapped': minor
---

This release introduces an option to retain required fields
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

22 changes: 18 additions & 4 deletions plugins/view-mapped/src/view-mapped.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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) => {
Expand Down Expand Up @@ -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
})

Expand Down