@dative-gpi/foundation-core-components 0.0.11 → 0.0.13

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.
@@ -1,107 +1,172 @@
1
1
  <template>
2
+ <FSLoadDataTable
3
+ v-if="getting"
4
+ />
2
5
  <FSDataTableUI
3
- v-if="!getting"
4
- :filters="getFilters()"
6
+ v-else
7
+ :headers="innerHeaders"
8
+ :mode="innerMode"
9
+ :sortBy="innerSortBy"
10
+ :rowsPerPage="innerRowsPerPage"
11
+ :filters="innerFilters"
12
+ :page="innerPage"
13
+ @update:headers="updateHeaders"
14
+ @update:mode="updateMode"
15
+ @update:sortBy="updateSortBy"
16
+ @update:rowsPerPage="updateRowsPerPage"
5
17
  @update:filters="updateFilters"
6
- v-model:rowsPerPage="innerRowsPerPage"
7
- v-model:headers="innerHeaders"
8
- v-model:sortBy="innerSortBy"
9
- v-model:page="innerPage"
10
- v-model:mode="innerMode"
18
+ @update:page="updatePage"
11
19
  v-bind="$attrs"
12
20
  />
13
21
  </template>
14
22
 
15
23
  <script lang="ts">
16
- import { defineComponent, onMounted, onUnmounted, PropType, ref, Ref, watch } from "vue";
24
+ import { defineComponent, onMounted, onUnmounted, ref, Ref, watch } from "vue";
25
+ import { useRouter } from "vue-router";
17
26
 
18
- import { ColumnInfos, TableFilter, TableOrder } from "@dative-gpi/foundation-core-domain/models";
27
+ import { FSDataTableColumn, FSDataTableFilter, FSDataTableOrder } from "@dative-gpi/foundation-shared-components/models";
19
28
  import { useTable, useUpdateTable } from "@dative-gpi/foundation-core-services/composables";
20
- import { FSDataTableFilter } from "@dative-gpi/foundation-shared-components/models";
29
+ import { useDebounce } from "@dative-gpi/foundation-shared-components/composables";
21
30
 
31
+ import FSLoadDataTable from "@dative-gpi/foundation-shared-components/components/lists/FSLoadDataTable.vue";
22
32
  import FSDataTableUI from "@dative-gpi/foundation-shared-components/components/lists/FSDataTableUI.vue";
23
33
 
