@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.
@@ -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-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>
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
- <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>
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
- // import FilterRule from '../filter/FilterRule.vue';
79
+ function defaultColumns(self, type) {
69
80
 
70
- let cancelInflight;
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.search.length;
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
- get() {
179
- return this.page.size;
180
- },
181
- set(i) {
182
- i = Math.max(i, 1);
183
- this.page.size = i;
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.push({
209
- title: 'Title',
210
- key: 'title',
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
- columns.push({
217
- title: filter.key,
218
- key: filter.key,
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
- return {
226
- type: 'integer',
227
- maximum: 1,
228
- minimum: 1,
229
- options: Array(this.totalPages).fill(1).map((x, y) => x + y),
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.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
- },
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
- get() {
253
- return this.page.index;
254
- },
255
- set(index) {
563
+ // currentPage: {
564
+ // get() {
565
+ // return this.page.index;
566
+ // },
567
+ // set(index) {
256
568
 
257
569
 
258
- if (this.totalPages) {
259
- index = Math.min(this.totalPages, index);
260
- }
570
+ // if (this.totalPages) {
571
+ // index = Math.min(this.totalPages, index);
572
+ // }
261
573
 
262
- index = Math.max(index, 1);
574
+ // index = Math.max(index, 1);
263
575
 
264
- return this.page.index = index;
265
- }
266
- },
576
+ // return this.page.index = index;
577
+ // }
578
+ // },
267
579
  totalItems() {
268
580
  return this.dataSource.total;
269
581
  },
270
- totalPages() {
271
- return this.dataSource ? this.dataSource.page.total : 1;
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.search;
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
- this.currentPage--;
356
- },
357
- nextPage() {
358
- this.currentPage++;
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 = true;
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
- // 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
-
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
- 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
- }
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
- .text {
489
- opacity: 0.5;
490
- font-size: 0.8em;
491
- }
840
+
492
841
  }
493
842
  </style>