Phase 3: Unify controls across shot/asset/task toolbars and detail panels
Extracts duplication that built up as shot/asset/task features reached parity: CheckableCommandItem/ColumnToggleList replace 14+ hand-rolled checkbox-list blocks, shared toolbar pieces (debounced search, detail-panel toggle, clear-filters, segmented view/context toggle) replace copy-pasted markup in the three table toolbars, icon-only buttons standardize on the icon-sm size, TaskBulkActionsMenu's Assign To submenu matches Set Status, and a shared DetailPanelOverlay/Header/Loading/Error shell backs all three detail panels (adding a previously-missing error state to the task panel).
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
export function useDebouncedSearch(onSearch: (value: string) => void, delay = 300) {
|
||||
let timeout: ReturnType<typeof setTimeout> | null = null
|
||||
|
||||
const debouncedSearch = (value: string | number) => {
|
||||
const searchValue = typeof value === 'string' ? value : String(value)
|
||||
if (timeout) clearTimeout(timeout)
|
||||
timeout = setTimeout(() => onSearch(searchValue), delay)
|
||||
}
|
||||
|
||||
return { debouncedSearch }
|
||||
}
|
||||
Reference in New Issue
Block a user