0
Fork 0
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:
Rishabh 2021-06-21 14:04:33 +05:30
parent e5a24c8bb3
commit dc6b2884f1
5 changed files with 82 additions and 1 deletions

View file

@ -10,6 +10,7 @@ import Mixin from '@ember/object/mixin';
import Model from '@ember-data/model'; import Model from '@ember-data/model';
import NavItemValidator from 'ghost-admin/validators/nav-item'; import NavItemValidator from 'ghost-admin/validators/nav-item';
import PostValidator from 'ghost-admin/validators/post'; import PostValidator from 'ghost-admin/validators/post';
import ProductBenefitItemValidator from 'ghost-admin/validators/product-benefit-item';
import ProductValidator from 'ghost-admin/validators/product'; import ProductValidator from 'ghost-admin/validators/product';
import RSVP from 'rsvp'; import RSVP from 'rsvp';
import ResetValidator from 'ghost-admin/validators/reset'; import ResetValidator from 'ghost-admin/validators/reset';
@ -42,6 +43,7 @@ export default Mixin.create({
customView: CustomViewValidator, customView: CustomViewValidator,
inviteUser: InviteUserValidator, inviteUser: InviteUserValidator,
navItem: NavItemValidator, navItem: NavItemValidator,
productBenefitItem: ProductBenefitItemValidator,
post: PostValidator, post: PostValidator,
reset: ResetValidator, reset: ResetValidator,
setting: SettingValidator, setting: SettingValidator,

View 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);
})
});

View file

@ -8,5 +8,6 @@ export default Model.extend(ValidationEngine, {
description: attr('string'), description: attr('string'),
slug: attr('string'), slug: attr('string'),
monthlyPrice: attr('stripe-price'), monthlyPrice: attr('stripe-price'),
yearlyPrice: attr('stripe-price') yearlyPrice: attr('stripe-price'),
benefits: attr('product-benefits')
}); });

View 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);
}
});

View 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');
}
});