This plugin dedupes records in a Sheet via a Sheet-level action.
Event Type:
listener.on('job:ready')
When embedding Flatfile, this plugin should be deployed in a server-side listener. Learn more
The jobOperation
parameter specifies the name of the job operation to match on.
The on
parameter specifies which field key to match on.
The keep
option lets you choose whether to keep the first or last duplicate record.
The custom
parameter accepts a custom dedupe function. This will override the keep
parameter.
The debug
parameter lets you toggle on/off helpful debugging messages for development purposes.
api.records.get
api.jobs.ack
api.records.delete
api.jobs.fail
api.jobs.complete
An action with the operation name of "dedupe-email" must be configured on a Sheet for the plugin to be triggered.
npm i @flatfile/plugin-dedupe
import { dedupePlugin } from "@flatfile/plugin-dedupe";
import { Flatfile } from '@flatfile/api'
export const contactsSheet: Flatfile.SheetConfig = {
name: 'Contacts',
slug: 'contacts',
fields: [
{
key: 'firstName',
type: 'string',
label: 'First Name',
},
{
key: 'lastName',
type: 'string',
label: 'Last Name',
},
{
key: 'email',
type: 'string',
label: 'Email',
}
],
// Add a Sheet-level action here for the dedupe plugin
actions: [
{
operation: "dedupe-email",
mode: "background",
label: "Dedupe emails",
description: "Remove duplicate emails"
}
]
}
// common usage
// Keep the last record encountered (from top to bottom) based on the`email` field key.
// Must have a Sheet-level action specified with the operation name `dedupe-email`
listener.use(
dedupePlugin("dedupe-email", {
on: "email",
keep: "last",
})
);
// user specified dedupe function must return a list a record id's for deletion
listener.use(
dedupePlugin("dedupe-email", {
custom: (records) => {
let uniques = new Set();
let toDelete = [];
records.forEach(record => {
const { value } = record.values["email"];
if (uniques.has(value)) {
toDelete.push(record.id);
} else {
uniques.add(value);
}
});
return toDelete;
},
})
);
// common usage
// Keep the last record encountered (from top to bottom) based on the`email` field key.
// Must have a Sheet-level action specified with the operation name `dedupe-email`
listener.use(
dedupePlugin("dedupe-email", {
on: "email",
keep: "last",
})
);
// user specified dedupe function must return a list a record id's for deletion
listener.use(
dedupePlugin("dedupe-email", {
custom: (records: Flatfile.RecordsWithLinks) => {
let uniques = new Set();
let toDelete = [];
records.forEach(record => {
const { value } = record.values["email"];
if (uniques.has(value)) {
toDelete.push(record.id);
} else {
uniques.add(value);
}
});
return toDelete;
},
})
);