/home/edulekha/crm.edulekha.com/resources/js/components/filters/AppFiltersMultiSelectRule.vue
<template>
  <select
    class="selectpicker"
    data-live-search="true"
    multiple
    :id="selectRuleId"
    data-width="100%"
    data-none-selected-text=""
  >
    <option
      v-for="option in rule.options"
      :key="option.value"
      :value="option.value"
      :selected="rule.value.indexOf(option.value) > -1"
      :data-subtext="option.subtext"
    >
      {{ option.label }}
    </option>
  </select>
</template>
<script setup>
import { onBeforeUnmount, onMounted, watch } from "vue";

const props = defineProps({ rule: { type: Object, required: true } });
const emit = defineEmits(["update-rule-value"]);

const selectRuleId = `multiSelectRule${props.rule.id}`;
const selectRuleSelector = `#${selectRuleId}`;

watch(
  () => props.rule.value,
  (newVal) => {
    $(selectRuleSelector).selectpicker("val", newVal);
  }
);

function updateRuleValue(e) {
  emit("update-rule-value", $(selectRuleSelector).selectpicker("val"));
}

onMounted(() => {
  init_selectpicker();
  $(selectRuleSelector).on("change", updateRuleValue);
});

onBeforeUnmount(() => {
  $(selectRuleSelector).off("change", updateRuleValue);
});
</script>