Merge pull request #4692 from mfilser/custom_field_string_templates_regexp_possible

RegExp possible at "Custom Field String Templates"
This commit is contained in:
Lauri Ojansivu 2022-09-16 22:29:06 +03:00 committed by GitHub
commit 48b7ce8273
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 48 additions and 14 deletions

View file

@ -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,21 +246,18 @@ 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() {
return (this.data().value ?? [])
.filter(value => !!value.trim())
.map(value => this.stringtemplateFormat.replace(/%\{value\}/gi, value))
.join(this.stringtemplateSeparator ?? '');
const ret = this.customField.getFormattedValue(this.data().value);
return ret;
}
getItems() {
@ -330,4 +328,5 @@ CardCustomField.register('cardCustomField');
},
];
}
}.register('cardCustomField-stringtemplate'));
}
CardCustomFieldStringTemplate.register('cardCustomField-stringtemplate');

View file

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

View file

@ -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(/[%$]\{.+?[^0-9]\}/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;
}
}