ADD: Empty category placeholder
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<div
|
<div
|
||||||
class="h-12 flex overflow-hidden rounded-lg m-2 group"
|
class="h-12 flex overflow-hidden rounded-lg m-2 group transition-all"
|
||||||
:class="{'border border-zinc-100 bg-zinc-300': selected,
|
:class="{'border border-zinc-100 bg-zinc-300': selected,
|
||||||
'border border-transparent hover:border-zinc-900': !selected}">
|
'border border-transparent hover:border-zinc-900': !selected}">
|
||||||
<form
|
<form
|
||||||
|
|||||||
@@ -54,12 +54,16 @@
|
|||||||
:list="category.profiles"
|
:list="category.profiles"
|
||||||
group="profiles"
|
group="profiles"
|
||||||
item-key="name"
|
item-key="name"
|
||||||
v-bind="dragOptions"
|
:animation="150"
|
||||||
@change="(event)=>onProfileDrop(event, categoryIndex)"
|
direction="vertical"
|
||||||
>
|
@start="drag = true"
|
||||||
<div v-if="category.profiles.length === 0">
|
@end="drag = false"
|
||||||
HELLO THERE!
|
@change="(event)=>onProfileDrop(event, categoryIndex)">
|
||||||
|
<template v-if="category.profiles.length === 0" #header>
|
||||||
|
<div class="flex h-12 justify-center items-center hideable-header">
|
||||||
|
<MoreHorizontal class="w-4 text-zinc-600" />
|
||||||
</div>
|
</div>
|
||||||
|
</template>
|
||||||
<template #item="{ element }">
|
<template #item="{ element }">
|
||||||
<ProfileButton
|
<ProfileButton
|
||||||
:key="element.id"
|
:key="element.id"
|
||||||
@@ -70,7 +74,6 @@
|
|||||||
@delete="store.removeProfile(element.id)" />
|
@delete="store.removeProfile(element.id)" />
|
||||||
</template>
|
</template>
|
||||||
</draggable>
|
</draggable>
|
||||||
<!-- TODO: Insert draggable component here -->
|
|
||||||
</CollapsibleContent>
|
</CollapsibleContent>
|
||||||
</Collapsible>
|
</Collapsible>
|
||||||
</div>
|
</div>
|
||||||
@@ -85,7 +88,7 @@
|
|||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
import { Separator } from '@/components/ui/separator'
|
import { Separator } from '@/components/ui/separator'
|
||||||
import { ChevronRight, Plus, ArrowLeft, List } from 'lucide-vue-next'
|
import { ChevronRight, Plus, ArrowLeft, List, MoreHorizontal } from 'lucide-vue-next'
|
||||||
import { ref, watch } from 'vue'
|
import { ref, watch } from 'vue'
|
||||||
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'
|
import { Collapsible, CollapsibleContent, CollapsibleTrigger } from '@/components/ui/collapsible'
|
||||||
import ScrambleText from '@/components/common/ScrambleText.vue'
|
import ScrambleText from '@/components/common/ScrambleText.vue'
|
||||||
@@ -104,13 +107,14 @@ defineProps({
|
|||||||
const maxProfiles = 32
|
const maxProfiles = 32
|
||||||
|
|
||||||
const store = useStore()
|
const store = useStore()
|
||||||
const filter = ref('')
|
|
||||||
const collapse = ref({})
|
const collapse = ref({})
|
||||||
|
|
||||||
const showProfileConfig = ref(false)
|
const showProfileConfig = ref(false)
|
||||||
const renderProfileConfig = ref(showProfileConfig.value)
|
const renderProfileConfig = ref(showProfileConfig.value)
|
||||||
const renderProfileList = ref(!showProfileConfig.value)
|
const renderProfileList = ref(!showProfileConfig.value)
|
||||||
|
|
||||||
|
const drag = ref(false)
|
||||||
|
|
||||||
watch(showProfileConfig, value => {
|
watch(showProfileConfig, value => {
|
||||||
if (value) {
|
if (value) {
|
||||||
renderProfileConfig.value = true
|
renderProfileConfig.value = true
|
||||||
@@ -164,11 +168,6 @@ const onProfileDrop = (event, categoryIndex) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const dragOptions = {
|
|
||||||
group: 'profiles',
|
|
||||||
animation: 150,
|
|
||||||
}
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<style scoped>
|
<style scoped>
|
||||||
[data-state=open] > .chevrot {
|
[data-state=open] > .chevrot {
|
||||||
@@ -177,7 +176,11 @@ const dragOptions = {
|
|||||||
|
|
||||||
.slide-enter-active,
|
.slide-enter-active,
|
||||||
.slide-leave-active {
|
.slide-leave-active {
|
||||||
transition: transform 150ms ease;
|
transition: transform 300ms ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.slide-enter-active {
|
||||||
|
transition-delay: 150ms;
|
||||||
}
|
}
|
||||||
|
|
||||||
.slide-enter-from,
|
.slide-enter-from,
|
||||||
@@ -194,4 +197,12 @@ const dragOptions = {
|
|||||||
.fade-leave-to {
|
.fade-leave-to {
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.hideable-header:not(:only-child) {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hideable-header:only-child {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
Reference in New Issue
Block a user