From d61587b16f7ec9401b16f7512021fc4634eacce1 Mon Sep 17 00:00:00 2001 From: jeffvli Date: Sun, 5 Apr 2026 08:11:55 -0700 Subject: [PATCH] add automatic autosize columns when auto-fit is disabled --- .../helpers/autosize-unpinned-columns.ts | 23 +++++++++++++++++++ .../item-table-list/item-table-list.tsx | 8 ++++++- 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 src/renderer/components/item-list/helpers/autosize-unpinned-columns.ts diff --git a/src/renderer/components/item-list/helpers/autosize-unpinned-columns.ts b/src/renderer/components/item-list/helpers/autosize-unpinned-columns.ts new file mode 100644 index 000000000..114326d54 --- /dev/null +++ b/src/renderer/components/item-list/helpers/autosize-unpinned-columns.ts @@ -0,0 +1,23 @@ +import { ItemTableListColumnConfig } from '/@/renderer/components/item-list/types'; + +// Automatically set autoSize for all unpinned columns when auto-fit is off +// This is a view-only helper and does not persist to settings +export const autoSizeUnpinnedColumns = ( + columns: ItemTableListColumnConfig[], + autoFitColumns: boolean, +): ItemTableListColumnConfig[] => { + if (autoFitColumns || columns.length === 0) { + return columns; + } + + const unpinnedEnabled = columns.filter((c) => c.pinned === null && c.isEnabled !== false); + if (unpinnedEnabled.length === 0) { + return columns; + } + if (unpinnedEnabled.some((c) => c.autoSize === true)) { + return columns; + } + + const idSet = new Set(unpinnedEnabled.map((c) => c.id)); + return columns.map((c) => (idSet.has(c.id) ? { ...c, autoSize: true } : c)); +}; diff --git a/src/renderer/components/item-list/item-table-list/item-table-list.tsx b/src/renderer/components/item-list/item-table-list/item-table-list.tsx index b88cf3356..85c10097a 100644 --- a/src/renderer/components/item-list/item-table-list/item-table-list.tsx +++ b/src/renderer/components/item-list/item-table-list/item-table-list.tsx @@ -21,6 +21,7 @@ import { type CellComponentProps, Grid } from 'react-window-v2'; import styles from './item-table-list.module.css'; +import { autoSizeUnpinnedColumns } from '/@/renderer/components/item-list/helpers/autosize-unpinned-columns'; import { createExtractRowId } from '/@/renderer/components/item-list/helpers/extract-row-id'; import { useDefaultItemListControls } from '/@/renderer/components/item-list/helpers/item-list-controls'; import { @@ -1278,6 +1279,11 @@ const BaseItemTableList = ({ const [centerContainerWidth, setCenterContainerWidth] = useState(0); const [totalContainerWidth, setTotalContainerWidth] = useState(0); + const columnsForLayout = useMemo( + () => autoSizeUnpinnedColumns(columns, autoFitColumns), + [autoFitColumns, columns], + ); + const { calculatedColumnWidths, parsedColumns, @@ -1287,7 +1293,7 @@ const BaseItemTableList = ({ } = useTableColumnModel({ autoFitColumns, centerContainerWidth, - columns, + columns: columnsForLayout, totalContainerWidth, });