silverstripe-tagfield/client/src/legacy/entwine/TagField.js

57 lines
1.5 KiB
JavaScript

/* global window */
import React from 'react';
import ReactDOM from 'react-dom';
import { loadComponent } from 'lib/Injector';
window.jQuery.entwine('ss', ($) => {
$('.js-injector-boot .ss-tag-field.entwine').entwine({
onmatch() {
const cmsContent = this.closest('.cms-content').attr('id');
const context = (cmsContent)
? { context: cmsContent }
: {};
const TagField = loadComponent('TagField', context);
const dataSchema = {
...this.data('schema'),
onBlur: () => {
this.parents('.cms-edit-form:first').trigger('change');
}
};
ReactDOM.render(
<TagField
noHolder
{...dataSchema}
/>,
this[0]
);
},
onunmatch() {
ReactDOM.unmountComponentAtNode(this[0]);
}
});
$('.cms-edit-form').entwine({
getChangeTrackerOptions() {
// Figure out if we're still returning the default value
const isDefault = (this.entwineData('ChangeTrackerOptions') === undefined);
// Get the current options
let opts = this._super();
if (isDefault) {
// If it is the default then...
// clone the object (so we don't modify the original),
opts = $.extend({}, opts);
// modify it,
opts.ignoreFieldSelector += ', .ss-tag-field .Select :input';
// then set the clone as the value on this element
// (so next call to this method gets this same clone)
this.setChangeTrackerOptions(opts);
}
return opts;
}
});
});