feat: click outside of drawer should close drawer
This commit is contained in:
parent
458c1663bf
commit
5ff294be3d
5 changed files with 46 additions and 19 deletions
|
|
@ -111,6 +111,7 @@ const file = ref<File | undefined>()
|
||||||
class="q-pa-md"
|
class="q-pa-md"
|
||||||
side="right"
|
side="right"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
|
v-click-outside="() => $emit('update:open', false)"
|
||||||
:width="300"
|
:width="300"
|
||||||
:breakpoint="500"
|
:breakpoint="500"
|
||||||
:model-value="open"
|
:model-value="open"
|
||||||
|
|
|
||||||
|
|
@ -246,7 +246,7 @@ async function submitFileForm(
|
||||||
alignItems: 'center',
|
alignItems: 'center',
|
||||||
padding: currentDept > 2 ? '.5rem 0' : '.5rem',
|
padding: currentDept > 2 ? '.5rem 0' : '.5rem',
|
||||||
}"
|
}"
|
||||||
@click="() => triggerFolderCreate()"
|
@click.stop="() => triggerFolderCreate()"
|
||||||
id="triggerFolderCreateFileItem"
|
id="triggerFolderCreateFileItem"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
|
|
@ -353,7 +353,7 @@ async function submitFileForm(
|
||||||
maxWidth: '100%',
|
maxWidth: '100%',
|
||||||
}"
|
}"
|
||||||
class="dashed"
|
class="dashed"
|
||||||
@click="() => triggerFileCreate()"
|
@click.stop="() => triggerFileCreate()"
|
||||||
id="triggerFileCreateFileItem"
|
id="triggerFileCreateFileItem"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
|
|
|
||||||
|
|
@ -1,35 +1,56 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
import { ref } from 'vue'
|
||||||
|
|
||||||
defineEmits(['edit', 'delete'])
|
defineEmits(['edit', 'delete'])
|
||||||
|
|
||||||
const props =
|
const props = defineProps<{
|
||||||
defineProps<{
|
nameId: string
|
||||||
nameId: string
|
}>()
|
||||||
|
|
||||||
}>()
|
|
||||||
|
|
||||||
|
|
||||||
|
const open = ref(false)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<q-btn @click.stop icon="more_vert" color="grey" flat dense :data-testid="`action${props.nameId}`">
|
<q-btn
|
||||||
<q-menu auto-close>
|
@click.stop
|
||||||
|
icon="more_vert"
|
||||||
|
color="grey"
|
||||||
|
flat
|
||||||
|
dense
|
||||||
|
:data-testid="`action${props.nameId}`"
|
||||||
|
>
|
||||||
|
<q-menu v-model="open">
|
||||||
<q-list dense>
|
<q-list dense>
|
||||||
<q-item clickable @click="() => $emit('edit')" id="FileltemActionEdit">
|
<q-item
|
||||||
|
clickable
|
||||||
|
id="FileltemActionEdit"
|
||||||
|
@click.stop="
|
||||||
|
() => {
|
||||||
|
open = false
|
||||||
|
$emit('edit')
|
||||||
|
}
|
||||||
|
"
|
||||||
|
>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
<div class="row items-center white">
|
<div class="row items-center white">
|
||||||
<q-icon name="o_edit" color="positive" />
|
<q-icon name="o_edit" color="positive" />
|
||||||
<span class="q-ml-sm ">แก้ไข</span>
|
<span class="q-ml-sm">แก้ไข</span>
|
||||||
</div>
|
</div>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
<q-item
|
<q-item
|
||||||
clickable
|
clickable
|
||||||
@click="() => $emit('delete')"
|
@click.stop="
|
||||||
|
() => {
|
||||||
|
open = false
|
||||||
|
$emit('delete')
|
||||||
|
}
|
||||||
|
"
|
||||||
id="FileltemActiondelete"
|
id="FileltemActiondelete"
|
||||||
>
|
>
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
<div class="row items-center white">
|
<div class="row items-center white">
|
||||||
<q-icon name="mdi-trash-can-outline" color="negative" />
|
<q-icon name="mdi-trash-can-outline" color="negative" />
|
||||||
<span class="q-ml-sm">ลบ</span>
|
<span class="q-ml-sm">ลบ</span>
|
||||||
</div>
|
</div>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
|
|
|
||||||
|
|
@ -50,12 +50,13 @@ onUnmounted(() => window.addEventListener('keydown', keydown))
|
||||||
class="q-pa-md"
|
class="q-pa-md"
|
||||||
side="right"
|
side="right"
|
||||||
tabindex="0"
|
tabindex="0"
|
||||||
|
v-click-outside="() => $emit('update:open', false)"
|
||||||
:width="300"
|
:width="300"
|
||||||
:breakpoint="500"
|
:breakpoint="500"
|
||||||
:model-value="open"
|
:model-value="open"
|
||||||
@update:model-value="(v) => $emit('update:open', v)"
|
@update:model-value="(v) => $emit('update:open', v)"
|
||||||
>
|
>
|
||||||
<q-form @submit.prevent="submit">
|
<q-form @submit.prevent="submit" v-if="open">
|
||||||
<q-toolbar class="q-mb-md q-pa-none">
|
<q-toolbar class="q-mb-md q-pa-none">
|
||||||
<q-toolbar-title>
|
<q-toolbar-title>
|
||||||
<span class="text-weight-bold" v-if="mode === 'create'">
|
<span class="text-weight-bold" v-if="mode === 'create'">
|
||||||
|
|
|
||||||
|
|
@ -67,6 +67,7 @@ const fileFormData = ref<{
|
||||||
category?: string[]
|
category?: string[]
|
||||||
}>({})
|
}>({})
|
||||||
const fileFormType = ref<'edit' | 'create'>('create')
|
const fileFormType = ref<'edit' | 'create'>('create')
|
||||||
|
const fileFormComponent = ref<InstanceType<typeof FileForm>>()
|
||||||
|
|
||||||
const dialogDeleteState = ref<boolean>(false)
|
const dialogDeleteState = ref<boolean>(false)
|
||||||
const deleteFormPath = ref<string>('')
|
const deleteFormPath = ref<string>('')
|
||||||
|
|
@ -176,6 +177,7 @@ async function submitFileForm(
|
||||||
fileFormData.value = {}
|
fileFormData.value = {}
|
||||||
fileFormState.value = false
|
fileFormState.value = false
|
||||||
currentParam.value = undefined
|
currentParam.value = undefined
|
||||||
|
fileFormComponent.value?.reset()
|
||||||
}
|
}
|
||||||
|
|
||||||
const columnsFolder: QTableProps['columns'] = [
|
const columnsFolder: QTableProps['columns'] = [
|
||||||
|
|
@ -276,7 +278,7 @@ const onRowClick = (evt: Event, row: TreeDataFolder, index: number) => {
|
||||||
color="primary"
|
color="primary"
|
||||||
dense
|
dense
|
||||||
icon="add"
|
icon="add"
|
||||||
@click="() => triggerFolderCreate()"
|
@click.stop="() => triggerFolderCreate()"
|
||||||
id="listViewFolderCreate"
|
id="listViewFolderCreate"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -380,7 +382,7 @@ const onRowClick = (evt: Event, row: TreeDataFolder, index: number) => {
|
||||||
color="primary"
|
color="primary"
|
||||||
dense
|
dense
|
||||||
icon="add"
|
icon="add"
|
||||||
@click="() => triggerFileCreate()"
|
@click.stop="() => triggerFileCreate()"
|
||||||
id="listViewFileCreate"
|
id="listViewFileCreate"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -391,8 +393,9 @@ const onRowClick = (evt: Event, row: TreeDataFolder, index: number) => {
|
||||||
:rows="listDataFile"
|
:rows="listDataFile"
|
||||||
:columns="columnsFile"
|
:columns="columnsFile"
|
||||||
row-key="name"
|
row-key="name"
|
||||||
hide-bottom
|
:pagination="{
|
||||||
:rows-per-page-options="[0]"
|
rowsPerPage: 0,
|
||||||
|
}"
|
||||||
class="cursor"
|
class="cursor"
|
||||||
>
|
>
|
||||||
<template v-slot:body-cell-name="nameRow">
|
<template v-slot:body-cell-name="nameRow">
|
||||||
|
|
@ -464,6 +467,7 @@ const onRowClick = (evt: Event, row: TreeDataFolder, index: number) => {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<file-form
|
<file-form
|
||||||
|
ref="fileFormComponent"
|
||||||
:mode="fileFormType"
|
:mode="fileFormType"
|
||||||
:error="fileFormError"
|
:error="fileFormError"
|
||||||
v-model:open="fileFormState"
|
v-model:open="fileFormState"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue