quasar-factory-lib 0.0.78 → 0.0.80

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 (31) hide show
  1. package/dist/components/Alert/AlertDialog.vue.d.ts +1 -1
  2. package/dist/components/Table/Table.vue.d.ts +73 -6
  3. package/dist/components/Table/components/TableSlotHeader.vue.d.ts +70 -4
  4. package/dist/components/Table/components/advanced-filters/DateTimeFilter.vue.d.ts +25 -0
  5. package/dist/components/Table/components/{AdvancedFilters → advanced-filters}/GridAdvancedFilters.vue.d.ts +37 -3
  6. package/dist/components/Table/components/{AdvancedFilters/AdvancedFilters.vue.d.ts → advanced-filters/TableAdvancedFilters.vue.d.ts} +32 -0
  7. package/dist/layouts/PdaLayout.vue.d.ts +75 -6
  8. package/dist/pages/AlertPage.vue.d.ts +1 -1
  9. package/dist/pages/TablePage.vue.d.ts +74 -6
  10. package/dist/quasar-factory-lib.js +4138 -4018
  11. package/dist/quasar-factory-lib.umd.cjs +11 -11
  12. package/dist/style.css +1 -1
  13. package/package.json +1 -1
  14. package/src/components/Table/Table.vue +2 -2
  15. package/src/components/Table/components/TableSlotHeader.vue +7 -5
  16. package/src/components/Table/components/{AdvancedFilters → advanced-filters}/DateFilter.vue +1 -1
  17. package/src/components/Table/components/advanced-filters/DateTimeFilter.vue +98 -0
  18. package/src/components/Table/components/{AdvancedFilters → advanced-filters}/GridAdvancedFilters.vue +22 -15
  19. package/src/components/Table/components/{AdvancedFilters/AdvancedFilters.vue → advanced-filters/TableAdvancedFilters.vue} +16 -5
  20. package/src/components/Table/components/{AdvancedFilters → advanced-filters}/TimeFilter.vue +4 -2
  21. package/src/components/Table/css/table.css +9 -1
  22. package/src/layouts/PdaLayout.vue +9 -0
  23. package/src/pages/TablePage.vue +23 -3
  24. /package/dist/components/Table/components/{AdvancedFilters → advanced-filters}/CheckBoxFilter.vue.d.ts +0 -0
  25. /package/dist/components/Table/components/{AdvancedFilters → advanced-filters}/DateFilter.vue.d.ts +0 -0
  26. /package/dist/components/Table/components/{AdvancedFilters → advanced-filters}/NumberFilter.vue.d.ts +0 -0
  27. /package/dist/components/Table/components/{AdvancedFilters → advanced-filters}/TextFilter.vue.d.ts +0 -0
  28. /package/dist/components/Table/components/{AdvancedFilters → advanced-filters}/TimeFilter.vue.d.ts +0 -0
  29. /package/src/components/Table/components/{AdvancedFilters → advanced-filters}/CheckBoxFilter.vue +0 -0
  30. /package/src/components/Table/components/{AdvancedFilters → advanced-filters}/NumberFilter.vue +0 -0
  31. /package/src/components/Table/components/{AdvancedFilters → advanced-filters}/TextFilter.vue +0 -0
package/package.json CHANGED
@@ -97,6 +97,6 @@
97
97
  "release": "standard-version"
98
98
  },
99
99
  "type": "module",
100
- "version": "0.0.78",
100
+ "version": "0.0.80",
101
101
  "author": ""
102
102
  }
@@ -209,7 +209,7 @@ export default defineComponent({
209
209
  },
210
210
  advancedFilters: {
211
211
  type: Object,
212
- required: true,
212
+ default: () => ({}),
213
213
  deep: true
214
214
  },
215
215
  showIconAdvancedFilter: {
@@ -249,7 +249,7 @@ export default defineComponent({
249
249
  totalPage: 0,
250
250
  pageSize: 20,
251
251
  filteredRows: [] as object [] | [],
252
- showAdvancedFilter: false,
252
+ showAdvancedFilter: true,
253
253
  advancedFiltersData: this.advancedFilters
254
254
  }
255
255
  },
@@ -21,24 +21,26 @@
21
21
  {{ col.label }}
22
22
  </q-th>
23
23
  </q-tr>
24
- <AdvancedFilters
24
+ <TableAdvancedFilters
25
25
  v-if="showAdvancedFilter && !smallDevice"
26
26
  :tableProps="tablePropsData"
27
27
  :advancedFilters="advancedFilters"
28
+ :selectionType="selectionType"
28
29
  />
29
30
  <GridAdvancedFilters
30
31
  v-if="showAdvancedFilter && smallDevice"
32
+ :sho-advanced-filter="showAdvancedFilter"
31
33
  :tableProps="tablePropsData"
32
34
  :advancedFilters="advancedFilters"
33
35
  />
34
36
  </template>
35
37
  <script lang="ts">
36
- import AdvancedFilters from './AdvancedFilters/AdvancedFilters.vue'
37
- import GridAdvancedFilters from './AdvancedFilters/GridAdvancedFilters.vue'
38
+ import TableAdvancedFilters from './advanced-filters/TableAdvancedFilters.vue'
39
+ import GridAdvancedFilters from './advanced-filters/GridAdvancedFilters.vue'
38
40
  export default {
39
41
  name: 'TableSlotHeader',
40
42
  components: {
41
- AdvancedFilters,
43
+ TableAdvancedFilters,
42
44
  GridAdvancedFilters
43
45
  },
44
46
  props: {
@@ -61,7 +63,7 @@ export default {
61
63
  advancedFilters: {
62
64
  type: Object,
63
65
  required: true
64
- }
66
+ },
65
67
  },
66
68
  data () {
67
69
  return {
@@ -6,6 +6,7 @@
6
6
  debounce="200"
7
7
  :label="col.label"
8
8
  :placeholder="'DD/MM/YYYY'"
9
+ mask="##/##/####"
9
10
  clearable
10
11
  dense
11
12
  :disable="col.disable"
@@ -25,7 +26,6 @@
25
26
  >
26
27
  <q-date
27
28
  v-model:model-value="advancedFilters[col.name]"
28
- required=""
29
29
  mask="DD/MM/YYYY"
30
30
  flat
31
31
  square
@@ -0,0 +1,98 @@
1
+ <template>
2
+ <q-input
3
+ v-model="advancedFilters[col.name]"
4
+ filled
5
+ :data-cy="col.name + 'date-time-filter'"
6
+ debounce="200"
7
+ :label="col.label"
8
+ placeholder="DD/MM/YYYY HH:mm:ss"
9
+ mask="##/##/#### ##:##:##"
10
+ clearable
11
+ dense
12
+ :disable="col.disable"
13
+ style="min-width: 220px;"
14
+ >
15
+ <template #append>
16
+ <q-icon
17
+ name="event_note"
18
+ class="cursor-pointer"
19
+ :data-cy="col.name + 'date-time-button-filter'"
20
+ size="sm"
21
+ >
22
+ <q-popup-proxy
23
+ ref="popup"
24
+ cover
25
+ transition-show="scale"
26
+ transition-hide="scale"
27
+ >
28
+ <div class="column q-gutter-sm">
29
+ <q-date
30
+ v-model="tempDate"
31
+ flat
32
+ square
33
+ mask="DD/MM/YYYY"
34
+ />
35
+ <q-time
36
+ v-model="tempTime"
37
+ format24h
38
+ with-seconds
39
+ flat
40
+ square
41
+ />
42
+ <q-btn label="OK" color="primary" @click="applyDateTime(col.name)" />
43
+ </div>
44
+ </q-popup-proxy>
45
+ </q-icon>
46
+ </template>
47
+ </q-input>
48
+ </template>
49
+ <script lang="ts">
50
+ import { date } from 'quasar'
51
+
52
+ export default {
53
+ name: 'DateTimeFilter',
54
+ props: {
55
+ col: {
56
+ type: Object,
57
+ required: true
58
+ },
59
+ advancedFilters: {
60
+ type: Object,
61
+ required: true
62
+ }
63
+ },
64
+ data() {
65
+ return {
66
+ tempDate: '',
67
+ tempTime: ''
68
+ }
69
+ },
70
+ watch: {
71
+ 'advancedFilters[col.name]': {
72
+ immediate: true,
73
+ handler(newVal) {
74
+ if (newVal) {
75
+ const [d, t] = newVal.split(' ')
76
+ const parsedDate = date.extractDate(d, 'DD/MM/YYYY')
77
+ if (parsedDate) {
78
+ this.tempDate = date.formatDate(parsedDate, 'YYYY-MM-DD')
79
+ this.tempTime = t || ''
80
+ }
81
+ }
82
+ }
83
+ }
84
+ },
85
+ methods: {
86
+ applyDateTime(field) {
87
+ if (this.tempDate && this.tempTime) {
88
+ const combined = `${this.tempDate} ${this.tempTime}`
89
+ const formatted = date.formatDate(combined, 'DD/MM/YYYY HH:mm:ss')
90
+ this.advancedFilters[field] = formatted
91
+ this.$refs.popup.hide()
92
+ }
93
+ }
94
+ }
95
+ }
96
+ </script>
97
+ <style scoped>
98
+ </style>
@@ -1,17 +1,9 @@
1
1
  <template>
2
- <q-dialog
3
- v-model="showDialog"
4
- persistent
5
- seamless
6
- :position="'bottom'"
7
- full-width
8
- transition-show="slide-up"
9
- transition-hide="slide-down">
10
- <q-card id="card-advanced-filters">
2
+ <q-card v-if="showDialog" style="z-index: 1000">
11
3
  <q-bar/>
12
4
  <q-card-section style="max-height: 50vh" class="scroll">
13
5
  <div class="row">
14
- <div v-for="col in nonBooleanCols" class="col-xs-6 col-sm-4 col-md-3 q-px-xs q-py-xs"
6
+ <div v-for="col in otherCols" class="col-xs-6 col-sm-4 col-md-3 q-px-xs q-py-xs"
15
7
  :key="col.label">
16
8
 
17
9
  <TextFilter
@@ -35,6 +27,14 @@
35
27
  :col="col"
36
28
  />
37
29
  </div>
30
+ <div v-for="col in dateTimeCols" class="col-xs-12 col-sm-6 col-md-3 q-px-xs q-py-xs"
31
+ :key="col.label">
32
+ <DateTimeFilter
33
+ v-if="col.type === 'dateTime'"
34
+ :advancedFilters="advancedFilters"
35
+ :col="col"
36
+ />
37
+ </div>
38
38
  <div v-for="col in booleanCols" class="col-xs-6 col-sm-4 col-md-3 q-px-xs q-py-xs"
39
39
  :key="col.label">
40
40
  <CheckBoxFilter
@@ -46,7 +46,6 @@
46
46
  </div>
47
47
  </q-card-section>
48
48
  </q-card>
49
- </q-dialog>
50
49
  </template>
51
50
  <script lang="ts">
52
51
  import TextFilter from './TextFilter.vue'
@@ -54,6 +53,7 @@ import CheckBoxFilter from './CheckBoxFilter.vue'
54
53
  import NumberFilter from './NumberFilter.vue'
55
54
  import DateFilter from './DateFilter.vue'
56
55
  import TimeFilter from './TimeFilter.vue'
56
+ import DateTimeFilter from './DateTimeFilter.vue'
57
57
 
58
58
  export default {
59
59
  name: 'GridAdvancedFilters',
@@ -62,7 +62,8 @@ export default {
62
62
  CheckBoxFilter,
63
63
  NumberFilter,
64
64
  DateFilter,
65
- TimeFilter
65
+ TimeFilter,
66
+ DateTimeFilter
66
67
  },
67
68
  props: {
68
69
  tableProps: {
@@ -72,19 +73,25 @@ export default {
72
73
  advancedFilters: {
73
74
  type: Object,
74
75
  required: true
76
+ },
77
+ showAdvancedFilter: {
78
+ type: Boolean,
79
+ default: false
75
80
  }
76
81
  },
77
82
  data () {
78
83
  return {
79
- showDialog: true,
80
- maximizedToggle: false
84
+ showDialog: true
81
85
  }
82
86
  },
83
87
  computed: {
84
88
  booleanCols () {
85
89
  return this.tableProps.cols.filter(col => col.type === 'boolean' && !col.disable);
86
90
  },
87
- nonBooleanCols () {
91
+ dateTimeCols () {
92
+ return this.tableProps.cols.filter(col => col.type === 'dateTime' && !col.disable);
93
+ },
94
+ otherCols () {
88
95
  return this.tableProps.cols.filter(col => col.type !== 'boolean' && !col.disable);
89
96
  }
90
97
  }
@@ -1,7 +1,8 @@
1
1
  <template>
2
2
  <q-tr
3
+ class="tr-headerFilter"
3
4
  >
4
- <q-th v-if="tableProps.selection !== 'none'" />
5
+ <q-th v-if="selectionType!== 'none'" />
5
6
  <q-th
6
7
  v-for="col in tableProps.cols"
7
8
  :key="col.name"
@@ -16,7 +17,7 @@
16
17
  "
17
18
  >
18
19
  <TextFilter
19
- v-if="col.type === 'string' || col.type === 'textarea' || col.type === 'dateTime'"
20
+ v-if="col.type === 'string' || col.type === 'textarea'"
20
21
  :advancedFilters="advancedFilters"
21
22
  :col="col"
22
23
  />
@@ -41,6 +42,11 @@
41
42
  :advancedFilters="advancedFilters"
42
43
  :col="col"
43
44
  />
45
+ <DateTimeFilter
46
+ v-if="col.type === 'dateTime'"
47
+ :advancedFilters="advancedFilters"
48
+ :col="col"
49
+ />
44
50
  </div>
45
51
  </q-th>
46
52
  </q-tr>
@@ -51,15 +57,16 @@ import CheckBoxFilter from './CheckBoxFilter.vue'
51
57
  import NumberFilter from './NumberFilter.vue'
52
58
  import DateFilter from './DateFilter.vue'
53
59
  import TimeFilter from './TimeFilter.vue'
54
-
60
+ import DateTimeFilter from './DateTimeFilter.vue'
55
61
  export default {
56
- name: 'AdvancedFilters',
62
+ name: 'TableAdvancedFilters',
57
63
  components: {
58
64
  TextFilter,
59
65
  CheckBoxFilter,
60
66
  NumberFilter,
61
67
  DateFilter,
62
- TimeFilter
68
+ TimeFilter,
69
+ DateTimeFilter
63
70
  },
64
71
  props: {
65
72
  tableProps: {
@@ -69,6 +76,10 @@ export default {
69
76
  advancedFilters: {
70
77
  type: Object,
71
78
  required: true
79
+ },
80
+ selectionType: {
81
+ type: String,
82
+ required: true
72
83
  }
73
84
  }
74
85
  }
@@ -7,6 +7,7 @@
7
7
  debounce="200"
8
8
  :label="col.label"
9
9
  :placeholder="'HH:mm:ss'"
10
+ mask="##:##:##"
10
11
  clearable
11
12
  style="min-width: 150px;"
12
13
  :disable="col.disable"
@@ -16,7 +17,7 @@
16
17
  name="schedule"
17
18
  class="cursor-pointer"
18
19
  :data-cy="col.name + 'time-button-filter'"
19
- size="md"
20
+ size="sm"
20
21
  >
21
22
  <q-popup-proxy
22
23
  cover
@@ -29,6 +30,7 @@
29
30
  format24h
30
31
  flat
31
32
  square
33
+ :mask="'HH:mm:ss'"
32
34
  >
33
35
  <div class="row items-center justify-end">
34
36
  <q-btn
@@ -38,7 +40,7 @@
38
40
  flat
39
41
  />
40
42
  </div>
41
- </q-time>
43
+ </q-time>
42
44
  </q-popup-proxy>
43
45
  </q-icon>
44
46
  </template>
@@ -25,7 +25,6 @@
25
25
  top: 0;
26
26
  z-index: 1;
27
27
  }
28
-
29
28
  .my-table tr:first-child th:first-child {
30
29
  /* highest z-index */
31
30
  z-index: 3;
@@ -38,6 +37,15 @@
38
37
  position: sticky;
39
38
  left: 0;
40
39
  }
40
+ .my-table thead .tr-headerFilter th:first-child {
41
+ z-index: 35;
42
+ position: sticky;
43
+ left: 0;
44
+ }
45
+
46
+ .my-table thead .tr-headerfilter th {
47
+ z-index: 1 !important;
48
+ }
41
49
  .my-table tbody {
42
50
  /* height of all previous header rows */
43
51
  scroll-margin-top: 48px;
@@ -43,6 +43,8 @@
43
43
  :table-style="tableStyle"
44
44
  :show-skeleton="showSkeleton"
45
45
  :selection-type="'multiple'"
46
+ :advanced-filters="advancedFilters"
47
+ :show-icon-advanced-filter="true"
46
48
  @on-select-visible-columns="(columns) => {
47
49
  store.visiblecolumns = columns
48
50
  }"
@@ -87,6 +89,7 @@ export default {
87
89
  tabletMaxWidth: 1100,
88
90
  store: tableStore(),
89
91
  tableStyle: '',
92
+ advancedFilters: {},
90
93
  columns: [{
91
94
  name: 'name',
92
95
  required: true,
@@ -420,6 +423,12 @@ export default {
420
423
  icon: 'cancel',
421
424
  spinner: false
422
425
  })
426
+ },
427
+ getAdvancedFilterColumns (): void {
428
+ this.advancedFilters = this.columns.reduce((acc, column) => {
429
+ acc[column.name] = ''
430
+ return acc
431
+ }, {} as { [key: string]: string })
423
432
  }
424
433
  }
425
434
  }
@@ -13,7 +13,7 @@
13
13
  :rows="rows"
14
14
  :columns="columns"
15
15
  :visible-columns="store.visiblecolumns"
16
- :small-device="false"
16
+ :small-device="true"
17
17
  :store="store"
18
18
  :table-style="tableStyle"
19
19
  :show-skeleton="showSkeleton"
@@ -22,8 +22,8 @@
22
22
  :filterComputedOptions="{ preparedQuantity: store.prepared}"
23
23
  :additional-sort-conditions="additionalSortConditions"
24
24
  :additional-filter-conditions="additionalFilterConditions"
25
- :advancedFilters="advancedFilters"
26
- :showIconAdvancedFilter="true"
25
+ :advanced-filters="advancedFilters"
26
+ :show-icon-advanced-filter="true"
27
27
  @on-select-visible-columns="(columns) => {
28
28
  store.visiblecolumns = columns
29
29
  }"
@@ -75,6 +75,15 @@ export default {
75
75
  field: 'time',
76
76
  type: 'time'
77
77
  },
78
+ {
79
+ name: 'dateTime',
80
+ required: true,
81
+ label: 'Date Time',
82
+ align: 'left',
83
+ sortable: true,
84
+ field: 'dateTime',
85
+ type: 'dateTime'
86
+ },
78
87
  {
79
88
  name: 'dessert',
80
89
  required: true,
@@ -230,6 +239,7 @@ export default {
230
239
  {
231
240
  date: '12/12/2024',
232
241
  time: '12:20:40',
242
+ dateTime: '12/12/2024 12:20:40',
233
243
  dessert: 'Frozen Yogurt',
234
244
  booleanIcon: true,
235
245
  available: true,
@@ -245,6 +255,7 @@ export default {
245
255
  {
246
256
  date: '18/12/2024',
247
257
  time: '11:00:54',
258
+ dateTime: '12/12/2024 12:25:40',
248
259
  dessert: 'Ice cream sandwich',
249
260
  booleanIcon: true,
250
261
  available: false,
@@ -260,6 +271,7 @@ export default {
260
271
  {
261
272
  date: '05/07/2024',
262
273
  time: ' 7:01:24',
274
+ dateTime: '12/12/2024 12:30:40',
263
275
  dessert: 'Eclair',
264
276
  booleanIcon: true,
265
277
  available: true,
@@ -275,6 +287,7 @@ export default {
275
287
  {
276
288
  date: '10/12/2023',
277
289
  time: '12:04:33',
290
+ dateTime: '13/12/2024 12:20:40',
278
291
  dessert: 'Cupcake',
279
292
  booleanIcon: false,
280
293
  available: false,
@@ -290,6 +303,7 @@ export default {
290
303
  {
291
304
  date: '16/05/1999',
292
305
  time: '10:43:25',
306
+ dateTime: '13/12/2024 13:20:40',
293
307
  dessert: 'Gingerbread',
294
308
  booleanIcon: true,
295
309
  available: true,
@@ -305,6 +319,7 @@ export default {
305
319
  {
306
320
  date: '01/01/0001',
307
321
  time: '11:35:04',
322
+ dateTime: '15/12/2024 18:20:40',
308
323
  dessert: 'Jelly bean',
309
324
  booleanIcon: false,
310
325
  available: false,
@@ -320,6 +335,7 @@ export default {
320
335
  {
321
336
  date: '12/12/2024',
322
337
  time: '12:51:01',
338
+ dateTime: '12/12/2024 12:20:40',
323
339
  dessert: 'Lollipop',
324
340
  booleanIcon: true,
325
341
  available: true,
@@ -335,6 +351,7 @@ export default {
335
351
  {
336
352
  date: '05/07/2022',
337
353
  time: '14:39:34',
354
+ dateTime: '12/01/2025 12:20:40',
338
355
  dessert: 'Honeycomb',
339
356
  booleanIcon: true,
340
357
  available: false,
@@ -350,6 +367,7 @@ export default {
350
367
  {
351
368
  date: '14/03/2023',
352
369
  time: '10:43:26',
370
+ dateTime: '01/01/2025 00:00:01',
353
371
  dessert: 'Donut',
354
372
  booleanIcon: true,
355
373
  available: true,
@@ -365,6 +383,7 @@ export default {
365
383
  {
366
384
  date: '12/12/2023',
367
385
  time: '07:45:12',
386
+ dateTime: '12/01/2025 12:20:40',
368
387
  dessert: 'KitKat',
369
388
  booleanIcon: false,
370
389
  available: false,
@@ -397,6 +416,7 @@ export default {
397
416
  id: i + '-' + lista[i].dessert,
398
417
  date: lista[i].date,
399
418
  time: lista[i].time,
419
+ dateTime: lista[i].dateTime,
400
420
  dessert: lista[i].dessert,
401
421
  booleanIcon: lista[i].booleanIcon,
402
422
  available: lista[i].available,