@qikdev/vue-ui 0.0.5 → 0.1.6

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.
Files changed (84) hide show
  1. package/README.md +4 -89
  2. package/dist/favicon.ico +0 -0
  3. package/dist/index.css +1 -0
  4. package/dist/lib.es.js +17781 -0
  5. package/dist/lib.es.js.map +1 -0
  6. package/dist/lib.umd.js +9 -0
  7. package/dist/lib.umd.js.map +1 -0
  8. package/package.json +31 -24
  9. package/.gitlab-ci.yml +0 -13
  10. package/jsdoc.conf +0 -10
  11. package/src/components.js +0 -227
  12. package/src/content/browser.vue +0 -493
  13. package/src/content/item.vue +0 -48
  14. package/src/content/render/field.vue +0 -423
  15. package/src/content/render/group.vue +0 -65
  16. package/src/content/render/render-mixin.js +0 -101
  17. package/src/content/render/render.vue +0 -86
  18. package/src/filter/FilterBuilder.vue +0 -144
  19. package/src/filter/FilterCondition.vue +0 -335
  20. package/src/filter/FilterRule.vue +0 -257
  21. package/src/form/expressions/index.js +0 -83
  22. package/src/form/field.vue +0 -634
  23. package/src/form/form.vue +0 -280
  24. package/src/form/getDefaultValue.js +0 -224
  25. package/src/form/inputs/button-select.vue +0 -208
  26. package/src/form/inputs/checkbox.vue +0 -91
  27. package/src/form/inputs/content-select.vue +0 -187
  28. package/src/form/inputs/currency.vue +0 -205
  29. package/src/form/inputs/datefield.vue +0 -132
  30. package/src/form/inputs/group.vue +0 -155
  31. package/src/form/inputs/input-mixin.js +0 -440
  32. package/src/form/inputs/native-select-old.vue +0 -43
  33. package/src/form/inputs/object-field.vue +0 -50
  34. package/src/form/inputs/option.vue +0 -19
  35. package/src/form/inputs/options-manager.vue +0 -244
  36. package/src/form/inputs/phone-number-input.vue +0 -235
  37. package/src/form/inputs/search.vue +0 -117
  38. package/src/form/inputs/select.vue +0 -211
  39. package/src/form/inputs/switch.vue +0 -87
  40. package/src/form/inputs/textarea.vue +0 -80
  41. package/src/form/inputs/textfield.vue +0 -185
  42. package/src/form/inputs/timezone.vue +0 -642
  43. package/src/form/inputs/type-select.vue +0 -247
  44. package/src/form/inputs/upload/filedrop.vue +0 -72
  45. package/src/form/inputs/upload/upload.vue +0 -323
  46. package/src/form/parseBoolean.js +0 -24
  47. package/src/layout/flex-body.vue +0 -23
  48. package/src/layout/flex-cell.vue +0 -45
  49. package/src/layout/flex-column.vue +0 -31
  50. package/src/layout/flex-footer.vue +0 -14
  51. package/src/layout/flex-header.vue +0 -14
  52. package/src/layout/flex-row.vue +0 -39
  53. package/src/layout/flex-spacer.vue +0 -17
  54. package/src/layout/panel-body.vue +0 -13
  55. package/src/layout/panel-footer.vue +0 -20
  56. package/src/layout/panel-header.vue +0 -20
  57. package/src/layout/panel.vue +0 -23
  58. package/src/modal/ConfirmModal.vue +0 -50
  59. package/src/modal/ContentModal.vue +0 -98
  60. package/src/modal/Modal.vue +0 -85
  61. package/src/modal/ModalMixin.js +0 -21
  62. package/src/modal/OptionsModal.vue +0 -31
  63. package/src/modal/PromptModal.vue +0 -31
  64. package/src/services/selection.js +0 -140
  65. package/src/table/Table.vue +0 -269
  66. package/src/table/TableCell.vue +0 -64
  67. package/src/table/TableRow.vue +0 -94
  68. package/src/table/cells/TableCellMixin.js +0 -15
  69. package/src/table/cells/Thumbnail.vue +0 -38
  70. package/src/ui/button.vue +0 -255
  71. package/src/ui/checkbox.vue +0 -79
  72. package/src/ui/icon.vue +0 -57
  73. package/src/ui/image.vue +0 -158
  74. package/src/ui/link.vue +0 -62
  75. package/src/ui/list-item.vue +0 -16
  76. package/src/ui/list.vue +0 -26
  77. package/src/ui/menu.vue +0 -135
  78. package/src/ui/progressbar.vue +0 -77
  79. package/src/ui/spinner.vue +0 -26
  80. package/src/ui/switch.vue +0 -89
  81. package/src/version.js +0 -1
  82. package/test/index.spec.js +0 -42
  83. package/test/mocha.opts +0 -0
  84. package/yarn-error.log +0 -2923
