ifthenelse-8.x-1.x-dev-no-core/modules/contrib/if_then_else/src/core/Nodes/Conditions/UserRoleCondition/UserRoleCondition.js
modules/contrib/if_then_else/src/core/Nodes/Conditions/UserRoleCondition/UserRoleCondition.js
class UserRoleConditionControl extends Rete.Control { constructor(emitter, key, readonly) { super(key); this.component = { components: { // Component included for Multiselect. Multiselect: window.VueMultiselect.default }, props: ['readonly', 'emitter', 'ikey', 'getData', 'putData'], template: ` <div class="fields-container"> <label>Match Criterion</label> <multiselect v-model="match" :show-labels="false" label="label" track-by="type" :options="match_options" @input="updateMatchCriterion" :allow-empty="false"></multiselect> <label>Roles</label> <div class="radio"> <input type="radio" :id="radio1_uid" value="list" v-model="input_selection" @change="inputSelectionChanged"> <label :for="radio1_uid">Select From List</label> </div> <multiselect v-if="input_selection === 'list'" v-model="selected_roles" :show-labels="false" :options="roles" :multiple="true" placeholder="Role" @input="roleSelected" label="label" track-by="name"></multiselect> <div class="radio"> <input type="radio" :id="radio2_uid" value="input" v-model="input_selection" @change="inputSelectionChanged"> <label :for="radio2_uid">Select From "Roles" Input</label> </div> </div>`, data() { return { type: drupalSettings.if_then_else.nodes.user_role_condition.type, class: drupalSettings.if_then_else.nodes.user_role_condition.class, name: drupalSettings.if_then_else.nodes.user_role_condition.name, match: 'all', match_options: [ {label: 'All roles', type: 'all'}, {label: 'At least one role', type: 'any'} ], roles: [], input_selection: 'list', selected_roles: [] } }, methods: { update() { //Triggered on focus out of formclass input field /*if (this.ikey) this.putData(this.ikey, this.value)*/ //This is called to reprocess the retejs editor editor.trigger('process'); }, roleSelected(value) { //Triggered when selecting a role from roles dropdown. //reinitialize all values this.selected_roles = []; value.forEach((resource) => { this.selected_roles.push({label: resource.label, name: resource.name}); }); //Updating reactive variable of Vue to reflect changes on frontend this.putData('selected_roles', this.selected_roles); editor.trigger('process'); }, inputSelectionChanged() { this.putData('input_selection', this.input_selection); editor.trigger('process'); }, updateMatchCriterion() { this.putData('match', this.match); editor.trigger('process'); } }, mounted() { //Triggered when loading retejs editor. See documentaion of Vuejs //initialize variable for data this.putData('type', drupalSettings.if_then_else.nodes.user_role_condition.type); this.putData('class', drupalSettings.if_then_else.nodes.user_role_condition.class); this.putData('name', drupalSettings.if_then_else.nodes.user_role_condition.name); //Setting values of retejs condition nodes when editing rule page loads this.selected_roles = this.getData('selected_roles'); this.match = this.getData('match'); this.input_selection = this.getData('input_selection'); }, created() { //Triggered when loading retejs editor but before mounted function. See documentaion of Vuejs this.radio1_uid = _.uniqueId('radio_'); this.radio2_uid = _.uniqueId('radio_'); //Fetching values of fields when editing rule page loads for (let role in drupalSettings.if_then_else.nodes.user_role_condition.roles) { this.roles.push({ name: role, label: drupalSettings.if_then_else.nodes.user_role_condition.roles[role] }); } } }; this.props = { emitter, ikey: key, readonly }; } setValue(val) { this.vueContext.value = val; } }