Quellcode durchsuchen

add the 'currency' custom field type

Haben Amare vor 5 Jahren
Ursprung
Commit
3cf6ed916f

+ 11 - 0
client/components/sidebar/sidebarCustomFields.jade

@@ -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'}}

+ 36 - 1
client/components/sidebar/sidebarCustomFields.js

@@ -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();

+ 2 - 0
i18n/en-GB.i18n.json

@@ -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)",

+ 2 - 0
i18n/en.i18n.json

@@ -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)",

+ 5 - 1
models/customFields.js

@@ -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