add the 'currency' custom field type

This commit is contained in:
Haben Amare 2020-05-25 14:59:32 +00:00
parent 351d9d0c95
commit 3cf6ed916f
5 changed files with 56 additions and 2 deletions

View file

@ -33,6 +33,17 @@ template(name="createCustomFieldPopup")
option(value=value selected="selected") {{name}}
else
option(value=value) {{name}}
div.js-field-settings.js-field-settings-currency(class="{{#if isTypeNotSelected 'currency'}}hide{{/if}}")
label
| {{_ 'custom-field-currency-option'}}
select.js-field-currency
each getCurrencySymbols
if selected
option(value=value selected="selected") {{name}}
else
option(value=value) {{name}}
div.js-field-settings.js-field-settings-dropdown(class="{{#if isTypeNotSelected 'dropdown'}}hide{{/if}}")
label
| {{_ 'custom-field-dropdown-options'}}

View file

@ -16,12 +16,26 @@ BlazeComponent.extendComponent({
}).register('customFieldsSidebar');
const CreateCustomFieldPopup = BlazeComponent.extendComponent({
_types: ['text', 'number', 'date', 'dropdown'],
_types: ['text', 'number', 'date', 'dropdown', 'currency'],
_defaultCurrencySymbols: [
{ symbol: '$' },
{ symbol: '€' },
{ symbol: '£' },
{ symbol: '¥' },
],
onCreated() {
this.type = new ReactiveVar(
this.data().type ? this.data().type : this._types[0],
);
this.currencySymbol = new ReactiveVar(
this.data().settings && this.data().settings.currencySymbol
? this.data().settings.currencySymbol
: this._defaultCurrencySymbols[0].symbol,
);
this.dropdownItems = new ReactiveVar(
this.data().settings && this.data().settings.dropdownItems
? this.data().settings.dropdownItems
@ -44,6 +58,18 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
return this.type.get() !== type;
},
getCurrencySymbols() {
const currentSymbol = this.currencySymbol.get();
return this._defaultCurrencySymbols.map(({ symbol }) => {
return {
name: symbol,
value: symbol,
selected: symbol === currentSymbol,
};
});
},
getDropdownItems() {
const items = this.dropdownItems.get();
Array.from(this.findAll('.js-field-settings-dropdown input')).forEach(
@ -62,6 +88,11 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
getSettings() {
const settings = {};
switch (this.type.get()) {
case 'currency': {
const currencySymbol = this.currencySymbol.get();
settings.currencySymbol = currencySymbol;
break;
}
case 'dropdown': {
const dropdownItems = this.getDropdownItems().filter(
item => !!item.name.trim(),
@ -80,6 +111,10 @@ const CreateCustomFieldPopup = BlazeComponent.extendComponent({
const value = evt.target.value;
this.type.set(value);
},
'change .js-field-currency'(evt) {
const value = evt.target.value;
this.currencySymbol.set(value);
},
'keydown .js-dropdown-item.last'(evt) {
if (evt.target.value.trim() && evt.keyCode === 13) {
const items = this.getDropdownItems();

View file

@ -256,6 +256,8 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Symbol",
"custom-field-date": "Date",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",

View file

@ -256,6 +256,8 @@
"current": "current",
"custom-field-delete-pop": "There is no undo. This will remove this custom field from all cards and destroy its history.",
"custom-field-checkbox": "Checkbox",
"custom-field-currency": "Currency",
"custom-field-currency-option": "Currency Symbol",
"custom-field-date": "Date",
"custom-field-dropdown": "Dropdown List",
"custom-field-dropdown-none": "(none)",

View file

@ -22,7 +22,7 @@ CustomFields.attachSchema(
* type of the custom field
*/
type: String,
allowedValues: ['text', 'number', 'date', 'dropdown'],
allowedValues: ['text', 'number', 'date', 'dropdown', 'currency'],
},
settings: {
/**
@ -30,6 +30,10 @@ CustomFields.attachSchema(
*/
type: Object,
},
'settings.currencySymbol': {
type: String,
optional: true,
},
'settings.dropdownItems': {
/**
* list of drop down items objects