@@ -1,493 +0,0 @@
1
- <template>
2
- <flex-column class="content-browser" v-if="definition">
3
- <spinner large v-if="loading" />
4
- <template v-if="dataSource">
5
- <flex-column class="body" :class="{loading}">
6
- <flex-row>
7
- <flex-cell flex>
8
- <native-table :total="totalItems" :selectAll="selectAll" :deselectAll="deselectAllFunction" :actions="false" :selection="manager.items" @click:row="rowClicked" @select:row:toggle="rowToggled" @select:multiple="selectMultiple" @deselect:multiple="deselectMultiple" :rows="items" :columns="columns" />
9
- </flex-cell>
10
- <flex-column class="filter-column" style="max-width: 600px;" v-if="showFilters">
11
- <flex-body>
12
- <search v-model="search" :loading="searching" :debounce="500" placeholder="Keyword Search" />
13
-
14
-
15
- <p></p>
16
-
17
-
18
-
19
- <filter-builder :definition="definition" v-model="filter" />
20
- </flex-body>
21
- </flex-column>
22
- </flex-row>
23
- </flex-column>
24
- <flex-footer>
25
- <div class="footer">
26
- <flex-row center gap >
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>
54
- </div>
55
- </flex-footer>
56
- </template>
57
- </flex-column>
58
- </template>
59
- <script>
60
- import NativeSelect from '../form/inputs/select.vue';
61
- import NativeTable from '../table/Table.vue';
62
-
63
- import FilterBuilder from '../filter/FilterBuilder.vue';
64
- import Selection from '../services/selection.js';
65
- import Search from '../form/inputs/search.vue';
66
-
67
-
68
- // import FilterRule from '../filter/FilterRule.vue';
69
-
70
- let cancelInflight;
71
-
72
-
73
- export default {
74
- props: {
75
- type: {
76
- type: String,
77
- required: true,
78
- },
79
- showFilters:{
80
- type:Boolean,
81
- },
82
- search: {
83
- type: String,
84
- },
85
- options: {
86
- type: Object,
87
- default () {
88
- return {}
89
- }
90
- },
91
- cacheKey: {
92
- type: String,
93
- },
94
- modelValue: {
95
- type: Array,
96
- default () {
97
- return [];
98
- }
99
- },
100
- maximum: {
101
- type: Number,
102
- default () {
103
- return 0;
104
- }
105
- },
106
- selectionManager: {
107
- type: Object,
108
- }
109
- },
110
- components: {
111
- NativeSelect,
112
- NativeTable,
113
- FilterBuilder,
114
- Search,
115
- // FilterRule,
116
- },
117
- async created() {
118
-
119
- var self = this;
120
-
121
- //Get the type details
122
- await Promise.all([
123
- new Promise(async function(resolve, reject) {
124
- var glossary = await self.$qik.content.glossary({ hash: true });
125
- var definition = glossary[self.type]
126
- self.definition = definition;
127
-
128
-
129
- if (!definition) {
130
- return reject();
131
- }
132
- resolve();
133
- }),
134
- new Promise(async function(resolve, reject) {
135
-
136
- var dataSource = await self.load();
137
- self.dataSource = dataSource;
138
- resolve();
139
- }),
140
- ]);
141
- },
142
- watch: {
143
- async change() {
144
- this.dataSource = await this.load();
145
- },
146
- loading() {
147
- this.$emit('loading', this.loading)
148
- },
149
- totalPages() {
150
- this.currentPage = 0;
151
- },
152
- selectedItems(items) {
153
- this.$emit('update:modelValue', items);
154
- },
155
- },
156
- computed: {
157
- deselectAllFunction() {
158
- return this.manager.items.length ? this.deselectAll : null;
159
- },
160
-
161
- selectedItems() {
162
- return this.manager.items.slice();
163
- },
164
- activeFilters() {
165
- var activeFilters = this.$qik.filter.activeFilters(this.filter);
166
- return activeFilters;
167
- },
168
- searching() {
169
- return this.loading && this.search.length;
170
- },
171
- title() {
172
- return this.definition.title;
173
- },
174
- plural() {
175
- return this.definition.plural;
176
- },
177
- perPage: {
178
- get() {
179
- return this.page.size;
180
- },
181
- set(i) {
182
- i = Math.max(i, 1);
183
- this.page.size = i;
184
- }
185
-
186
- },
187
- selectFields() {
188
- return this.columns.map(function(column) {
189
- if (column.fields) {
190
- return [column.key, ...column.fields];
191
- }
192
- return column.key;
193
-
194
- }).flat()
195
- },
196
- columns() {
197
-
198
- let columns = [];
199
-
200
- columns.push({
201
- title: '',
202
- key: '_id',
203
- renderer: 'thumbnail',
204
- shrink: true,
205
- fields: ['width', 'height', 'fileMeta.colors.colors[0]'],
206
- })
207
-
208
- columns.push({
209
- title: 'Title',
210
- key: 'title',
211
- })
212
-
213
-
214
- var activeFilters = this.activeFilters;
215
- activeFilters.forEach(function(filter) {
216
- columns.push({
217
- title: filter.key,
218
- key: filter.key,
219
- })
220
- })
221
-
222
- return columns;
223
- },
224
- pageField() {
225
- return {
226
- type: 'integer',
227
- maximum: 1,
228
- minimum: 1,
229
- options: Array(this.totalPages).fill(1).map((x, y) => x + y),
230
- }
231
- },
232
- filterChangeString() {
233
- var string = this.$qik.filter.filterChangeString(this.filter);
234
- return string;
235
- },
236
- change() {
237
- return `${JSON.stringify([this.page, this.sort, this.search, this.selectFields, this.type, this.filterChangeString])}-${this.cacheKey}`;
238
- },
239
- startIndex() {
240
- return (this.currentPage - 1) * this.page.size;
241
- },
242
- displayStartIndex() {
243
- return this.totalItems ? this.startIndex + 1 : 0;
244
- },
245
- endIndex() {
246
- return Math.min(this.startIndex + this.page.size, this.totalItems);
247
- },
248
- items() {
249
- return this.dataSource.items;
250
- },
251
- currentPage: {
252
- get() {
253
- return this.page.index;
254
- },
255
- set(index) {
256
-
257
-
258
- if (this.totalPages) {
259
- index = Math.min(this.totalPages, index);
260
- }
261
-
262
- index = Math.max(index, 1);
263
-
264
- return this.page.index = index;
265
- }
266
- },
267
- totalItems() {
268
- return this.dataSource.total;
269
- },
270
- totalPages() {
271
- return this.dataSource ? this.dataSource.page.total : 1;
272
-
273
- },
274
- basicType() {
275
- return this.definition.definesType || this.definition.key;
276
- },
277
- loadCriteria() {
278
-
279
- var self = this;
280
- var sort = self.sort;
281
- var search = self.search;
282
- var select = self.selectFields;
283
- var page = self.page;
284
- var filter = self.filter;
285
-
286
- return {
287
- sort,
288
- search,
289
- select,
290
- page,
291
- filter,
292
- }
293
- },
294
- },
295
- methods: {
296
- ensureMeta(row) {
297
- if (!row.meta) {
298
- row.meta = {}
299
- }
300
-
301
- row.meta.type = this.basicType;
302
- row.meta.definition = this.definition.key;
303
- return row;
304
- },
305
- deselectAll() {
306
- this.manager.deselectAll();
307
- },
308
- async selectAll() {
309
-
310
- //Load all items
311
- var self = this;
312
-
313
- //Load all the item ids and
314
- self.dataSource = await self.load(true);
315
-
316
- //Create rows for all of them
317
- var allItems = this.dataSource.all.map(function(_id) {
318
- var row = self.ensureMeta({ _id });
319
- return row;
320
- });
321
-
322
- //Set the selection to all items
323
- console.log('Set Selection ALL', allItems)
324
- self.manager.setSelection(allItems);
325
- },
326
- selectMultiple(rows) {
327
- rows = rows.map(this.ensureMeta);
328
- this.manager.selectMultiple(rows);
329
- },
330
- deselectMultiple(rows) {
331
- rows = rows.map(this.ensureMeta);
332
- this.manager.deselectMultiple(rows);
333
- },
334
- rowToggled(row) {
335
- this.toggle(row);
336
- },
337
- rowClicked(row) {
338
- this.$emit('click:row', row);
339
- },
340
- select(row) {
341
- this.ensureMeta(row);
342
- this.manager.select(row);
343
- },
344
- deselect(row) {
345
- this.manager.deselect(row);
346
- },
347
- isSelected(row) {
348
- return this.manager.isSelected(row);
349
- },
350
- toggle(row) {
351
- this.ensureMeta(row);
352
- this.manager.toggle(row);
353
- },
354
- previousPage() {
355
- this.currentPage--;
356
- },
357
- nextPage() {
358
- this.currentPage++;
359
- },
360
- async load(includeAll) {
361
- var self = this;
362
- self.loading = true;
363
- if (cancelInflight) {
364
- cancelInflight();
365
- cancelInflight = null;
366
- }
367
-
368
- var loadCriteria = Object.assign({}, self.loadCriteria);
369
- loadCriteria.includeAll = true;
370
-
371
-
372
- const { promise, cancel } = await self.$qik.content.list(self.type, loadCriteria, { cancellable: true })
373
-
374
- cancelInflight = cancel;
375
-
376
- promise.then(function(res) {
377
- self.loading = false;
378
- })
379
- promise.catch(function(err) {
380
- // self.loading = false;
381
- });
382
-
383
-
384
- const { data } = await promise;
385
-
386
-
387
- data.items.forEach(self.ensureMeta);
388
- // function(item) {
389
- // if (!item.meta) {
390
- // item.meta = {}
391
- // }
392
- // item.meta.type = self.definition.definesType || self.definition.key;
393
- // item.meta.definition = self.definition.definesType ? self.definition.key : null;
394
- // })
395
-
396
- return data;
397
-
398
-
399
-
400
-
401
- },
402
- },
403
- data() {
404
-
405
- var manager = this.selectionManager;
406
- if (!manager) {
407
- manager = new Selection({ minimum: this.minimum, maximum: this.maximum });
408
- }
409
-
410
- //Set the initial selection
411
- if (this.modelValue) {
412
- manager.setSelection(this.modelValue);
413
- }
414
-
415
- ////////////////////////////////////
416
-
417
- return {
418
- definition: null,
419
- manager,
420
- loading: true,
421
- // sort: {
422
- // key: 'meta.updated',
423
- // direction: 'dsc',
424
- // type: 'date',
425
- // },
426
- sort: {
427
- key: 'title',
428
- direction: 'asc',
429
- type: 'string',
430
- },
431
-
432
- page: {
433
- size: 50,
434
- index: 1,
435
- },
436
- filter: {
437
- operator: 'and',
438
- filters: [],
439
- },
440
- dataSource: null,
441
- perPageField: {
442
- minimum: 1,
443
- maximum: 1,
444
- options: [{
445
- title: '50 per page',
446
- value: 50,
447
- },
448
- {
449
- title: '100 per page',
450
- value: 100,
451
- },
452
- {
453
- title: '250 per page',
454
- value: 250,
455
- },
456
- {
457
- title: '500 per page',
458
- value: 500,
459
- },
460
- ]
461
- }
462
- }
463
- },
464
- }
465
- </script>
466
- <style lang="scss" scoped>
467
- .content-browser {
468
- background: #fff;
469
- position: relative;
470
- }
471
-
472
- .body {
473
- &.loading {
474
- opacity: 0.5;
475
- }
476
- }
477
-
478
- .filter-column {
479
- padding:1em;
480
- background: rgba(#000, 0.1);
481
- }
482
-
483
-
484
- .footer {
485
- padding: 1em;
486
- border-top: 1px solid rgba(#000, 0.1);
487
-
488
- .text {
489
- opacity: 0.5;
490
- font-size: 0.8em;
491
- }
492
- }
493
- </style>
@@ -1,48 +0,0 @@
1
- <template>
2
- <div class="content-item" @click="clicked">
3
- <flex-row>
4
- <flex-cell shrink>
5
- </flex-cell>
6
- <flex-cell vcenter>
7
- <slot>
8
- {{title}}
9
- </slot>
10
- </flex-cell>
11
- <flex-cell shrink>
12
- <slot name="actions"></slot>
13
- </flex-cell>
14
- </flex-row>
15
- </div>
16
- </template>
17
- <script>
18
- export default {
19
- props: {
20
- item: {
21
- type: Object,
22
- required: true,
23
- },
24
- },
25
- computed: {
26
- title() {
27
- return this.item.title || this.item.name || this.item.label;
28
- }
29
- },
30
- methods:{
31
- clicked() {
32
- this.$qik.dispatch('item:view', this.item);
33
- }
34
- }
35
- }
36
- </script>
37
- <style lang="scss" scoped>
38
- .content-item {
39
- padding: 0.8em;
40
- border: 1px solid rgba(#000, 0.1);
41
- background: #fff;
42
- cursor: pointer;
43
-
44
- &:hover {
45
- background: rgba(#000, 0.03);
46
- }
47
- }
48
- </style>