From 019d99fcc21493ade74b2cb083c79c9b8d56f562 Mon Sep 17 00:00:00 2001
From: Fabien O'Carroll <fabien@allou.is>
Date: Tue, 27 Oct 2020 10:42:35 +0000
Subject: [PATCH] Updated members-csv to handle error column when unparsing

no-issue

This also allows for different the member object structure returned from parse
---
 ghost/members-csv/lib/unparse.js | 40 +++++++++++++++++++++++---------
 1 file changed, 29 insertions(+), 11 deletions(-)

diff --git a/ghost/members-csv/lib/unparse.js b/ghost/members-csv/lib/unparse.js
index 5f72cab673..02b68425de 100644
--- a/ghost/members-csv/lib/unparse.js
+++ b/ghost/members-csv/lib/unparse.js
@@ -2,15 +2,30 @@ const _ = require('lodash');
 const papaparse = require('papaparse');
 
 const unparse = (members) => {
+    const columns = new Set([
+        'id',
+        'email',
+        'name',
+        'note',
+        'subscribed_to_emails',
+        'complimentary_plan',
+        'stripe_customer_id',
+        'created_at',
+        'deleted_at',
+        'labels'
+    ]);
     const mappedMembers = members.map((member) => {
-        let stripeCustomerId;
-
-        if (member.stripe) {
-            stripeCustomerId = _.get(member, 'stripe.subscriptions[0].customer.id');
+        if (member.error) {
+            columns.add('error');
         }
-        let labels = [];
-        if (member.labels) {
-            labels = `${member.labels.map(l => l.name).join(',')}`;
+
+        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(',');
         }
 
         return {
@@ -19,15 +34,18 @@ const unparse = (members) => {
             name: member.name,
             note: member.note,
             subscribed_to_emails: member.subscribed,
-            complimentary_plan: member.comped,
-            stripe_customer_id: stripeCustomerId,
+            complimentary_plan: member.comped || member.complimentary_plan,
+            stripe_customer_id: _.get(member, 'stripe.subscriptions[0].customer.id') || member.stripe_customer_id,
             created_at: member.created_at,
             deleted_at: member.deleted_at,
-            labels: labels
+            labels: labels,
+            error: member.error || null
         };
     });
 
-    return papaparse.unparse(mappedMembers);
+    return papaparse.unparse(mappedMembers, {
+        columns: Array.from(columns.values())
+    });
 };
 
 module.exports = unparse;