yuyeon 0.0.8 → 0.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/style.css +1 -1
- package/dist/yuyeon.mjs +2753 -1513
- package/dist/yuyeon.umd.js +1 -1
- package/lib/components/button/YButton.mjs +31 -27
- package/lib/components/button/YButton.mjs.map +1 -1
- package/lib/components/button/YButton.scss +13 -6
- package/lib/components/icons/YIconCheckbox.mjs +5 -3
- package/lib/components/icons/YIconCheckbox.mjs.map +1 -1
- package/lib/components/icons/YIconCheckbox.scss +26 -0
- package/lib/components/icons/YIconPageControl.mjs +1 -5
- package/lib/components/icons/YIconPageControl.mjs.map +1 -1
- package/lib/components/icons/YIconSort.mjs +45 -0
- package/lib/components/icons/YIconSort.mjs.map +1 -0
- package/lib/components/icons/YIconSort.scss +23 -0
- package/lib/components/pagination/YPagination.mjs +19 -17
- package/lib/components/pagination/YPagination.mjs.map +1 -1
- package/lib/components/pagination/YPagination.scss +1 -1
- package/lib/components/table/YDataTable.mjs +17 -7
- package/lib/components/table/YDataTable.mjs.map +1 -1
- package/lib/components/table/YDataTableBody.mjs +69 -6
- package/lib/components/table/YDataTableBody.mjs.map +1 -1
- package/lib/components/table/YDataTableCell.mjs +18 -4
- package/lib/components/table/YDataTableCell.mjs.map +1 -1
- package/lib/components/table/YDataTableControl.mjs.map +1 -1
- package/lib/components/table/YDataTableHead.mjs +144 -5
- package/lib/components/table/YDataTableHead.mjs.map +1 -1
- package/lib/components/table/YDataTableRow.mjs +66 -3
- package/lib/components/table/YDataTableRow.mjs.map +1 -1
- package/lib/components/table/YDataTableServer.mjs +103 -16
- package/lib/components/table/YDataTableServer.mjs.map +1 -1
- package/lib/components/table/YTable.mjs +17 -13
- package/lib/components/table/YTable.mjs.map +1 -1
- package/lib/components/table/YTable.scss +53 -0
- package/lib/components/table/composibles/header.mjs +110 -0
- package/lib/components/table/composibles/header.mjs.map +1 -0
- package/lib/components/table/composibles/items.mjs +45 -0
- package/lib/components/table/composibles/items.mjs.map +1 -0
- package/lib/components/table/composibles/options.mjs +33 -0
- package/lib/components/table/composibles/options.mjs.map +1 -0
- package/lib/components/table/composibles/pagination.mjs +82 -0
- package/lib/components/table/composibles/pagination.mjs.map +1 -0
- package/lib/components/table/composibles/selection.mjs +179 -0
- package/lib/components/table/composibles/selection.mjs.map +1 -0
- package/lib/components/table/composibles/sorting.mjs +74 -0
- package/lib/components/table/composibles/sorting.mjs.map +1 -0
- package/lib/components/table/types/index.mjs +2 -0
- package/lib/components/table/types/index.mjs.map +1 -0
- package/lib/components/tree-view/YTreeView.mjs.map +1 -1
- package/lib/components/tree-view/types.mjs.map +1 -1
- package/lib/components/tree-view/util.mjs.map +1 -1
- package/lib/composables/icon.mjs +2 -0
- package/lib/composables/icon.mjs.map +1 -0
- package/lib/styles/base.scss +8 -0
- package/lib/types/index.mjs +2 -0
- package/lib/types/index.mjs.map +1 -0
- package/lib/util/array.mjs +3 -0
- package/lib/util/array.mjs.map +1 -1
- package/lib/util/common.mjs +13 -0
- package/lib/util/common.mjs.map +1 -1
- package/lib/util/vue-component.mjs.map +1 -1
- package/package.json +1 -1
- package/types/components/button/YButton.d.ts +135 -66
- package/types/components/checkbox/YInputCheckbox.d.ts +6 -3
- package/types/components/icons/YIconCheckbox.d.ts +6 -3
- package/types/components/icons/YIconPageControl.d.ts +0 -8
- package/types/components/icons/YIconSort.d.ts +18 -0
- package/types/components/pagination/YPagination.d.ts +6 -27
- package/types/components/table/YDataTable.d.ts +282 -19
- package/types/components/table/YDataTableBody.d.ts +34 -6
- package/types/components/table/YDataTableCell.d.ts +50 -0
- package/types/components/table/YDataTableHead.d.ts +67 -5
- package/types/components/table/YDataTableRow.d.ts +30 -0
- package/types/components/table/YDataTableServer.d.ts +317 -29
- package/types/components/table/YTable.d.ts +41 -0
- package/types/components/table/composibles/header.d.ts +66 -0
- package/types/components/table/composibles/items.d.ts +54 -0
- package/types/components/table/composibles/options.d.ts +10 -0
- package/types/components/table/composibles/pagination.d.ts +68 -0
- package/types/components/table/composibles/selection.d.ts +67 -0
- package/types/components/table/composibles/sorting.d.ts +41 -0
- package/types/components/table/types/index.d.ts +77 -0
- package/types/components/tree-view/YTreeView.d.ts +14 -14
- package/types/components/tree-view/types.d.ts +3 -3
- package/types/components/tree-view/util.d.ts +2 -2
- package/types/types/index.d.ts +1 -0
- package/types/util/array.d.ts +1 -0
- package/types/util/common.d.ts +2 -0
|
@@ -4,22 +4,26 @@ import { useRender } from "../../composables/component.mjs";
|
|
|
4
4
|
import { useResizeObserver } from "../../composables/resize-observer.mjs";
|
|
5
5
|
import { toStyleSizeValue } from "../../util/ui.mjs";
|
|
6
6
|
import "./YTable.scss";
|
|
7
|
+
import { propsFactory } from "../../util/vue-component.mjs";
|
|
8
|
+
export const pressYTableProps = propsFactory({
|
|
9
|
+
tag: {
|
|
10
|
+
type: String,
|
|
11
|
+
default: 'div'
|
|
12
|
+
},
|
|
13
|
+
fixedHead: {
|
|
14
|
+
type: Boolean
|
|
15
|
+
},
|
|
16
|
+
height: {
|
|
17
|
+
type: [Number, String]
|
|
18
|
+
},
|
|
19
|
+
flexHeight: {
|
|
20
|
+
type: Boolean
|
|
21
|
+
}
|
|
22
|
+
}, 'YTable');
|
|
7
23
|
export const YTable = defineComponent({
|
|
8
24
|
name: 'YTable',
|
|
9
25
|
props: {
|
|
10
|
-
|
|
11
|
-
type: String,
|
|
12
|
-
default: 'div'
|
|
13
|
-
},
|
|
14
|
-
fixedHead: {
|
|
15
|
-
type: Boolean
|
|
16
|
-
},
|
|
17
|
-
height: {
|
|
18
|
-
type: [Number, String]
|
|
19
|
-
},
|
|
20
|
-
flexHeight: {
|
|
21
|
-
type: Boolean
|
|
22
|
-
}
|
|
26
|
+
...pressYTableProps()
|
|
23
27
|
},
|
|
24
28
|
setup(props, _ref) {
|
|
25
29
|
let {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YTable.mjs","names":["defineComponent","useRender","useResizeObserver","toStyleSizeValue","
|
|
1
|
+
{"version":3,"file":"YTable.mjs","names":["defineComponent","useRender","useResizeObserver","toStyleSizeValue","propsFactory","pressYTableProps","tag","type","String","default","fixedHead","Boolean","height","Number","flexHeight","YTable","name","props","setup","_ref","slots","resizeObservedRef","contentRect","ElTag","containerHeight","value","_createVNode","top","leading","trailing","container","bottom"],"sources":["../../../src/components/table/YTable.tsx"],"sourcesContent":["import { PropType, computed, defineComponent } from 'vue';\r\n\r\nimport { useRender } from '../../composables/component';\r\nimport { useResizeObserver } from '../../composables/resize-observer';\r\nimport { toStyleSizeValue } from '../../util/ui';\r\nimport './YTable.scss';\r\nimport { propsFactory } from \"../../util/vue-component\";\r\n\r\nexport const pressYTableProps = propsFactory({\r\n tag: {\r\n type: String as PropType<string>,\r\n default: 'div',\r\n },\r\n fixedHead: {\r\n type: Boolean as PropType<boolean>,\r\n },\r\n height: {\r\n type: [Number, String] as PropType<number | string>,\r\n },\r\n flexHeight: {\r\n type: Boolean as PropType<boolean>,\r\n },\r\n}, 'YTable')\r\n\r\nexport const YTable = defineComponent({\r\n name: 'YTable',\r\n props: {\r\n ...pressYTableProps(),\r\n },\r\n setup(props, { slots }) {\r\n const { resizeObservedRef, contentRect } = useResizeObserver();\r\n useRender(() => {\r\n const ElTag = (props.tag as keyof HTMLElementTagNameMap) ?? 'div';\r\n const containerHeight = props.flexHeight\r\n ? (contentRect.value?.height ?? props.height)\r\n : props.height;\r\n return (\r\n <ElTag\r\n class={[\r\n 'y-table',\r\n {\r\n 'y-table--fixed-head': props.fixedHead,\r\n 'y-table--fixed-height': props.flexHeight || props.height,\r\n 'y-table--flex-height': props.flexHeight,\r\n },\r\n ]}\r\n >\r\n {slots.top?.()}\r\n {slots.default ? (\r\n <div\r\n class={['y-table__container']}\r\n ref={resizeObservedRef}\r\n style={{\r\n height: toStyleSizeValue(containerHeight),\r\n }}\r\n >\r\n {slots.leading?.()}\r\n <table>{slots.default()}</table>\r\n {slots.trailing?.()}\r\n </div>\r\n ) : (\r\n slots.container?.(resizeObservedRef, contentRect)\r\n )}\r\n {slots.bottom?.()}\r\n </ElTag>\r\n );\r\n });\r\n },\r\n});\r\n"],"mappings":";AAAA,SAA6BA,eAAe,QAAQ,KAAK;AAAC,SAEjDC,SAAS;AAAA,SACTC,iBAAiB;AAAA,SACjBC,gBAAgB;AACzB;AAAuB,SACdC,YAAY;AAErB,OAAO,MAAMC,gBAAgB,GAAGD,YAAY,CAAC;EAC3CE,GAAG,EAAE;IACHC,IAAI,EAAEC,MAA0B;IAChCC,OAAO,EAAE;EACX,CAAC;EACDC,SAAS,EAAE;IACTH,IAAI,EAAEI;EACR,CAAC;EACDC,MAAM,EAAE;IACNL,IAAI,EAAE,CAACM,MAAM,EAAEL,MAAM;EACvB,CAAC;EACDM,UAAU,EAAE;IACVP,IAAI,EAAEI;EACR;AACF,CAAC,EAAE,QAAQ,CAAC;AAEZ,OAAO,MAAMI,MAAM,GAAGf,eAAe,CAAC;EACpCgB,IAAI,EAAE,QAAQ;EACdC,KAAK,EAAE;IACL,GAAGZ,gBAAgB,CAAC;EACtB,CAAC;EACDa,KAAKA,CAACD,KAAK,EAAAE,IAAA,EAAa;IAAA,IAAX;MAAEC;IAAM,CAAC,GAAAD,IAAA;IACpB,MAAM;MAAEE,iBAAiB;MAAEC;IAAY,CAAC,GAAGpB,iBAAiB,CAAC,CAAC;IAC9DD,SAAS,CAAC,MAAM;MACd,MAAMsB,KAAK,GAAIN,KAAK,CAACX,GAAG,IAAoC,KAAK;MACjE,MAAMkB,eAAe,GAAGP,KAAK,CAACH,UAAU,GACnCQ,WAAW,CAACG,KAAK,EAAEb,MAAM,IAAIK,KAAK,CAACL,MAAM,GAC1CK,KAAK,CAACL,MAAM;MAChB,OAAAc,YAAA,CAAAH,KAAA;QAAA,SAEW,CACL,SAAS,EACT;UACE,qBAAqB,EAAEN,KAAK,CAACP,SAAS;UACtC,uBAAuB,EAAEO,KAAK,CAACH,UAAU,IAAIG,KAAK,CAACL,MAAM;UACzD,sBAAsB,EAAEK,KAAK,CAACH;QAChC,CAAC;MACF;QAAAL,OAAA,EAAAA,CAAA,MAEAW,KAAK,CAACO,GAAG,GAAG,CAAC,EACbP,KAAK,CAACX,OAAO,GAAAiB,YAAA;UAAA,SAEH,CAAC,oBAAoB,CAAC;UAAA,OACxBL,iBAAiB;UAAA,SACf;YACLT,MAAM,EAAET,gBAAgB,CAACqB,eAAe;UAC1C;QAAC,IAEAJ,KAAK,CAACQ,OAAO,GAAG,CAAC,EAAAF,YAAA,iBACVN,KAAK,CAACX,OAAO,CAAC,CAAC,IACtBW,KAAK,CAACS,QAAQ,GAAG,CAAC,KAGrBT,KAAK,CAACU,SAAS,GAAGT,iBAAiB,EAAEC,WAAW,CACjD,EACAF,KAAK,CAACW,MAAM,GAAG,CAAC;MAAA;IAGvB,CAAC,CAAC;EACJ;AACF,CAAC,CAAC"}
|
|
@@ -34,6 +34,8 @@ $table-cell-padding: 0 16px !default;
|
|
|
34
34
|
|
|
35
35
|
&__container {
|
|
36
36
|
> table {
|
|
37
|
+
font-size: 0.875rem;
|
|
38
|
+
|
|
37
39
|
> thead,
|
|
38
40
|
> tbody,
|
|
39
41
|
> tfoot {
|
|
@@ -48,10 +50,17 @@ $table-cell-padding: 0 16px !default;
|
|
|
48
50
|
> th {
|
|
49
51
|
height: 56px;
|
|
50
52
|
text-align: left;
|
|
53
|
+
border-bottom: thin solid rgba(var(--y-line-color), var(--y-line-opacity));
|
|
54
|
+
user-select: none;
|
|
51
55
|
}
|
|
52
56
|
}
|
|
53
57
|
|
|
54
58
|
> tbody > tr {
|
|
59
|
+
&:not(:last-child) {
|
|
60
|
+
> td {
|
|
61
|
+
border-bottom: thin solid rgba(var(--y-line-color), var(--y-line-opacity));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
55
64
|
> td {
|
|
56
65
|
height: 54px;
|
|
57
66
|
}
|
|
@@ -59,3 +68,47 @@ $table-cell-padding: 0 16px !default;
|
|
|
59
68
|
}
|
|
60
69
|
}
|
|
61
70
|
}
|
|
71
|
+
|
|
72
|
+
.y-data-table-cell {
|
|
73
|
+
&--align-end {
|
|
74
|
+
text-align: end;
|
|
75
|
+
|
|
76
|
+
.y-data-table-header__content {
|
|
77
|
+
justify-content: flex-end;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.y-data-table-header {
|
|
84
|
+
&__content {
|
|
85
|
+
display: flex;
|
|
86
|
+
align-items: center;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
&__sorting-icon {
|
|
90
|
+
display: inline-flex;
|
|
91
|
+
width: 1em;
|
|
92
|
+
height: 1em;
|
|
93
|
+
margin-left: 4px;
|
|
94
|
+
cursor: pointer;
|
|
95
|
+
|
|
96
|
+
svg {
|
|
97
|
+
width: 1em;
|
|
98
|
+
height: 1em;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
&--disabled {
|
|
102
|
+
opacity: 0.08;
|
|
103
|
+
cursor: default;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.y-data-table-header--select, .y-data-table-data--select {
|
|
109
|
+
> .y-icon-checkbox {
|
|
110
|
+
&:not(&--disabled) {
|
|
111
|
+
cursor: pointer;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { inject, provide, ref, watchEffect } from 'vue';
|
|
2
|
+
import { propsFactory } from "../../../util/vue-component.mjs";
|
|
3
|
+
import { getRangeArr } from "../../../util/common.mjs";
|
|
4
|
+
export const pressDataTableHeader = propsFactory({
|
|
5
|
+
headers: {
|
|
6
|
+
type: Array,
|
|
7
|
+
default: () => []
|
|
8
|
+
}
|
|
9
|
+
}, 'YDataTable--header');
|
|
10
|
+
export const Y_DATA_TABLE_HEADER_KEY = Symbol.for('yuyeon.data-table.header');
|
|
11
|
+
export function createHeader(props, options) {
|
|
12
|
+
const headers = ref([]);
|
|
13
|
+
const columns = ref([]);
|
|
14
|
+
watchEffect(() => {
|
|
15
|
+
const rows = props.headers.length > 0 ? Array.isArray(props.headers[0]) ? props.headers : [props.headers] : [];
|
|
16
|
+
const flat = rows.flatMap((row, index) => row.map(column => ({
|
|
17
|
+
column,
|
|
18
|
+
rowIndex: index
|
|
19
|
+
})));
|
|
20
|
+
const rowCount = rows.length;
|
|
21
|
+
const defaultHeader = {
|
|
22
|
+
text: '',
|
|
23
|
+
sortable: false
|
|
24
|
+
};
|
|
25
|
+
const defaultActionHeader = {
|
|
26
|
+
...defaultHeader,
|
|
27
|
+
width: 48
|
|
28
|
+
};
|
|
29
|
+
if (options?.enableSelect?.value) {
|
|
30
|
+
const foundIndex = flat.findIndex(_ref => {
|
|
31
|
+
let {
|
|
32
|
+
column
|
|
33
|
+
} = _ref;
|
|
34
|
+
return column.key === 'data-table-select';
|
|
35
|
+
});
|
|
36
|
+
if (foundIndex < 0) {
|
|
37
|
+
flat.unshift({
|
|
38
|
+
column: {
|
|
39
|
+
...defaultActionHeader,
|
|
40
|
+
key: 'data-table-select',
|
|
41
|
+
rowspan: rowCount
|
|
42
|
+
},
|
|
43
|
+
rowIndex: 0
|
|
44
|
+
});
|
|
45
|
+
} else {
|
|
46
|
+
flat.splice(foundIndex, 1, {
|
|
47
|
+
column: {
|
|
48
|
+
...defaultActionHeader,
|
|
49
|
+
...flat[foundIndex].column
|
|
50
|
+
},
|
|
51
|
+
rowIndex: flat[foundIndex].rowIndex
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const fixedRows = getRangeArr(rowCount).map(() => []);
|
|
56
|
+
const fixedOffsets = getRangeArr(rowCount).fill(0);
|
|
57
|
+
flat.forEach(_ref2 => {
|
|
58
|
+
let {
|
|
59
|
+
column,
|
|
60
|
+
rowIndex
|
|
61
|
+
} = _ref2;
|
|
62
|
+
const {
|
|
63
|
+
key
|
|
64
|
+
} = column;
|
|
65
|
+
for (let i = rowIndex; i <= rowIndex + (column.rowspan ?? 1) - 1; i += 1) {
|
|
66
|
+
fixedRows[i].push({
|
|
67
|
+
...column,
|
|
68
|
+
key,
|
|
69
|
+
fixedOffset: fixedOffsets[i],
|
|
70
|
+
sortable: column.sortable ?? !!key
|
|
71
|
+
});
|
|
72
|
+
fixedOffsets[i] += Number(column.width ?? 0);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
fixedRows.forEach(row => {
|
|
76
|
+
for (let i = row.length; i -= 1; i >= 0) {
|
|
77
|
+
if (row[i].fixed) {
|
|
78
|
+
row[i].lastFixed = true;
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
const seen = new Set();
|
|
84
|
+
headers.value = fixedRows.map(row => {
|
|
85
|
+
const filtered = [];
|
|
86
|
+
for (const column of row) {
|
|
87
|
+
if (!seen.has(column.key)) {
|
|
88
|
+
seen.add(column.key);
|
|
89
|
+
filtered.push(column);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return filtered;
|
|
93
|
+
});
|
|
94
|
+
columns.value = fixedRows.at(-1) ?? [];
|
|
95
|
+
});
|
|
96
|
+
const data = {
|
|
97
|
+
headers,
|
|
98
|
+
columns
|
|
99
|
+
};
|
|
100
|
+
provide(Y_DATA_TABLE_HEADER_KEY, data);
|
|
101
|
+
return data;
|
|
102
|
+
}
|
|
103
|
+
export function useHeader() {
|
|
104
|
+
const data = inject(Y_DATA_TABLE_HEADER_KEY);
|
|
105
|
+
if (!data) {
|
|
106
|
+
throw new Error(`Not provided: ${Y_DATA_TABLE_HEADER_KEY.description}`);
|
|
107
|
+
}
|
|
108
|
+
return data;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=header.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"header.mjs","names":["inject","provide","ref","watchEffect","propsFactory","getRangeArr","pressDataTableHeader","headers","type","Array","default","Y_DATA_TABLE_HEADER_KEY","Symbol","for","createHeader","props","options","columns","rows","length","isArray","flat","flatMap","row","index","map","column","rowIndex","rowCount","defaultHeader","text","sortable","defaultActionHeader","width","enableSelect","value","foundIndex","findIndex","_ref","key","unshift","rowspan","splice","fixedRows","fixedOffsets","fill","forEach","_ref2","i","push","fixedOffset","Number","fixed","lastFixed","seen","Set","filtered","has","add","at","data","useHeader","Error","description"],"sources":["../../../../src/components/table/composibles/header.ts"],"sourcesContent":["import {\n DeepReadonly,\n InjectionKey,\n PropType,\n Ref,\n inject,\n provide,\n ref,\n watchEffect,\n} from 'vue';\n\nimport { propsFactory } from '../../../util/vue-component';\n\nimport { DataTableHeader, InternalDataTableHeader } from '../types';\nimport { getRangeArr } from \"../../../util/common\";\n\nexport const pressDataTableHeader = propsFactory(\n {\n headers: {\n type: Array as PropType<DataTableHeader[] | DataTableHeader[][]>,\n default: () => [],\n },\n },\n 'YDataTable--header',\n);\n\nexport const Y_DATA_TABLE_HEADER_KEY: InjectionKey<{\n headers: Ref<InternalDataTableHeader[][]>;\n columns: Ref<InternalDataTableHeader[]>;\n}> = Symbol.for('yuyeon.data-table.header');\n\ntype HeaderProps = {\n headers: DeepReadonly<DataTableHeader[] | DataTableHeader[][]>;\n};\n\nexport function createHeader(\n props: HeaderProps,\n options?: {\n enableSelect?: Ref<boolean>;\n },\n) {\n const headers = ref<InternalDataTableHeader[][]>([]);\n const columns = ref<InternalDataTableHeader[]>([]);\n\n watchEffect(() => {\n const rows =\n props.headers.length > 0\n ? Array.isArray(props.headers[0])\n ? (props.headers as DataTableHeader[][])\n : [props.headers as DataTableHeader[]]\n : [];\n const flat = rows.flatMap((row, index) =>\n row.map((column) => ({ column, rowIndex: index })),\n );\n const rowCount = rows.length;\n const defaultHeader = { text: '', sortable: false };\n const defaultActionHeader = { ...defaultHeader, width: 48 };\n\n if (options?.enableSelect?.value) {\n const foundIndex = flat.findIndex(\n ({ column }) => column.key === 'data-table-select',\n );\n if (foundIndex < 0) {\n flat.unshift({\n column: {\n ...defaultActionHeader,\n key: 'data-table-select',\n rowspan: rowCount,\n },\n rowIndex: 0,\n });\n } else {\n flat.splice(foundIndex, 1, {\n column: {\n ...defaultActionHeader,\n ...flat[foundIndex].column,\n },\n rowIndex: flat[foundIndex].rowIndex,\n });\n }\n }\n\n const fixedRows: InternalDataTableHeader[][] = getRangeArr(rowCount).map(() => []);\n const fixedOffsets = getRangeArr(rowCount).fill(0);\n\n flat.forEach(({ column, rowIndex }) => {\n const { key } = column;\n for (let i = rowIndex; i <= rowIndex + (column.rowspan ?? 1) - 1; i += 1) {\n fixedRows[i].push({\n ...column,\n key,\n fixedOffset: fixedOffsets[i],\n sortable: column.sortable ?? !!key,\n })\n fixedOffsets[i] += Number(column.width ?? 0);\n }\n });\n\n fixedRows.forEach((row) => {\n for (let i = row.length; i -= 1; i >= 0) {\n if (row[i].fixed) {\n row[i].lastFixed = true;\n return;\n }\n }\n })\n\n const seen = new Set();\n headers.value = fixedRows.map((row) => {\n const filtered = [];\n for (const column of row) {\n if (!seen.has(column.key)) {\n seen.add(column.key);\n filtered.push(column);\n }\n }\n return filtered;\n });\n\n columns.value = fixedRows.at(-1) ?? [];\n });\n\n const data = { headers, columns };\n\n provide(Y_DATA_TABLE_HEADER_KEY, data);\n\n return data;\n}\n\nexport function useHeader() {\n const data = inject(Y_DATA_TABLE_HEADER_KEY);\n if (!data) {\n throw new Error(`Not provided: ${Y_DATA_TABLE_HEADER_KEY.description}`);\n }\n return data;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { computed } from 'vue';
|
|
2
|
+
import { getPropertyFromItem } from "../../../util/common.mjs";
|
|
3
|
+
import { propsFactory } from "../../../util/vue-component.mjs";
|
|
4
|
+
export const pressDataTableItemsProps = propsFactory({
|
|
5
|
+
items: {
|
|
6
|
+
type: Array,
|
|
7
|
+
default: () => []
|
|
8
|
+
},
|
|
9
|
+
itemKey: {
|
|
10
|
+
type: [String, Array, Function],
|
|
11
|
+
default: 'id'
|
|
12
|
+
},
|
|
13
|
+
itemSelectable: {
|
|
14
|
+
type: [String, Array, Function],
|
|
15
|
+
default: null
|
|
16
|
+
},
|
|
17
|
+
returnItem: Boolean
|
|
18
|
+
}, 'YDataTable--items');
|
|
19
|
+
export function updateItem(props, item, index, columns) {
|
|
20
|
+
const value = props.returnItem ? item : getPropertyFromItem(item, props.itemKey);
|
|
21
|
+
const selectable = getPropertyFromItem(item, props.itemSelectable, true);
|
|
22
|
+
const itemColumns = columns.reduce((acc, column) => {
|
|
23
|
+
acc[column.key] = getPropertyFromItem(item, column.value ?? column.key);
|
|
24
|
+
return acc;
|
|
25
|
+
}, {});
|
|
26
|
+
return {
|
|
27
|
+
index,
|
|
28
|
+
value,
|
|
29
|
+
selectable,
|
|
30
|
+
columns: itemColumns,
|
|
31
|
+
raw: item
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export function updateItems(props, items, columns) {
|
|
35
|
+
return items.map((item, index) => updateItem(props, item, index, columns));
|
|
36
|
+
}
|
|
37
|
+
export function useItems(props, columns) {
|
|
38
|
+
const items = computed(() => {
|
|
39
|
+
return updateItems(props, props.items, columns.value);
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
items
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=items.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"items.mjs","names":["computed","getPropertyFromItem","propsFactory","pressDataTableItemsProps","items","type","Array","default","itemKey","String","Function","itemSelectable","returnItem","Boolean","updateItem","props","item","index","columns","value","selectable","itemColumns","reduce","acc","column","key","raw","updateItems","map","useItems"],"sources":["../../../../src/components/table/composibles/items.ts"],"sourcesContent":["import { PropType, Ref, computed } from 'vue';\n\nimport { getPropertyFromItem } from '../../../util/common';\nimport { propsFactory } from '../../../util/vue-component';\n\nimport { CandidateKey } from '../../../types';\nimport { DataTableItem, InternalDataTableHeader } from '../types';\n\nexport type DataTableItemsProps = {\n items: any[];\n itemKey: any;\n itemSelectable: any;\n returnItem: boolean;\n};\n\nexport const pressDataTableItemsProps = propsFactory(\n {\n items: {\n type: Array as PropType<DataTableItemsProps['items']>,\n default: () => [],\n },\n itemKey: {\n type: [String, Array, Function] as PropType<any>,\n default: 'id',\n },\n itemSelectable: {\n type: [String, Array, Function] as PropType<any>,\n default: null,\n },\n returnItem: Boolean,\n },\n 'YDataTable--items',\n);\n\nexport function updateItem(\n props: Omit<DataTableItemsProps, 'items'>,\n item: any,\n index: number,\n columns: InternalDataTableHeader[],\n): DataTableItem {\n const value = props.returnItem\n ? item\n : getPropertyFromItem(item, props.itemKey);\n const selectable = getPropertyFromItem(item, props.itemSelectable, true);\n const itemColumns = columns.reduce((acc, column) => {\n acc[column.key] = getPropertyFromItem(item, column.value ?? column.key);\n return acc;\n }, {} as Record<string, unknown>);\n\n return {\n index,\n value,\n selectable,\n columns: itemColumns,\n raw: item,\n };\n}\n\nexport function updateItems(\n props: Omit<DataTableItemsProps, 'items'>,\n items: DataTableItemsProps['items'],\n columns: InternalDataTableHeader[],\n): DataTableItem[] {\n return items.map((item, index) => updateItem(props, item, index, columns));\n}\n\nexport function useItems(\n props: DataTableItemsProps,\n columns: Ref<InternalDataTableHeader[]>,\n) {\n const items = computed(() => {\n return updateItems(props, props.items, columns.value);\n });\n return { items };\n}\n"],"mappings":"AAAA,SAAwBA,QAAQ,QAAQ,KAAK;AAAC,SAErCC,mBAAmB;AAAA,SACnBC,YAAY;AAYrB,OAAO,MAAMC,wBAAwB,GAAGD,YAAY,CAClD;EACEE,KAAK,EAAE;IACLC,IAAI,EAAEC,KAA+C;IACrDC,OAAO,EAAEA,CAAA,KAAM;EACjB,CAAC;EACDC,OAAO,EAAE;IACPH,IAAI,EAAE,CAACI,MAAM,EAAEH,KAAK,EAAEI,QAAQ,CAAkB;IAChDH,OAAO,EAAE;EACX,CAAC;EACDI,cAAc,EAAE;IACdN,IAAI,EAAE,CAACI,MAAM,EAAEH,KAAK,EAAEI,QAAQ,CAAkB;IAChDH,OAAO,EAAE;EACX,CAAC;EACDK,UAAU,EAAEC;AACd,CAAC,EACD,mBACF,CAAC;AAED,OAAO,SAASC,UAAUA,CACxBC,KAAyC,EACzCC,IAAS,EACTC,KAAa,EACbC,OAAkC,EACnB;EACf,MAAMC,KAAK,GAAGJ,KAAK,CAACH,UAAU,GAC1BI,IAAI,GACJf,mBAAmB,CAACe,IAAI,EAAED,KAAK,CAACP,OAAO,CAAC;EAC5C,MAAMY,UAAU,GAAGnB,mBAAmB,CAACe,IAAI,EAAED,KAAK,CAACJ,cAAc,EAAE,IAAI,CAAC;EACxE,MAAMU,WAAW,GAAGH,OAAO,CAACI,MAAM,CAAC,CAACC,GAAG,EAAEC,MAAM,KAAK;IAClDD,GAAG,CAACC,MAAM,CAACC,GAAG,CAAC,GAAGxB,mBAAmB,CAACe,IAAI,EAAEQ,MAAM,CAACL,KAAK,IAAIK,MAAM,CAACC,GAAG,CAAC;IACvE,OAAOF,GAAG;EACZ,CAAC,EAAE,CAAC,CAA4B,CAAC;EAEjC,OAAO;IACLN,KAAK;IACLE,KAAK;IACLC,UAAU;IACVF,OAAO,EAAEG,WAAW;IACpBK,GAAG,EAAEV;EACP,CAAC;AACH;AAEA,OAAO,SAASW,WAAWA,CACzBZ,KAAyC,EACzCX,KAAmC,EACnCc,OAAkC,EACjB;EACjB,OAAOd,KAAK,CAACwB,GAAG,CAAC,CAACZ,IAAI,EAAEC,KAAK,KAAKH,UAAU,CAACC,KAAK,EAAEC,IAAI,EAAEC,KAAK,EAAEC,OAAO,CAAC,CAAC;AAC5E;AAEA,OAAO,SAASW,QAAQA,CACtBd,KAA0B,EAC1BG,OAAuC,EACvC;EACA,MAAMd,KAAK,GAAGJ,QAAQ,CAAC,MAAM;IAC3B,OAAO2B,WAAW,CAACZ,KAAK,EAAEA,KAAK,CAACX,KAAK,EAAEc,OAAO,CAACC,KAAK,CAAC;EACvD,CAAC,CAAC;EACF,OAAO;IAAEf;EAAM,CAAC;AAClB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { computed, watch } from 'vue';
|
|
2
|
+
import { deepEqual } from "../../../util/common.mjs";
|
|
3
|
+
export function useOptions(_ref, emit) {
|
|
4
|
+
let {
|
|
5
|
+
page,
|
|
6
|
+
pageSize,
|
|
7
|
+
sortBy,
|
|
8
|
+
search
|
|
9
|
+
} = _ref;
|
|
10
|
+
const options = computed(() => {
|
|
11
|
+
return {
|
|
12
|
+
page: page.value,
|
|
13
|
+
pageSize: pageSize.value,
|
|
14
|
+
sortBy: sortBy.value,
|
|
15
|
+
search: search.value
|
|
16
|
+
};
|
|
17
|
+
});
|
|
18
|
+
watch(() => search?.value, () => {
|
|
19
|
+
page.value = 1;
|
|
20
|
+
});
|
|
21
|
+
let optionsCache = null;
|
|
22
|
+
watch(options, () => {
|
|
23
|
+
if (deepEqual(optionsCache, options.value)) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
emit('update:options', options.value);
|
|
27
|
+
optionsCache = options.value;
|
|
28
|
+
}, {
|
|
29
|
+
deep: true,
|
|
30
|
+
immediate: true
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=options.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.mjs","names":["computed","watch","deepEqual","useOptions","_ref","emit","page","pageSize","sortBy","search","options","value","optionsCache","deep","immediate"],"sources":["../../../../src/components/table/composibles/options.ts"],"sourcesContent":["import { Ref, computed, watch } from 'vue';\n\nimport { deepEqual } from '../../../util/common';\nimport { SortOption } from \"../types\";\n\ntype DataTableOptionsState = {\n page: Ref<number>;\n pageSize: Ref<number>;\n sortBy: Ref<readonly SortOption[]>;\n search: Ref<string | undefined>;\n};\n\nexport function useOptions(\n { page, pageSize, sortBy, search }: DataTableOptionsState,\n emit: Function,\n) {\n const options = computed(() => {\n return {\n page: page.value,\n pageSize: pageSize.value,\n sortBy: sortBy.value,\n search: search.value,\n };\n });\n\n watch(\n () => search?.value,\n () => {\n page.value = 1;\n },\n );\n\n let optionsCache = null as unknown;\n\n watch(\n options,\n () => {\n if (deepEqual(optionsCache, options.value)) {\n return;\n }\n emit('update:options', options.value);\n optionsCache = options.value;\n },\n { deep: true, immediate: true },\n );\n}\n"],"mappings":"AAAA,SAAcA,QAAQ,EAAEC,KAAK,QAAQ,KAAK;AAAC,SAElCC,SAAS;AAUlB,OAAO,SAASC,UAAUA,CAAAC,IAAA,EAExBC,IAAc,EACd;EAAA,IAFA;IAAEC,IAAI;IAAEC,QAAQ;IAAEC,MAAM;IAAEC;EAA8B,CAAC,GAAAL,IAAA;EAGzD,MAAMM,OAAO,GAAGV,QAAQ,CAAC,MAAM;IAC7B,OAAO;MACLM,IAAI,EAAEA,IAAI,CAACK,KAAK;MAChBJ,QAAQ,EAAEA,QAAQ,CAACI,KAAK;MACxBH,MAAM,EAAEA,MAAM,CAACG,KAAK;MACpBF,MAAM,EAAEA,MAAM,CAACE;IACjB,CAAC;EACH,CAAC,CAAC;EAEFV,KAAK,CACH,MAAMQ,MAAM,EAAEE,KAAK,EACnB,MAAM;IACJL,IAAI,CAACK,KAAK,GAAG,CAAC;EAChB,CACF,CAAC;EAED,IAAIC,YAAY,GAAG,IAAe;EAElCX,KAAK,CACHS,OAAO,EACP,MAAM;IACJ,IAAIR,SAAS,CAACU,YAAY,EAAEF,OAAO,CAACC,KAAK,CAAC,EAAE;MAC1C;IACF;IACAN,IAAI,CAAC,gBAAgB,EAAEK,OAAO,CAACC,KAAK,CAAC;IACrCC,YAAY,GAAGF,OAAO,CAACC,KAAK;EAC9B,CAAC,EACD;IAAEE,IAAI,EAAE,IAAI;IAAEC,SAAS,EAAE;EAAK,CAChC,CAAC;AACH"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { computed, inject, provide, watchEffect } from 'vue';
|
|
2
|
+
import { useModelDuplex } from "../../../composables/communication.mjs";
|
|
3
|
+
import { clamp } from "../../../util/common.mjs";
|
|
4
|
+
import { propsFactory } from "../../../util/vue-component.mjs";
|
|
5
|
+
export const Y_DATA_TABLE_PAGINATION_KEY = Symbol.for('yuyeon.data-table.pagination');
|
|
6
|
+
export const pressDataTablePaginationProps = propsFactory({
|
|
7
|
+
page: {
|
|
8
|
+
type: [Number, String],
|
|
9
|
+
default: 0
|
|
10
|
+
},
|
|
11
|
+
pageSize: {
|
|
12
|
+
type: [Number, String],
|
|
13
|
+
default: 10
|
|
14
|
+
}
|
|
15
|
+
}, 'YDataTable--pagination');
|
|
16
|
+
export function createPagination(props) {
|
|
17
|
+
const page = useModelDuplex(props, 'page', undefined, value => +(value ?? 0));
|
|
18
|
+
const pageSize = useModelDuplex(props, 'pageSize', undefined, value => +(value ?? 10));
|
|
19
|
+
return {
|
|
20
|
+
page,
|
|
21
|
+
pageSize
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function providePagination(options) {
|
|
25
|
+
const {
|
|
26
|
+
page,
|
|
27
|
+
pageSize,
|
|
28
|
+
total
|
|
29
|
+
} = options;
|
|
30
|
+
const startIndex = computed(() => {
|
|
31
|
+
if (pageSize.value === -1) return 0;
|
|
32
|
+
return pageSize.value * (page.value - 1);
|
|
33
|
+
});
|
|
34
|
+
const endIndex = computed(() => {
|
|
35
|
+
if (pageSize.value === -1) return total.value;
|
|
36
|
+
return Math.min(total.value, startIndex.value + pageSize.value);
|
|
37
|
+
});
|
|
38
|
+
const pageLength = computed(() => {
|
|
39
|
+
if (pageSize.value === -1 || total.value === 0) return 1;
|
|
40
|
+
return Math.ceil(total.value / pageSize.value);
|
|
41
|
+
});
|
|
42
|
+
watchEffect(() => {
|
|
43
|
+
if (page.value > pageLength.value) {
|
|
44
|
+
page.value = pageLength.value;
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
function setPageSize(value) {
|
|
48
|
+
pageSize.value = value;
|
|
49
|
+
page.value = 1;
|
|
50
|
+
}
|
|
51
|
+
function nextPage() {
|
|
52
|
+
page.value = clamp(page.value + 1, 1, pageLength.value);
|
|
53
|
+
}
|
|
54
|
+
function prevPage() {
|
|
55
|
+
page.value = clamp(page.value - 1, 1, pageLength.value);
|
|
56
|
+
}
|
|
57
|
+
function setPage(value) {
|
|
58
|
+
page.value = clamp(value, 1, pageLength.value);
|
|
59
|
+
}
|
|
60
|
+
const data = {
|
|
61
|
+
page,
|
|
62
|
+
pageSize,
|
|
63
|
+
startIndex,
|
|
64
|
+
endIndex,
|
|
65
|
+
pageLength,
|
|
66
|
+
total,
|
|
67
|
+
nextPage,
|
|
68
|
+
prevPage,
|
|
69
|
+
setPage,
|
|
70
|
+
setPageSize
|
|
71
|
+
};
|
|
72
|
+
provide(Y_DATA_TABLE_PAGINATION_KEY, data);
|
|
73
|
+
return data;
|
|
74
|
+
}
|
|
75
|
+
export function usePagination() {
|
|
76
|
+
const data = inject(Y_DATA_TABLE_PAGINATION_KEY);
|
|
77
|
+
if (!data) {
|
|
78
|
+
throw new Error(`Not provided: ${Y_DATA_TABLE_PAGINATION_KEY.description}`);
|
|
79
|
+
}
|
|
80
|
+
return data;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=pagination.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.mjs","names":["computed","inject","provide","watchEffect","useModelDuplex","clamp","propsFactory","Y_DATA_TABLE_PAGINATION_KEY","Symbol","for","pressDataTablePaginationProps","page","type","Number","String","default","pageSize","createPagination","props","undefined","value","providePagination","options","total","startIndex","endIndex","Math","min","pageLength","ceil","setPageSize","nextPage","prevPage","setPage","data","usePagination","Error","description"],"sources":["../../../../src/components/table/composibles/pagination.ts"],"sourcesContent":["import type { InjectionKey, PropType, Ref } from 'vue';\nimport { computed, inject, provide, watchEffect } from 'vue';\n\nimport { useModelDuplex } from '../../../composables/communication';\nimport { clamp } from '../../../util/common';\nimport { propsFactory } from '../../../util/vue-component';\nimport { DataTableProvidePaginationData } from \"../types\";\n\nexport const Y_DATA_TABLE_PAGINATION_KEY: InjectionKey<{\n page: Ref<number>;\n pageSize: Ref<number>;\n startIndex: Ref<number>;\n endIndex: Ref<number>;\n pageLength: Ref<number>;\n total: Ref<number>;\n prevPage: () => void;\n nextPage: () => void;\n setPage: (page: number) => void;\n setPageSize: (size: number) => void;\n}> = Symbol.for('yuyeon.data-table.pagination');\n\nexport const pressDataTablePaginationProps = propsFactory(\n {\n page: {\n type: [Number, String] as PropType<number | string>,\n default: 0,\n },\n pageSize: {\n type: [Number, String] as PropType<number | string>,\n default: 10,\n },\n },\n 'YDataTable--pagination',\n);\n\ntype PaginationProps = {\n page: number | string;\n 'onUpdate:page': ((v: any) => void) | undefined;\n pageSize: number | string;\n 'onUpdate:pageSize': ((v: any) => void) | undefined;\n total?: number | string;\n};\n\nexport function createPagination(props: PaginationProps) {\n const page = useModelDuplex(\n props,\n 'page',\n undefined,\n (value) => +(value ?? 0),\n );\n const pageSize = useModelDuplex(\n props,\n 'pageSize',\n undefined,\n (value) => +(value ?? 10),\n );\n return { page, pageSize };\n}\n\nexport function providePagination(options: {\n page: Ref<number>;\n pageSize: Ref<number>;\n total: Ref<number>;\n}) {\n const { page, pageSize, total } = options;\n\n const startIndex = computed(() => {\n if (pageSize.value === -1) return 0;\n\n return pageSize.value * (page.value - 1);\n });\n const endIndex = computed(() => {\n if (pageSize.value === -1) return total.value;\n\n return Math.min(total.value, startIndex.value + pageSize.value);\n });\n\n const pageLength = computed(() => {\n if (pageSize.value === -1 || total.value === 0) return 1;\n\n return Math.ceil(total.value / pageSize.value);\n });\n\n watchEffect(() => {\n if (page.value > pageLength.value) {\n page.value = pageLength.value;\n }\n });\n\n function setPageSize(value: number) {\n pageSize.value = value;\n page.value = 1;\n }\n\n function nextPage() {\n page.value = clamp(page.value + 1, 1, pageLength.value);\n }\n\n function prevPage() {\n page.value = clamp(page.value - 1, 1, pageLength.value);\n }\n\n function setPage(value: number) {\n page.value = clamp(value, 1, pageLength.value);\n }\n\n const data: DataTableProvidePaginationData = {\n page,\n pageSize,\n startIndex,\n endIndex,\n pageLength,\n total,\n nextPage,\n prevPage,\n setPage,\n setPageSize,\n };\n\n provide(Y_DATA_TABLE_PAGINATION_KEY, data);\n\n return data;\n}\n\nexport function usePagination() {\n const data = inject(Y_DATA_TABLE_PAGINATION_KEY);\n if (!data) {\n throw new Error(`Not provided: ${Y_DATA_TABLE_PAGINATION_KEY.description}`);\n }\n return data;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { computed, inject, provide } from 'vue';
|
|
2
|
+
import { useModelDuplex } from "../../../composables/communication.mjs";
|
|
3
|
+
import { wrapInArray } from "../../../util/array.mjs";
|
|
4
|
+
import { propsFactory } from "../../../util/vue-component.mjs";
|
|
5
|
+
export const pressDataTableSelectionProps = propsFactory({
|
|
6
|
+
enableSelect: Boolean,
|
|
7
|
+
selectStrategy: {
|
|
8
|
+
type: [String, Object],
|
|
9
|
+
default: 'page'
|
|
10
|
+
},
|
|
11
|
+
modelValue: {
|
|
12
|
+
type: Array,
|
|
13
|
+
default: () => []
|
|
14
|
+
}
|
|
15
|
+
}, 'YDataTable--selection');
|
|
16
|
+
const singleSelectStrategy = {
|
|
17
|
+
showSelectAll: false,
|
|
18
|
+
allSelected: () => [],
|
|
19
|
+
select: _ref => {
|
|
20
|
+
let {
|
|
21
|
+
items,
|
|
22
|
+
value
|
|
23
|
+
} = _ref;
|
|
24
|
+
return new Set(value ? [items[0]?.value] : []);
|
|
25
|
+
},
|
|
26
|
+
selectAll: _ref2 => {
|
|
27
|
+
let {
|
|
28
|
+
selected
|
|
29
|
+
} = _ref2;
|
|
30
|
+
return selected;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const pageSelectStrategy = {
|
|
34
|
+
showSelectAll: true,
|
|
35
|
+
allSelected: _ref3 => {
|
|
36
|
+
let {
|
|
37
|
+
pageItems
|
|
38
|
+
} = _ref3;
|
|
39
|
+
return pageItems;
|
|
40
|
+
},
|
|
41
|
+
select: _ref4 => {
|
|
42
|
+
let {
|
|
43
|
+
items,
|
|
44
|
+
value,
|
|
45
|
+
selected
|
|
46
|
+
} = _ref4;
|
|
47
|
+
for (const item of items) {
|
|
48
|
+
if (value) selected.add(item.value);else selected.delete(item.value);
|
|
49
|
+
}
|
|
50
|
+
return selected;
|
|
51
|
+
},
|
|
52
|
+
selectAll: _ref5 => {
|
|
53
|
+
let {
|
|
54
|
+
value,
|
|
55
|
+
pageItems,
|
|
56
|
+
selected
|
|
57
|
+
} = _ref5;
|
|
58
|
+
return pageSelectStrategy.select({
|
|
59
|
+
items: pageItems,
|
|
60
|
+
value,
|
|
61
|
+
selected
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
const allSelectStrategy = {
|
|
66
|
+
showSelectAll: true,
|
|
67
|
+
allSelected: _ref6 => {
|
|
68
|
+
let {
|
|
69
|
+
allItems
|
|
70
|
+
} = _ref6;
|
|
71
|
+
return allItems;
|
|
72
|
+
},
|
|
73
|
+
select: _ref7 => {
|
|
74
|
+
let {
|
|
75
|
+
items,
|
|
76
|
+
value,
|
|
77
|
+
selected
|
|
78
|
+
} = _ref7;
|
|
79
|
+
for (const item of items) {
|
|
80
|
+
if (value) selected.add(item.value);else selected.delete(item.value);
|
|
81
|
+
}
|
|
82
|
+
return selected;
|
|
83
|
+
},
|
|
84
|
+
selectAll: _ref8 => {
|
|
85
|
+
let {
|
|
86
|
+
value,
|
|
87
|
+
allItems,
|
|
88
|
+
selected
|
|
89
|
+
} = _ref8;
|
|
90
|
+
return allSelectStrategy.select({
|
|
91
|
+
items: allItems,
|
|
92
|
+
value,
|
|
93
|
+
selected
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
export const Y_DATA_TABLE_SELECTION_KEY = Symbol.for('yuyeon.data-table.selection');
|
|
98
|
+
export function provideSelection(props, _ref9) {
|
|
99
|
+
let {
|
|
100
|
+
allItems,
|
|
101
|
+
pageItems
|
|
102
|
+
} = _ref9;
|
|
103
|
+
const selected = useModelDuplex(props, 'modelValue', props.modelValue, v => {
|
|
104
|
+
return new Set(v);
|
|
105
|
+
}, v => {
|
|
106
|
+
return [...v.values()];
|
|
107
|
+
});
|
|
108
|
+
const allSelectables = computed(() => allItems.value.filter(item => item.selectable));
|
|
109
|
+
const pageSelectables = computed(() => pageItems.value.filter(item => item.selectable));
|
|
110
|
+
const selectStrategy = computed(() => {
|
|
111
|
+
if (typeof props.selectStrategy === 'object') {
|
|
112
|
+
return props.selectStrategy;
|
|
113
|
+
}
|
|
114
|
+
switch (props.selectStrategy) {
|
|
115
|
+
case 'single':
|
|
116
|
+
return singleSelectStrategy;
|
|
117
|
+
case 'all':
|
|
118
|
+
return allSelectStrategy;
|
|
119
|
+
case 'page':
|
|
120
|
+
default:
|
|
121
|
+
return pageSelectStrategy;
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
function isSelected(items) {
|
|
125
|
+
return wrapInArray(items).every(item => selected.value.has(item.value));
|
|
126
|
+
}
|
|
127
|
+
function isSomeSelected(items) {
|
|
128
|
+
return wrapInArray(items).some(item => selected.value.has(item.value));
|
|
129
|
+
}
|
|
130
|
+
function select(items, value) {
|
|
131
|
+
selected.value = selectStrategy.value.select({
|
|
132
|
+
items,
|
|
133
|
+
value,
|
|
134
|
+
selected: new Set(selected.value)
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
function toggleSelect(item) {
|
|
138
|
+
select([item], !isSelected([item]));
|
|
139
|
+
}
|
|
140
|
+
function selectAll(value) {
|
|
141
|
+
selected.value = selectStrategy.value.selectAll({
|
|
142
|
+
value,
|
|
143
|
+
allItems: allSelectables.value,
|
|
144
|
+
pageItems: pageSelectables.value,
|
|
145
|
+
selected: new Set(selected.value)
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
const selectables = computed(() => {
|
|
149
|
+
return selectStrategy.value.allSelected({
|
|
150
|
+
allItems: allSelectables.value,
|
|
151
|
+
pageItems: pageSelectables.value
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
const someSelected = computed(() => selected.value.size > 0);
|
|
155
|
+
const allSelected = computed(() => {
|
|
156
|
+
return isSelected(selectables.value);
|
|
157
|
+
});
|
|
158
|
+
const data = {
|
|
159
|
+
toggleSelect,
|
|
160
|
+
select,
|
|
161
|
+
selectAll,
|
|
162
|
+
isSelected,
|
|
163
|
+
isSomeSelected,
|
|
164
|
+
someSelected,
|
|
165
|
+
allSelected,
|
|
166
|
+
showSelectAll: selectStrategy.value.showSelectAll,
|
|
167
|
+
selectables
|
|
168
|
+
};
|
|
169
|
+
provide(Y_DATA_TABLE_SELECTION_KEY, data);
|
|
170
|
+
return data;
|
|
171
|
+
}
|
|
172
|
+
export function useSelection() {
|
|
173
|
+
const data = inject(Y_DATA_TABLE_SELECTION_KEY);
|
|
174
|
+
if (!data) {
|
|
175
|
+
throw new Error(`Not provided: ${Y_DATA_TABLE_SELECTION_KEY.description}`);
|
|
176
|
+
}
|
|
177
|
+
return data;
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=selection.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selection.mjs","names":["computed","inject","provide","useModelDuplex","wrapInArray","propsFactory","pressDataTableSelectionProps","enableSelect","Boolean","selectStrategy","type","String","Object","default","modelValue","Array","singleSelectStrategy","showSelectAll","allSelected","select","_ref","items","value","Set","selectAll","_ref2","selected","pageSelectStrategy","_ref3","pageItems","_ref4","item","add","delete","_ref5","allSelectStrategy","_ref6","allItems","_ref7","_ref8","Y_DATA_TABLE_SELECTION_KEY","Symbol","for","provideSelection","props","_ref9","v","values","allSelectables","filter","selectable","pageSelectables","isSelected","every","has","isSomeSelected","some","toggleSelect","selectables","someSelected","size","data","useSelection","Error","description"],"sources":["../../../../src/components/table/composibles/selection.ts"],"sourcesContent":["import { InjectionKey, PropType, Ref, computed, inject, provide } from 'vue';\n\nimport { useModelDuplex } from '../../../composables/communication';\nimport { wrapInArray } from '../../../util/array';\nimport { propsFactory } from '../../../util/vue-component';\n\nimport { DataTableProvideSelectionData } from '../types';\nimport { DataTableItemsProps } from './items';\n\nexport interface SelectableItem {\n value: any;\n selectable: boolean;\n}\n\nexport interface DataTableSelectStrategy {\n showSelectAll: boolean;\n allSelected: (data: {\n allItems: SelectableItem[];\n pageItems: SelectableItem[];\n }) => SelectableItem[];\n select: (data: {\n items: SelectableItem[];\n value: boolean;\n selected: Set<unknown>;\n }) => Set<unknown>;\n selectAll: (data: {\n value: boolean;\n allItems: SelectableItem[];\n pageItems: SelectableItem[];\n selected: Set<unknown>;\n }) => Set<unknown>;\n}\n\nexport const pressDataTableSelectionProps = propsFactory(\n {\n enableSelect: Boolean,\n selectStrategy: {\n type: [String, Object] as PropType<'single' | 'page' | 'all'>,\n default: 'page',\n },\n modelValue: {\n type: Array as PropType<readonly any[]>,\n default: () => [],\n },\n },\n 'YDataTable--selection',\n);\n\ntype DataTableSelectionProps = Pick<DataTableItemsProps, 'itemKey'> & {\n modelValue: readonly any[];\n selectStrategy: 'single' | 'page' | 'all';\n 'onUpdate:modelValue': ((value: any[]) => void) | undefined;\n};\n\nconst singleSelectStrategy: DataTableSelectStrategy = {\n showSelectAll: false,\n allSelected: () => [],\n select: ({ items, value }) => {\n return new Set(value ? [items[0]?.value] : []);\n },\n selectAll: ({ selected }) => selected,\n};\n\nconst pageSelectStrategy: DataTableSelectStrategy = {\n showSelectAll: true,\n allSelected: ({ pageItems }) => pageItems,\n select: ({ items, value, selected }) => {\n for (const item of items) {\n if (value) selected.add(item.value);\n else selected.delete(item.value);\n }\n\n return selected;\n },\n selectAll: ({ value, pageItems, selected }) =>\n pageSelectStrategy.select({ items: pageItems, value, selected }),\n};\n\nconst allSelectStrategy: DataTableSelectStrategy = {\n showSelectAll: true,\n allSelected: ({ allItems }) => allItems,\n select: ({ items, value, selected }) => {\n for (const item of items) {\n if (value) selected.add(item.value);\n else selected.delete(item.value);\n }\n\n return selected;\n },\n selectAll: ({ value, allItems, selected }) =>\n allSelectStrategy.select({ items: allItems, value, selected }),\n};\n\nexport const Y_DATA_TABLE_SELECTION_KEY: InjectionKey<\n ReturnType<typeof provideSelection>\n> = Symbol.for('yuyeon.data-table.selection');\n\nexport function provideSelection(\n props: DataTableSelectionProps,\n {\n allItems,\n pageItems,\n }: { allItems: Ref<SelectableItem[]>; pageItems: Ref<SelectableItem[]> },\n) {\n const selected = useModelDuplex(\n props,\n 'modelValue',\n props.modelValue,\n (v) => {\n return new Set(v);\n },\n (v) => {\n return [...v.values()];\n },\n );\n\n const allSelectables = computed(() =>\n allItems.value.filter((item) => item.selectable),\n );\n\n const pageSelectables = computed(() =>\n pageItems.value.filter((item) => item.selectable),\n );\n\n const selectStrategy = computed(() => {\n if (typeof props.selectStrategy === 'object') {\n return props.selectStrategy;\n }\n switch (props.selectStrategy) {\n case 'single':\n return singleSelectStrategy;\n case 'all':\n return allSelectStrategy;\n case 'page':\n default:\n return pageSelectStrategy;\n }\n });\n\n function isSelected(items: SelectableItem | SelectableItem[]) {\n return wrapInArray(items).every((item) => selected.value.has(item.value));\n }\n\n function isSomeSelected(items: SelectableItem | SelectableItem[]) {\n return wrapInArray(items).some((item) => selected.value.has(item.value));\n }\n\n function select(items: SelectableItem[], value: boolean) {\n selected.value = selectStrategy.value.select({\n items,\n value,\n selected: new Set(selected.value),\n });\n }\n\n function toggleSelect(item: SelectableItem) {\n select([item], !isSelected([item]));\n }\n\n function selectAll(value: boolean) {\n selected.value = selectStrategy.value.selectAll({\n value,\n allItems: allSelectables.value,\n pageItems: pageSelectables.value,\n selected: new Set(selected.value),\n });\n }\n\n const selectables = computed(() => {\n return selectStrategy.value.allSelected({\n allItems: allSelectables.value,\n pageItems: pageSelectables.value,\n });\n });\n\n const someSelected = computed(() => selected.value.size > 0);\n\n const allSelected = computed(() => {\n return isSelected(selectables.value);\n });\n\n const data: DataTableProvideSelectionData = {\n toggleSelect,\n select,\n selectAll,\n isSelected,\n isSomeSelected,\n someSelected,\n allSelected,\n showSelectAll: selectStrategy.value.showSelectAll,\n selectables,\n };\n\n provide(Y_DATA_TABLE_SELECTION_KEY, data);\n\n return data;\n}\n\nexport function useSelection() {\n const data = inject(Y_DATA_TABLE_SELECTION_KEY);\n if (!data) {\n throw new Error(`Not provided: ${Y_DATA_TABLE_SELECTION_KEY.description}`);\n }\n\n return data;\n}\n"],"mappings":"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"}
|