Skip to content

Commit 7985093

Browse files
committed
fix checkbox Table bug
1 parent 987bced commit 7985093

File tree

5 files changed

+70
-5
lines changed

5 files changed

+70
-5
lines changed

vuu-ui/packages/vuu-table-types/index.d.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,11 @@ export declare type ColumnAlignment = "left" | "right";
240240
export interface ColumnDescriptor extends DataValueDescriptor {
241241
aggregate?: VuuAggType;
242242
align?: ColumnAlignment;
243+
/**
244+
* ColumnMenu is enabled across all columns with a Table prop 'showColumnHeaderMenus'.
245+
* This property can be used to disable this feature for a single column.
246+
*/
247+
allowColumnHeaderMenu?: false;
243248
className?: string;
244249
/**
245250
* Allows custom content to be rendered into the column header. This will be an identifier.

vuu-ui/packages/vuu-table/src/header-cell/HeaderCell.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,11 @@ export const HeaderCell = ({
4444
});
4545
const dragDropSortHook = allowDragColumnHeader ? useSortable : doNothing;
4646
const { ref: sortableRef } = dragDropSortHook({ id, index });
47-
const { HeaderCellContentRenderer, HeaderCellLabelRenderer } = column;
47+
const {
48+
allowColumnHeaderMenu = true,
49+
HeaderCellContentRenderer,
50+
HeaderCellLabelRenderer,
51+
} = column;
4852
const rootRef = useRef<HTMLDivElement>(null);
4953
const { isResizing, ...resizeProps } = useTableColumnResize({
5054
column,
@@ -66,7 +70,7 @@ export const HeaderCell = ({
6670
? [<HeaderCellContentRenderer column={column} key="content" />]
6771
: [];
6872

69-
if (showColumnHeaderMenus) {
73+
if (showColumnHeaderMenus && allowColumnHeaderMenu) {
7074
const menuPermissions =
7175
showColumnHeaderMenus === true ? undefined : showColumnHeaderMenus;
7276
const columnMenu = (
@@ -88,6 +92,7 @@ export const HeaderCell = ({
8892
}, [
8993
HeaderCellContentRenderer,
9094
HeaderCellLabelRenderer,
95+
allowColumnHeaderMenu,
9196
column,
9297
showColumnHeaderMenus,
9398
]);

vuu-ui/packages/vuu-table/src/useTable.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -240,24 +240,38 @@ export const useTable = ({
240240
useLayoutEffectSkipFirst(() => {
241241
dispatchTableModelAction({
242242
availableWidth,
243+
selectionModel,
243244
type: "init",
244245
tableConfig: tableConfigRef.current,
245246
dataSource,
246247
});
247-
}, [availableWidth, config, dataSource, dispatchTableModelAction]);
248+
}, [
249+
availableWidth,
250+
config,
251+
dataSource,
252+
dispatchTableModelAction,
253+
selectionModel,
254+
]);
248255

249256
const applyTableConfigChange = useCallback(
250257
(config: TableConfig) => {
251258
dispatchTableModelAction({
252259
availableWidth,
260+
selectionModel,
253261
type: "init",
254262
tableConfig: config,
255263
dataSource,
256264
});
257265
tableConfigRef.current = config;
258266
onConfigChange?.(stripInternalProperties(config));
259267
},
260-
[availableWidth, dataSource, dispatchTableModelAction, onConfigChange],
268+
[
269+
availableWidth,
270+
dataSource,
271+
dispatchTableModelAction,
272+
onConfigChange,
273+
selectionModel,
274+
],
261275
);
262276

263277
const columnMap = useMemo(
@@ -327,13 +341,20 @@ export const useTable = ({
327341
dispatchTableModelAction({
328342
availableWidth,
329343
dataSource,
344+
selectionModel,
330345
tableConfig,
331346
type: "init",
332347
});
333348
tableConfigRef.current = tableConfig;
334349
onConfigChange?.(stripInternalProperties(tableConfig));
335350
},
336-
[availableWidth, dataSource, dispatchTableModelAction, onConfigChange],
351+
[
352+
availableWidth,
353+
dataSource,
354+
dispatchTableModelAction,
355+
onConfigChange,
356+
selectionModel,
357+
],
337358
);
338359

339360
const handleDataSourceConfigChanged = useCallback(

vuu-ui/packages/vuu-table/src/useTableModel.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ const getDataType = (
6767
};
6868

6969
const checkboxColumnDescriptor: ColumnDescriptor = {
70+
allowColumnHeaderMenu: false,
7071
label: "",
7172
name: "",
7273
width: 25,
@@ -111,6 +112,7 @@ const getDefaultAlignment = (serverDataType?: VuuColumnDataType) =>
111112

112113
export interface ColumnActionInit {
113114
availableWidth: number;
115+
selectionModel?: TableSelectionModel;
114116
type: "init";
115117
tableConfig: TableConfig;
116118
dataSource: DataSource;

vuu-ui/showcase/src/examples/Table/Misc.examples.tsx

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,38 @@ export const TableInLayoutWithContextPanel = () => {
344344
);
345345
};
346346

347+
export const CheckboxTableInLayoutWithContextPanel = () => {
348+
useMemo(() => {
349+
registerComponent("ColumnSettings", ColumnSettingsPanel, "view");
350+
registerComponent("TableSettings", TableSettingsPanel, "view");
351+
}, []);
352+
const tableConfig = useMemo<TableConfig>(() => {
353+
return {
354+
columns: getSchema("instruments").columns,
355+
rowSeparators: true,
356+
zebraStripes: true,
357+
};
358+
}, []);
359+
const dataSource = useMemo(() => {
360+
return vuuModule("SIMUL").createDataSource("instruments");
361+
}, []);
362+
363+
return (
364+
<LayoutProvider>
365+
<FlexboxLayout style={{ height: 645, width: "100%" }}>
366+
<Table
367+
config={tableConfig}
368+
dataSource={dataSource}
369+
renderBufferSize={30}
370+
selectionModel="checkbox"
371+
width="100%"
372+
/>
373+
<ContextPanel id={VuuShellLocation.ContextPanel} overlay></ContextPanel>
374+
</FlexboxLayout>
375+
</LayoutProvider>
376+
);
377+
};
378+
347379
const NullContext = {
348380
component: undefined,
349381
expanded: false,

0 commit comments

Comments
 (0)