From 2fe392c3129ad5eef444f9f140976990d0bedc25 Mon Sep 17 00:00:00 2001 From: Michael Barrett <991592+mike182uk@users.noreply.github.com> Date: Wed, 26 Jul 2023 09:19:09 +0100 Subject: [PATCH] Added import tier to members import modal (#17492) refs https://github.com/TryGhost/Product/issues/3629 --- .../app/components/gh-members-import-mapping-input.js | 9 ++++++++- ghost/admin/app/services/member-import-validator.js | 8 +++++++- ghost/members-csv/lib/unparse.js | 1 + ghost/members-importer/lib/MembersCSVImporter.js | 3 ++- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/ghost/admin/app/components/gh-members-import-mapping-input.js b/ghost/admin/app/components/gh-members-import-mapping-input.js index ba90001429..9cdaa4e6d3 100644 --- a/ghost/admin/app/components/gh-members-import-mapping-input.js +++ b/ghost/admin/app/components/gh-members-import-mapping-input.js @@ -1,5 +1,6 @@ import Component from '@glimmer/component'; import {action} from '@ember/object'; +import {inject as service} from '@ember/service'; import {tracked} from '@glimmer/tracking'; const FIELD_MAPPINGS = [ @@ -14,7 +15,13 @@ const FIELD_MAPPINGS = [ ]; export default class extends Component { - @tracked availableFields = FIELD_MAPPINGS; + @service feature; + @tracked availableFields = [ + ...FIELD_MAPPINGS, + ...( + this.feature.importMemberTier ? [{label: 'Tier', value: 'import_tier'}] : [] + ) + ]; get mapTo() { return this.args.mapTo; diff --git a/ghost/admin/app/services/member-import-validator.js b/ghost/admin/app/services/member-import-validator.js index 7e03ab4865..93a0773973 100644 --- a/ghost/admin/app/services/member-import-validator.js +++ b/ghost/admin/app/services/member-import-validator.js @@ -6,6 +6,7 @@ import {isEmpty} from '@ember/utils'; @classic export default class MemberImportValidatorService extends Service { @service ajax; + @service feature; @service membersUtils; @service ghostPaths; @@ -22,6 +23,7 @@ export default class MemberImportValidatorService extends Service { * If the data contains 30 rows or fewer, all rows should be validated. * * @param {Array} data JSON objects mapped from CSV file + * @param {number} validationSampleSize number of rows to sample */ _sampleData(data, validationSampleSize = 30) { let validatedSet = [{}]; @@ -86,13 +88,17 @@ export default class MemberImportValidatorService extends Service { 'created_at' ]; + if (this.feature.importMemberTier) { + supportedTypes.push('import_tier'); + } + const autoDetectedTypes = [ 'email' ]; let mapping = {}; let i = 0; - // loopping through all sampled data until needed data types are detected + // looping through all sampled data until needed data types are detected while (i <= (data.length - 1)) { if (mapping.email && mapping.stripe_customer_id) { break; diff --git a/ghost/members-csv/lib/unparse.js b/ghost/members-csv/lib/unparse.js index c2f3f0149d..58abb231c2 100644 --- a/ghost/members-csv/lib/unparse.js +++ b/ghost/members-csv/lib/unparse.js @@ -55,6 +55,7 @@ const unparse = (members, columns = DEFAULT_COLUMNS.slice()) => { deleted_at: member.deleted_at, labels: labels, tiers: tiers, + import_tier: member.import_tier || null, error: member.error || null }; }); diff --git a/ghost/members-importer/lib/MembersCSVImporter.js b/ghost/members-importer/lib/MembersCSVImporter.js index 9dda306bca..61f0b81e26 100644 --- a/ghost/members-importer/lib/MembersCSVImporter.js +++ b/ghost/members-importer/lib/MembersCSVImporter.js @@ -21,7 +21,8 @@ const DEFAULT_CSV_HEADER_MAPPING = { created_at: 'created_at', complimentary_plan: 'complimentary_plan', stripe_customer_id: 'stripe_customer_id', - labels: 'labels' + labels: 'labels', + import_tier: 'import_tier' }; module.exports = class MembersCSVImporter {