zet-lib 1.3.25 → 1.3.27

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/lib/Util.js CHANGED
@@ -1204,13 +1204,17 @@ Util.selectParser = (fields = [], MYMODEL = {}) => {
1204
1204
  return select
1205
1205
  }
1206
1206
 
1207
- Util.fieldWithTable = (field, MYMODEL) => {
1207
+ Util.fieldWithTable = (field, MYMODEL, isWhere = false) => {
1208
1208
  let name = ''
1209
1209
  let joinList = MYMODEL.joins && MYMODEL.joins.list.length > 0 ? MYMODEL.joins.list : []
1210
1210
  if (joinList.length > 0) {
1211
1211
  if (joinList.includes(field)) {
1212
1212
  let split = field.split('___')
1213
- name = `${split[0]}.${split[1]} as ${field}`
1213
+ if (isWhere) {
1214
+ name = `${split[0]}.${split[1]}`
1215
+ } else {
1216
+ name = `${split[0]}.${split[1]} as ${field}`
1217
+ }
1214
1218
  } else {
1215
1219
  name = `${MYMODEL.table}.${field}`
1216
1220
  }
@@ -670,8 +670,6 @@ const buildJoin = async (MYMODEL, result) => {
670
670
  if (result.joins && Object.keys(joins).length > 0) {
671
671
  let newDataObj = {}
672
672
  for (let key in joins) {
673
- //find relation
674
- //sql.push(` LEFT JOIN ${key} ON ${key}.id = ${table}.${key}_id `)
675
673
  let THEIR_MODEL = require(`${dirRoot}/models/${key}`)
676
674
  //console.log(THEIR_MODEL)
677
675
  let arr = joins[key] || []
@@ -680,7 +678,8 @@ const buildJoin = async (MYMODEL, result) => {
680
678
  arr.map((item) => {
681
679
  //console.log(item)
682
680
  //console.log(typeof item)
683
- const originKey = key.replace(`${key}___`, '')
681
+ const originKey = item.key.replace(`${key}___`, '')
682
+ console.log(originKey)
684
683
  newDataObj[item.key] = item.value
685
684
  MYMODEL.keys.push(item.key)
686
685
  MYMODEL.keysExcel.push(item.key)
@@ -689,7 +688,7 @@ const buildJoin = async (MYMODEL, result) => {
689
688
  MYMODEL.options[item.key] = THEIR_MODEL.options[originKey]
690
689
  MYMODEL.grids.invisibles.push(item.key)
691
690
  MYMODEL.datas[item.key] = THEIR_MODEL.datas[originKey]
692
- //MYMODEL.widgets[item.key] = THEIR_MODEL.widgets[originKey];
691
+ MYMODEL.widgets[item.key] = THEIR_MODEL.widgets[originKey]
693
692
  join_list.push(item.key)
694
693
  })
695
694
  }
@@ -744,7 +743,7 @@ const buildJoin = async (MYMODEL, result) => {
744
743
  foreignTables.push(row.foreign_table_name)
745
744
  foreign_table_name[row.foreign_table_name] = ` LEFT JOIN ${row.foreign_table_name} ON ${row.foreign_table_name}.id = ${table_steps_item}.${row.column_name} `
746
745
  })
747
- console.log(foreignTables)
746
+ //console.log(foreignTables)
748
747
  table_joins.map((item) => {
749
748
  if (!table_steps.includes(item)) {
750
749
  if (foreignTables.includes(item)) {
@@ -1392,7 +1391,6 @@ const scanning = async (MYMODEL, result) => {
1392
1391
  newModel += `${Util.newLine}`
1393
1392
  newModel += `}`
1394
1393
  fs.writeFileSync(`${dirRoot}/models/${MYMODEL.table}.js`, newModel)
1395
-
1396
1394
  //return MYMODEL;
1397
1395
  }
1398
1396
 
package/lib/zRoute.js CHANGED
@@ -512,7 +512,7 @@ zRoute.selectData = (MYMODEL) => {
512
512
  return data
513
513
  }
514
514
 
515
- zRoute.relations = async (req, res, table) => {
515
+ zRoute.relationTable = async (req, res, table) => {
516
516
  try {
517
517
  const MYMODELS = myCache.get('MYMODELS')
518
518
  const MYMODEL = MYMODELS[table]
@@ -523,7 +523,7 @@ zRoute.relations = async (req, res, table) => {
523
523
  let hasAttributes = false
524
524
  let zattributes = {}
525
525
  let company_id = res.locals.companyId
526
- //f0r widgets
526
+ //widgets
527
527
  for (let key in MYMODEL.widgets) {
528
528
  const keyRow = key + 'Row'
529
529
  const keyFields = key + 'Fields'
@@ -717,7 +717,6 @@ zRoute.relations = async (req, res, table) => {
717
717
  }
718
718
  }
719
719
  //console.log(relations);
720
-
721
720
  let selectZvirtuals = ''
722
721
  for (let key in relations['zvirtuals']) {
723
722
  selectZvirtuals += `${relations['zvirtuals'][key]} , `
@@ -733,6 +732,51 @@ zRoute.relations = async (req, res, table) => {
733
732
  }
734
733
  }
735
734
 
735
+ zRoute.relations = async (req, res, table) => {
736
+ try {
737
+ const MYMODELS = myCache.get('MYMODELS')
738
+ const MYMODEL = MYMODELS[table]
739
+ let relation = await zRoute.relationTable(req, res, table)
740
+ let relations = {}
741
+ if (MYMODEL.joins && MYMODEL.joins.list) {
742
+ let joinOfTables = MYMODEL.joins.tables
743
+ for (let key of joinOfTables) {
744
+ relations[key] = await zRoute.relationTable(req, res, key)
745
+ }
746
+ let listData = MYMODEL.joins.list || []
747
+ listData.map((item) => {
748
+ let split = item.split('___')
749
+ let mytable = split[0]
750
+ let key = split[1]
751
+ const itemRow = item + 'Row'
752
+ const itemFields = item + 'Fields'
753
+ const itemObject = item + 'Object'
754
+ const keyRow = key + 'Row'
755
+ const keyFields = key + 'Fields'
756
+ const keyObject = key + 'Object'
757
+
758
+ let relName = relations[mytable]
759
+ if (relName[key]) {
760
+ relation[item] = relName[key]
761
+ }
762
+ if (relName[keyRow]) {
763
+ relation[itemRow] = relName[keyRow]
764
+ }
765
+ if (relName[keyFields]) {
766
+ relation[itemFields] = relName[keyFields]
767
+ }
768
+ if (relName[keyObject]) {
769
+ relation[itemObject] = relName[keyObject]
770
+ }
771
+ })
772
+ }
773
+
774
+ return relation
775
+ } catch (e) {
776
+ console.log(e)
777
+ }
778
+ }
779
+
736
780
  /*
737
781
  Function to create filter elements on data table grid
738
782
  */
@@ -1340,6 +1384,7 @@ zRoute.selectAllowedField = (req, res, MYMODEL, arr = []) => {
1340
1384
  }
1341
1385
 
1342
1386
  zRoute.excelQuery = async (req, res, MYMODEL, paramsObject = {}) => {
1387
+ const table = MYMODEL.table
1343
1388
  const cacheRole = myCache.get('ROLES')[res.locals.roleId].params
1344
1389
  const levels = cacheRole[MYMODEL.table] || []
1345
1390
  if (!levels.includes('export')) {
@@ -1349,20 +1394,28 @@ zRoute.excelQuery = async (req, res, MYMODEL, paramsObject = {}) => {
1349
1394
 
1350
1395
  let virtuals = []
1351
1396
  let customs = []
1352
- let asDate = []
1353
- for (var key in MYMODEL.widgets) {
1354
- if (MYMODEL.widgets[key].name === 'virtual') {
1355
- virtuals.push(key)
1356
- }
1357
- if (MYMODEL.widgets[key].name === 'custom') {
1358
- customs.push(key)
1359
- }
1397
+ const asDate = []
1398
+ const asJSONb = []
1399
+ const asArray = []
1400
+ for (let key in MYMODEL.widgets) {
1360
1401
  if (MYMODEL.widgets[key].name == 'datetime') {
1361
1402
  asDate.push(key)
1362
1403
  }
1363
1404
  if (MYMODEL.widgets[key].name == 'datepicker') {
1364
1405
  asDate.push(key)
1365
1406
  }
1407
+ if (MYMODEL.widgets[key].name == 'dropdown_multi') {
1408
+ asJSONb.push(key)
1409
+ }
1410
+ if (MYMODEL.widgets[key].name == 'dragdrop') {
1411
+ asJSONb.push(key)
1412
+ }
1413
+ if (MYMODEL.widgets[key].name == 'dropdown_checkbox') {
1414
+ asJSONb.push(key)
1415
+ }
1416
+ if (MYMODEL.widgets[key].name == 'json_array' || MYMODEL.widgets[key].name == 'array' || MYMODEL.widgets[key].name == 'dropzone') {
1417
+ asArray.push(key)
1418
+ }
1366
1419
  }
1367
1420
  //check directory for import not export
1368
1421
  const dir = `${dirRoot}/public/excel/tmp`
@@ -1397,7 +1450,8 @@ zRoute.excelQuery = async (req, res, MYMODEL, paramsObject = {}) => {
1397
1450
  let difference = allfields.filter((x) => !fields.includes(x))
1398
1451
  arr = [...fields, ...difference].filter((x) => !virtuals.includes(x))
1399
1452
  arr = arr.filter((item) => !customs.includes(item))
1400
- select = `"${arr.join('","')}"`
1453
+ //select = `"${arr.join('","')}"`
1454
+ select = Util.selectParser(arr, MYMODEL)
1401
1455
  }
1402
1456
  let whereArray = []
1403
1457
  if (paramsObject.hasOwnProperty('whereArray')) {
@@ -1407,48 +1461,90 @@ zRoute.excelQuery = async (req, res, MYMODEL, paramsObject = {}) => {
1407
1461
  whereArray.push(paramsObject.whereArray)
1408
1462
  }
1409
1463
  }
1464
+
1465
+ whereArray.push({
1466
+ field: `${table}.company_id`,
1467
+ option: '=',
1468
+ value: res.locals.companyId,
1469
+ operator: 'AND',
1470
+ })
1471
+
1410
1472
  let columns = body.columns
1411
1473
  columns.forEach(function (item) {
1412
1474
  if (item.search.value) {
1413
1475
  let astype = 'text'
1414
- if (asDate.includes(body.fields[item.data])) {
1476
+ if (asDate.includes(fields[item.data])) {
1415
1477
  astype = 'date'
1416
1478
  }
1417
- whereArray.push({
1418
- field: body.fields[item.data],
1419
- option: MYMODEL.options[body.fields[item.data]],
1420
- value: item.search.value,
1421
- operator: 'AND',
1422
- type: astype,
1423
- })
1479
+ if (asJSONb.includes(fields[item.data])) {
1480
+ astype = 'jsonb'
1481
+ }
1482
+ if (asArray.includes(fields[item.data])) {
1483
+ astype = 'array'
1484
+ }
1485
+ if (astype === 'jsonb') {
1486
+ whereArray.push({
1487
+ field: Util.fieldWithTable(fields[item.data], MYMODEL, true),
1488
+ option: ' ',
1489
+ value: ` @> '["${item.search.value}"]'`,
1490
+ operator: 'AND',
1491
+ type: 'inline',
1492
+ })
1493
+ } else if (astype === 'array') {
1494
+ whereArray.push({
1495
+ field: '',
1496
+ option: '',
1497
+ value: ` ${Util.fieldWithTable(fields[item.data], MYMODEL, true)}::text ILIKE '${item.search.value}' `,
1498
+ operator: 'AND',
1499
+ type: 'inline',
1500
+ })
1501
+ } else {
1502
+ whereArray.push({
1503
+ field: Util.fieldWithTable(fields[item.data], MYMODEL, true),
1504
+ option: MYMODEL.options[fields[item.data]],
1505
+ value: item.search.value,
1506
+ operator: 'AND',
1507
+ type: astype,
1508
+ })
1509
+ }
1424
1510
  }
1425
1511
  })
1426
- const orderColumn = body.fields[body.order[0].column] == 'actionColumn' ? 'id' : body.fields[body.order[0].column] == 'no' ? 'id' : body.fields[body.order[0].column] == 'actionColum' ? 'id' : body.fields[body.order[0].column]
1512
+
1513
+ const orderColumn = fields[body.order[0].column] == 'actionColumn' ? `${table}.id` : fields[body.order[0].column] == 'no' ? `${table}.id` : fields[body.order[0].column] == 'actionColum' ? `${table}.id` : fields[body.order[0].column]
1427
1514
  if (zstandart) {
1428
- select = '*'
1515
+ select = Util.selectParser(allfields, MYMODEL)
1429
1516
  }
1430
- const obj = {
1517
+ let gridData = {
1431
1518
  select: select,
1432
- table: MYMODEL.table,
1519
+ table: table,
1433
1520
  whereArray: whereArray,
1434
- orderBy: [orderColumn, body.order[0].dir],
1521
+ order_by: [`${orderColumn} ${body.order[0].dir}`],
1435
1522
  }
1436
1523
  if (!zall) {
1437
- obj.limit = body.length
1438
- obj.offset = body.start
1524
+ gridData.limit = body.length
1525
+ gridData.offset = body.start
1439
1526
  } else {
1440
- obj.limit = 50000
1441
- obj.offset = 0
1527
+ gridData.limit = 5000
1528
+ gridData.offset = 0
1442
1529
  }
1443
- rows = await connection.results(obj)
1530
+ let joins = Util.tableWithJoin(MYMODEL)
1531
+ if (joins.length > 0) {
1532
+ gridData.joins = joins
1533
+ }
1534
+ rows = await connection.results(gridData)
1444
1535
  } else {
1445
- rows = await connection.results({
1536
+ let gridData = {
1446
1537
  select: Util.selectParser(fields, MYMODEL),
1447
- table: MYMODEL.table,
1538
+ table: table,
1448
1539
  limit: reqQuery.pageSize,
1449
1540
  offset: parseInt(reqQuery.pageSize) - 1,
1450
1541
  orderBy: ['id', 'desc'],
1451
- })
1542
+ }
1543
+ let joins = Util.tableWithJoin(MYMODEL)
1544
+ if (joins.length > 0) {
1545
+ gridData.joins = joins
1546
+ }
1547
+ rows = await connection.results({ gridData })
1452
1548
  }
1453
1549
  if (zall) {
1454
1550
  fields = arr
@@ -1466,13 +1562,24 @@ zRoute.excelQuery = async (req, res, MYMODEL, paramsObject = {}) => {
1466
1562
  }
1467
1563
 
1468
1564
  // for excels
1469
- zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
1565
+ zRoute.excel = async (req, res, MYMODEL, myfields, rows, callback, fileName) => {
1470
1566
  const cacheRole = myCache.get('ROLES')[res.locals.roleId].params
1471
1567
  const levels = cacheRole[MYMODEL.table] || []
1472
1568
  if (!levels.includes('export')) {
1473
1569
  res.json('no access')
1474
1570
  return false
1475
1571
  }
1572
+ let joins = Util.tableWithJoin(MYMODEL)
1573
+ let notJoins = []
1574
+ if (joins.length > 0) {
1575
+ notJoins = MYMODEL.joins.list || []
1576
+ }
1577
+ let fields = []
1578
+ myfields.map((item) => {
1579
+ if (!notJoins.includes(item)) {
1580
+ fields.push(item)
1581
+ }
1582
+ })
1476
1583
 
1477
1584
  //if any other custom value then callback needed
1478
1585
  callback = callback || function () {}
@@ -1522,18 +1629,20 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
1522
1629
  let selectRelations = ''
1523
1630
  let aliasResults = {}
1524
1631
  for (let key in MYMODEL.widgets) {
1525
- if (MYMODEL.widgets[key].name == 'relation' || MYMODEL.widgets[key].name == 'typeahead') {
1526
- if (MYMODEL.widgets[key].import_field && MYMODEL.widgets[key].import_field != 'id') {
1527
- aliasResults[key] = Util.arrayToObject(
1528
- await connection.results({
1529
- select: `id, ${MYMODEL.widgets[key].import_field}`,
1530
- table: MYMODEL.widgets[key].table,
1531
- }),
1532
- 'id'
1533
- )
1534
- //console.log(aliasResults[key])
1535
- aliasRelations.push(key)
1536
- selectRelations += `, (select ${MYMODEL.widgets[key].import_field} from "${MYMODEL.widgets[key].table}" where ${MYMODEL.widgets[key].table}.id = ${MYMODEL.table}.${key} limit 1) as ${key} `
1632
+ if (!notJoins.includes(key)) {
1633
+ if (MYMODEL.widgets[key].name == 'relation' || MYMODEL.widgets[key].name == 'typeahead') {
1634
+ if (MYMODEL.widgets[key].import_field && MYMODEL.widgets[key].import_field != 'id') {
1635
+ aliasResults[key] = Util.arrayToObject(
1636
+ await connection.results({
1637
+ select: `id, ${MYMODEL.widgets[key].import_field}`,
1638
+ table: MYMODEL.widgets[key].table,
1639
+ }),
1640
+ 'id'
1641
+ )
1642
+ //console.log(aliasResults[key])
1643
+ aliasRelations.push(key)
1644
+ selectRelations += `, (select ${MYMODEL.widgets[key].import_field} from "${MYMODEL.widgets[key].table}" where ${MYMODEL.widgets[key].table}.id = ${MYMODEL.table}.${key} limit 1) as ${key} `
1645
+ }
1537
1646
  }
1538
1647
  }
1539
1648
  }
@@ -1547,20 +1656,22 @@ zRoute.excel = async (req, res, MYMODEL, fields, rows, callback, fileName) => {
1547
1656
  let usersObj = await zRoute.getUsers()
1548
1657
  if (Object.prototype.hasOwnProperty.call(MYMODEL, 'widgets')) {
1549
1658
  for (let key in MYMODEL.widgets) {
1550
- let widget = MYMODEL.widgets[key]
1551
- if (widget.name == 'password') {
1552
- passwords.push(key)
1553
- } else if (widget.name == 'select') {
1554
- tableObj[key] = widget.fields
1555
- } else if (widget.name == 'switch') {
1556
- tableObj[key] = widget.fields
1557
- } else if (widget.name == 'relation' || widget.name == 'typeahead') {
1558
- var rowsarr = await connection.results({
1559
- table: widget.table,
1560
- select: widget.fields[0] + ',' + widget.fields[1] + ' as zname ',
1561
- })
1562
- //save to object
1563
- relations[key] = Util.arrayToObject(rowsarr, 'id')
1659
+ if (!notJoins.includes(key)) {
1660
+ let widget = MYMODEL.widgets[key]
1661
+ if (widget.name == 'password') {
1662
+ passwords.push(key)
1663
+ } else if (widget.name == 'select') {
1664
+ tableObj[key] = widget.fields
1665
+ } else if (widget.name == 'switch') {
1666
+ tableObj[key] = widget.fields
1667
+ } else if (widget.name == 'relation' || widget.name == 'typeahead') {
1668
+ var rowsarr = await connection.results({
1669
+ table: widget.table,
1670
+ select: widget.fields[0] + ',' + widget.fields[1] + ' as zname ',
1671
+ })
1672
+ //save to object
1673
+ relations[key] = Util.arrayToObject(rowsarr, 'id')
1674
+ }
1564
1675
  }
1565
1676
  }
1566
1677
  }
@@ -1903,7 +2014,9 @@ zRoute.listDataTable = async (req, res, objData = {}) => {
1903
2014
  const MYMODEL = objData.MYMODEL || {}
1904
2015
  const table = MYMODEL.table
1905
2016
  const fields = Object.prototype.hasOwnProperty.call(objData, 'fields') ? objData.fields : req.body.fields
1906
- const relations = await zRoute.relations(req, res, MYMODEL.table)
2017
+ let relations = await zRoute.relations(req, res, MYMODEL.table)
2018
+ //find relation with joins
2019
+
1907
2020
  const select = Object.prototype.hasOwnProperty.call(objData, 'select') ? objData.select : Util.selectParser(fields, MYMODEL)
1908
2021
  const columns = Object.prototype.hasOwnProperty.call(objData, 'columns') ? objData.columns : body.columns
1909
2022
  const asDate = []
@@ -1955,7 +2068,7 @@ zRoute.listDataTable = async (req, res, objData = {}) => {
1955
2068
  }
1956
2069
  if (astype === 'jsonb') {
1957
2070
  whereArray.push({
1958
- field: Util.fieldWithTable(fields[item.data], MYMODEL),
2071
+ field: Util.fieldWithTable(fields[item.data], MYMODEL, true),
1959
2072
  option: ' ',
1960
2073
  value: ` @> '["${item.search.value}"]'`,
1961
2074
  operator: 'AND',
@@ -1965,13 +2078,13 @@ zRoute.listDataTable = async (req, res, objData = {}) => {
1965
2078
  whereArray.push({
1966
2079
  field: '',
1967
2080
  option: '',
1968
- value: ` ${Util.fieldWithTable(fields[item.data], MYMODEL)}::text ILIKE '${item.search.value}' `,
2081
+ value: ` ${Util.fieldWithTable(fields[item.data], MYMODEL, true)}::text ILIKE '${item.search.value}' `,
1969
2082
  operator: 'AND',
1970
2083
  type: 'inline',
1971
2084
  })
1972
2085
  } else {
1973
2086
  whereArray.push({
1974
- field: Util.fieldWithTable(fields[item.data], MYMODEL),
2087
+ field: Util.fieldWithTable(fields[item.data], MYMODEL, true),
1975
2088
  option: MYMODEL.options[fields[item.data]],
1976
2089
  value: item.search.value,
1977
2090
  operator: 'AND',
@@ -2027,7 +2140,6 @@ zRoute.listDataTable = async (req, res, objData = {}) => {
2027
2140
  datas.push(arr)
2028
2141
  })
2029
2142
  }
2030
-
2031
2143
  const data = {
2032
2144
  draw: body.draw,
2033
2145
  recordsTotal: count.count || 0,
@@ -2086,6 +2198,7 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
2086
2198
  operator: 'AND',
2087
2199
  })
2088
2200
  }
2201
+
2089
2202
  columns.forEach(function (item) {
2090
2203
  if (item.search.value) {
2091
2204
  let astype = 'text'
@@ -2100,7 +2213,7 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
2100
2213
  }
2101
2214
  if (astype === 'jsonb') {
2102
2215
  whereArray.push({
2103
- field: Util.fieldWithTable(fields[item.data], MYMODEL),
2216
+ field: Util.fieldWithTable(fields[item.data], MYMODEL, true),
2104
2217
  option: ' ',
2105
2218
  value: ` @> '["${item.search.value}"]'`,
2106
2219
  operator: 'AND',
@@ -2110,13 +2223,13 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
2110
2223
  whereArray.push({
2111
2224
  field: '',
2112
2225
  option: '',
2113
- value: ` ${Util.fieldWithTable(fields[item.data], MYMODEL)}::text ILIKE '${item.search.value}' `,
2226
+ value: ` ${Util.fieldWithTable(fields[item.data], MYMODEL, true)}::text ILIKE '${item.search.value}' `,
2114
2227
  operator: 'AND',
2115
2228
  type: 'inline',
2116
2229
  })
2117
2230
  } else {
2118
2231
  whereArray.push({
2119
- field: Util.fieldWithTable(fields[item.data], MYMODEL),
2232
+ field: Util.fieldWithTable(fields[item.data], MYMODEL, true),
2120
2233
  option: MYMODEL.options[fields[item.data]],
2121
2234
  value: item.search.value,
2122
2235
  operator: 'AND',
@@ -3258,70 +3371,76 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = '', data = {}) => {
3258
3371
  let lexicals = []
3259
3372
  let mapKey = ''
3260
3373
  let hasAttributes = []
3374
+ let joinsFields = []
3375
+ if (MYMODEL.joins) {
3376
+ joinsFields = MYMODEL.joins.list
3377
+ }
3261
3378
  for (let key in widgets) {
3262
- if (widgets[key].name == 'datepicker') {
3263
- hasDatePicker = true
3264
- } else if (widgets[key].name == 'number') {
3265
- hasNumber = true
3266
- } else if (widgets[key].name == 'clockpicker') {
3267
- hasClockPicker = true
3268
- } else if (widgets[key].name == 'editor') {
3269
- hasEditor = true
3270
- } else if (widgets[key].name == 'ide_editor') {
3271
- hasIde = true
3272
- } else if (widgets[key].name == 'switch') {
3273
- let switchObj = moduleLib.switch(req, res, `#${key}`, widgets[key].fields)
3274
- scriptForm += switchObj.script
3275
- headObj.switch = switchObj.head
3276
- endObj.switch = switchObj.end
3277
- } else if (widgets[key].name == 'typeahead') {
3278
- let typeaheadObj = moduleLib.typeahead(req, res, MYMODEL.table, `#${key}Typeahead`)
3279
- scriptForm += typeaheadObj.script
3280
- headObj.typeahead = typeaheadObj.head
3281
- endObj.typeahead = typeaheadObj.end
3282
- } else if (widgets[key].name == 'location') {
3283
- let locationObj = moduleLib.location(req, res, key)
3284
- scriptForm += locationObj.script
3285
- endObj.location = locationObj.end
3286
- hasLocation = true
3287
- mapKey = key
3288
- } else if (widgets[key].name == 'dragdrop') {
3289
- let dragdropObj = moduleLib.dragdrop(req, res, key)
3290
- scriptForm += dragdropObj.script
3291
- headObj.dragdrop = dragdropObj.head
3292
- endObj.dragdrop = dragdropObj.end
3293
- } else if (widgets[key].name == 'datetime') {
3294
- hasDateTimePicker = true
3295
- } else if (widgets[key].name == 'table') {
3296
- hasTable = true
3297
- hasDateTimePicker = true
3298
- hasClockPicker = true
3299
- hasDatePicker = true
3300
- } else if (widgets[key].name == 'tags') {
3301
- hasTags = true
3302
- } else if (widgets[key].name == 'lexical') {
3303
- let lexicalObj = moduleLib.lexical(req, res, `#${key}`)
3304
- hasLexical = true
3305
- headObj.lexical = lexicalObj.head
3306
- endObj.lexical = lexicalObj.end
3307
- lexicals.push(key)
3308
- } else if (widgets[key].name == 'tinymce') {
3309
- hasTinymce = true
3310
- } else if (widgets[key].name == 'dropzone') {
3311
- hasDropzone = true
3312
- dropzones.push(key)
3313
- }
3314
- // has chains
3315
- if (widgets[key].name == 'relation') {
3316
- if (widgets[key].isChain) {
3317
- if (widgets[key].chains.length) {
3318
- chainsObj[key] = widgets[key].chains
3319
- hasChain = true
3320
- }
3379
+ if (!joinsFields.includes(key)) {
3380
+ if (widgets[key].name == 'datepicker') {
3381
+ hasDatePicker = true
3382
+ } else if (widgets[key].name == 'number') {
3383
+ hasNumber = true
3384
+ } else if (widgets[key].name == 'clockpicker') {
3385
+ hasClockPicker = true
3386
+ } else if (widgets[key].name == 'editor') {
3387
+ hasEditor = true
3388
+ } else if (widgets[key].name == 'ide_editor') {
3389
+ hasIde = true
3390
+ } else if (widgets[key].name == 'switch') {
3391
+ let switchObj = moduleLib.switch(req, res, `#${key}`, widgets[key].fields)
3392
+ scriptForm += switchObj.script
3393
+ headObj.switch = switchObj.head
3394
+ endObj.switch = switchObj.end
3395
+ } else if (widgets[key].name == 'typeahead') {
3396
+ let typeaheadObj = moduleLib.typeahead(req, res, MYMODEL.table, `#${key}Typeahead`)
3397
+ scriptForm += typeaheadObj.script
3398
+ headObj.typeahead = typeaheadObj.head
3399
+ endObj.typeahead = typeaheadObj.end
3400
+ } else if (widgets[key].name == 'location') {
3401
+ let locationObj = moduleLib.location(req, res, key)
3402
+ scriptForm += locationObj.script
3403
+ endObj.location = locationObj.end
3404
+ hasLocation = true
3405
+ mapKey = key
3406
+ } else if (widgets[key].name == 'dragdrop') {
3407
+ let dragdropObj = moduleLib.dragdrop(req, res, key)
3408
+ scriptForm += dragdropObj.script
3409
+ headObj.dragdrop = dragdropObj.head
3410
+ endObj.dragdrop = dragdropObj.end
3411
+ } else if (widgets[key].name == 'datetime') {
3412
+ hasDateTimePicker = true
3413
+ } else if (widgets[key].name == 'table') {
3414
+ hasTable = true
3415
+ hasDateTimePicker = true
3416
+ hasClockPicker = true
3417
+ hasDatePicker = true
3418
+ } else if (widgets[key].name == 'tags') {
3419
+ hasTags = true
3420
+ } else if (widgets[key].name == 'lexical') {
3421
+ let lexicalObj = moduleLib.lexical(req, res, `#${key}`)
3422
+ hasLexical = true
3423
+ headObj.lexical = lexicalObj.head
3424
+ endObj.lexical = lexicalObj.end
3425
+ lexicals.push(key)
3426
+ } else if (widgets[key].name == 'tinymce') {
3427
+ hasTinymce = true
3428
+ } else if (widgets[key].name == 'dropzone') {
3429
+ hasDropzone = true
3430
+ dropzones.push(key)
3321
3431
  }
3322
- //relation_all_attributes
3323
- if (widgets[key].isAttributes) {
3324
- hasAttributes.push(key)
3432
+ // has chains
3433
+ if (widgets[key].name == 'relation') {
3434
+ if (widgets[key].isChain) {
3435
+ if (widgets[key].chains.length) {
3436
+ chainsObj[key] = widgets[key].chains
3437
+ hasChain = true
3438
+ }
3439
+ }
3440
+ //relation_all_attributes
3441
+ if (widgets[key].isAttributes) {
3442
+ hasAttributes.push(key)
3443
+ }
3325
3444
  }
3326
3445
  }
3327
3446
  }
@@ -3559,10 +3678,11 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = '', data = {}) => {
3559
3678
  });`
3560
3679
 
3561
3680
  for (let keys in widgets) {
3562
- let widgetName = widgets[keys].name
3563
- switch (widgetName) {
3564
- case 'multi_line_editor':
3565
- scriptForm += `$(".text-toggle").on("click", function(){
3681
+ if (!joinsFields.includes(keys)) {
3682
+ let widgetName = widgets[keys].name
3683
+ switch (widgetName) {
3684
+ case 'multi_line_editor':
3685
+ scriptForm += `$(".text-toggle").on("click", function(){
3566
3686
  let editorId = $(this).data("id");
3567
3687
  $("#"+editorId).attr("type","text");
3568
3688
  $("#a_"+editorId).hide();
@@ -3578,10 +3698,10 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = '', data = {}) => {
3578
3698
  }
3579
3699
  }
3580
3700
  });`
3581
- break
3701
+ break
3582
3702
 
3583
- case 'dropdown_multi':
3584
- scriptForm += ` $("#dropdownadd${keys}").on("click", function () {
3703
+ case 'dropdown_multi':
3704
+ scriptForm += ` $("#dropdownadd${keys}").on("click", function () {
3585
3705
  var val = $("#${keys}").val();
3586
3706
  if(val == ""){
3587
3707
  alert("Please select data");
@@ -3592,25 +3712,25 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = '', data = {}) => {
3592
3712
  $("#dropdownbox${keys}").append(data);
3593
3713
  $("#${keys}").val("");
3594
3714
  });${Util.newLine}`
3595
- break
3715
+ break
3596
3716
 
3597
- case 'table':
3598
- let MODEL_TABLE = MYMODELS[MYMODEL.widgets[keys].table] || require(`${dirRoot}/models/${MYMODEL.widgets[keys].table}`)
3599
- //let MODEL_TABLE_RELATIONS = await zRoute.relations(req, res, MODEL_TABLE.table);
3600
- //relations[key + "TABLE"]
3601
- let RELATIONS_MODEL_TABLE = relations && relations.hasOwnProperty(keys + 'TABLE') ? relations[keys + 'TABLE'] : {}
3602
- let zForm = zRoute.formField(req, res, MODEL_TABLE, RELATIONS_MODEL_TABLE)
3603
- zRoute.moduleLib(req, res, MODEL_TABLE, RELATIONS_MODEL_TABLE, zForms)
3604
- let trash = `trash_${keys}_${MYMODEL.widgets[keys].table}`
3605
- let subname = MYMODEL.table + '_' + keys
3606
- let relationsWithKeys = relations ? relations[keys] : {}
3607
- let dropdownMultis = []
3608
-
3609
- for (let qq in MODEL_TABLE.widgets) {
3610
- //check if have dropdown_multi
3611
- if (MODEL_TABLE.widgets[qq].name == 'dropdown_multi') {
3612
- dropdownMultis.push(qq)
3613
- scriptForm += `$("#body-${keys}").on("click", "#dropdownadd${qq}",function () {
3717
+ case 'table':
3718
+ let MODEL_TABLE = MYMODELS[MYMODEL.widgets[keys].table] || require(`${dirRoot}/models/${MYMODEL.widgets[keys].table}`)
3719
+ //let MODEL_TABLE_RELATIONS = await zRoute.relations(req, res, MODEL_TABLE.table);
3720
+ //relations[key + "TABLE"]
3721
+ let RELATIONS_MODEL_TABLE = relations && relations.hasOwnProperty(keys + 'TABLE') ? relations[keys + 'TABLE'] : {}
3722
+ let zForm = zRoute.formField(req, res, MODEL_TABLE, RELATIONS_MODEL_TABLE)
3723
+ zRoute.moduleLib(req, res, MODEL_TABLE, RELATIONS_MODEL_TABLE, zForms)
3724
+ let trash = `trash_${keys}_${MYMODEL.widgets[keys].table}`
3725
+ let subname = MYMODEL.table + '_' + keys
3726
+ let relationsWithKeys = relations ? relations[keys] : {}
3727
+ let dropdownMultis = []
3728
+
3729
+ for (let qq in MODEL_TABLE.widgets) {
3730
+ //check if have dropdown_multi
3731
+ if (MODEL_TABLE.widgets[qq].name == 'dropdown_multi') {
3732
+ dropdownMultis.push(qq)
3733
+ scriptForm += `$("#body-${keys}").on("click", "#dropdownadd${qq}",function () {
3614
3734
  let elm = $(this).siblings("#${qq}");
3615
3735
  var val = elm.val();
3616
3736
  if(val == ""){
@@ -3624,13 +3744,13 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = '', data = {}) => {
3624
3744
  $(this).parent().parent().find("#dropdownbox${qq}").append(data);
3625
3745
  $(this).siblings("#${qq}").val("");
3626
3746
  });${Util.newLine}`
3747
+ }
3627
3748
  }
3628
- }
3629
3749
 
3630
- scriptForm += `var append${keys} = (increment, callback) => { buildform(increment,'${MYMODEL.table}','${keys}','${JSON.stringify(relationsWithKeys)}', (data) => callback(data)) } `
3631
- scriptForm += Util.newLine
3632
- scriptForm += `var append${keys}Max = $('tbody#body-${keys}>tr').length;${Util.newLine}`
3633
- scriptForm += `function ${keys}Handler(){
3750
+ scriptForm += `var append${keys} = (increment, callback) => { buildform(increment,'${MYMODEL.table}','${keys}','${JSON.stringify(relationsWithKeys)}', (data) => callback(data)) } `
3751
+ scriptForm += Util.newLine
3752
+ scriptForm += `var append${keys}Max = $('tbody#body-${keys}>tr').length;${Util.newLine}`
3753
+ scriptForm += `function ${keys}Handler(){
3634
3754
  var index = $("#body-${keys}>tr").length || 0;
3635
3755
  $("#body-${keys}>tr").each(function (index, tr) {
3636
3756
  let dataname = $(tr).data("name") || "";
@@ -3670,12 +3790,12 @@ $("#body-${keys}>tr").each(function (index, tr) {
3670
3790
 
3671
3791
  }); ${Util.newLine}};${Util.newLine}`
3672
3792
 
3673
- scriptForm += ` $('#add${keys}').on('click',function(){
3793
+ scriptForm += ` $('#add${keys}').on('click',function(){
3674
3794
  append${keys}(append${keys}Max, (data) => $('#body-${keys}').append(data));
3675
3795
  append${keys}Max++;
3676
3796
  ${keys}Handler();
3677
3797
  }); ${Util.newLine}`
3678
- scriptForm += `function set${keys}value(index,myobj) {
3798
+ scriptForm += `function set${keys}value(index,myobj) {
3679
3799
  for(var key in myobj){
3680
3800
  if($(".${subname}_" + key).eq(index).attr("type") == "checkbox" && myobj[key] == 1){
3681
3801
  $(".${subname}_" + key).eq(index).prop("checked", true);
@@ -3708,7 +3828,7 @@ $("#body-${keys}>tr").each(function (index, tr) {
3708
3828
  }
3709
3829
  `
3710
3830
 
3711
- scriptForm += `function build${keys}form(index, myobj) {
3831
+ scriptForm += `function build${keys}form(index, myobj) {
3712
3832
  append${keys}(index, (data) => {
3713
3833
  $("#body-${keys}").append(data);
3714
3834
  ${keys}Handler();
@@ -3720,24 +3840,24 @@ $("#body-${keys}>tr").each(function (index, tr) {
3720
3840
  }
3721
3841
  `
3722
3842
 
3723
- /* scriptForm += ` $(function () {
3843
+ /* scriptForm += ` $(function () {
3724
3844
  var ${keys} = $("#body-${keys}").data("value") ? $("#body-${keys}").data("value") : [];
3725
3845
  ${keys}.forEach(function (myobj, index) {
3726
3846
  build${keys}form(index, myobj);
3727
3847
  });
3728
3848
  });${Util.newLine}`*/
3729
3849
 
3730
- break
3850
+ break
3731
3851
 
3732
- case 'ide_editor':
3733
- //var additionalScripts = `if (!!session.$worker) {session.$worker.send("setOptions", [{"esversion": 9,"esnext": false,}]);}`;
3734
- let script_annotaions = ''
3735
- let script_enabled = ''
3736
- let script_looping = ''
3737
- if (widgets[keys].language == 'javascript') {
3738
- script_annotaions = `editor_${keys}.session.setOption("useWorker", true);`
3739
- script_enabled = `editor_${keys}.session.setOption("useWorker", true);`
3740
- script_looping = `
3852
+ case 'ide_editor':
3853
+ //var additionalScripts = `if (!!session.$worker) {session.$worker.send("setOptions", [{"esversion": 9,"esnext": false,}]);}`;
3854
+ let script_annotaions = ''
3855
+ let script_enabled = ''
3856
+ let script_looping = ''
3857
+ if (widgets[keys].language == 'javascript') {
3858
+ script_annotaions = `editor_${keys}.session.setOption("useWorker", true);`
3859
+ script_enabled = `editor_${keys}.session.setOption("useWorker", true);`
3860
+ script_looping = `
3741
3861
  var errors = editor_${keys}.getSession().getAnnotations().filter(a=>a.type==='error');
3742
3862
  arr = [];
3743
3863
  errors.forEach(function(erItem) {
@@ -3749,8 +3869,8 @@ ${keys}.forEach(function (myobj, index) {
3749
3869
  editor_${keys}.getSession().setAnnotations(arr);
3750
3870
  editor_${keys}.session.setOption("useWorker", true);
3751
3871
  `
3752
- }
3753
- scriptForm += `var editor_${keys} = ace.edit("editor_${keys}");
3872
+ }
3873
+ scriptForm += `var editor_${keys} = ace.edit("editor_${keys}");
3754
3874
  editor_${keys}.getSession().setMode("ace/mode/${widgets[keys].language}");
3755
3875
  editor_${keys}.setValue(ace_value(ide_editor_${keys}));
3756
3876
  $("#${keys}").text(ace_value(ide_editor_${keys}));
@@ -3761,7 +3881,8 @@ ${keys}.forEach(function (myobj, index) {
3761
3881
  });
3762
3882
  `
3763
3883
 
3764
- break
3884
+ break
3885
+ }
3765
3886
  }
3766
3887
  }
3767
3888
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zet-lib",
3
- "version": "1.3.25",
3
+ "version": "1.3.27",
4
4
  "description": "zet is a library that part of zet generator.",
5
5
  "engines": {
6
6
  "node": ">=18"