@mixd-id/web-scaffold 0.1.230406150 → 0.1.230406152

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mixd-id/web-scaffold",
3
3
  "private": false,
4
- "version": "0.1.230406150",
4
+ "version": "0.1.230406152",
5
5
  "scripts": {
6
6
  "dev": "vite serve",
7
7
  "build": "vite build",
@@ -131,7 +131,9 @@ export default{
131
131
  this.alert
132
132
 
133
133
  if(err.errors){
134
- return Object.values(err.errors).join("\n")
134
+ return typeof err.errors === 'object' && Object.keys(err.errors).length > 0 ?
135
+ Object.values(err.errors).join("\n") :
136
+ err.errors
135
137
  }
136
138
  else if(err.message){
137
139
  return err.message
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <div :class="$style.comp">
3
- <article :class="$style.article"
3
+ <article ref="article" :class="$style.article"
4
4
  v-html="htmlText"
5
5
  :contenteditable="editMode"
6
6
  @input="onInput"
@@ -27,7 +27,7 @@ export default{
27
27
  methods: {
28
28
 
29
29
  getSelection(){
30
- const { text = '', href = '', target = '' } = saveSelection(this.$el)
30
+ const { text = '', href = '', target = '' } = saveSelection(this.$refs.article)
31
31
  return {
32
32
  text,
33
33
  href,
@@ -55,7 +55,7 @@ export default{
55
55
 
56
56
  onClick(){
57
57
  if(this.editMode){
58
- let { element } = getSelection(this.$el)
58
+ let { element } = getSelection(this.$refs.article)
59
59
 
60
60
  const table = this.closest(element, 'table')
61
61
 
@@ -81,7 +81,7 @@ export default{
81
81
  uid: this.uid,
82
82
  type: 'setProp',
83
83
  value: {
84
- htmlText: this.$el.innerHTML
84
+ htmlText: this.$refs.article.innerHTML
85
85
  }
86
86
  }, '*')
87
87
  },
@@ -100,7 +100,7 @@ export default{
100
100
 
101
101
  addTableColumn(){
102
102
 
103
- let { element } = getSelection(this.$el)
103
+ let { element } = getSelection(this.$refs.article)
104
104
  if(element.nodeType !== 1)
105
105
  element = element.parentNode
106
106
  const table = this.closest(element, 'table')
@@ -129,7 +129,7 @@ export default{
129
129
 
130
130
  addTableRow(){
131
131
 
132
- let { element } = getSelection(this.$el)
132
+ let { element } = getSelection(this.$refs.article)
133
133
  if(element.nodeType !== 1)
134
134
  element = element.parentNode
135
135
  const table = this.closest(element, 'table')
@@ -153,7 +153,7 @@ export default{
153
153
 
154
154
  removeTableRow(){
155
155
 
156
- let { element } = getSelection(this.$el)
156
+ let { element } = getSelection(this.$refs.article)
157
157
  if(element.nodeType !== 1)
158
158
  element = element.parentNode
159
159
  const table = this.closest(element, 'table')
@@ -170,7 +170,7 @@ export default{
170
170
 
171
171
  removeTableColumn(){
172
172
 
173
- let { element } = getSelection(this.$el)
173
+ let { element } = getSelection(this.$refs.article)
174
174
  if(element.nodeType !== 1)
175
175
  element = element.parentNode
176
176
  const table = this.closest(element, 'table')
@@ -231,7 +231,7 @@ export default{
231
231
 
232
232
  case 'saveSelection':
233
233
  case 'getSelection':
234
- const sel = saveSelection(this.$el)
234
+ const sel = saveSelection(this.$refs.article)
235
235
  const { text, target, href } = sel
236
236
  result = {
237
237
  text,
@@ -256,7 +256,7 @@ export default{
256
256
  break
257
257
 
258
258
  case 'removeLink':
259
- const { element } = getSelection(this.$el)
259
+ const { element } = getSelection(this.$refs.article)
260
260
 
261
261
  let a = element
262
262
  while(a && a.tagName !== 'A'){
@@ -115,7 +115,6 @@
115
115
  <VirtualGrid v-else-if="computedViewType === 'grid'"
116
116
  :items="items"
117
117
  :column="gridColumn"
118
- :gap="gridGap"
119
118
  class="flex-1"
120
119
  ref="table1"
121
120
  :opt-bar="optBar"
@@ -740,7 +739,7 @@ export default{
740
739
  }
741
740
 
742
741
  if(this.$screenPrefix.value === ''){
743
- return 'gap-1'
742
+ return 'gap-0'
744
743
  }
745
744
 
746
745
  return this.config.gridGap
@@ -239,7 +239,7 @@ export default{
239
239
  }
240
240
 
241
241
  .modalBody{
242
- @apply flex-1 min-h-0 overflow-y-auto flex bg-base-400;
242
+ @apply flex-1 min-h-0 overflow-y-auto flex;
243
243
  }
244
244
 
245
245
  .overlay{
@@ -17,6 +17,8 @@ const floor = (num, precision = 0) => {
17
17
  }
18
18
 
19
19
  const ftWildcard = (key) => {
20
+ if(key.indexOf('/') >= 0) return key
21
+
20
22
  const term = key.replace(/[\-\+\<\>\@\(\)\~]/, ' ', 'gi')
21
23
 
22
24
  const searchTerms = []
@@ -2,8 +2,7 @@ const { Op } = module.parent.require('sequelize')
2
2
  const Sequelize = module.parent.require('sequelize')
3
3
  const dayjs = require("dayjs");
4
4
  const Exceljs = require("exceljs");
5
- const { getPresetSortWhereParams } = require("./helpers");
6
- const { sleep } = require('@mixd-id/web-scaffold/helpers')
5
+ const { getPresetSortWhereParams, ftWildcard } = require("./helpers");
7
6
 
8
7
  let ListPage1 = {
9
8
 
@@ -111,7 +110,6 @@ let ListPage1 = {
111
110
  async loadSummary(params){
112
111
 
113
112
  if(!this.conn){
114
- console.error('Unable to load summary, connection not found')
115
113
  return
116
114
  }
117
115
 
@@ -313,7 +311,7 @@ let ListPage1 = {
313
311
  const sheet = workbook.addWorksheet('Export ' + this.name);
314
312
  sheet.columns = columns
315
313
 
316
- let where = {}
314
+ let where = []
317
315
  let replacements = []
318
316
  let order = [
319
317
  [ 'updatedAt', 'desc' ],
@@ -350,14 +348,6 @@ let ListPage1 = {
350
348
  }
351
349
  attributes = Object.keys(attributes)
352
350
 
353
- if(preset.filters){
354
- const { where:presetWhere } = this.getPresetFilterParams(preset)
355
- where = {
356
- ...where,
357
- ...presetWhere
358
- }
359
- }
360
-
361
351
  if(preset.sorts){
362
352
  const { order:presetOrder } = this.getPresetSortParams(preset)
363
353
  if(presetOrder){
@@ -365,21 +355,25 @@ let ListPage1 = {
365
355
  }
366
356
  }
367
357
 
368
- if(preset.search){
369
- const tableName = this.model.name
370
- where = {
371
- ...where,
372
- [Op.and]: Sequelize.literal(`MATCH(\`${tableName}\`.tag) AGAINST (? IN BOOLEAN MODE)`)
373
- }
374
- replacements.push(preset.search)
358
+ if(preset.search && this.matchAgainst){
359
+ where.push({
360
+ [Op.and]: Sequelize.literal(this.matchAgainst)
361
+ })
362
+ replacements.push(ftWildcard(preset.search))
363
+ }
364
+ else if(preset.filters){
365
+ const { where:presetWhere } = this.getPresetFilterParams(preset)
366
+ where.push(presetWhere)
375
367
  }
376
368
 
377
369
  if(this.downloadFilters){
378
- await this.downloadFilters(params, where)
370
+ where.push((await this.downloadFilters(params) ?? {}))
379
371
  }
380
372
 
381
373
  const rows = await this.model.findAll({
382
- where,
374
+ where: {
375
+ [Op.and]: where
376
+ },
383
377
  attributes: {
384
378
  ...attributes,
385
379
  include: attributeIncludes
@@ -439,7 +433,7 @@ let ListPage1 = {
439
433
 
440
434
  const { afterItem, itemsPerPage = this.itemsPerPage ?? 24 } = params
441
435
  const { preset = {} } = params
442
- let where = {}
436
+ let where = []
443
437
  let replacements = []
444
438
  let order = [
445
439
  [ 'updatedAt', 'desc' ],
@@ -487,19 +481,8 @@ let ListPage1 = {
487
481
  }
488
482
  attributes = Object.keys(attributes)
489
483
 
490
- if(preset.filters){
491
- const { where:presetWhere } = this.getPresetFilterParams(preset, includes)
492
- where = {
493
- ...where,
494
- ...presetWhere
495
- }
496
- }
497
-
498
484
  if(typeof this['loadFilters'] === 'function'){
499
- where = {
500
- ...where,
501
- ...(await this['loadFilters'](params) ?? {})
502
- }
485
+ where.push(await this['loadFilters'](params) ?? {})
503
486
  }
504
487
 
505
488
  if(preset.sorts){
@@ -509,26 +492,27 @@ let ListPage1 = {
509
492
  }
510
493
  }
511
494
 
512
- if(preset.search){
513
- const tableName = this.model.name
514
- where = {
515
- ...where,
516
- [Op.and]: Sequelize.literal(`MATCH(\`${tableName}\`.tag) AGAINST (? IN BOOLEAN MODE)`)
517
- }
518
- replacements.push(preset.search)
495
+ if(preset.search && this.matchAgainst){
496
+ where.push({
497
+ [Op.and]: Sequelize.literal(this.matchAgainst)
498
+ })
499
+ replacements.push(ftWildcard(preset.search))
500
+ }
501
+ else if(preset.filters){
502
+ const { where:presetWhere } = this.getPresetFilterParams(preset, includes)
503
+ where.push(presetWhere)
519
504
  }
520
505
 
521
506
  if(afterItem){
522
507
  const sortWhere = getPresetSortWhereParams(order, afterItem)
523
- where = {
524
- ...where,
525
- ...sortWhere
526
- }
508
+ where.push(sortWhere)
527
509
  }
528
510
 
529
511
  let derivedSql
530
512
  let { rows:items, count } = await this.model.findAndCountAll({
531
- where,
513
+ where: {
514
+ [Op.and]: where
515
+ },
532
516
  attributes: {
533
517
  ...attributes,
534
518
  include: attributeIncludes
@@ -2,7 +2,7 @@ const { Op } = module.parent.require('sequelize')
2
2
  const Sequelize = module.parent.require('sequelize')
3
3
  const dayjs = require("dayjs");
4
4
  const Exceljs = require("exceljs");
5
- const { getPresetSortWhereParams } = require("./helpers");
5
+ const { getPresetSortWhereParams, ftWildcard } = require("./helpers");
6
6
 
7
7
  let ListView = {
8
8
 
@@ -45,7 +45,6 @@ let ListView = {
45
45
  async loadSummary(params, loadResults){
46
46
 
47
47
  if(!this.conn){
48
- console.error('Unable to load summary, connection not found')
49
48
  return
50
49
  }
51
50
 
@@ -110,7 +109,7 @@ let ListView = {
110
109
  const sheet = workbook.addWorksheet('Export ' + this.name);
111
110
  sheet.columns = columns
112
111
 
113
- let where = {}
112
+ let where = []
114
113
  let replacements = []
115
114
  let order = [
116
115
  [ 'updatedAt', 'desc' ],
@@ -147,14 +146,6 @@ let ListView = {
147
146
  }
148
147
  attributes = Object.keys(attributes)
149
148
 
150
- if(preset.filters){
151
- const { where:presetWhere } = this.getPresetFilterParams(preset)
152
- where = {
153
- ...where,
154
- ...presetWhere
155
- }
156
- }
157
-
158
149
  if(preset.sorts){
159
150
  const { order:presetOrder } = this.getPresetSortParams(preset)
160
151
  if(presetOrder){
@@ -162,21 +153,25 @@ let ListView = {
162
153
  }
163
154
  }
164
155
 
165
- if(preset.search){
166
- const tableName = this.model.name
167
- where = {
168
- ...where,
169
- [Op.and]: Sequelize.literal(`MATCH(\`${tableName}\`.tag) AGAINST (? IN BOOLEAN MODE)`)
170
- }
171
- replacements.push(preset.search)
156
+ if(preset.search && this.matchAgainst){
157
+ where.push({
158
+ [Op.and]: Sequelize.literal(this.matchAgainst)
159
+ })
160
+ replacements.push(ftWildcard(preset.search))
161
+ }
162
+ else if(preset.filters){
163
+ const { where:presetWhere } = this.getPresetFilterParams(preset)
164
+ where.push(presetWhere)
172
165
  }
173
166
 
174
167
  if(this.downloadFilters){
175
- await this.downloadFilters(params, where)
168
+ where.push((await this.downloadFilters(params) ?? {}))
176
169
  }
177
170
 
178
171
  const rows = await this.model.findAll({
179
- where,
172
+ where: {
173
+ [Op.and]: where
174
+ },
180
175
  attributes: {
181
176
  ...attributes,
182
177
  include: attributeIncludes
@@ -237,7 +232,7 @@ let ListView = {
237
232
  const { afterItem, itemsPerPage = this.itemsPerPage ?? 24 } = params
238
233
 
239
234
  const { preset = {} } = params
240
- let where = {}
235
+ let where = []
241
236
  let replacements = []
242
237
  let order = [
243
238
  [ 'updatedAt', 'desc' ],
@@ -281,27 +276,19 @@ let ListView = {
281
276
  }
282
277
  attributes = Object.keys(attributes)
283
278
 
284
- if(preset.search && modelAttributes['tag']){
285
- const tableName = this.model.name
286
- where = {
287
- ...where,
288
- [Op.and]: Sequelize.literal(`MATCH(\`${tableName}\`.tag) AGAINST (? IN BOOLEAN MODE)`)
289
- }
290
- replacements.push(preset.search)
279
+ if(preset.search && this.matchAgainst){
280
+ where.push({
281
+ [Op.and]: Sequelize.literal(this.matchAgainst)
282
+ })
283
+ replacements.push(ftWildcard(preset.search))
291
284
  }
292
285
  else if(preset.filters){
293
286
  const { where:presetWhere } = this.getPresetFilterParams(preset, includes)
294
- where = {
295
- ...where,
296
- ...presetWhere
297
- }
287
+ where.push(presetWhere)
298
288
  }
299
289
 
300
290
  if(typeof this['loadFilters'] === 'function'){
301
- where = {
302
- ...where,
303
- ...(await this['loadFilters'](params) ?? {})
304
- }
291
+ where.push(await this['loadFilters'](params) ?? {})
305
292
  }
306
293
 
307
294
  if(preset.sorts){
@@ -313,15 +300,14 @@ let ListView = {
313
300
 
314
301
  if(afterItem){
315
302
  const sortWhere = getPresetSortWhereParams(order, afterItem)
316
- where = {
317
- ...where,
318
- ...sortWhere
319
- }
303
+ where.push(sortWhere)
320
304
  }
321
305
 
322
306
  let derivedSql
323
307
  let { rows:items, count } = await this.model.findAndCountAll({
324
- where,
308
+ where: {
309
+ [Op.and]: where
310
+ },
325
311
  attributes: [
326
312
  ...attributes,
327
313
  ...attributeIncludes
@@ -3,7 +3,7 @@
3
3
  <div v-for="(icon, index) in icons" :key="index" class="text-center p-3">
4
4
  <router-link :to="icon.target ?? ''">
5
5
  <Image :src="imageUrl(icon)" class="inline-block aspect-square w-[90%] md:w-[95%] max-w-[64px] rounded-xl"
6
- spinner-type="shimmer"/>
6
+ spinner-type="shimmer" edit-selectable="false"/>
7
7
  <small class="block mt-1 text-center text-xs md:text-sm">{{ icon.text }}</small>
8
8
  </router-link>
9
9
  </div>
@@ -1009,10 +1009,10 @@ export default{
1009
1009
 
1010
1010
  onKeyDown(e){
1011
1011
  if(e.keyCode === 67 && (e.metaKey || e.ctrlKey)){
1012
- this.copy()
1012
+ //this.copy()
1013
1013
  }
1014
1014
  else if(e.keyCode === 86 && (e.metaKey || e.ctrlKey)){
1015
- this.paste(e)
1015
+ //this.paste(e)
1016
1016
  }
1017
1017
  /*else if(e.keyCode === 8){
1018
1018
  if(this.currentItem){