diff --git a/src/Playground.vue b/src/Playground.vue index 6098fa53b48be6fb4218973c9ea4ef9e065b8024..f2b8e1929fbc1f3a11c03d64f37b40e75f844e79 100644 --- a/src/Playground.vue +++ b/src/Playground.vue @@ -202,6 +202,15 @@ const pbValue = ref(0); theme="black" stripedRows editable + :no-editing-settings="{ + cells: [[0, 0]], + }" + :handlers="[ + { + cell: [0, 0], + handler: () => (visibleDrawer = true), + }, + ]" >
diff --git a/src/common/interfaces/componentsProps.ts b/src/common/interfaces/componentsProps.ts index 2ca28bbe074ed87ed25fb5e5d25602bd9e8ad32e..341b92d9d4f417aeedaf8441c26e40570f6b54e1 100644 --- a/src/common/interfaces/componentsProps.ts +++ b/src/common/interfaces/componentsProps.ts @@ -37,10 +37,14 @@ export interface ITableProps { darknessTextColor?: TDarkness; editable?: boolean; noEditingSettings?: { - columns: number[]; - rows: number[]; - cells: [number, number][]; + columns?: number[]; + rows?: number[]; + cells?: [number, number][]; }; + handlers?: { + cell: [number, number]; + handler?: unknown; + }[]; } export interface ITLProps { diff --git a/src/components/Table/Table.vue b/src/components/Table/Table.vue index 8f69d34645e87e51c68a00c945164b14070866bb..4d59d315c1769fe499dae2d5ee63cc9b65dc7582 100644 --- a/src/components/Table/Table.vue +++ b/src/components/Table/Table.vue @@ -151,10 +151,12 @@ const updateData = (newValue: Ref, rowIndex: number, columnIndex: numbe @@ -169,6 +171,7 @@ const updateData = (newValue: Ref, rowIndex: number, columnIndex: numbe :noEditingSettings="noEditingSettings?.cells" :fontSize="fontSize" :knobWidth="knobWidth" + :noEdit="!!handlers?.find((i) => i.cell?.[0] === rowIndex && i.cell?.[1] === columnIndex)" @updateData="updateData" /> @@ -219,4 +222,7 @@ tr::after { .noEdit { pointer-events: none; } +.pointer { + cursor: pointer; +} diff --git a/src/components/Table/components/TableCell.vue b/src/components/Table/components/TableCell.vue index 1c89050e5edd591bd37d57e60edf6320784929eb..eda94c2cf14ac18d9128025d40ff5de5bbc26dc5 100644 --- a/src/components/Table/components/TableCell.vue +++ b/src/components/Table/components/TableCell.vue @@ -15,9 +15,10 @@ interface IProps { columnIndex: number; center: boolean | undefined; editable: boolean; - noEditingSettings: [number, number][] | undefined; fontSize: string; knobWidth: string; + noEditingSettings: [number, number][] | undefined; + noEdit: boolean; } defineProps(); defineEmits(['updateData']); @@ -30,9 +31,9 @@ defineEmits(['updateData']); { cellCenter: center, noEdit: + noEdit || !editable || - (noEditingSettings && - noEditingSettings.find((i: [number, number]) => i[0] === rowIndex && i[1] === columnIndex)), + noEditingSettings?.find((i: [number, number]) => i[0] === rowIndex && i[1] === columnIndex), }, ]" >