zet-lib 1.3.24 → 1.3.26

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
@@ -1176,10 +1176,10 @@ Util.userAvatar = (img = '') => {
1176
1176
  }
1177
1177
 
1178
1178
  /*
1179
- MYSQL HELPER
1179
+ SQL HELPER
1180
1180
  */
1181
1181
  Util.selectParser = (fields = [], MYMODEL = {}) => {
1182
- //fields = fields.filter((e) => e !== 'actionColumn')
1182
+ let table = MYMODEL.table
1183
1183
  let virtuals = []
1184
1184
  let select = ''
1185
1185
  for (var key in MYMODEL.widgets) {
@@ -1190,19 +1190,44 @@ Util.selectParser = (fields = [], MYMODEL = {}) => {
1190
1190
  let arr = []
1191
1191
  fields.forEach((item) => {
1192
1192
  if (virtuals.includes(item)) {
1193
- select += MYMODEL.widgets[item].fields + ','
1193
+ select += `${MYMODEL.widgets[item].fields},`
1194
1194
  } else if (item === 'no') {
1195
- arr.push('id')
1195
+ arr.push(`${table}.id`)
1196
1196
  } else if (item === 'actionColumn') {
1197
- arr.push('lock')
1197
+ arr.push(`${table}.lock`)
1198
1198
  } else {
1199
- arr.push(item)
1199
+ arr.push(Util.fieldWithTable(item, MYMODEL))
1200
1200
  }
1201
1201
  })
1202
- select += `"${arr.join('","')}"`
1202
+ //select += `"${arr.join('","')}"`
1203
+ select += arr.join(',')
1203
1204
  return select
1204
1205
  }
1205
1206
 
1207
+ Util.fieldWithTable = (field, MYMODEL, isWhere = false) => {
1208
+ let name = ''
1209
+ let joinList = MYMODEL.joins && MYMODEL.joins.list.length > 0 ? MYMODEL.joins.list : []
1210
+ if (joinList.length > 0) {
1211
+ if (joinList.includes(field)) {
1212
+ let split = field.split('___')
1213
+ if (isWhere) {
1214
+ name = `${split[0]}.${split[1]}`
1215
+ } else {
1216
+ name = `${split[0]}.${split[1]} as ${field}`
1217
+ }
1218
+ } else {
1219
+ name = `${MYMODEL.table}.${field}`
1220
+ }
1221
+ } else {
1222
+ name = `${MYMODEL.table}.${field}`
1223
+ }
1224
+ return name
1225
+ }
1226
+
1227
+ Util.tableWithJoin = (MYMODEL) => {
1228
+ return MYMODEL.joins && MYMODEL.joins.list.length > 0 ? MYMODEL.joins.sql : []
1229
+ }
1230
+
1206
1231
  Util.selectMysql = (fields = [], relations = {}) => {
1207
1232
  let obj = {}
1208
1233
  let arr = []
@@ -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
  */
@@ -1901,12 +1945,16 @@ zRoute.listDataTable = async (req, res, objData = {}) => {
1901
1945
  try {
1902
1946
  const body = req.body
1903
1947
  const MYMODEL = objData.MYMODEL || {}
1948
+ const table = MYMODEL.table
1904
1949
  const fields = Object.prototype.hasOwnProperty.call(objData, 'fields') ? objData.fields : req.body.fields
1905
- const relations = await zRoute.relations(req, res, MYMODEL.table)
1950
+ let relations = await zRoute.relations(req, res, MYMODEL.table)
1951
+ //find relation with joins
1952
+
1906
1953
  const select = Object.prototype.hasOwnProperty.call(objData, 'select') ? objData.select : Util.selectParser(fields, MYMODEL)
1907
1954
  const columns = Object.prototype.hasOwnProperty.call(objData, 'columns') ? objData.columns : body.columns
1908
1955
  const asDate = []
1909
1956
  const asJSONb = []
1957
+ const asArray = []
1910
1958
  for (let key in MYMODEL.widgets) {
1911
1959
  if (MYMODEL.widgets[key].name == 'datetime') {
1912
1960
  asDate.push(key)
@@ -1917,16 +1965,23 @@ zRoute.listDataTable = async (req, res, objData = {}) => {
1917
1965
  if (MYMODEL.widgets[key].name == 'dropdown_multi') {
1918
1966
  asJSONb.push(key)
1919
1967
  }
1968
+ if (MYMODEL.widgets[key].name == 'dragdrop') {
1969
+ asJSONb.push(key)
1970
+ }
1920
1971
  if (MYMODEL.widgets[key].name == 'dropdown_checkbox') {
1921
1972
  asJSONb.push(key)
1922
1973
  }
1974
+ if (MYMODEL.widgets[key].name == 'json_array' || MYMODEL.widgets[key].name == 'array' || MYMODEL.widgets[key].name == 'dropzone') {
1975
+ asArray.push(key)
1976
+ }
1923
1977
  }
1924
1978
  let whereArray = []
1925
1979
  if (objData.hasOwnProperty('whereArray')) {
1926
1980
  whereArray = objData['whereArray']
1927
1981
  }
1982
+
1928
1983
  whereArray.push({
1929
- field: 'company_id',
1984
+ field: `${table}.company_id`,
1930
1985
  option: '=',
1931
1986
  value: res.locals.companyId,
1932
1987
  operator: 'AND',
@@ -1941,17 +1996,28 @@ zRoute.listDataTable = async (req, res, objData = {}) => {
1941
1996
  if (asJSONb.includes(fields[item.data])) {
1942
1997
  astype = 'jsonb'
1943
1998
  }
1999
+ if (asArray.includes(fields[item.data])) {
2000
+ astype = 'array'
2001
+ }
1944
2002
  if (astype === 'jsonb') {
1945
2003
  whereArray.push({
1946
- field: fields[item.data],
2004
+ field: Util.fieldWithTable(fields[item.data], MYMODEL, true),
1947
2005
  option: ' ',
1948
2006
  value: ` @> '["${item.search.value}"]'`,
1949
2007
  operator: 'AND',
1950
2008
  type: 'inline',
1951
2009
  })
2010
+ } else if (astype === 'array') {
2011
+ whereArray.push({
2012
+ field: '',
2013
+ option: '',
2014
+ value: ` ${Util.fieldWithTable(fields[item.data], MYMODEL, true)}::text ILIKE '${item.search.value}' `,
2015
+ operator: 'AND',
2016
+ type: 'inline',
2017
+ })
1952
2018
  } else {
1953
2019
  whereArray.push({
1954
- field: fields[item.data],
2020
+ field: Util.fieldWithTable(fields[item.data], MYMODEL, true),
1955
2021
  option: MYMODEL.options[fields[item.data]],
1956
2022
  value: item.search.value,
1957
2023
  operator: 'AND',
@@ -1960,20 +2026,31 @@ zRoute.listDataTable = async (req, res, objData = {}) => {
1960
2026
  }
1961
2027
  }
1962
2028
  })
1963
- const orderColumn = fields[body.order[0].column] == 'actionColumn' ? 'id' : fields[body.order[0].column] == 'no' ? 'id' : fields[body.order[0].column] == 'actionColum' ? 'id' : fields[body.order[0].column]
1964
- const rows = await connection.results({
2029
+
2030
+ 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]
2031
+ let gridData = {
1965
2032
  select: select,
1966
2033
  table: MYMODEL.table,
1967
2034
  whereArray: whereArray,
1968
2035
  limit: body.length,
1969
2036
  offset: body.start,
1970
- orderBy: [orderColumn, body.order[0].dir],
1971
- })
1972
- const count = await connection.result({
1973
- select: 'count(id) as count',
2037
+ order_by: [`${orderColumn} ${body.order[0].dir}`],
2038
+ }
2039
+ let joins = Util.tableWithJoin(MYMODEL)
2040
+ if (joins.length > 0) {
2041
+ gridData.joins = joins
2042
+ }
2043
+ const rows = await connection.results(gridData)
2044
+ let gridCount = {
2045
+ select: `count(${table}.id) as count`,
1974
2046
  table: MYMODEL.table,
1975
2047
  whereArray: whereArray,
1976
- })
2048
+ }
2049
+ if (joins.length > 0) {
2050
+ gridCount.joins = joins
2051
+ }
2052
+ const count = await connection.result(gridCount)
2053
+
1977
2054
  let datas = []
1978
2055
  const zRole = objData.zRole || require('./zRole')
1979
2056
  const levels = objData.hasOwnProperty('levels') ? objData.levels : zRole.myLevel(req, res, MYMODEL.table)
@@ -2014,6 +2091,7 @@ zRoute.listDataTable = async (req, res, objData = {}) => {
2014
2091
 
2015
2092
  zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
2016
2093
  const room = res.locals.token || 'aa'
2094
+ const table = MYMODEL.table
2017
2095
  try {
2018
2096
  actionButtonsFn = actionButtonsFn || function () {}
2019
2097
  const relations = await zRoute.relations(req, res, MYMODEL.table)
@@ -2040,7 +2118,7 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
2040
2118
  if (MYMODEL.widgets[key].name == 'dropdown_checkbox') {
2041
2119
  asJSONb.push(key)
2042
2120
  }
2043
- if (MYMODEL.widgets[key].name == 'json_array' || MYMODEL.widgets[key].name == 'array') {
2121
+ if (MYMODEL.widgets[key].name == 'json_array' || MYMODEL.widgets[key].name == 'array' || MYMODEL.widgets[key].name == 'dropzone') {
2044
2122
  asArray.push(key)
2045
2123
  }
2046
2124
  }
@@ -2048,12 +2126,13 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
2048
2126
  const columns = body.columns
2049
2127
  if (MYMODEL.keys.includes('company_id')) {
2050
2128
  whereArray.push({
2051
- field: 'company_id',
2129
+ field: `${table}.company_id`,
2052
2130
  option: '=',
2053
2131
  value: res.locals.companyId,
2054
2132
  operator: 'AND',
2055
2133
  })
2056
2134
  }
2135
+
2057
2136
  columns.forEach(function (item) {
2058
2137
  if (item.search.value) {
2059
2138
  let astype = 'text'
@@ -2068,7 +2147,7 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
2068
2147
  }
2069
2148
  if (astype === 'jsonb') {
2070
2149
  whereArray.push({
2071
- field: fields[item.data],
2150
+ field: Util.fieldWithTable(fields[item.data], MYMODEL, true),
2072
2151
  option: ' ',
2073
2152
  value: ` @> '["${item.search.value}"]'`,
2074
2153
  operator: 'AND',
@@ -2078,13 +2157,13 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
2078
2157
  whereArray.push({
2079
2158
  field: '',
2080
2159
  option: '',
2081
- value: ` ${fields[item.data]}::text ILIKE '${item.search.value}' `,
2160
+ value: ` ${Util.fieldWithTable(fields[item.data], MYMODEL, true)}::text ILIKE '${item.search.value}' `,
2082
2161
  operator: 'AND',
2083
2162
  type: 'inline',
2084
2163
  })
2085
2164
  } else {
2086
2165
  whereArray.push({
2087
- field: fields[item.data],
2166
+ field: Util.fieldWithTable(fields[item.data], MYMODEL, true),
2088
2167
  option: MYMODEL.options[fields[item.data]],
2089
2168
  value: item.search.value,
2090
2169
  operator: 'AND',
@@ -2093,20 +2172,30 @@ zRoute.listData = async (req, res, MYMODEL, zRole, actionButtonsFn) => {
2093
2172
  }
2094
2173
  }
2095
2174
  })
2096
- const orderColumn = fields[body.order[0].column] == 'actionColumn' ? 'id' : fields[body.order[0].column] == 'no' ? 'id' : fields[body.order[0].column] == 'actionColum' ? 'id' : fields[body.order[0].column]
2097
- const rows = await connection.results({
2175
+
2176
+ 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]
2177
+ let gridData = {
2098
2178
  select: select,
2099
2179
  table: MYMODEL.table,
2100
2180
  whereArray: whereArray,
2101
2181
  limit: body.length,
2102
2182
  offset: body.start,
2103
- orderBy: [orderColumn, body.order[0].dir],
2104
- })
2105
- const count = await connection.result({
2106
- select: 'count(id) as count',
2183
+ order_by: [`${orderColumn} ${body.order[0].dir}`],
2184
+ }
2185
+ let joins = Util.tableWithJoin(MYMODEL)
2186
+ if (joins.length > 0) {
2187
+ gridData.joins = joins
2188
+ }
2189
+ const rows = await connection.results(gridData)
2190
+ let gridCount = {
2191
+ select: `count(${table}.id) as count`,
2107
2192
  table: MYMODEL.table,
2108
2193
  whereArray: whereArray,
2109
- })
2194
+ }
2195
+ if (joins.length > 0) {
2196
+ gridCount.joins = joins
2197
+ }
2198
+ const count = await connection.result(gridCount)
2110
2199
  let datas = []
2111
2200
  const levels = zRole.myLevel(req, res, MYMODEL.table)
2112
2201
  rows.forEach(function (row, index) {
@@ -3216,70 +3305,76 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = '', data = {}) => {
3216
3305
  let lexicals = []
3217
3306
  let mapKey = ''
3218
3307
  let hasAttributes = []
3308
+ let joinsFields = []
3309
+ if (MYMODEL.joins) {
3310
+ joinsFields = MYMODEL.joins.list
3311
+ }
3219
3312
  for (let key in widgets) {
3220
- if (widgets[key].name == 'datepicker') {
3221
- hasDatePicker = true
3222
- } else if (widgets[key].name == 'number') {
3223
- hasNumber = true
3224
- } else if (widgets[key].name == 'clockpicker') {
3225
- hasClockPicker = true
3226
- } else if (widgets[key].name == 'editor') {
3227
- hasEditor = true
3228
- } else if (widgets[key].name == 'ide_editor') {
3229
- hasIde = true
3230
- } else if (widgets[key].name == 'switch') {
3231
- let switchObj = moduleLib.switch(req, res, `#${key}`, widgets[key].fields)
3232
- scriptForm += switchObj.script
3233
- headObj.switch = switchObj.head
3234
- endObj.switch = switchObj.end
3235
- } else if (widgets[key].name == 'typeahead') {
3236
- let typeaheadObj = moduleLib.typeahead(req, res, MYMODEL.table, `#${key}Typeahead`)
3237
- scriptForm += typeaheadObj.script
3238
- headObj.typeahead = typeaheadObj.head
3239
- endObj.typeahead = typeaheadObj.end
3240
- } else if (widgets[key].name == 'location') {
3241
- let locationObj = moduleLib.location(req, res, key)
3242
- scriptForm += locationObj.script
3243
- endObj.location = locationObj.end
3244
- hasLocation = true
3245
- mapKey = key
3246
- } else if (widgets[key].name == 'dragdrop') {
3247
- let dragdropObj = moduleLib.dragdrop(req, res, key)
3248
- scriptForm += dragdropObj.script
3249
- headObj.dragdrop = dragdropObj.head
3250
- endObj.dragdrop = dragdropObj.end
3251
- } else if (widgets[key].name == 'datetime') {
3252
- hasDateTimePicker = true
3253
- } else if (widgets[key].name == 'table') {
3254
- hasTable = true
3255
- hasDateTimePicker = true
3256
- hasClockPicker = true
3257
- hasDatePicker = true
3258
- } else if (widgets[key].name == 'tags') {
3259
- hasTags = true
3260
- } else if (widgets[key].name == 'lexical') {
3261
- let lexicalObj = moduleLib.lexical(req, res, `#${key}`)
3262
- hasLexical = true
3263
- headObj.lexical = lexicalObj.head
3264
- endObj.lexical = lexicalObj.end
3265
- lexicals.push(key)
3266
- } else if (widgets[key].name == 'tinymce') {
3267
- hasTinymce = true
3268
- } else if (widgets[key].name == 'dropzone') {
3269
- hasDropzone = true
3270
- dropzones.push(key)
3271
- }
3272
- // has chains
3273
- if (widgets[key].name == 'relation') {
3274
- if (widgets[key].isChain) {
3275
- if (widgets[key].chains.length) {
3276
- chainsObj[key] = widgets[key].chains
3277
- hasChain = true
3278
- }
3313
+ if (!joinsFields.includes(key)) {
3314
+ if (widgets[key].name == 'datepicker') {
3315
+ hasDatePicker = true
3316
+ } else if (widgets[key].name == 'number') {
3317
+ hasNumber = true
3318
+ } else if (widgets[key].name == 'clockpicker') {
3319
+ hasClockPicker = true
3320
+ } else if (widgets[key].name == 'editor') {
3321
+ hasEditor = true
3322
+ } else if (widgets[key].name == 'ide_editor') {
3323
+ hasIde = true
3324
+ } else if (widgets[key].name == 'switch') {
3325
+ let switchObj = moduleLib.switch(req, res, `#${key}`, widgets[key].fields)
3326
+ scriptForm += switchObj.script
3327
+ headObj.switch = switchObj.head
3328
+ endObj.switch = switchObj.end
3329
+ } else if (widgets[key].name == 'typeahead') {
3330
+ let typeaheadObj = moduleLib.typeahead(req, res, MYMODEL.table, `#${key}Typeahead`)
3331
+ scriptForm += typeaheadObj.script
3332
+ headObj.typeahead = typeaheadObj.head
3333
+ endObj.typeahead = typeaheadObj.end
3334
+ } else if (widgets[key].name == 'location') {
3335
+ let locationObj = moduleLib.location(req, res, key)
3336
+ scriptForm += locationObj.script
3337
+ endObj.location = locationObj.end
3338
+ hasLocation = true
3339
+ mapKey = key
3340
+ } else if (widgets[key].name == 'dragdrop') {
3341
+ let dragdropObj = moduleLib.dragdrop(req, res, key)
3342
+ scriptForm += dragdropObj.script
3343
+ headObj.dragdrop = dragdropObj.head
3344
+ endObj.dragdrop = dragdropObj.end
3345
+ } else if (widgets[key].name == 'datetime') {
3346
+ hasDateTimePicker = true
3347
+ } else if (widgets[key].name == 'table') {
3348
+ hasTable = true
3349
+ hasDateTimePicker = true
3350
+ hasClockPicker = true
3351
+ hasDatePicker = true
3352
+ } else if (widgets[key].name == 'tags') {
3353
+ hasTags = true
3354
+ } else if (widgets[key].name == 'lexical') {
3355
+ let lexicalObj = moduleLib.lexical(req, res, `#${key}`)
3356
+ hasLexical = true
3357
+ headObj.lexical = lexicalObj.head
3358
+ endObj.lexical = lexicalObj.end
3359
+ lexicals.push(key)
3360
+ } else if (widgets[key].name == 'tinymce') {
3361
+ hasTinymce = true
3362
+ } else if (widgets[key].name == 'dropzone') {
3363
+ hasDropzone = true
3364
+ dropzones.push(key)
3279
3365
  }
3280
- //relation_all_attributes
3281
- if (widgets[key].isAttributes) {
3282
- hasAttributes.push(key)
3366
+ // has chains
3367
+ if (widgets[key].name == 'relation') {
3368
+ if (widgets[key].isChain) {
3369
+ if (widgets[key].chains.length) {
3370
+ chainsObj[key] = widgets[key].chains
3371
+ hasChain = true
3372
+ }
3373
+ }
3374
+ //relation_all_attributes
3375
+ if (widgets[key].isAttributes) {
3376
+ hasAttributes.push(key)
3377
+ }
3283
3378
  }
3284
3379
  }
3285
3380
  }
@@ -3517,10 +3612,11 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = '', data = {}) => {
3517
3612
  });`
3518
3613
 
3519
3614
  for (let keys in widgets) {
3520
- let widgetName = widgets[keys].name
3521
- switch (widgetName) {
3522
- case 'multi_line_editor':
3523
- scriptForm += `$(".text-toggle").on("click", function(){
3615
+ if (!joinsFields.includes(keys)) {
3616
+ let widgetName = widgets[keys].name
3617
+ switch (widgetName) {
3618
+ case 'multi_line_editor':
3619
+ scriptForm += `$(".text-toggle").on("click", function(){
3524
3620
  let editorId = $(this).data("id");
3525
3621
  $("#"+editorId).attr("type","text");
3526
3622
  $("#a_"+editorId).hide();
@@ -3536,10 +3632,10 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = '', data = {}) => {
3536
3632
  }
3537
3633
  }
3538
3634
  });`
3539
- break
3635
+ break
3540
3636
 
3541
- case 'dropdown_multi':
3542
- scriptForm += ` $("#dropdownadd${keys}").on("click", function () {
3637
+ case 'dropdown_multi':
3638
+ scriptForm += ` $("#dropdownadd${keys}").on("click", function () {
3543
3639
  var val = $("#${keys}").val();
3544
3640
  if(val == ""){
3545
3641
  alert("Please select data");
@@ -3550,25 +3646,25 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = '', data = {}) => {
3550
3646
  $("#dropdownbox${keys}").append(data);
3551
3647
  $("#${keys}").val("");
3552
3648
  });${Util.newLine}`
3553
- break
3649
+ break
3554
3650
 
3555
- case 'table':
3556
- let MODEL_TABLE = MYMODELS[MYMODEL.widgets[keys].table] || require(`${dirRoot}/models/${MYMODEL.widgets[keys].table}`)
3557
- //let MODEL_TABLE_RELATIONS = await zRoute.relations(req, res, MODEL_TABLE.table);
3558
- //relations[key + "TABLE"]
3559
- let RELATIONS_MODEL_TABLE = relations && relations.hasOwnProperty(keys + 'TABLE') ? relations[keys + 'TABLE'] : {}
3560
- let zForm = zRoute.formField(req, res, MODEL_TABLE, RELATIONS_MODEL_TABLE)
3561
- zRoute.moduleLib(req, res, MODEL_TABLE, RELATIONS_MODEL_TABLE, zForms)
3562
- let trash = `trash_${keys}_${MYMODEL.widgets[keys].table}`
3563
- let subname = MYMODEL.table + '_' + keys
3564
- let relationsWithKeys = relations ? relations[keys] : {}
3565
- let dropdownMultis = []
3566
-
3567
- for (let qq in MODEL_TABLE.widgets) {
3568
- //check if have dropdown_multi
3569
- if (MODEL_TABLE.widgets[qq].name == 'dropdown_multi') {
3570
- dropdownMultis.push(qq)
3571
- scriptForm += `$("#body-${keys}").on("click", "#dropdownadd${qq}",function () {
3651
+ case 'table':
3652
+ let MODEL_TABLE = MYMODELS[MYMODEL.widgets[keys].table] || require(`${dirRoot}/models/${MYMODEL.widgets[keys].table}`)
3653
+ //let MODEL_TABLE_RELATIONS = await zRoute.relations(req, res, MODEL_TABLE.table);
3654
+ //relations[key + "TABLE"]
3655
+ let RELATIONS_MODEL_TABLE = relations && relations.hasOwnProperty(keys + 'TABLE') ? relations[keys + 'TABLE'] : {}
3656
+ let zForm = zRoute.formField(req, res, MODEL_TABLE, RELATIONS_MODEL_TABLE)
3657
+ zRoute.moduleLib(req, res, MODEL_TABLE, RELATIONS_MODEL_TABLE, zForms)
3658
+ let trash = `trash_${keys}_${MYMODEL.widgets[keys].table}`
3659
+ let subname = MYMODEL.table + '_' + keys
3660
+ let relationsWithKeys = relations ? relations[keys] : {}
3661
+ let dropdownMultis = []
3662
+
3663
+ for (let qq in MODEL_TABLE.widgets) {
3664
+ //check if have dropdown_multi
3665
+ if (MODEL_TABLE.widgets[qq].name == 'dropdown_multi') {
3666
+ dropdownMultis.push(qq)
3667
+ scriptForm += `$("#body-${keys}").on("click", "#dropdownadd${qq}",function () {
3572
3668
  let elm = $(this).siblings("#${qq}");
3573
3669
  var val = elm.val();
3574
3670
  if(val == ""){
@@ -3582,13 +3678,13 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = '', data = {}) => {
3582
3678
  $(this).parent().parent().find("#dropdownbox${qq}").append(data);
3583
3679
  $(this).siblings("#${qq}").val("");
3584
3680
  });${Util.newLine}`
3681
+ }
3585
3682
  }
3586
- }
3587
3683
 
3588
- scriptForm += `var append${keys} = (increment, callback) => { buildform(increment,'${MYMODEL.table}','${keys}','${JSON.stringify(relationsWithKeys)}', (data) => callback(data)) } `
3589
- scriptForm += Util.newLine
3590
- scriptForm += `var append${keys}Max = $('tbody#body-${keys}>tr').length;${Util.newLine}`
3591
- scriptForm += `function ${keys}Handler(){
3684
+ scriptForm += `var append${keys} = (increment, callback) => { buildform(increment,'${MYMODEL.table}','${keys}','${JSON.stringify(relationsWithKeys)}', (data) => callback(data)) } `
3685
+ scriptForm += Util.newLine
3686
+ scriptForm += `var append${keys}Max = $('tbody#body-${keys}>tr').length;${Util.newLine}`
3687
+ scriptForm += `function ${keys}Handler(){
3592
3688
  var index = $("#body-${keys}>tr").length || 0;
3593
3689
  $("#body-${keys}>tr").each(function (index, tr) {
3594
3690
  let dataname = $(tr).data("name") || "";
@@ -3628,12 +3724,12 @@ $("#body-${keys}>tr").each(function (index, tr) {
3628
3724
 
3629
3725
  }); ${Util.newLine}};${Util.newLine}`
3630
3726
 
3631
- scriptForm += ` $('#add${keys}').on('click',function(){
3727
+ scriptForm += ` $('#add${keys}').on('click',function(){
3632
3728
  append${keys}(append${keys}Max, (data) => $('#body-${keys}').append(data));
3633
3729
  append${keys}Max++;
3634
3730
  ${keys}Handler();
3635
3731
  }); ${Util.newLine}`
3636
- scriptForm += `function set${keys}value(index,myobj) {
3732
+ scriptForm += `function set${keys}value(index,myobj) {
3637
3733
  for(var key in myobj){
3638
3734
  if($(".${subname}_" + key).eq(index).attr("type") == "checkbox" && myobj[key] == 1){
3639
3735
  $(".${subname}_" + key).eq(index).prop("checked", true);
@@ -3666,7 +3762,7 @@ $("#body-${keys}>tr").each(function (index, tr) {
3666
3762
  }
3667
3763
  `
3668
3764
 
3669
- scriptForm += `function build${keys}form(index, myobj) {
3765
+ scriptForm += `function build${keys}form(index, myobj) {
3670
3766
  append${keys}(index, (data) => {
3671
3767
  $("#body-${keys}").append(data);
3672
3768
  ${keys}Handler();
@@ -3678,24 +3774,24 @@ $("#body-${keys}>tr").each(function (index, tr) {
3678
3774
  }
3679
3775
  `
3680
3776
 
3681
- /* scriptForm += ` $(function () {
3777
+ /* scriptForm += ` $(function () {
3682
3778
  var ${keys} = $("#body-${keys}").data("value") ? $("#body-${keys}").data("value") : [];
3683
3779
  ${keys}.forEach(function (myobj, index) {
3684
3780
  build${keys}form(index, myobj);
3685
3781
  });
3686
3782
  });${Util.newLine}`*/
3687
3783
 
3688
- break
3784
+ break
3689
3785
 
3690
- case 'ide_editor':
3691
- //var additionalScripts = `if (!!session.$worker) {session.$worker.send("setOptions", [{"esversion": 9,"esnext": false,}]);}`;
3692
- let script_annotaions = ''
3693
- let script_enabled = ''
3694
- let script_looping = ''
3695
- if (widgets[keys].language == 'javascript') {
3696
- script_annotaions = `editor_${keys}.session.setOption("useWorker", true);`
3697
- script_enabled = `editor_${keys}.session.setOption("useWorker", true);`
3698
- script_looping = `
3786
+ case 'ide_editor':
3787
+ //var additionalScripts = `if (!!session.$worker) {session.$worker.send("setOptions", [{"esversion": 9,"esnext": false,}]);}`;
3788
+ let script_annotaions = ''
3789
+ let script_enabled = ''
3790
+ let script_looping = ''
3791
+ if (widgets[keys].language == 'javascript') {
3792
+ script_annotaions = `editor_${keys}.session.setOption("useWorker", true);`
3793
+ script_enabled = `editor_${keys}.session.setOption("useWorker", true);`
3794
+ script_looping = `
3699
3795
  var errors = editor_${keys}.getSession().getAnnotations().filter(a=>a.type==='error');
3700
3796
  arr = [];
3701
3797
  errors.forEach(function(erItem) {
@@ -3707,8 +3803,8 @@ ${keys}.forEach(function (myobj, index) {
3707
3803
  editor_${keys}.getSession().setAnnotations(arr);
3708
3804
  editor_${keys}.session.setOption("useWorker", true);
3709
3805
  `
3710
- }
3711
- scriptForm += `var editor_${keys} = ace.edit("editor_${keys}");
3806
+ }
3807
+ scriptForm += `var editor_${keys} = ace.edit("editor_${keys}");
3712
3808
  editor_${keys}.getSession().setMode("ace/mode/${widgets[keys].language}");
3713
3809
  editor_${keys}.setValue(ace_value(ide_editor_${keys}));
3714
3810
  $("#${keys}").text(ace_value(ide_editor_${keys}));
@@ -3719,7 +3815,8 @@ ${keys}.forEach(function (myobj, index) {
3719
3815
  });
3720
3816
  `
3721
3817
 
3722
- break
3818
+ break
3819
+ }
3723
3820
  }
3724
3821
  }
3725
3822
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zet-lib",
3
- "version": "1.3.24",
3
+ "version": "1.3.26",
4
4
  "description": "zet is a library that part of zet generator.",
5
5
  "engines": {
6
6
  "node": ">=18"