mirror of
https://github.com/wekan/wekan.git
synced 2025-04-22 04:57:07 -04:00
Merge pull request #4692 from mfilser/custom_field_string_templates_regexp_possible
RegExp possible at "Custom Field String Templates"
This commit is contained in:
commit
48b7ce8273
3 changed files with 48 additions and 14 deletions
|
@ -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');
|
||||
|
|
|
@ -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
client/lib/customFields.js
Normal file
38
client/lib/customFields.js
Normal 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;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue