mirror of
https://github.com/supabase/supabase.git
synced 2026-10-10 03:45:06 +03:00
## Context Addresses the toggling of column visibility not working for dynamic columns (e.g method, status, and event_message) <img width="293" height="262" alt="image" src="https://github.com/user-attachments/assets/c404c063-d6b2-49bf-86ec-bf91f7e35bd2" /> The main problem was actually just because of this in `UnifiedLogs.tsx`: <img width="569" height="165" alt="image" src="https://github.com/user-attachments/assets/5ae7be01-a7d6-4f64-99ad-87886dbf75f9" /> `dynamicColumnVisibility` is a fixed value determined by which columns are dynamic from the log data (as the default value) `columnVisibility` is a dynamic value that we're retrieving and updating with local storage just need to shift `dynamicColumnVisibility` to be before `columnVisibility` so that `columnVisibility` can override the values correctly from local storage ### Other changes Other resolves DEBUG-102, adds a border top to the table to better visually anchor the side panel <img width="1157" height="301" alt="image" src="https://github.com/user-attachments/assets/c0b7a90c-0ccb-4b65-8299-a8380e2a76fa" /> ## To test - [ ] Verify that the toggles work for method, pathname and event_message <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Adjusted date column width in logs view for improved readability. * Updated column visibility handling so the intended columns display consistently. * **UI Improvements** * Added a top border to the main logs panel for clearer visual separation. <!-- review_stack_entry_start --> [](https://app.coderabbit.ai/change-stack/supabase/supabase/pull/45965?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai -->
104 lines
3.8 KiB
TypeScript
104 lines
3.8 KiB
TypeScript
import { GripVertical, Settings2 } from 'lucide-react'
|
|
import { useId, useMemo, useState } from 'react'
|
|
import {
|
|
Checkbox,
|
|
Command_Shadcn_ as Command,
|
|
CommandEmpty_Shadcn_ as CommandEmpty,
|
|
CommandGroup_Shadcn_ as CommandGroup,
|
|
CommandInput_Shadcn_ as CommandInput,
|
|
CommandItem_Shadcn_ as CommandItem,
|
|
CommandList_Shadcn_ as CommandList,
|
|
Popover,
|
|
PopoverContent,
|
|
PopoverTrigger,
|
|
} from 'ui'
|
|
|
|
import { ButtonTooltip } from '../ButtonTooltip'
|
|
import { Sortable, SortableDragHandle, SortableItem } from './primitives/Sortable'
|
|
import { useDataTable } from './providers/DataTableProvider'
|
|
|
|
export function DataTableViewOptions() {
|
|
const { table, enableColumnOrdering } = useDataTable()
|
|
const [open, setOpen] = useState(false)
|
|
const [drag, setDrag] = useState(false)
|
|
const [search, setSearch] = useState('')
|
|
const listboxId = useId()
|
|
|
|
const columnOrder = table.getState().columnOrder
|
|
|
|
const sortedColumns = useMemo(
|
|
() =>
|
|
table.getAllColumns().sort((a, b) => {
|
|
return columnOrder.indexOf(a.id) - columnOrder.indexOf(b.id)
|
|
}),
|
|
[columnOrder]
|
|
)
|
|
|
|
return (
|
|
<Popover open={open} onOpenChange={setOpen}>
|
|
<PopoverTrigger asChild>
|
|
<ButtonTooltip
|
|
type="default"
|
|
size="tiny"
|
|
role="combobox"
|
|
aria-expanded={open}
|
|
aria-controls={listboxId}
|
|
className="w-[26px]"
|
|
icon={<Settings2 className="text-foreground" />}
|
|
tooltip={{ content: { side: 'bottom', text: 'Toggle column visibility' } }}
|
|
/>
|
|
</PopoverTrigger>
|
|
<PopoverContent id={listboxId} side="bottom" align="end" className="w-[200px] p-0">
|
|
<Command>
|
|
<CommandInput
|
|
value={search}
|
|
onValueChange={setSearch}
|
|
placeholder="Search columns..."
|
|
className="text-xs"
|
|
/>
|
|
<CommandList>
|
|
<CommandEmpty>No option found.</CommandEmpty>
|
|
<CommandGroup>
|
|
<Sortable
|
|
value={sortedColumns.map((c) => ({ id: c.id }))}
|
|
onValueChange={(items) => table.setColumnOrder(items.map((c) => c.id))}
|
|
overlay={<div className="h-8 w-full rounded-md bg-muted/60" />}
|
|
onDragStart={() => setDrag(true)}
|
|
onDragEnd={() => setDrag(false)}
|
|
onDragCancel={() => setDrag(false)}
|
|
>
|
|
{sortedColumns
|
|
.filter(
|
|
(column) => typeof column.accessorFn !== 'undefined' && column.getCanHide()
|
|
)
|
|
.map((column) => (
|
|
<SortableItem key={column.id} value={column.id} asChild>
|
|
<CommandItem
|
|
value={column.id}
|
|
onSelect={() => column.toggleVisibility(!column.getIsVisible())}
|
|
className="capitalize p-1"
|
|
disabled={drag}
|
|
>
|
|
<Checkbox checked={column.getIsVisible()} className="mr-2" />
|
|
<span>{(column.columnDef.meta as any)?.label || column.id}</span>
|
|
{enableColumnOrdering && !search ? (
|
|
<SortableDragHandle
|
|
type="text"
|
|
size="tiny"
|
|
className="ml-auto size-5 text-muted-foreground hover:text-foreground focus:bg-muted focus:text-foreground"
|
|
>
|
|
<GripVertical className="size-4" aria-hidden="true" />
|
|
</SortableDragHandle>
|
|
) : null}
|
|
</CommandItem>
|
|
</SortableItem>
|
|
))}
|
|
</Sortable>
|
|
</CommandGroup>
|
|
</CommandList>
|
|
</Command>
|
|
</PopoverContent>
|
|
</Popover>
|
|
)
|
|
}
|