فهرست منبع

CustomFieldStringTemplate regular expressions now on minicard too

Martin Filser 3 سال پیش
والد
کامیت
53bfa967c6
3فایلهای تغییر یافته به همراه47 افزوده شده و 31 حذف شده
  1. 6 25
      client/components/cards/cardCustomFields.js
  2. 3 6
      client/components/cards/minicard.js
  3. 38 0
      client/lib/customFields.js

+ 6 - 25
client/components/cards/cardCustomFields.js

@@ -2,6 +2,7 @@ import moment from 'moment/min/moment-with-locales';
 import { TAPi18n } from '/imports/i18n';
 import { DatePicker } from '/client/lib/datepicker';
 import Cards from '/models/cards';
+import { CustomFieldStringTemplate } from '/client/lib/customFields'
 
 Template.cardCustomFieldsPopup.helpers({
   hasCustomField() {
@@ -245,38 +246,17 @@ CardCustomField.register('cardCustomField');
 }.register('cardCustomField-dropdown'));
 
 // cardCustomField-stringtemplate
-(class extends CardCustomField {
+class CardCustomFieldStringTemplate extends CardCustomField {
   onCreated() {
     super.onCreated();
 
-    this.stringtemplateFormat = this.data().definition.settings.stringtemplateFormat;
-    this.stringtemplateSeparator = this.data().definition.settings.stringtemplateSeparator;
+    this.customField = new CustomFieldStringTemplate(this.data().definition);
 
     this.stringtemplateItems = new ReactiveVar(this.data().value ?? []);
   }
 
   formattedValue() {
-    const ret = (this.data().value ?? [])
-      .filter(value => !!value.trim())
-      .map(value => {
-        let _ret = this.stringtemplateFormat.replace(/[%$]\{.+?\}/g, function(_match) {
-          let __ret;
-          if (_match.match(/%\{value\}/i)) {
-            __ret = value;
-          } else {
-            _match = _match.replace(/^\$/, "");
-            try {
-              const _json = JSON.parse(_match);
-              __ret =  value.replace(new RegExp(_json.regex, _json.flags), _json.replace);
-            } catch (err) {
-              console.error(err);
-            }
-          }
-          return __ret;
-        });
-        return _ret;
-      })
-      .join(this.stringtemplateSeparator ?? '');
+    const ret = this.customField.getFormattedValue(this.data().value);
     return ret;
   }
 
@@ -348,4 +328,5 @@ CardCustomField.register('cardCustomField');
       },
     ];
   }
-}.register('cardCustomField-stringtemplate'));
+}
+CardCustomFieldStringTemplate.register('cardCustomField-stringtemplate');

+ 3 - 6
client/components/cards/minicard.js

@@ -1,4 +1,5 @@
 import { TAPi18n } from '/imports/i18n';
+import { CustomFieldStringTemplate } from '/client/lib/customFields'
 
 // Template.cards.events({
 //   'click .member': Popup.open('cardMember')
@@ -31,12 +32,8 @@ BlazeComponent.extendComponent({
     const customFieldTrueValue =
       customField && customField.trueValue ? customField.trueValue : [];
 
-    return customFieldTrueValue
-      .filter(value => !!value.trim())
-      .map(value =>
-        definition.settings.stringtemplateFormat.replace(/%\{value\}/gi, value),
-      )
-      .join(definition.settings.stringtemplateSeparator ?? '');
+    const ret = new CustomFieldStringTemplate(definition).getFormattedValue(customFieldTrueValue);
+    return ret;
   },
 
   showCreator() {

+ 38 - 0
client/lib/customFields.js

@@ -0,0 +1,38 @@
+class CustomField {
+  constructor(definition) {
+    this.definition = definition;
+  }
+}
+
+export class CustomFieldStringTemplate extends CustomField {
+  constructor(definition) {
+    super(definition);
+    this.format = definition.settings.stringtemplateFormat;
+    this.separator = definition.settings.stringtemplateSeparator;
+  }
+
+  getFormattedValue(rawValue) {
+    const ret = (rawValue ?? [])
+      .filter(value => !!value.trim())
+      .map(value => {
+        let _ret = this.format.replace(/[%$]\{.+?\}/g, function(_match) {
+          let __ret;
+          if (_match.match(/%\{value\}/i)) {
+            __ret = value;
+          } else {
+            _match = _match.replace(/^\$/, "");
+            try {
+              const _json = JSON.parse(_match);
+              __ret =  value.replace(new RegExp(_json.regex, _json.flags), _json.replace);
+            } catch (err) {
+              console.error(err);
+            }
+          }
+          return __ret;
+        });
+        return _ret;
+      })
+      .join(this.separator ?? '');
+    return ret;
+  }
+}