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:
2026-07-17 01:23:18 +08:00
parent d44398033a
commit 14320693c7
@@ -1,5 +1,5 @@
<template>
<SidebarGroup>
<SidebarGroup v-if="!isCollapsed">
<SidebarGroupLabel>View</SidebarGroupLabel>
<SidebarGroup class="py-0" as-child>
<Collapsible v-model:open="isBaseColumnsOpen" class="group/collapsible">
@@ -88,12 +88,55 @@
</Collapsible>
</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>
<script setup lang="ts">
import { ref, computed, onMounted, watch } from 'vue'
import { useRoute } from 'vue-router'
import { Check, ChevronDown, ChevronRight } from 'lucide-vue-next'
import { Check, ChevronDown, ChevronRight, Columns, ListChecks } from 'lucide-vue-next'
import {
Command,
CommandEmpty,
@@ -111,12 +154,24 @@ import {
SidebarGroup,
SidebarGroupContent,
SidebarGroupLabel,
SidebarMenu,
SidebarMenuItem,
SidebarMenuButton,
useSidebar,
} from '@/components/ui/sidebar'
import {
DropdownMenu,
DropdownMenuTrigger,
DropdownMenuContent,
DropdownMenuCheckboxItem,
} from '@/components/ui/dropdown-menu'
import { useColumnVisibilityStore } from '@/stores/columnVisibility'
import { customTaskTypeService } from '@/services/customTaskType'
const route = useRoute()
const columnVisibilityStore = useColumnVisibilityStore()
const { state } = useSidebar()
const isCollapsed = computed(() => state.value === 'collapsed')
// Collapsible state
const isBaseColumnsOpen = ref(true)