-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathLinkedFieldsSelector.vue
More file actions
41 lines (37 loc) · 1.19 KB
/
LinkedFieldsSelector.vue
File metadata and controls
41 lines (37 loc) · 1.19 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<script setup lang="ts">
import type { Field } from '@/modules/fields/types'
import Skeleton from '@/shared/ui/skeleton/Skeleton.vue'
import Checkbox from '@/shared/ui/checkbox/Checkbox.vue'
defineProps<{
fields: Field[]
selectedIds: number[]
isLoading?: boolean
}>()
const emit = defineEmits<{
(e: 'toggle', id: number): void
}>()
</script>
<template>
<div class="max-h-24 space-y-2 overflow-y-auto rounded-md border p-4 shadow-xs">
<template v-if="isLoading">
<Skeleton v-for="i in 4" :key="i" class="h-5 w-[70%] rounded-md shadow-xs" />
</template>
<Transition name="fade" appear>
<div v-if="!isLoading">
<div v-for="field in fields" :key="field.id" class="flex items-center gap-2">
<Checkbox
:id="`field-${field.id}`"
:model-value="selectedIds.includes(field.id)"
@update:model-value="() => emit('toggle', field.id)"
/>
<label
:for="`field-${field.id}`"
class="text-sm leading-none font-medium peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
>
{{ field.name }}
</label>
</div>
</div>
</Transition>
</div>
</template>