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, });