Collapse sidebar column controls into icon dropdowns
When the sidebar is collapsed to icon-rail mode, the Columns/Task Columns checkbox lists had no icon-only representation. Show icon buttons that open a dropdown menu with checkbox items instead. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<SidebarGroup>
|
<SidebarGroup v-if="!isCollapsed">
|
||||||
<SidebarGroupLabel>View</SidebarGroupLabel>
|
<SidebarGroupLabel>View</SidebarGroupLabel>
|
||||||
<SidebarGroup class="py-0" as-child>
|
<SidebarGroup class="py-0" as-child>
|
||||||
<Collapsible v-model:open="isBaseColumnsOpen" class="group/collapsible">
|
<Collapsible v-model:open="isBaseColumnsOpen" class="group/collapsible">
|
||||||
@@ -88,12 +88,55 @@
|
|||||||
</Collapsible>
|
</Collapsible>
|
||||||
</SidebarGroup>
|
</SidebarGroup>
|
||||||
</SidebarGroup>
|
</SidebarGroup>
|
||||||
|
|
||||||
|
<SidebarGroup v-else>
|
||||||
|
<SidebarMenu>
|
||||||
|
<SidebarMenuItem>
|
||||||
|
<DropdownMenu>
|
||||||
|
<DropdownMenuTrigger as-child>
|
||||||
|
<SidebarMenuButton tooltip="Columns">
|
||||||
|
<Columns class="size-4" />
|
||||||
|
</SidebarMenuButton>
|
||||||
|
</DropdownMenuTrigger>
|
||||||
|
<DropdownMenuContent side="right" align="start" class="w-56">
|
||||||
|
<DropdownMenuCheckboxItem
|
||||||
|
v-for="column in baseColumns"
|
||||||
|
:key="column.id"
|
||||||
|
:model-value="isColumnVisible(column.id)"
|
||||||
|
@update:model-value="(val: boolean) => toggleColumn(column.id, val)"
|
||||||
|
>
|
||||||
|
{{ column.label }}
|
||||||
|
</DropdownMenuCheckboxItem>
|
||||||
|
</DropdownMenuContent>
|
||||||
|
</DropdownMenu>
|
||||||
|
</SidebarMenuItem>
|
||||||
|
<SidebarMenuItem>
|
||||||
|
<DropdownMenu>
|
||||||
|
<DropdownMenuTrigger as-child>
|
||||||
|
<SidebarMenuButton tooltip="Task Columns">
|
||||||
|
<ListChecks class="size-4" />
|
||||||
|
</SidebarMenuButton>
|
||||||
|
</DropdownMenuTrigger>
|
||||||
|
<DropdownMenuContent side="right" align="start" class="w-56">
|
||||||
|
<DropdownMenuCheckboxItem
|
||||||
|
v-for="column in taskColumns"
|
||||||
|
:key="column.id"
|
||||||
|
:model-value="isColumnVisible(column.id)"
|
||||||
|
@update:model-value="(val: boolean) => toggleColumn(column.id, val)"
|
||||||
|
>
|
||||||
|
{{ column.label }}
|
||||||
|
</DropdownMenuCheckboxItem>
|
||||||
|
</DropdownMenuContent>
|
||||||
|
</DropdownMenu>
|
||||||
|
</SidebarMenuItem>
|
||||||
|
</SidebarMenu>
|
||||||
|
</SidebarGroup>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, computed, onMounted, watch } from 'vue'
|
import { ref, computed, onMounted, watch } from 'vue'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
import { Check, ChevronDown, ChevronRight } from 'lucide-vue-next'
|
import { Check, ChevronDown, ChevronRight, Columns, ListChecks } from 'lucide-vue-next'
|
||||||
import {
|
import {
|
||||||
Command,
|
Command,
|
||||||
CommandEmpty,
|
CommandEmpty,
|
||||||
@@ -111,12 +154,24 @@ import {
|
|||||||
SidebarGroup,
|
SidebarGroup,
|
||||||
SidebarGroupContent,
|
SidebarGroupContent,
|
||||||
SidebarGroupLabel,
|
SidebarGroupLabel,
|
||||||
|
SidebarMenu,
|
||||||
|
SidebarMenuItem,
|
||||||
|
SidebarMenuButton,
|
||||||
|
useSidebar,
|
||||||
} from '@/components/ui/sidebar'
|
} from '@/components/ui/sidebar'
|
||||||
|
import {
|
||||||
|
DropdownMenu,
|
||||||
|
DropdownMenuTrigger,
|
||||||
|
DropdownMenuContent,
|
||||||
|
DropdownMenuCheckboxItem,
|
||||||
|
} from '@/components/ui/dropdown-menu'
|
||||||
import { useColumnVisibilityStore } from '@/stores/columnVisibility'
|
import { useColumnVisibilityStore } from '@/stores/columnVisibility'
|
||||||
import { customTaskTypeService } from '@/services/customTaskType'
|
import { customTaskTypeService } from '@/services/customTaskType'
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const columnVisibilityStore = useColumnVisibilityStore()
|
const columnVisibilityStore = useColumnVisibilityStore()
|
||||||
|
const { state } = useSidebar()
|
||||||
|
const isCollapsed = computed(() => state.value === 'collapsed')
|
||||||
|
|
||||||
// Collapsible state
|
// Collapsible state
|
||||||
const isBaseColumnsOpen = ref(true)
|
const isBaseColumnsOpen = ref(true)
|
||||||
|
|||||||
Reference in New Issue
Block a user