mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-24 23:48:13 -05:00
Added model and validator for product's benefit item
refs https://github.com/TryGhost/Team/issues/792 - updates product model to read product's list of benefits - adds transformer to return emberArray with list of product benefits - adds new model for each product benefit - adds validator for new product benefit
This commit is contained in:
parent
e5a24c8bb3
commit
dc6b2884f1
5 changed files with 82 additions and 1 deletions
|
@ -10,6 +10,7 @@ import Mixin from '@ember/object/mixin';
|
|||
import Model from '@ember-data/model';
|
||||
import NavItemValidator from 'ghost-admin/validators/nav-item';
|
||||
import PostValidator from 'ghost-admin/validators/post';
|
||||
import ProductBenefitItemValidator from 'ghost-admin/validators/product-benefit-item';
|
||||
import ProductValidator from 'ghost-admin/validators/product';
|
||||
import RSVP from 'rsvp';
|
||||
import ResetValidator from 'ghost-admin/validators/reset';
|
||||
|
@ -42,6 +43,7 @@ export default Mixin.create({
|
|||
customView: CustomViewValidator,
|
||||
inviteUser: InviteUserValidator,
|
||||
navItem: NavItemValidator,
|
||||
productBenefitItem: ProductBenefitItemValidator,
|
||||
post: PostValidator,
|
||||
reset: ResetValidator,
|
||||
setting: SettingValidator,
|
||||
|
|
23
ghost/admin/app/models/product-benefit-item.js
Normal file
23
ghost/admin/app/models/product-benefit-item.js
Normal file
|
@ -0,0 +1,23 @@
|
|||
import EmberObject from '@ember/object';
|
||||
import ValidationEngine from 'ghost-admin/mixins/validation-engine';
|
||||
import {computed} from '@ember/object';
|
||||
import {isBlank} from '@ember/utils';
|
||||
|
||||
export default EmberObject.extend(ValidationEngine, {
|
||||
label: '',
|
||||
isNew: false,
|
||||
|
||||
validationType: 'productBenefitItem',
|
||||
|
||||
isComplete: computed('label', function () {
|
||||
let {label} = this;
|
||||
|
||||
return !isBlank(label);
|
||||
}),
|
||||
|
||||
isBlank: computed('label', function () {
|
||||
let {label} = this;
|
||||
|
||||
return isBlank(label);
|
||||
})
|
||||
});
|
|
@ -8,5 +8,6 @@ export default Model.extend(ValidationEngine, {
|
|||
description: attr('string'),
|
||||
slug: attr('string'),
|
||||
monthlyPrice: attr('stripe-price'),
|
||||
yearlyPrice: attr('stripe-price')
|
||||
yearlyPrice: attr('stripe-price'),
|
||||
benefits: attr('product-benefits')
|
||||
});
|
||||
|
|
37
ghost/admin/app/transforms/product-benefits.js
Normal file
37
ghost/admin/app/transforms/product-benefits.js
Normal file
|
@ -0,0 +1,37 @@
|
|||
import ProductBenefitItem from '../models/product-benefit-item';
|
||||
import Transform from '@ember-data/serializer/transform';
|
||||
import {A as emberA, isArray as isEmberArray} from '@ember/array';
|
||||
|
||||
export default Transform.extend({
|
||||
deserialize(serialized, options) {
|
||||
let benefitsItems, benefitsArray;
|
||||
|
||||
try {
|
||||
benefitsArray = JSON.parse(serialized) || [];
|
||||
} catch (e) {
|
||||
benefitsArray = [];
|
||||
}
|
||||
|
||||
benefitsItems = benefitsArray.map((itemDetails) => {
|
||||
itemDetails.isSecondary = options && options.isSecondary || false;
|
||||
return ProductBenefitItem.create(itemDetails);
|
||||
});
|
||||
|
||||
return emberA(benefitsItems);
|
||||
},
|
||||
|
||||
serialize(deserialized) {
|
||||
let benefitsArray;
|
||||
|
||||
if (isEmberArray(deserialized)) {
|
||||
benefitsArray = deserialized.map((item) => {
|
||||
let label = item.get('label').trim();
|
||||
return {label};
|
||||
}).compact();
|
||||
} else {
|
||||
benefitsArray = [];
|
||||
}
|
||||
|
||||
return JSON.stringify(benefitsArray);
|
||||
}
|
||||
});
|
18
ghost/admin/app/validators/product-benefit-item.js
Normal file
18
ghost/admin/app/validators/product-benefit-item.js
Normal file
|
@ -0,0 +1,18 @@
|
|||
import BaseValidator from './base';
|
||||
import {isBlank} from '@ember/utils';
|
||||
|
||||
export default BaseValidator.create({
|
||||
properties: ['label'],
|
||||
|
||||
label(model) {
|
||||
let label = model.get('label');
|
||||
let hasValidated = model.get('hasValidated');
|
||||
|
||||
if (isBlank(label)) {
|
||||
model.get('errors').add('label', 'You must specify a label');
|
||||
this.invalidate();
|
||||
}
|
||||
|
||||
hasValidated.addObject('label');
|
||||
}
|
||||
});
|
Loading…
Add table
Reference in a new issue