PluginProbe
The Innovative Form Builder – IvyForms / 1.1
The Innovative Form Builder – IvyForms v1.1
1.5.1 1.5 1.4.1 1.4 trunk 0.1.2 0.2 0.2.1 0.3 0.3.1 0.4 0.5 0.6 0.6.1 0.6.1-backup 0.6.1.1 0.7 0.8 0.8.1 0.8.2 0.9 0.9.1 1.0 1.1 1.1.1 All 27 releases
ivyforms / frontend / src / views / _components / table / renderers / selectCellRenderer.ts

selectCellRenderer.ts in The Innovative Form Builder – IvyForms 1.1, at frontend/src/views/_components/table/renderers/selectCellRenderer.ts

52 lines 1.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { h, type Ref, type VNode } from 'vue'
2 import IvyCheckbox from '@/views/_components/checkbox/IvyCheckbox.vue'
3 import type { CellRenderProps } from '@/views/_components/table/IvyCellRendererProps'
4
5 export interface SelectHeaderOptions {
6 allSelected: Ref<boolean>
7 toggleAll: (value: boolean) => void
8 ariaLabel?: string
9 }
10
11 export function selectHeaderRenderer(options: SelectHeaderOptions) {
12 return (): VNode =>
13 h(
14 IvyCheckbox,
15 {
16 modelValue: options.allSelected.value,
17 size: 's',
18 type: 'checkmark',
19 ariaLabel: options.ariaLabel,
20 'onUpdate:modelValue': (value: boolean) => options.toggleAll(value),
21 },
22 () => [],
23 )
24 }
25
26 export interface SelectCellOptions {
27 ariaLabel?: string
28 }
29
30 export function selectCellRenderer<Row extends { selected?: boolean }>(
31 options: SelectCellOptions = {},
32 ) {
33 return (props: CellRenderProps): VNode | null => {
34 const row = props.rowData as unknown as Row
35 if (!row) return null
36
37 return h(
38 IvyCheckbox,
39 {
40 modelValue: Boolean(row.selected),
41 type: 'checkmark',
42 size: 's',
43 ariaLabel: options.ariaLabel,
44 'onUpdate:modelValue': (value: boolean) => {
45 row.selected = value
46 },
47 },
48 () => [],
49 )
50 }
51 }
52