IKHSAN
EN Read in EnglishID

opendesk

Publik
Branch
main
Commit terakhir
08d9f3328 Oktober 2026

QuickFilterField.vue

Buka raw
<template>
  <FormControl
    v-if="filter.type == 'Check'"
    :label="filter.label"
    type="checkbox"
    :checked="props.value"
    @change.stop="updateFilter(filter, $event.target.checked)"
    class="!min-w-36 max-w-36"
  />
  <FormControl
    v-else-if="filter.type === 'Select'"
    class="form-control cursor-pointer [&_select]:cursor-pointer !min-w-36 max-w-36"
    type="select"
    :model-value="props.value || undefined"
    :options="filter.options"
    :placeholder="filter.label"
    @update:modelValue="(v) => updateFilter(filter, v || '')"
  />
  <Link
    v-else-if="filter.type === 'Link'"
    :model-value="props.value"
    :doctype="filter.options"
    :placeholder="filter.label"
    :title="props.value ? String(props.value) : undefined"
    class="!min-w-36 max-w-36"
    @update:model-value="(value) => updateFilter(filter, value ?? '')"
  />
  <component
    v-else-if="['Date', 'Datetime'].includes(filter.type)"
    class="border-none !min-w-36 max-w-36"
    :is="filter.type === 'Date' ? DatePicker : DateTimePicker"
    :model-value="props.value"
    @change="(v) => updateFilter(filter, v)"
    :placeholder="filter.label"
  />
  <TextInput
    v-else
    :value="props.value"
    type="text"
    :placeholder="filter.label"
    @input.stop="debouncedFn(filter, $event.target.value)"
    class="border-none !min-w-36 max-w-36"
  />
</template>
<script setup>
import { Link } from "@framework/ui";
import { useDebounceFn } from "@vueuse/core";
import { DatePicker, DateTimePicker, FormControl, TextInput } from "frappe-ui";

const props = defineProps({
  filter: {
    type: Object,
    required: true,
  },
  value: {
    type: [String, Boolean],
    required: true,
  },
});

const emit = defineEmits(["applyQuickFilter"]);

const debouncedFn = useDebounceFn((f, value) => {
  emit("applyQuickFilter", f, value);
}, 500);

function updateFilter(f, value) {
  emit("applyQuickFilter", f, value);
}
</script>
byte
1.941
baris
71
Jenis
vue
Commit terakhir
28 Oktober 2026