Skip to content

Commit 91e8770

Browse files
authored
fix: added support for disable row selection (#1055)
1 parent 92919f5 commit 91e8770

File tree

4 files changed

+30
-0
lines changed

4 files changed

+30
-0
lines changed

.changeset/hot-cobras-count.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@ensembleui/react-kitchen-sink": patch
3+
"@ensembleui/react-runtime": patch
4+
---
5+
6+
Added support for disable row selection based on needed per row

apps/kitchen-sink/src/ensemble/screens/widgets.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,7 @@ View:
417417
key: ${dummyData.id}
418418
template:
419419
DataRow:
420+
disableSelection: ${dummyData.id === 2}
420421
item-template:
421422
data: ${Object.values(dummyData)}
422423
name: value

packages/runtime/src/widgets/DataGrid/DataCell.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export interface DataCellProps {
1515
columnIndex: number;
1616
rowIndex: number;
1717
}
18+
1819
export const DataCell: React.FC<DataCellProps> = memo(
1920
({ template, columnIndex, rowIndex, data }) => {
2021
const { "item-template": itemTemplate, children } = template.properties;

packages/runtime/src/widgets/DataGrid/DataGrid.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ export interface DataGridStyles extends Partial<EnsembleWidgetStyles> {
7878
export interface DataGridRowTemplate {
7979
name: "DataRow";
8080
properties: {
81+
disableSelection?: Expression<boolean>;
8182
onTap?: EnsembleAction;
8283
children?: EnsembleWidget[];
8384
} & HasItemTemplate;
@@ -449,6 +450,22 @@ export const DataGrid: React.FC<GridProps> = (props) => {
449450
return [];
450451
}, [values?.DataColumns, values?.allowResizableColumns, colWidth]);
451452

453+
const handleRowSelectableOrNot = useCallback(
454+
(record: unknown): boolean => {
455+
const { disableSelection } = itemTemplate.template.properties;
456+
457+
if (!disableSelection) return false;
458+
if (disableSelection === true) return true;
459+
460+
return evaluate(
461+
defaultScreenContext,
462+
disableSelection,
463+
record as { [key: string]: unknown },
464+
);
465+
},
466+
[itemTemplate.template],
467+
);
468+
452469
return (
453470
<div id={resolvedWidgetId} ref={containerRef}>
454471
<div ref={rootRef}>
@@ -487,6 +504,11 @@ export const DataGrid: React.FC<GridProps> = (props) => {
487504
onRowsSelectedCallback(selectedRowKeys, selectedRows);
488505
}
489506
},
507+
getCheckboxProps: (record) => {
508+
return {
509+
disabled: handleRowSelectableOrNot(record),
510+
};
511+
},
490512
defaultSelectedRowKeys: values?.defaultSelectedRowKeys,
491513
selectedRowKeys: rowsKey.length ? rowsKey : undefined,
492514
}

0 commit comments

Comments
 (0)