aloha-vue 1.2.138 → 1.2.139

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/package.json CHANGED
@@ -14,7 +14,7 @@
14
14
  "Vue.js"
15
15
  ],
16
16
  "homepage": "https://github.com/ilia-brykin/aloha/#README.md",
17
- "version": "1.2.138",
17
+ "version": "1.2.139",
18
18
  "author": {
19
19
  "name": "Ilia Brykin",
20
20
  "email": "brykin.ilia@gmail.com"
@@ -464,10 +464,18 @@ export default {
464
464
  closePreviewAll,
465
465
  });
466
466
 
467
+ const {
468
+ dataSorted,
469
+ initModelSort,
470
+ modelSortLocal,
471
+ } = SortAPI(props);
472
+
467
473
  const {
468
474
  columnsOrderedFromSimpleTable,
469
475
  renderedGroupedColumns,
470
- } = ColumnsGroupedAPI(props);
476
+ } = ColumnsGroupedAPI(props, {
477
+ modelSort: modelSortLocal,
478
+ });
471
479
 
472
480
  const {
473
481
  columnIdsGroupByLocked,
@@ -483,12 +491,6 @@ export default {
483
491
  columnsOrderedFromSimpleTable,
484
492
  });
485
493
 
486
- const {
487
- dataSorted,
488
- initModelSort,
489
- modelSortLocal,
490
- } = SortAPI(props);
491
-
492
494
  const {
493
495
  changeLimit,
494
496
  changeOffset,
@@ -0,0 +1,40 @@
1
+ import {
2
+ computed,
3
+ } from "vue";
4
+
5
+ import DropdownAPI from "../compositionAPI/DropdownAPI";
6
+
7
+ describe("ATableSortingAdditional DropdownAPI", () => {
8
+ it("hides the dropdown when there are no columns available", () => {
9
+ const columnsAll = computed(() => {
10
+ return [];
11
+ });
12
+
13
+ const {
14
+ isDropdownVisible,
15
+ } = DropdownAPI({}, {
16
+ columnsAll,
17
+ });
18
+
19
+ expect(isDropdownVisible.value).toBe(false);
20
+ });
21
+
22
+ it("shows the dropdown when there are available columns", () => {
23
+ const columnsAll = computed(() => {
24
+ return [
25
+ { label: "Column 1", sortId: "1" },
26
+ { label: "Column 2", sortId: "2" },
27
+ { label: "Column 3", sortId: "3" },
28
+ { label: "Column 4", sortId: "4" },
29
+ ];
30
+ });
31
+
32
+ const {
33
+ isDropdownVisible,
34
+ } = DropdownAPI({}, {
35
+ columnsAll,
36
+ });
37
+
38
+ expect(isDropdownVisible.value).toBe(true);
39
+ });
40
+ });
@@ -0,0 +1,90 @@
1
+ import {
2
+ computed,
3
+ ref,
4
+ } from "vue";
5
+
6
+ import FormAPI from "../compositionAPI/FormAPI";
7
+
8
+ import {
9
+ keyBy,
10
+ } from "lodash-es";
11
+
12
+ describe("ATableSortingAdditional FormAPI", () => {
13
+ it("initDataForForm correctly initializes dataForForm", () => {
14
+ const unappliedModelSort = ref([{ sortId: "1", sortMode: "asc" }]);
15
+ const columnsAll = computed(() => {
16
+ return [
17
+ { label: "Column 1", sortId: "1" },
18
+ ];
19
+ });
20
+ const columnsAllKeyBySortId = computed(() => {
21
+ return {
22
+ 1: { label: "Column 1", sortId: "1" },
23
+ };
24
+ });
25
+
26
+ const {
27
+ dataForForm,
28
+ initDataForForm,
29
+ } = FormAPI({}, {
30
+ columnsAll,
31
+ columnsAllKeyBySortId,
32
+ unappliedModelSort,
33
+ });
34
+
35
+ initDataForForm();
36
+
37
+ expect(dataForForm.value).toHaveLength(1);
38
+ expect(dataForForm.value[0].children).toHaveLength(2); // Check that there are two elements: for sortId and sortMode
39
+ expect(dataForForm.value[0].children[0].data[0].label).toBe("Column 1"); // Checking that the first data element contains the correct label
40
+ });
41
+
42
+ it("initializes dataForForm with correct fieldset and column data", () => {
43
+ const unappliedModelSort = ref([
44
+ { sortId: "1", sortMode: "asc" },
45
+ { sortId: "2", sortMode: "asc" },
46
+ { sortId: undefined, sortMode: "asc" },
47
+ ]);
48
+ const columnsAll = computed(() => {
49
+ return [
50
+ { label: "Column 1", sortId: "1" },
51
+ { label: "Column 2", sortId: "2" },
52
+ { label: "Column 3", sortId: "3" },
53
+ { label: "Column 4", sortId: "4" },
54
+ ];
55
+ });
56
+ const columnsAllKeyBySortId = computed(() => {
57
+ return keyBy(columnsAll.value, "sortId");
58
+ });
59
+
60
+ const {
61
+ dataForForm,
62
+ initDataForForm,
63
+ } = FormAPI({}, {
64
+ columnsAll,
65
+ columnsAllKeyBySortId,
66
+ unappliedModelSort,
67
+ });
68
+
69
+ initDataForForm();
70
+
71
+ expect(dataForForm.value).toHaveLength(3); // 3 fieldset
72
+ expect(dataForForm.value[0].label).toBe("_A_TABLE_SORT_ADDITIONAL_SORT_BY_");
73
+ expect(dataForForm.value[1].label).toBe("_A_TABLE_SORT_ADDITIONAL_THEN_BY_");
74
+ expect(dataForForm.value[2].label).toBe("_A_TABLE_SORT_ADDITIONAL_THEN_BY_");
75
+ expect(dataForForm.value[0].children[0].data).toStrictEqual([
76
+ { label: "Column 1", sortId: "1" },
77
+ { label: "Column 3", sortId: "3" },
78
+ { label: "Column 4", sortId: "4" }
79
+ ]);
80
+ expect(dataForForm.value[1].children[0].data).toStrictEqual([
81
+ { label: "Column 2", sortId: "2" },
82
+ { label: "Column 3", sortId: "3" },
83
+ { label: "Column 4", sortId: "4" }
84
+ ]);
85
+ expect(dataForForm.value[2].children[0].data).toStrictEqual([
86
+ { label: "Column 3", sortId: "3" },
87
+ { label: "Column 4", sortId: "4" }
88
+ ]);
89
+ });
90
+ });
@@ -0,0 +1,145 @@
1
+ import {
2
+ computed,
3
+ ref,
4
+ } from "vue";
5
+
6
+ import ModelAPI from "../compositionAPI/ModelAPI";
7
+
8
+ describe("ATableSortingAdditional ModelAPI", () => {
9
+ it("initializes unapplied model sort correctly when no model is provided and opens dropdown", () => {
10
+ const countColumnsAll = computed(() => 3);
11
+ const unappliedModelSort = ref([]);
12
+ const {
13
+ initUnappliedModelSort,
14
+ } = ModelAPI({
15
+ modelSort: ref([]) }, {
16
+ countColumnsAll,
17
+ unappliedModelSort,
18
+ });
19
+
20
+ initUnappliedModelSort();
21
+
22
+ expect(unappliedModelSort.value).toHaveLength(1);
23
+ expect(unappliedModelSort.value[0].sortId).toBeUndefined();
24
+ expect(unappliedModelSort.value[0].sortMode).toBe("asc");
25
+ });
26
+
27
+ it("updates unapplied model sort by adding undefined if the model has defined sort values", () => {
28
+ const modelSortProvided = ref([
29
+ { sortId: "1", sortMode: "desc" },
30
+ ]);
31
+ const unappliedModelSort = ref([]);
32
+ const countColumnsAll = computed(() => 2);
33
+
34
+ const {
35
+ updateUnappliedModelSort
36
+ } = ModelAPI({ modelSort: modelSortProvided }, {
37
+ countColumnsAll,
38
+ unappliedModelSort,
39
+ });
40
+
41
+ updateUnappliedModelSort({ model: modelSortProvided.value });
42
+
43
+ expect(unappliedModelSort.value).toHaveLength(2);
44
+ expect(unappliedModelSort.value[0]).toEqual({ sortId: "1", sortMode: "desc" });
45
+ expect(unappliedModelSort.value[1]).toEqual({ sortId: undefined, sortMode: "asc" });
46
+ });
47
+
48
+ it("correctly removes elements from unappliedModelSort", () => {
49
+ const countColumnsAll = computed(() => 3);
50
+ const unappliedModelSort = ref([
51
+ { sortId: "1", sortMode: "desc" },
52
+ { sortId: "2", sortMode: "desc" },
53
+ { sortId: "3", sortMode: "asc" },
54
+ ]);
55
+ const {
56
+ removeUnappliedModelSort,
57
+ } = ModelAPI({
58
+ modelSort: ref([]) }, {
59
+ countColumnsAll,
60
+ unappliedModelSort,
61
+ });
62
+
63
+ removeUnappliedModelSort({
64
+ item: { additionalProps: { index: 2 } },
65
+ });
66
+
67
+ expect(unappliedModelSort.value).toHaveLength(3);
68
+ expect(unappliedModelSort.value[2].sortId).toBeUndefined();
69
+ expect(unappliedModelSort.value[2].sortMode).toBe("asc");
70
+
71
+ removeUnappliedModelSort({
72
+ item: { additionalProps: { index: 1 } },
73
+ });
74
+
75
+ expect(unappliedModelSort.value).toHaveLength(2);
76
+ expect(unappliedModelSort.value[1].sortId).toBeUndefined();
77
+ expect(unappliedModelSort.value[1].sortMode).toBe("asc");
78
+
79
+ removeUnappliedModelSort({
80
+ item: { additionalProps: { index: 0 } },
81
+ });
82
+
83
+ expect(unappliedModelSort.value).toHaveLength(1);
84
+ expect(unappliedModelSort.value[0].sortId).toBeUndefined();
85
+ expect(unappliedModelSort.value[0].sortMode).toBe("asc");
86
+ });
87
+
88
+ it("correctly change model", () => {
89
+ const countColumnsAll = computed(() => 3);
90
+ const unappliedModelSort = ref([
91
+ { sortId: undefined, sortMode: "asc" },
92
+ ]);
93
+ const {
94
+ updateUnappliedModelSort,
95
+ } = ModelAPI({
96
+ modelSort: ref([]) }, {
97
+ countColumnsAll,
98
+ unappliedModelSort,
99
+ });
100
+
101
+ let model = [
102
+ { sortId: "1", sortMode: "asc" },
103
+ ];
104
+ updateUnappliedModelSort({ model });
105
+
106
+ expect(unappliedModelSort.value).toHaveLength(2);
107
+ expect(unappliedModelSort.value).toStrictEqual([
108
+ { sortId: "1", sortMode: "asc" },
109
+ { sortId: undefined, sortMode: "asc" },
110
+ ]);
111
+
112
+ model[1].sortMode = "desc";
113
+ updateUnappliedModelSort({ model });
114
+
115
+ expect(unappliedModelSort.value).toHaveLength(2);
116
+ expect(unappliedModelSort.value).toStrictEqual([
117
+ { sortId: "1", sortMode: "asc" },
118
+ { sortId: undefined, sortMode: "desc" },
119
+ ]);
120
+
121
+ model[1].sortId = "2";
122
+ updateUnappliedModelSort({ model });
123
+
124
+ expect(unappliedModelSort.value).toHaveLength(3);
125
+ expect(unappliedModelSort.value).toStrictEqual([
126
+ { sortId: "1", sortMode: "asc" },
127
+ { sortId: "2", sortMode: "desc" },
128
+ { sortId: undefined, sortMode: "asc" },
129
+ ]);
130
+
131
+ model = [
132
+ { sortId: "1", sortMode: "asc" },
133
+ { sortId: "2", sortMode: "desc" },
134
+ { sortId: "3", sortMode: "asc" },
135
+ ];
136
+ updateUnappliedModelSort({ model });
137
+
138
+ expect(unappliedModelSort.value).toHaveLength(3);
139
+ expect(unappliedModelSort.value).toStrictEqual([
140
+ { sortId: "1", sortMode: "asc" },
141
+ { sortId: "2", sortMode: "desc" },
142
+ { sortId: "3", sortMode: "asc" },
143
+ ]);
144
+ });
145
+ });
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  computed,
3
3
  h,
4
+ ref,
4
5
  toRef,
5
6
  } from "vue";
6
7
 
@@ -18,9 +19,10 @@ import {
18
19
  uniqBy,
19
20
  } from "lodash-es";
20
21
 
21
- export default function ColumnsGroupedAPI(props) {
22
+ export default function ColumnsGroupedAPI(props, {
23
+ modelSort = ref([]),
24
+ }) {
22
25
  const columns = toRef(props, "columns");
23
- const modelSort = toRef(props, "modelSort");
24
26
  const showFirstSortingSequenceNumber = toRef(props, "showFirstSortingSequenceNumber");
25
27
  const sortingSequenceNumberClass = toRef(props, "sortingSequenceNumberClass");
26
28