24
34
  export default defineComponent({
25
35
  name: "FSDataTable",
26
36
  components: {
37
+ FSLoadDataTable,
27
38
  FSDataTableUI
28
39
  },
29
40
  props: {
30
41
  tableCode: {
31
42
  type: String,
32
43
  required: true
33
- },
34
- mode: {
35
- type: String as PropType<"table" | "iterator">,
36
- required: false,
37
- default: "table"
38
44
  }
39
45
  },
40
46
  setup(props) {
41
- const { update: updateTable } = useUpdateTable();
42
- const { get: getTable, getting, entity } = useTable();
47
+ const { get, getting, entity } = useTable();
48
+ const { debounce, cancel } = useDebounce();
49
+ const { update } = useUpdateTable();
50
+ const router = useRouter();
43
51
 
44
- const innerHeaders: Ref<ColumnInfos[]> = ref([]);
45
- const innerFilters = ref<TableFilter[]>([]);
52
+ const innerHeaders: Ref<FSDataTableColumn[]> = ref([]);
53
+ const innerSortBy: Ref<FSDataTableOrder | null> = ref(null);
54
+ const innerMode: Ref<"table" | "iterator"> = ref("table");
46
55
  const innerRowsPerPage = ref(10);
47
- const innerSortBy: Ref<TableOrder | null> = ref(null);
48
- const innerMode = ref(props.mode);
56
+ const innerFilters = ref<{ [key: string]: FSDataTableFilter[] }>({});
49
57
  const innerPage = ref(1);
50
58
 
51
- const getFilters = (): { [key: string]: FSDataTableFilter[] } => {
52
- return innerFilters.value.reduce((acc, filter) => {
53
- if (!acc[filter.key]) {
54
- acc[filter.key] = [];
55
- }
56
- acc[filter.key].push({ value: filter.value, hidden: filter.hidden });
57
- return acc;
58
- }, {});
59
- }
59
+ const reset = (): void => {
60
+ if (router && router.currentRoute.value.query[props.tableCode]) {
61
+ const query = JSON.parse(router.currentRoute.value.query[props.tableCode] as string);
62
+ innerHeaders.value = query.columns;
63
+ innerRowsPerPage.value = query.rowsPerPage;
64
+ innerSortBy.value = query.sortBy;
65
+ innerMode.value = query.mode;
66
+ innerFilters.value = query.filters;
67
+ innerPage.value = query.page;
68
+ }
69
+ else {
70
+ innerHeaders.value = entity.value.columns;
71
+ innerRowsPerPage.value = entity.value.rowsPerPage;
72
+ innerSortBy.value = entity.value.sortBy;
73
+ innerMode.value = entity.value.mode;
74
+ }
75
+ };
76
+
77
+ const updateHeaders = (value: FSDataTableColumn[]): void => {
78
+ innerHeaders.value = value;
79
+ debounce(updateTable, 5000);
80
+ };
81
+
82
+ const updateMode = (value: "table" | "iterator"): void => {
83
+ innerMode.value = value;
84
+ debounce(updateTable, 5000);
85
+ };
86
+
87
+ const updateSortBy = (value: FSDataTableOrder | null): void => {
88
+ innerSortBy.value = value;
89
+ debounce(updateTable, 5000);
90
+ };
91
+
92
+ const updateRowsPerPage = (value: -1 | 10 | 30): void => {
93
+ innerRowsPerPage.value = value;
94
+ debounce(updateTable, 5000);
95
+ };
60
96
 
61
97
  const updateFilters = (value: { [key: string]: FSDataTableFilter[] }): void => {
62
- innerFilters.value = Object.entries(value).map(([key, filters]) => filters.map((filter) => ({
63
- key: key,
64
- value: filter.value,
65
- hidden: filter.hidden
66
- }))).reduce((acc, filters) => acc.concat(filters), []);
98
+ innerFilters.value = value;
99
+ updateRouter();
67
100
  };
68
101
 
69
- const reset = (): void => {
70
- innerHeaders.value = entity.value.columns;
71
- innerRowsPerPage.value = entity.value.rowsPerPage;
72
- innerSortBy.value = entity.value.sortBy;
73
- innerMode.value = entity.value.mode;
102
+ const updatePage = (value: number): void => {
103
+ innerPage.value = value;
104
+ updateRouter();
105
+ };
106
+
107
+ const updateTable = (): void => {
108
+ updateRouter();
109
+ update(props.tableCode, {
110
+ columns: innerHeaders.value.map(column => ({
111
+ columnId: column.columnId,
112
+ hidden: column.hidden,
113
+ index: column.index
114
+ })),
115
+ rowsPerPage: innerRowsPerPage.value,
116
+ sortBy: innerSortBy.value,
117
+ mode: innerMode.value
118
+ });
119
+ };
120
+
121
+ const updateRouter = (): void => {
122
+ if (router) {
123
+ router.replace({
124
+ query: {
125
+ ...router.currentRoute.value.query,
126
+ [props.tableCode]: JSON.stringify({
127
+ columns: innerHeaders.value,
128
+ rowsPerPage: innerRowsPerPage.value,
129
+ sortBy: innerSortBy.value,
130
+ mode: innerMode.value,
131
+ filters: innerFilters.value,
132
+ page: innerPage.value
133
+ })
134
+ }
135
+ });
136
+ }
74
137
  };
75
138
 
76
139
  onMounted(() => {
77
- getTable(props.tableCode);
140
+ get(props.tableCode);
78
141
  });
79
142
 
80
143
  onUnmounted(() => {
81
- // update();
144
+ cancel();
145
+ updateTable();
82
146
  });
83
147
 
84
148
  watch(() => props.tableCode, () => {
85
- getTable(props.tableCode);
149
+ get(props.tableCode);
86
150
  });
87
151
 
88
152
  watch(entity, () => {
89
153
  reset();
90
154
  });
91
155
 
92
- watch([innerHeaders, innerFilters, innerRowsPerPage, innerSortBy, innerMode, ], () => {
93
- // update();
94
- });
95
-
96
156
  return {
97
157
  getting,
98
158
  innerHeaders,
99
159
  innerRowsPerPage,
100
- innerPage,
101
160
  innerSortBy,
102
161
  innerMode,
103
- getFilters,
104
- updateFilters
162
+ innerFilters,
163
+ innerPage,
164
+ updateHeaders,
165
+ updateMode,
166
+ updateSortBy,
167
+ updateRowsPerPage,
168
+ updateFilters,
169
+ updatePage
105
170
  };
106
171
  },
107
172
  });
@@ -27,7 +27,7 @@ import { defineComponent, onMounted, watch } from "vue";
27
27
  import { useDeviceOrganisation } from "@dative-gpi/foundation-core-services/composables";
28
28
 
29
29
  import FSDeviceOrganisationTileUI from "@dative-gpi/foundation-shared-components/components/tiles/FSDeviceOrganisationTileUI.vue";
30
- import FSLoadTile from "@dative-gpi/foundation-shared-components/components/FSLoadTile.vue";
30
+ import FSLoadTile from "@dative-gpi/foundation-shared-components/components/tiles/FSLoadTile.vue";
31
31
 
32
32
  export default defineComponent({
33
33
  name: "FSDeviceOrganisationTile",
@@ -24,7 +24,7 @@ import { defineComponent, onMounted, watch } from "vue";
24
24
  import { useGroup } from "@dative-gpi/foundation-core-services/composables";
25
25
 
26
26
  import FSGroupTileUI from "@dative-gpi/foundation-shared-components/components/tiles/FSGroupTileUI.vue";
27
- import FSLoadTile from "@dative-gpi/foundation-shared-components/components/FSLoadTile.vue";
27
+ import FSLoadTile from "@dative-gpi/foundation-shared-components/components/tiles/FSLoadTile.vue";
28
28
 
29
29
  export default defineComponent({
30
30
  name: "FSGroupTile",
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@dative-gpi/foundation-core-components",
3
- "version": "0.0.11",
3
+ "sideEffects": false,
4
+ "version": "0.0.13",
4
5
  "description": "",
5
6
  "publishConfig": {
6
7
  "access": "public"
@@ -9,11 +10,11 @@
9
10
  "author": "",
10
11
  "license": "ISC",
11
12
  "dependencies": {
12
- "@dative-gpi/foundation-core-domain": "0.0.11",
13
- "@dative-gpi/foundation-core-services": "0.0.11",
14
- "@dative-gpi/foundation-shared-components": "0.0.11",
15
- "@dative-gpi/foundation-shared-domain": "0.0.11",
16
- "@dative-gpi/foundation-shared-services": "0.0.11",
13
+ "@dative-gpi/foundation-core-domain": "0.0.13",
14
+ "@dative-gpi/foundation-core-services": "0.0.13",
15
+ "@dative-gpi/foundation-shared-components": "0.0.13",
16
+ "@dative-gpi/foundation-shared-domain": "0.0.13",
17
+ "@dative-gpi/foundation-shared-services": "0.0.13",
17
18
  "color": "^4.2.3",
18
19
  "vue": "^3.2.0",
19
20
  "vuedraggable": "^4.1.0"
@@ -23,5 +24,5 @@
23
24
  "sass": "^1.69.5",
24
25
  "sass-loader": "^13.3.2"
25
26
  },
26
- "gitHead": "4f28939e7d42ab1ef8319c614fbc210b1291fd79"
27
+ "gitHead": "c99a5f4be0427449b3b00ef6d467528bae8b1ada"
27
28
  }