b1cc2a8ea8
no-issue We have a special mapping for subscribed_to_emails -> subscribed in the parse method, but were not mapping it in the unparse method, which meant we were losing information during CSV imports.
68 lines
1.8 KiB
JavaScript
68 lines
1.8 KiB
JavaScript
const _ = require('lodash');
|
|
const papaparse = require('papaparse');
|
|
const DEFAULT_COLUMNS = [
|
|
'id',
|
|
'email',
|
|
'name',
|
|
'note',
|
|
'subscribed_to_emails',
|
|
'complimentary_plan',
|
|
'stripe_customer_id',
|
|
'created_at',
|
|
'deleted_at',
|
|
'labels',
|
|
'products'
|
|
];
|
|
|
|
const unparse = (members, columns = DEFAULT_COLUMNS.slice()) => {
|
|
columns = columns.map((column) => {
|
|
if (column === 'subscribed') {
|
|
return 'subscribed_to_emails';
|
|
}
|
|
return column;
|
|
});
|
|
const mappedMembers = members.map((member) => {
|
|
if (member.error) {
|
|
columns.push('error');
|
|
}
|
|
|
|
let labels = '';
|
|
if (typeof member.labels === 'string') {
|
|
labels = member.labels;
|
|
} else if (Array.isArray(member.labels)) {
|
|
labels = member.labels.map((l) => {
|
|
return typeof l === 'string' ? l : l.name;
|
|
}).join(',');
|
|
}
|
|
|
|
let products = '';
|
|
|
|
if (Array.isArray(member.products)) {
|
|
products = member.products.map((product) => {
|
|
return product.name;
|
|
}).join(',');
|
|
}
|
|
|
|
return {
|
|
id: member.id,
|
|
email: member.email,
|
|
name: member.name,
|
|
note: member.note,
|
|
subscribed_to_emails: member.subscribed,
|
|
complimentary_plan: member.comped || member.complimentary_plan,
|
|
stripe_customer_id: _.get(member, 'subscriptions[0].customer.id') || member.stripe_customer_id,
|
|
created_at: member.created_at,
|
|
deleted_at: member.deleted_at,
|
|
labels: labels,
|
|
products: products,
|
|
error: member.error || null
|
|
};
|
|
});
|
|
|
|
return papaparse.unparse(mappedMembers, {
|
|
columns
|
|
});
|
|
};
|
|
|
|
module.exports = unparse;
|