ifthenelse-8.x-1.x-dev-no-core/modules/contrib/if_then_else/src/core/Nodes/Events/ViewIsLoadedEvent/ViewIsLoadedEvent.js
modules/contrib/if_then_else/src/core/Nodes/Events/ViewIsLoadedEvent/ViewIsLoadedEvent.js
class ViewIsLoadedEventControl 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"> <div class="entity-select"> <label class="typo__label">View Name</label> <multiselect v-model="selected_view_name" :show-labels="false" :options="views" placeholder="View Name" @input="viewNameSelected" label="label" track-by="value"></multiselect> </div> <div class="bundle-select" v-if="showDisplayList"> <label class="typo__label">Display Id</label> <multiselect v-model="selected_display_id" :options="displays" :show-labels="false" placeholder="Display Id" @input="displayIdSelected" label="label" track-by="value"></multiselect> </div> </div>`, data() { return { type: drupalSettings.if_then_else.nodes.view_is_loaded_event.type, class: drupalSettings.if_then_else.nodes.view_is_loaded_event.class, name: drupalSettings.if_then_else.nodes.view_is_loaded_event.name, value: 0, showDisplayList: true, views: [], displays: [], selected_view_name: [], selected_display_id: [], } }, 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'); }, viewNameSelected(value) { //Triggered when selecting an entity from entity dropdown. //reinitialize all values this.displays = []; this.selected_display_id = []; this.displayIdSelected(); this.selected_view_name = []; if (value !== null) { //check if an entity is selected let entity_id = value.value; this.selected_view_name = { label: value.label, value: value.value }; //This value is passed from module. let bundle_list = drupalSettings.if_then_else.nodes.view_is_loaded_event.entity_info[entity_id]['display']; this.showDisplayList = true; Object.keys(bundle_list).forEach(itemKey => { this.displays.push({ label: bundle_list[itemKey].label, value: bundle_list[itemKey].id }); }); } //Updating reactive variable of Vue to reflect changes on frontend this.putData('selected_display_id', []); this.putData('selected_view_name', this.selected_view_name); editor.trigger('process'); }, displayIdSelected() { //Triggered when a bundle is selected. We are fetching fields using ajax in this function this.showLoadingSpinner = false; this.putData('selected_display_id', this.selected_display_id); 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.view_is_loaded_event.type); this.putData('class', drupalSettings.if_then_else.nodes.view_is_loaded_event.class); this.putData('name', drupalSettings.if_then_else.nodes.view_is_loaded_event.name); //Setting values of retejs condition nodes when editing rule page loads this.selected_view_name = this.getData('selected_view_name'); this.selected_display_id = this.getData('selected_display_id'); }, created() { //Triggered when loading retejs editor but before mounted function. See documentaion of Vuejs //Fetching values of fields when editing rule page loads if (drupalSettings.if_then_else.nodes.view_is_loaded_event.entity_info) { var views_list = drupalSettings.if_then_else.nodes.view_is_loaded_event.entity_info; Object.keys(views_list).forEach(itemKey => { this.views.push({ label: views_list[itemKey].label, value: views_list[itemKey].id }); }); // Load the bundle list when form loads for edit this.selected_view_name = this.getData('selected_view_name'); if (this.selected_view_name != undefined && typeof this.selected_view_name != 'undefined' && this.selected_view_name !== '') { let selected_view_name = this.selected_view_name.value; if (drupalSettings.if_then_else.nodes.view_is_loaded_event.entity_info) { let bundle_list = drupalSettings.if_then_else.nodes.view_is_loaded_event.entity_info[selected_view_name]['display']; Object.keys(bundle_list).forEach(itemKey => { this.displays.push({ label: bundle_list[itemKey].label, value: bundle_list[itemKey].id }); }); } } } } }; this.props = { emitter, ikey: key, readonly }; } setValue(val) { this.vueContext.value = val; } }