@qikdev/vue-ui 0.0.4 → 0.1.2
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 +1 -1
- package/src/components.js +36 -8
- package/src/content/browser.vue +510 -161
- package/src/content/render/field.vue +8 -0
- package/src/content/render/group.vue +6 -6
- package/src/filter/FilterBuilder.vue +2 -1
- package/src/filter/FilterCondition.vue +46 -8
- package/src/filter/FilterRule.vue +3 -1
- package/src/form/field.vue +6 -0
- package/src/form/getDefaultValue.js +2 -0
- package/src/form/inputs/group.vue +6 -6
- package/src/form/inputs/html.vue +39 -0
- package/src/form/inputs/select.vue +18 -0
- package/src/layout/flex-row.vue +1 -1
- package/src/layout/flex-spacer.vue +1 -0
- package/src/layout/tab.vue +34 -0
- package/src/layout/tabset.vue +72 -0
- package/src/mixins/RememberScroll.js +30 -0
- package/src/modal/ContentModal.vue +34 -25
- package/src/modal/Modal.vue +2 -1
- package/src/services/device.js +211 -0
- package/src/services/selection.js +37 -12
- package/src/table/Table.vue +60 -13
- package/src/table/TableCell.vue +80 -31
- package/src/table/TableRow.vue +8 -20
- package/src/table/cells/Button.vue +56 -0
- package/src/table/cells/Thumbnail.vue +2 -1
- package/src/table/cells/Value.vue +46 -0
- package/src/ui/image.vue +2 -2
- package/src/ui/list-item.vue +6 -0
- package/src/ui/menu.vue +16 -4
- package/src/ui/pager.vue +156 -0
- package/src/version.js +1 -1
package/src/content/browser.vue
CHANGED
|
@@ -1,86 +1,293 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<flex-column class="content-browser" v-if="definition">
|
|
3
|
-
<spinner large v-if="loading" />
|
|
4
3
|
<template v-if="dataSource">
|
|
5
|
-
<flex-column class="body" :class="{loading}">
|
|
4
|
+
<flex-column class="browser-body" :class="{loading}">
|
|
6
5
|
<flex-row>
|
|
7
|
-
<flex-
|
|
8
|
-
<
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
<
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
6
|
+
<flex-column v-if="items.length">
|
|
7
|
+
<template v-if="viewMode && viewMode.component">
|
|
8
|
+
<component :is="viewMode.component" :selection="manager.items" :items="items" @click:actions="actionsClicked" @select:item:toggle="rowToggled" @click:item="rowClicked"/>
|
|
9
|
+
</template>
|
|
10
|
+
<template v-else>
|
|
11
|
+
<native-table :enableActions="enableActions" :total="totalItems" :selectAll="selectAll" :deselectAll="deselectAllFunction" :selection="manager.items" @click:row="rowClicked" @click:actions="actionsClicked" @select:row:toggle="rowToggled" @select:multiple="selectMultiple" @deselect:multiple="deselectMultiple" :rows="items" :columns="columns">
|
|
12
|
+
<template #corner>
|
|
13
|
+
<ux-menu right>
|
|
14
|
+
<template #activator="{ on }">
|
|
15
|
+
<ux-button icon v-on="on">
|
|
16
|
+
<ux-icon icon="fa-cog" />
|
|
17
|
+
</ux-button>
|
|
18
|
+
</template>
|
|
19
|
+
<ux-list>
|
|
20
|
+
<ux-list-item @click="toggleField(field)" v-for="field in fields">
|
|
21
|
+
<ux-icon :icon="fieldEnabled[field.key] ? 'fa-check-square' : 'fa-regular fa-square' " left /> {{field.title}}
|
|
22
|
+
</ux-list-item>
|
|
23
|
+
<!-- <ux-list-item @click="selectPage()">
|
|
24
|
+
Select Page
|
|
25
|
+
</ux-list-item>
|
|
26
|
+
<ux-list-item v-if="someSelectedOnPage" @click="deselectPage()">
|
|
27
|
+
Deselect Page
|
|
28
|
+
</ux-list-item>
|
|
29
|
+
<ux-list-item v-if="selectAll" @click="selectAll()">
|
|
30
|
+
Select All ({{total}})
|
|
31
|
+
</ux-list-item>
|
|
32
|
+
<ux-list-item v-if="deselectAll" @click="deselectAll()">
|
|
33
|
+
Deselect All
|
|
34
|
+
</ux-list-item> -->
|
|
35
|
+
</ux-list>
|
|
36
|
+
</ux-menu>
|
|
37
|
+
</template>
|
|
38
|
+
</native-table>
|
|
39
|
+
</template>
|
|
40
|
+
</flex-column>
|
|
41
|
+
<flex-column class="empty" v-else-if="!loading" center>
|
|
42
|
+
<ux-panel>
|
|
43
|
+
<ux-panel-body>
|
|
44
|
+
<div>No {{definition.plural}} found.</div>
|
|
45
|
+
</ux-panel-body>
|
|
46
|
+
</ux-panel>
|
|
47
|
+
</flex-column>
|
|
48
|
+
<flex-column class="filter-column" v-if="showFilters">
|
|
49
|
+
<flex-body>
|
|
50
|
+
<search v-model="keywords" :loading="searching" :debounce="500" placeholder="Keyword Search" />
|
|
51
|
+
<p></p>
|
|
52
|
+
<filter-builder :definition="definition" v-model="filter" />
|
|
53
|
+
</flex-body>
|
|
21
54
|
</flex-column>
|
|
22
55
|
</flex-row>
|
|
23
56
|
</flex-column>
|
|
24
57
|
<flex-footer>
|
|
58
|
+
<slot name="footera"></slot>
|
|
25
59
|
<div class="footer">
|
|
26
|
-
<
|
|
27
|
-
<flex-cell shrink class="text">
|
|
28
|
-
<native-select v-model="perPage" :field="perPageField">
|
|
29
|
-
Showing {{displayStartIndex}} to {{endIndex}} of {{totalItems}} total
|
|
30
|
-
</native-select>
|
|
31
|
-
</flex-cell>
|
|
32
|
-
<flex-cell>
|
|
33
|
-
</flex-cell>
|
|
34
|
-
<flex-cell shrink v-if="totalPages > 1">
|
|
35
|
-
<flex-row gap center>
|
|
36
|
-
<flex-cell shrink class="text">
|
|
37
|
-
<native-select v-model="currentPage" :field="pageField">
|
|
38
|
-
Page {{currentPage}} of {{totalPages}}
|
|
39
|
-
</native-select>
|
|
40
|
-
</flex-cell>
|
|
41
|
-
<flex-cell shrink>
|
|
42
|
-
<ux-button icon @click="previousPage()">
|
|
43
|
-
<ux-icon icon="fa-arrow-left" />
|
|
44
|
-
</ux-button>
|
|
45
|
-
</flex-cell>
|
|
46
|
-
<flex-cell shrink>
|
|
47
|
-
<ux-button icon @click="nextPage()">
|
|
48
|
-
<ux-icon icon="fa-arrow-right" />
|
|
49
|
-
</ux-button>
|
|
50
|
-
</flex-cell>
|
|
51
|
-
</flex-row>
|
|
52
|
-
</flex-cell>
|
|
53
|
-
</flex-row>
|
|
60
|
+
<pager v-model:page="page" :total="totalItems"/>
|
|
54
61
|
</div>
|
|
62
|
+
<slot name="footerb"></slot>
|
|
55
63
|
</flex-footer>
|
|
56
64
|
</template>
|
|
65
|
+
<spinner large v-if="loading" />
|
|
57
66
|
</flex-column>
|
|
58
67
|
</template>
|
|
59
68
|
<script>
|
|
60
|
-
import NativeSelect from '../form/inputs/select.vue';
|
|
69
|
+
// import NativeSelect from '../form/inputs/select.vue';
|
|
61
70
|
import NativeTable from '../table/Table.vue';
|
|
62
71
|
|
|
63
72
|
import FilterBuilder from '../filter/FilterBuilder.vue';
|
|
64
73
|
import Selection from '../services/selection.js';
|
|
65
74
|
import Search from '../form/inputs/search.vue';
|
|
75
|
+
import Pager from '../ui/pager.vue';
|
|
66
76
|
|
|
77
|
+
//////////////////////////////////////////////
|
|
67
78
|
|
|
68
|
-
|
|
79
|
+
function defaultColumns(self, type) {
|
|
69
80
|
|
|
70
|
-
|
|
81
|
+
var columns = [];
|
|
82
|
+
var ignoreTitle;
|
|
83
|
+
|
|
84
|
+
///////////////////////////////////////
|
|
85
|
+
|
|
86
|
+
//Prefix Columns
|
|
87
|
+
switch (type) {
|
|
88
|
+
case 'image':
|
|
89
|
+
case 'video':
|
|
90
|
+
columns.push({
|
|
91
|
+
title: '',
|
|
92
|
+
key: '_id',
|
|
93
|
+
renderer: 'thumbnail',
|
|
94
|
+
shrink: true,
|
|
95
|
+
fields: ['width', 'height', 'fileMeta.colors.colors[0]'],
|
|
96
|
+
})
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
///////////////////////////////////////
|
|
102
|
+
|
|
103
|
+
switch (type) {
|
|
104
|
+
case 'profile':
|
|
105
|
+
ignoreTitle = true;
|
|
106
|
+
|
|
107
|
+
columns.push({
|
|
108
|
+
title: 'First Name',
|
|
109
|
+
key: 'firstName',
|
|
110
|
+
// shrink: true,
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
columns.push({
|
|
114
|
+
title: 'Last Name',
|
|
115
|
+
key: 'lastName',
|
|
116
|
+
// shrink: true,
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
columns.push({
|
|
120
|
+
title: 'Gender',
|
|
121
|
+
key: 'gender',
|
|
122
|
+
// shrink: true,
|
|
123
|
+
})
|
|
124
|
+
|
|
125
|
+
columns.push({
|
|
126
|
+
title: 'Age',
|
|
127
|
+
key: 'age',
|
|
128
|
+
// shrink: true,
|
|
129
|
+
})
|
|
130
|
+
break;
|
|
131
|
+
case 'definition':
|
|
132
|
+
columns.push({
|
|
133
|
+
title: 'Plural',
|
|
134
|
+
key: 'plural',
|
|
135
|
+
// shrink: true,
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
columns.push({
|
|
141
|
+
title: 'Defines Type',
|
|
142
|
+
key: 'definesType',
|
|
143
|
+
// shrink: true,
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
columns.push({
|
|
147
|
+
title: 'Database Key',
|
|
148
|
+
key: 'key',
|
|
149
|
+
// shrink: true,
|
|
150
|
+
})
|
|
151
|
+
|
|
152
|
+
columns.push({
|
|
153
|
+
title: 'Category',
|
|
154
|
+
key: 'category',
|
|
155
|
+
// shrink: true,
|
|
156
|
+
})
|
|
157
|
+
|
|
158
|
+
break;
|
|
159
|
+
case 'file':
|
|
160
|
+
case 'audio':
|
|
161
|
+
case 'image':
|
|
162
|
+
case 'video':
|
|
163
|
+
|
|
164
|
+
ignoreTitle = true;
|
|
165
|
+
columns.push({
|
|
166
|
+
title: 'Title',
|
|
167
|
+
key: 'title',
|
|
168
|
+
// shrink: true,
|
|
169
|
+
})
|
|
170
|
+
|
|
171
|
+
switch (type) {
|
|
172
|
+
case 'image':
|
|
173
|
+
case 'video':
|
|
174
|
+
columns.push({
|
|
175
|
+
title: 'Width',
|
|
176
|
+
key: 'width',
|
|
177
|
+
shrink: true,
|
|
178
|
+
})
|
|
179
|
+
|
|
180
|
+
columns.push({
|
|
181
|
+
title: 'Height',
|
|
182
|
+
key: 'height',
|
|
183
|
+
shrink: true,
|
|
184
|
+
})
|
|
185
|
+
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
columns.push({
|
|
190
|
+
title: 'Ext',
|
|
191
|
+
key: 'fileExtension',
|
|
192
|
+
shrink: true,
|
|
193
|
+
})
|
|
194
|
+
|
|
195
|
+
columns.push({
|
|
196
|
+
title: 'Mime Type',
|
|
197
|
+
key: 'fileMime',
|
|
198
|
+
// shrink: true,
|
|
199
|
+
})
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
columns.push({
|
|
203
|
+
title: 'File Type',
|
|
204
|
+
key: 'mediaIntegrationType',
|
|
205
|
+
shrink: true,
|
|
206
|
+
})
|
|
207
|
+
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
///////////////////////////////////////
|
|
71
213
|
|
|
72
214
|
|
|
215
|
+
if (!ignoreTitle) {
|
|
216
|
+
columns.unshift({
|
|
217
|
+
title: 'Title',
|
|
218
|
+
key: 'title',
|
|
219
|
+
})
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
///////////////////////////////////////
|
|
223
|
+
|
|
224
|
+
//Suffix Columns
|
|
225
|
+
switch (type) {
|
|
226
|
+
case 'file':
|
|
227
|
+
case 'audio':
|
|
228
|
+
case 'image':
|
|
229
|
+
case 'video':
|
|
230
|
+
columns.push({
|
|
231
|
+
title: '',
|
|
232
|
+
key: '_id',
|
|
233
|
+
renderer: 'button',
|
|
234
|
+
shrink: true,
|
|
235
|
+
button: {
|
|
236
|
+
size: "sm",
|
|
237
|
+
text: 'Download',
|
|
238
|
+
icon: 'fa-download',
|
|
239
|
+
action(row) {
|
|
240
|
+
return new Promise(async function(resolve, reject) {
|
|
241
|
+
|
|
242
|
+
//Refresh our token if it's stale
|
|
243
|
+
var validToken = await self.$qik.auth.ensureValidToken();
|
|
244
|
+
|
|
245
|
+
//Open the URL
|
|
246
|
+
var url = self.$qik.files.downloadUrl(self.basicType, row)
|
|
247
|
+
|
|
248
|
+
window.open(url);
|
|
249
|
+
|
|
250
|
+
resolve();
|
|
251
|
+
})
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
})
|
|
255
|
+
break;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
return columns;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
//////////////////////////////////////////////
|
|
266
|
+
|
|
267
|
+
let cancelInflight;
|
|
268
|
+
let typeCacheKey;
|
|
269
|
+
|
|
73
270
|
export default {
|
|
74
271
|
props: {
|
|
272
|
+
view: {
|
|
273
|
+
type: Object,
|
|
274
|
+
default() {
|
|
275
|
+
return {
|
|
276
|
+
title:'List',
|
|
277
|
+
key:'table',
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
},
|
|
75
281
|
type: {
|
|
76
282
|
type: String,
|
|
77
283
|
required: true,
|
|
78
284
|
},
|
|
79
|
-
showFilters:{
|
|
80
|
-
type:Boolean,
|
|
285
|
+
showFilters: {
|
|
286
|
+
type: Boolean,
|
|
81
287
|
},
|
|
82
288
|
search: {
|
|
83
289
|
type: String,
|
|
290
|
+
default: '',
|
|
84
291
|
},
|
|
85
292
|
options: {
|
|
86
293
|
type: Object,
|
|
@@ -89,7 +296,7 @@ export default {
|
|
|
89
296
|
}
|
|
90
297
|
},
|
|
91
298
|
cacheKey: {
|
|
92
|
-
type: String,
|
|
299
|
+
type: [String, Number],
|
|
93
300
|
},
|
|
94
301
|
modelValue: {
|
|
95
302
|
type: Array,
|
|
@@ -105,15 +312,31 @@ export default {
|
|
|
105
312
|
},
|
|
106
313
|
selectionManager: {
|
|
107
314
|
type: Object,
|
|
108
|
-
}
|
|
315
|
+
},
|
|
316
|
+
enableActions: {
|
|
317
|
+
type: Boolean,
|
|
318
|
+
default: false,
|
|
319
|
+
},
|
|
109
320
|
},
|
|
110
321
|
components: {
|
|
111
|
-
NativeSelect,
|
|
322
|
+
// NativeSelect,
|
|
323
|
+
Pager,
|
|
112
324
|
NativeTable,
|
|
113
325
|
FilterBuilder,
|
|
114
326
|
Search,
|
|
115
327
|
// FilterRule,
|
|
116
328
|
},
|
|
329
|
+
deactivated() {
|
|
330
|
+
typeCacheKey = this.$qik.global.cacheKeys[this.type];
|
|
331
|
+
},
|
|
332
|
+
async activated() {
|
|
333
|
+
var self = this;
|
|
334
|
+
var nowCacheKey = self.$qik.global.cacheKeys[self.type];
|
|
335
|
+
if (typeCacheKey != nowCacheKey) {
|
|
336
|
+
typeCacheKey = nowCacheKey;
|
|
337
|
+
self.dataSource = await self.load();
|
|
338
|
+
}
|
|
339
|
+
},
|
|
117
340
|
async created() {
|
|
118
341
|
|
|
119
342
|
var self = this;
|
|
@@ -140,20 +363,88 @@ export default {
|
|
|
140
363
|
]);
|
|
141
364
|
},
|
|
142
365
|
watch: {
|
|
366
|
+
keywords(k) {
|
|
367
|
+
this.$emit('update:search', k)
|
|
368
|
+
},
|
|
369
|
+
search(k) {
|
|
370
|
+
this.keywords = k;
|
|
371
|
+
},
|
|
143
372
|
async change() {
|
|
144
373
|
this.dataSource = await this.load();
|
|
145
374
|
},
|
|
146
375
|
loading() {
|
|
147
376
|
this.$emit('loading', this.loading)
|
|
148
377
|
},
|
|
149
|
-
totalPages() {
|
|
150
|
-
this.currentPage = 0;
|
|
151
|
-
},
|
|
152
378
|
selectedItems(items) {
|
|
153
379
|
this.$emit('update:modelValue', items);
|
|
154
380
|
},
|
|
155
381
|
},
|
|
156
382
|
computed: {
|
|
383
|
+
viewMode() {
|
|
384
|
+
var view = this.view;
|
|
385
|
+
|
|
386
|
+
switch(view.key) {
|
|
387
|
+
case 'list':
|
|
388
|
+
case 'table':
|
|
389
|
+
return;
|
|
390
|
+
break;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
return view;
|
|
394
|
+
},
|
|
395
|
+
sort() {
|
|
396
|
+
|
|
397
|
+
//TODO Update to allow for a prop
|
|
398
|
+
//And user sort by clicking on the table headers
|
|
399
|
+
var defaultSort = {
|
|
400
|
+
key: 'title',
|
|
401
|
+
direction: 'asc',
|
|
402
|
+
type: 'string',
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
switch (this.basicType) {
|
|
406
|
+
case 'log':
|
|
407
|
+
defaultSort = {
|
|
408
|
+
key: 'meta.created',
|
|
409
|
+
direction: 'dsc',
|
|
410
|
+
type: 'date',
|
|
411
|
+
}
|
|
412
|
+
break;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
return defaultSort
|
|
416
|
+
},
|
|
417
|
+
fields() {
|
|
418
|
+
var allFields = [...this.definition.fields];
|
|
419
|
+
var definedFields = this.definition.definedFields || [];
|
|
420
|
+
if (definedFields.length) {
|
|
421
|
+
var customFields = {
|
|
422
|
+
title: `${this.definition.title}`,
|
|
423
|
+
minimum: 1,
|
|
424
|
+
maximum: 1,
|
|
425
|
+
key: 'data',
|
|
426
|
+
asObject: true,
|
|
427
|
+
type: 'group',
|
|
428
|
+
fields: definedFields,
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
allFields.push(customFields);
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
var mapped = this.$qik.utils.mapFields(allFields)
|
|
435
|
+
.filter(function(field) {
|
|
436
|
+
var isObject = field.type == 'group' && field.asObject && (field.minimum == 1 && field.maximum == 1);
|
|
437
|
+
return !isObject;
|
|
438
|
+
})
|
|
439
|
+
.map(function(field) {
|
|
440
|
+
field.title = field.titles.join(' > ');
|
|
441
|
+
return field;
|
|
442
|
+
})
|
|
443
|
+
.sort(function(a, b) {
|
|
444
|
+
return a.title < b.title ? -1 : 1;
|
|
445
|
+
});
|
|
446
|
+
return mapped;
|
|
447
|
+
},
|
|
157
448
|
deselectAllFunction() {
|
|
158
449
|
return this.manager.items.length ? this.deselectAll : null;
|
|
159
450
|
},
|
|
@@ -166,7 +457,7 @@ export default {
|
|
|
166
457
|
return activeFilters;
|
|
167
458
|
},
|
|
168
459
|
searching() {
|
|
169
|
-
return this.loading && this.
|
|
460
|
+
return this.loading && this.keywords.length;
|
|
170
461
|
},
|
|
171
462
|
title() {
|
|
172
463
|
return this.definition.title;
|
|
@@ -174,16 +465,16 @@ export default {
|
|
|
174
465
|
plural() {
|
|
175
466
|
return this.definition.plural;
|
|
176
467
|
},
|
|
177
|
-
perPage: {
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
468
|
+
// perPage: {
|
|
469
|
+
// get() {
|
|
470
|
+
// return this.page.size;
|
|
471
|
+
// },
|
|
472
|
+
// set(i) {
|
|
473
|
+
// i = Math.max(i, 1);
|
|
474
|
+
// this.page.size = i;
|
|
475
|
+
// }
|
|
185
476
|
|
|
186
|
-
},
|
|
477
|
+
// },
|
|
187
478
|
selectFields() {
|
|
188
479
|
return this.columns.map(function(column) {
|
|
189
480
|
if (column.fields) {
|
|
@@ -197,88 +488,109 @@ export default {
|
|
|
197
488
|
|
|
198
489
|
let columns = [];
|
|
199
490
|
|
|
200
|
-
columns.push({
|
|
201
|
-
title: '',
|
|
202
|
-
key: '_id',
|
|
203
|
-
renderer: 'thumbnail',
|
|
204
|
-
shrink: true,
|
|
205
|
-
fields: ['width', 'height', 'fileMeta.colors.colors[0]'],
|
|
206
|
-
})
|
|
207
491
|
|
|
208
|
-
columns.
|
|
209
|
-
|
|
210
|
-
|
|
492
|
+
columns = defaultColumns(this, this.basicType);
|
|
493
|
+
|
|
494
|
+
|
|
495
|
+
|
|
496
|
+
var existingColumns = columns.reduce(function(set, column) {
|
|
497
|
+
set[column.key] = 1;
|
|
498
|
+
return set;
|
|
499
|
+
}, {})
|
|
500
|
+
|
|
501
|
+
/////////////////////////////////////
|
|
502
|
+
|
|
503
|
+
var additionalFields = this.additionalFields;
|
|
504
|
+
additionalFields.forEach(function(field) {
|
|
505
|
+
|
|
506
|
+
if (!existingColumns[field.key]) {
|
|
507
|
+
existingColumns[field.key] = 1;
|
|
508
|
+
columns.push({
|
|
509
|
+
title: field.title,
|
|
510
|
+
key: field.path,
|
|
511
|
+
type: field.type,
|
|
512
|
+
})
|
|
513
|
+
}
|
|
211
514
|
})
|
|
212
515
|
|
|
213
516
|
|
|
517
|
+
|
|
518
|
+
/////////////////////////////////////
|
|
519
|
+
|
|
214
520
|
var activeFilters = this.activeFilters;
|
|
215
521
|
activeFilters.forEach(function(filter) {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
522
|
+
|
|
523
|
+
if (!existingColumns[filter.key]) {
|
|
524
|
+
existingColumns[filter.key] = 1;
|
|
525
|
+
columns.push({
|
|
526
|
+
title: filter.key,
|
|
527
|
+
key: filter.key,
|
|
528
|
+
})
|
|
529
|
+
}
|
|
220
530
|
})
|
|
221
531
|
|
|
532
|
+
/////////////////////////////////////
|
|
533
|
+
|
|
222
534
|
return columns;
|
|
223
535
|
},
|
|
224
|
-
pageField() {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
},
|
|
536
|
+
// pageField() {
|
|
537
|
+
// return {
|
|
538
|
+
// type: 'integer',
|
|
539
|
+
// maximum: 1,
|
|
540
|
+
// minimum: 1,
|
|
541
|
+
// options: Array(this.totalPages).fill(1).map((x, y) => x + y),
|
|
542
|
+
// }
|
|
543
|
+
// },
|
|
232
544
|
filterChangeString() {
|
|
233
545
|
var string = this.$qik.filter.filterChangeString(this.filter);
|
|
234
546
|
return string;
|
|
235
547
|
},
|
|
236
548
|
change() {
|
|
237
|
-
return `${JSON.stringify([this.page, this.sort, this.
|
|
238
|
-
},
|
|
239
|
-
startIndex() {
|
|
240
|
-
|
|
241
|
-
},
|
|
242
|
-
displayStartIndex() {
|
|
243
|
-
|
|
244
|
-
},
|
|
245
|
-
endIndex() {
|
|
246
|
-
|
|
247
|
-
},
|
|
549
|
+
return `${JSON.stringify([this.page, this.sort, this.keywords, this.selectFields, this.type, this.filterChangeString])}-${this.cacheKey}-${this.$qik.global.cacheKeys[this.type]}`;
|
|
550
|
+
},
|
|
551
|
+
// startIndex() {
|
|
552
|
+
// return (this.currentPage - 1) * this.page.size;
|
|
553
|
+
// },
|
|
554
|
+
// displayStartIndex() {
|
|
555
|
+
// return this.totalItems ? this.startIndex + 1 : 0;
|
|
556
|
+
// },
|
|
557
|
+
// endIndex() {
|
|
558
|
+
// return Math.min(this.startIndex + this.page.size, this.totalItems);
|
|
559
|
+
// },
|
|
248
560
|
items() {
|
|
249
561
|
return this.dataSource.items;
|
|
250
562
|
},
|
|
251
|
-
currentPage: {
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
563
|
+
// currentPage: {
|
|
564
|
+
// get() {
|
|
565
|
+
// return this.page.index;
|
|
566
|
+
// },
|
|
567
|
+
// set(index) {
|
|
256
568
|
|
|
257
569
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
570
|
+
// if (this.totalPages) {
|
|
571
|
+
// index = Math.min(this.totalPages, index);
|
|
572
|
+
// }
|
|
261
573
|
|
|
262
|
-
|
|
574
|
+
// index = Math.max(index, 1);
|
|
263
575
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
},
|
|
576
|
+
// return this.page.index = index;
|
|
577
|
+
// }
|
|
578
|
+
// },
|
|
267
579
|
totalItems() {
|
|
268
580
|
return this.dataSource.total;
|
|
269
581
|
},
|
|
270
|
-
totalPages() {
|
|
271
|
-
|
|
582
|
+
// totalPages() {
|
|
583
|
+
// return this.dataSource ? this.dataSource.page.total : 1;
|
|
272
584
|
|
|
273
|
-
},
|
|
585
|
+
// },
|
|
274
586
|
basicType() {
|
|
275
|
-
return this.definition.definesType || this.definition.key;
|
|
587
|
+
return this.definition ? this.definition.definesType || this.definition.key : this.type;
|
|
276
588
|
},
|
|
277
589
|
loadCriteria() {
|
|
278
590
|
|
|
279
591
|
var self = this;
|
|
280
592
|
var sort = self.sort;
|
|
281
|
-
var search = self.
|
|
593
|
+
var search = self.keywords;
|
|
282
594
|
var select = self.selectFields;
|
|
283
595
|
var page = self.page;
|
|
284
596
|
var filter = self.filter;
|
|
@@ -291,8 +603,30 @@ export default {
|
|
|
291
603
|
filter,
|
|
292
604
|
}
|
|
293
605
|
},
|
|
606
|
+
fieldEnabled() {
|
|
607
|
+
var self = this;
|
|
608
|
+
return self.columns.reduce(function(set, field) {
|
|
609
|
+
set[field.key] = true;
|
|
610
|
+
return set;
|
|
611
|
+
}, {})
|
|
612
|
+
},
|
|
294
613
|
},
|
|
295
614
|
methods: {
|
|
615
|
+
|
|
616
|
+
toggleField(field) {
|
|
617
|
+
|
|
618
|
+
var key = field.path;
|
|
619
|
+
|
|
620
|
+
var index = this.additionalFields.findIndex(function(f) {
|
|
621
|
+
return f.key == key;
|
|
622
|
+
})
|
|
623
|
+
|
|
624
|
+
if (index == -1) {
|
|
625
|
+
this.additionalFields.push(field);
|
|
626
|
+
} else {
|
|
627
|
+
this.additionalFields.splice(index, 1);
|
|
628
|
+
}
|
|
629
|
+
},
|
|
296
630
|
ensureMeta(row) {
|
|
297
631
|
if (!row.meta) {
|
|
298
632
|
row.meta = {}
|
|
@@ -303,6 +637,7 @@ export default {
|
|
|
303
637
|
return row;
|
|
304
638
|
},
|
|
305
639
|
deselectAll() {
|
|
640
|
+
|
|
306
641
|
this.manager.deselectAll();
|
|
307
642
|
},
|
|
308
643
|
async selectAll() {
|
|
@@ -320,44 +655,58 @@ export default {
|
|
|
320
655
|
});
|
|
321
656
|
|
|
322
657
|
//Set the selection to all items
|
|
323
|
-
console.log('Set Selection ALL', allItems)
|
|
324
658
|
self.manager.setSelection(allItems);
|
|
325
659
|
},
|
|
326
660
|
selectMultiple(rows) {
|
|
661
|
+
|
|
327
662
|
rows = rows.map(this.ensureMeta);
|
|
328
663
|
this.manager.selectMultiple(rows);
|
|
329
664
|
},
|
|
330
665
|
deselectMultiple(rows) {
|
|
666
|
+
|
|
331
667
|
rows = rows.map(this.ensureMeta);
|
|
332
668
|
this.manager.deselectMultiple(rows);
|
|
333
669
|
},
|
|
334
670
|
rowToggled(row) {
|
|
671
|
+
|
|
335
672
|
this.toggle(row);
|
|
336
673
|
},
|
|
337
674
|
rowClicked(row) {
|
|
675
|
+
|
|
676
|
+
console.log('CLICKED ROW')
|
|
338
677
|
this.$emit('click:row', row);
|
|
339
678
|
},
|
|
679
|
+
actionsClicked(row) {
|
|
680
|
+
|
|
681
|
+
this.$emit('click:actions', row);
|
|
682
|
+
},
|
|
340
683
|
select(row) {
|
|
684
|
+
|
|
341
685
|
this.ensureMeta(row);
|
|
342
686
|
this.manager.select(row);
|
|
343
687
|
},
|
|
344
688
|
deselect(row) {
|
|
689
|
+
|
|
345
690
|
this.manager.deselect(row);
|
|
346
691
|
},
|
|
347
692
|
isSelected(row) {
|
|
348
693
|
return this.manager.isSelected(row);
|
|
349
694
|
},
|
|
350
695
|
toggle(row) {
|
|
696
|
+
|
|
351
697
|
this.ensureMeta(row);
|
|
352
698
|
this.manager.toggle(row);
|
|
353
699
|
},
|
|
354
|
-
previousPage() {
|
|
355
|
-
|
|
356
|
-
},
|
|
357
|
-
nextPage() {
|
|
358
|
-
|
|
359
|
-
},
|
|
700
|
+
// previousPage() {
|
|
701
|
+
// this.currentPage--;
|
|
702
|
+
// },
|
|
703
|
+
// nextPage() {
|
|
704
|
+
// this.currentPage++;
|
|
705
|
+
// },
|
|
360
706
|
async load(includeAll) {
|
|
707
|
+
|
|
708
|
+
|
|
709
|
+
|
|
361
710
|
var self = this;
|
|
362
711
|
self.loading = true;
|
|
363
712
|
if (cancelInflight) {
|
|
@@ -366,7 +715,7 @@ export default {
|
|
|
366
715
|
}
|
|
367
716
|
|
|
368
717
|
var loadCriteria = Object.assign({}, self.loadCriteria);
|
|
369
|
-
loadCriteria.includeAll =
|
|
718
|
+
loadCriteria.includeAll = includeAll;
|
|
370
719
|
|
|
371
720
|
|
|
372
721
|
const { promise, cancel } = await self.$qik.content.list(self.type, loadCriteria, { cancellable: true })
|
|
@@ -418,17 +767,7 @@ export default {
|
|
|
418
767
|
definition: null,
|
|
419
768
|
manager,
|
|
420
769
|
loading: true,
|
|
421
|
-
|
|
422
|
-
// key: 'meta.updated',
|
|
423
|
-
// direction: 'dsc',
|
|
424
|
-
// type: 'date',
|
|
425
|
-
// },
|
|
426
|
-
sort: {
|
|
427
|
-
key: 'title',
|
|
428
|
-
direction: 'asc',
|
|
429
|
-
type: 'string',
|
|
430
|
-
},
|
|
431
|
-
|
|
770
|
+
additionalFields: [],
|
|
432
771
|
page: {
|
|
433
772
|
size: 50,
|
|
434
773
|
index: 1,
|
|
@@ -437,28 +776,29 @@ export default {
|
|
|
437
776
|
operator: 'and',
|
|
438
777
|
filters: [],
|
|
439
778
|
},
|
|
779
|
+
keywords: this.search,
|
|
440
780
|
dataSource: null,
|
|
441
|
-
perPageField: {
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
}
|
|
781
|
+
// perPageField: {
|
|
782
|
+
// minimum: 1,
|
|
783
|
+
// maximum: 1,
|
|
784
|
+
// options: [{
|
|
785
|
+
// title: '50 per page',
|
|
786
|
+
// value: 50,
|
|
787
|
+
// },
|
|
788
|
+
// {
|
|
789
|
+
// title: '100 per page',
|
|
790
|
+
// value: 100,
|
|
791
|
+
// },
|
|
792
|
+
// {
|
|
793
|
+
// title: '250 per page',
|
|
794
|
+
// value: 250,
|
|
795
|
+
// },
|
|
796
|
+
// {
|
|
797
|
+
// title: '500 per page',
|
|
798
|
+
// value: 500,
|
|
799
|
+
// },
|
|
800
|
+
// ]
|
|
801
|
+
// }
|
|
462
802
|
}
|
|
463
803
|
},
|
|
464
804
|
}
|
|
@@ -469,15 +809,27 @@ export default {
|
|
|
469
809
|
position: relative;
|
|
470
810
|
}
|
|
471
811
|
|
|
472
|
-
.body {
|
|
812
|
+
.browser-body {
|
|
473
813
|
&.loading {
|
|
474
814
|
opacity: 0.5;
|
|
475
815
|
}
|
|
476
816
|
}
|
|
477
817
|
|
|
478
818
|
.filter-column {
|
|
479
|
-
padding:1em;
|
|
819
|
+
padding: 1em;
|
|
480
820
|
background: rgba(#000, 0.1);
|
|
821
|
+
max-width: 500px;
|
|
822
|
+
width: 40%;
|
|
823
|
+
flex: none;
|
|
824
|
+
font-size: clamp(13px, 0.9em, 17px);
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
.empty {
|
|
828
|
+
background: rgba(#000, 0.05);
|
|
829
|
+
|
|
830
|
+
.panel {
|
|
831
|
+
background: #fff;
|
|
832
|
+
}
|
|
481
833
|
}
|
|
482
834
|
|
|
483
835
|
|
|
@@ -485,9 +837,6 @@ export default {
|
|
|
485
837
|
padding: 1em;
|
|
486
838
|
border-top: 1px solid rgba(#000, 0.1);
|
|
487
839
|
|
|
488
|
-
|
|
489
|
-
opacity: 0.5;
|
|
490
|
-
font-size: 0.8em;
|
|
491
|
-
}
|
|
840
|
+
|
|
492
841
|
}
|
|
493
842
|
</style>
|