Allow user to toggle visible columns (#182)
* Maintain tag casing * Persist column visibility in zustand * Persist only visibleColumns key * merge persisted state * Only show ColumnVisibilityDropdown after rehydration * Record storage rehydrated * Add useIsClientRehydrated hook * Hide ActionButton text on mobile * Condense Paginator on mobile --------- Co-authored-by: Kyle Corbitt <kyle@corbt.com>
This commit is contained in:
37
app/src/state/columnVisiblitySlice.ts
Normal file
37
app/src/state/columnVisiblitySlice.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import { type SliceCreator } from "./store";
|
||||
|
||||
export const comparators = ["=", "!=", "CONTAINS", "NOT_CONTAINS"] as const;
|
||||
|
||||
export const defaultFilterableFields = ["Request", "Response", "Model", "Status Code"] as const;
|
||||
|
||||
export enum StaticColumnKeys {
|
||||
SENT_AT = "sentAt",
|
||||
MODEL = "model",
|
||||
DURATION = "duration",
|
||||
INPUT_TOKENS = "inputTokens",
|
||||
OUTPUT_TOKENS = "outputTokens",
|
||||
STATUS_CODE = "statusCode",
|
||||
}
|
||||
|
||||
export type ColumnVisibilitySlice = {
|
||||
visibleColumns: Set<string>;
|
||||
toggleColumnVisibility: (columnKey: string) => void;
|
||||
showAllColumns: (columnKeys: string[]) => void;
|
||||
};
|
||||
|
||||
export const createColumnVisibilitySlice: SliceCreator<ColumnVisibilitySlice> = (set, get) => ({
|
||||
// initialize with all static columns visible
|
||||
visibleColumns: new Set(Object.values(StaticColumnKeys)),
|
||||
toggleColumnVisibility: (columnKey: string) =>
|
||||
set((state) => {
|
||||
if (state.columnVisibility.visibleColumns.has(columnKey)) {
|
||||
state.columnVisibility.visibleColumns.delete(columnKey);
|
||||
} else {
|
||||
state.columnVisibility.visibleColumns.add(columnKey);
|
||||
}
|
||||
}),
|
||||
showAllColumns: (columnKeys: string[]) =>
|
||||
set((state) => {
|
||||
state.columnVisibility.visibleColumns = new Set(columnKeys);
|
||||
}),
|
||||
});
|
||||
Reference in New Issue
Block a user