zet-lib 3.1.4 → 3.1.6
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/generatorApi.js +242 -375
- package/lib/views/generatorjs.ejs +69 -0
- package/lib/zGeneratorRouter.js +1 -22
- package/lib/zRoute.js +54 -2
- package/package.json +1 -1
- package/lib/routes/api.js +0 -52
- package/lib/routes/index.js +0 -9
package/lib/generatorApi.js
CHANGED
|
@@ -171,20 +171,249 @@ Api.index = async (req, res) => {
|
|
|
171
171
|
}
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
-
Api.modal = async (
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
174
|
+
Api.modal = async (body) => {
|
|
175
|
+
try {
|
|
176
|
+
let table = body.table || "";
|
|
177
|
+
let html = '';
|
|
178
|
+
let fields = [];
|
|
179
|
+
let datas = {table: '', tabs: [], labels: {}, details: {}, left: [], right: []};
|
|
180
|
+
let count = 1;
|
|
181
|
+
let tabView = '';
|
|
182
|
+
let tabBox = '';
|
|
183
|
+
let tabUl = '';
|
|
184
|
+
let tabContent = '';
|
|
185
|
+
let left = '', right = '', oneColumn = '';
|
|
186
|
+
let hasTab = false;
|
|
187
|
+
let properties = {};
|
|
188
|
+
let rowsFields;
|
|
189
|
+
let result = body.result;
|
|
190
|
+
const others = result.others || {};
|
|
191
|
+
let othersArr = Object.keys(others) || [];
|
|
192
|
+
const hasContainer = othersArr.length > 0;
|
|
193
|
+
|
|
194
|
+
let leftData = others.LEFT || [];
|
|
195
|
+
let rightData = others.RIGHT || [];
|
|
196
|
+
let oneColumnData = others.ONE_COLUMN || [];
|
|
197
|
+
let leftsNew = [], rightsNew = [], oneColumnsNew = [];
|
|
198
|
+
let ALL_FIELDS = {};
|
|
199
|
+
|
|
200
|
+
if (table) {
|
|
201
|
+
rowsFields = body.rowsFields;
|
|
202
|
+
if (result.id) {
|
|
203
|
+
datas = {
|
|
204
|
+
details: result.details || {},
|
|
205
|
+
labels: result.labels || {},
|
|
206
|
+
tabs: result.tabs || [],
|
|
207
|
+
left: result.left || [],
|
|
208
|
+
right: result.right || [],
|
|
209
|
+
oneColumn: result.one_column || [],
|
|
210
|
+
sorting: result.sorting || [],
|
|
211
|
+
property: result.properties || {}
|
|
212
|
+
};
|
|
213
|
+
let details = datas.details;
|
|
214
|
+
properties = datas.property;
|
|
215
|
+
let tabs = datas.tabs;
|
|
216
|
+
|
|
217
|
+
// Jika ada container, gunakan containerObject untuk memproses data
|
|
218
|
+
if (hasContainer) {
|
|
219
|
+
ALL_FIELDS = containerObject(leftData, rightData, oneColumnData, tabs);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
if (tabs.length) {
|
|
223
|
+
hasTab = true;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
if (hasTab) {
|
|
227
|
+
let tabLeft = [], tabRight = [], tabOneColum = [];
|
|
228
|
+
|
|
229
|
+
tabUl += '<ul class="nav nav-tabs" id="myTab" role="tablist">';
|
|
230
|
+
tabContent += '<div class="tab-content" id="myTabContent">';
|
|
231
|
+
tabs.forEach(function (item, i) {
|
|
232
|
+
let navlink = i == 0 ? ' active' : '';
|
|
233
|
+
let ariaselected = i == 0 ? "true" : "false";
|
|
234
|
+
let showActive = i == 0 ? ' show active ' : '';
|
|
235
|
+
let n = i + 1;
|
|
236
|
+
let arrName = 'arr' + i;
|
|
237
|
+
let dynamicsLeft = '', dynamicsRight = '', dynamicsOneColumn = '';
|
|
238
|
+
|
|
239
|
+
if (hasContainer) {
|
|
240
|
+
// Logika untuk container
|
|
241
|
+
tabLeft = ALL_FIELDS.tabLeft[arrName] || [];
|
|
242
|
+
tabRight = ALL_FIELDS.tabRight[arrName] || [];
|
|
243
|
+
tabOneColum = ALL_FIELDS.tabOneColumn[arrName] || [];
|
|
244
|
+
|
|
245
|
+
if (tabLeft.length) {
|
|
246
|
+
tabLeft.map((o) => {
|
|
247
|
+
dynamicsLeft += makeItemsOl(o, "LEFT", i, datas);
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
if (tabRight.length) {
|
|
251
|
+
tabRight.map((o) => {
|
|
252
|
+
dynamicsRight += makeItemsOl(o, "RIGHT", i, datas);
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
if (tabOneColum.length) {
|
|
256
|
+
tabOneColum.map((o) => {
|
|
257
|
+
dynamicsOneColumn += makeItemsOl(o, "ONE_COLUMN", i, datas);
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
} else {
|
|
261
|
+
// Logika untuk classic
|
|
262
|
+
if (datas.left.length) {
|
|
263
|
+
datas.left.forEach(function (o) {
|
|
264
|
+
if (typeof o == "object") {
|
|
265
|
+
for (var key in o) {
|
|
266
|
+
if (key == arrName) {
|
|
267
|
+
tabLeft = o[key];
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
}
|
|
273
|
+
if (datas.right.length) {
|
|
274
|
+
datas.right.forEach(function (o) {
|
|
275
|
+
if (typeof o == "object") {
|
|
276
|
+
for (var key in o) {
|
|
277
|
+
if (key == arrName) {
|
|
278
|
+
tabRight = o[key];
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
if (datas.oneColumn.length) {
|
|
285
|
+
datas.oneColumn.forEach(function (o) {
|
|
286
|
+
if (typeof o == "object") {
|
|
287
|
+
for (var key in o) {
|
|
288
|
+
if (key == arrName) {
|
|
289
|
+
tabOneColum = o[key];
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
if (tabLeft.length) {
|
|
297
|
+
tabLeft.map((o) => {
|
|
298
|
+
if(datas.property[o] && datas.property[o].hasOwnProperty("type") ) {
|
|
299
|
+
dynamicsLeft += dragable_with_icon(o, datas.labels[o], i, "LEFT", datas.property[o].type);
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
if (tabRight.length) {
|
|
304
|
+
tabRight.map((o) => {
|
|
305
|
+
if(datas.property[o] && datas.property[o].hasOwnProperty("type") ) {
|
|
306
|
+
dynamicsRight += dragable_with_icon(o, datas.labels[o], i, "RIGHT", datas.property[o].type);
|
|
307
|
+
}
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
if (tabOneColum.length) {
|
|
311
|
+
tabOneColum.map((o) => {
|
|
312
|
+
if(datas.property[o] && datas.property[o].hasOwnProperty("type") ) {
|
|
313
|
+
dynamicsOneColumn += dragable_with_icon(o, datas.labels[o], i, "ONE_COLUMN", datas.property[o].type);
|
|
314
|
+
}
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
tabView += `<li class="item" draggable="true"><div class='divtabs'>${n}. <span class="tabname"> ${item}</span><input type='hidden' name='tabs[]' value='${item}' /> <button type='button' class='btn btn-sm btn-info edittab' data-toggle="modal" data-target="#modal_tab" data-name="${item}" data-id="${i}" > <i class='fas fa-edit'></i> </button> <button type='button' onclick='deleteTab(this)' class='btn btn-sm btn-danger trashtab'><i class='fas fa-trash'></i> </button></div></li>`;
|
|
320
|
+
tabUl += `<li class="nav-item">
|
|
321
|
+
<a class="nav-link ${navlink}" id="tabid${i}" data-toggle="tab" href="#tabgo${i}" role="tab" aria-controls="tabgo${i}" aria-selected="${ariaselected}">${item}</a>
|
|
322
|
+
</li>`;
|
|
323
|
+
|
|
324
|
+
tabContent += `<div class="tab-pane fade ${showActive}" id="tabgo${i}" role="tabpanel" aria-labelledby="tabtabgo${i}">
|
|
325
|
+
<div class="container">
|
|
326
|
+
<div class="row">
|
|
327
|
+
<div class="col-md-6"><ol class="mydragable divbox" data-name="LEFT" id="arr${i}">${dynamicsLeft}</ol></div>
|
|
328
|
+
<div class="col-md-6"><ol class="mydragable divbox" data-name="RIGHT" id="arr${i}">${dynamicsRight}</ol></div>
|
|
329
|
+
</div>
|
|
330
|
+
<div class="row">
|
|
331
|
+
<div class="col-md-12"><ol class="mydragable divbox" data-name="ONE_COLUMN" id="arr${i}">${dynamicsOneColumn}</ol></div>
|
|
332
|
+
</div>
|
|
333
|
+
</div>
|
|
334
|
+
</div>`;
|
|
335
|
+
});
|
|
336
|
+
tabUl += '</ul>';
|
|
337
|
+
tabContent += '</div>';
|
|
338
|
+
count = tabs.length + 1;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
// Proses data untuk left, right, dan oneColumn di luar tabs
|
|
344
|
+
if (hasContainer) {
|
|
345
|
+
// Logika untuk container
|
|
346
|
+
let datasLeft = ALL_FIELDS.left || [];
|
|
347
|
+
let datasRight = ALL_FIELDS.right || [];
|
|
348
|
+
let datasOneColumn = ALL_FIELDS.oneColumn || [];
|
|
349
|
+
|
|
350
|
+
if (datasLeft.length) {
|
|
351
|
+
datasLeft.forEach(function (item) {
|
|
352
|
+
if(!Util.in_array(item, leftsNew)) {
|
|
353
|
+
left += makeItemsOl(item, "LEFT", "", datas);
|
|
354
|
+
}
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
if (datasRight.length) {
|
|
358
|
+
datasRight.forEach(function (item) {
|
|
359
|
+
if(!Util.in_array(item, rightsNew)) {
|
|
360
|
+
right += makeItemsOl(item, "RIGHT", "", datas);
|
|
361
|
+
}
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
if (datasOneColumn.length) {
|
|
365
|
+
datasOneColumn.forEach(function (item) {
|
|
366
|
+
if(!Util.in_array(item, oneColumnsNew)) {
|
|
367
|
+
oneColumn += makeItemsOl(item, "ONE_COLUMN", "", datas);
|
|
368
|
+
}
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
} else {
|
|
372
|
+
// Logika untuk classic
|
|
373
|
+
if (datas.left.length) {
|
|
374
|
+
datas.left.forEach(function (item) {
|
|
375
|
+
if (properties.hasOwnProperty(item)) {
|
|
376
|
+
left += dragable_with_icon(item, datas.labels[item], "", "LEFT", datas.property[item].type);
|
|
377
|
+
}
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
if (datas.right.length) {
|
|
381
|
+
datas.right.forEach(function (item) {
|
|
382
|
+
if (properties.hasOwnProperty(item)) {
|
|
383
|
+
right += dragable_with_icon(item, datas.labels[item], "", "RIGHT", datas.property[item].type);
|
|
384
|
+
}
|
|
385
|
+
});
|
|
386
|
+
}
|
|
387
|
+
if (datas.oneColumn.length) {
|
|
388
|
+
datas.oneColumn.forEach(function (item) {
|
|
389
|
+
if (properties.hasOwnProperty(item)) {
|
|
390
|
+
oneColumn += dragable_with_icon(item, datas.labels[item], "", "ONE_COLUMN", datas.property[item].type);
|
|
391
|
+
}
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
datas.sorting.forEach(function (item, index) {
|
|
397
|
+
if (item == 1) {
|
|
398
|
+
html += columnOne(oneColumn);
|
|
399
|
+
} else {
|
|
400
|
+
html += `<div class="row sortable"><i class="fa fa-arrows icon-floats"></i>${columnLR(left, "LEFT")} ${columnLR(right, "RIGHT")}</div>`;
|
|
401
|
+
}
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
datas.others = others;
|
|
405
|
+
let json = {}
|
|
406
|
+
json.html = html;
|
|
407
|
+
json.datas = datas;
|
|
408
|
+
json.tabview = tabView;
|
|
409
|
+
json.count = count;
|
|
410
|
+
json.tabBox = tabUl + tabContent;
|
|
411
|
+
|
|
412
|
+
return json;
|
|
413
|
+
} catch (e) {
|
|
414
|
+
console.log(e)
|
|
415
|
+
return Util.flashError(e.toString());
|
|
185
416
|
}
|
|
186
|
-
//console.log(JSON.stringify(json))
|
|
187
|
-
res.json(json)
|
|
188
417
|
};
|
|
189
418
|
|
|
190
419
|
function containerObject(left,right,oneColumn,tabs = []) {
|
|
@@ -367,368 +596,6 @@ function containerObject(left,right,oneColumn,tabs = []) {
|
|
|
367
596
|
}
|
|
368
597
|
}
|
|
369
598
|
|
|
370
|
-
Api.modalWithContainer = async (body) => {
|
|
371
|
-
try {
|
|
372
|
-
//let body = req.body;
|
|
373
|
-
/* console.log(body)
|
|
374
|
-
console.log("Container....")*/
|
|
375
|
-
let table = body.table || "";
|
|
376
|
-
let html = '';
|
|
377
|
-
let fields = [];
|
|
378
|
-
let datas = {table: '', tabs: [], labels: {}, details: {}, left: [], right: []};
|
|
379
|
-
let count = 1;
|
|
380
|
-
let tabView = '';
|
|
381
|
-
let tabBox = '';
|
|
382
|
-
let tabUl = '';
|
|
383
|
-
let tabContent = '';
|
|
384
|
-
let left = '', right = '', oneColumn = '';
|
|
385
|
-
let hasTab = false;
|
|
386
|
-
let properties = {};
|
|
387
|
-
let rowsFields;
|
|
388
|
-
let result = body.result;
|
|
389
|
-
const others = result.others || {};
|
|
390
|
-
let leftData = others.LEFT || [];
|
|
391
|
-
//console.log(leftData);
|
|
392
|
-
let rightData = others.RIGHT || [];
|
|
393
|
-
let oneColumnData = others.ONE_COLUMN || [];
|
|
394
|
-
let leftsNew = [], rightsNew = [], oneColumnsNew = [];
|
|
395
|
-
let ALL_FIELDS = {};
|
|
396
|
-
if (table) {
|
|
397
|
-
rowsFields = body.rowsFields;
|
|
398
|
-
//console.log('result : ' + JSON.stringify(result))
|
|
399
|
-
if (result.id) {
|
|
400
|
-
datas = {
|
|
401
|
-
details: result.details || {},
|
|
402
|
-
labels: result.labels || {},
|
|
403
|
-
tabs: result.tabs || [],
|
|
404
|
-
left: result.left || [],
|
|
405
|
-
right: result.right || [],
|
|
406
|
-
oneColumn: result.one_column || [],
|
|
407
|
-
sorting: result.sorting || [],
|
|
408
|
-
property: result.properties || {}
|
|
409
|
-
};
|
|
410
|
-
let details = datas.details;
|
|
411
|
-
properties = datas.property;
|
|
412
|
-
let tabs = datas.tabs;
|
|
413
|
-
ALL_FIELDS = containerObject(leftData,rightData,oneColumnData,tabs);
|
|
414
|
-
console.log(ALL_FIELDS);
|
|
415
|
-
if (tabs.length) {
|
|
416
|
-
hasTab = true;
|
|
417
|
-
}
|
|
418
|
-
if (hasTab) {
|
|
419
|
-
let tabLeft = [], tabRight = [], tabOneColum = [];
|
|
420
|
-
|
|
421
|
-
tabUl += '<ul class="nav nav-tabs" id="myTab" role="tablist">';
|
|
422
|
-
tabContent += '<div class="tab-content" id="myTabContent">';
|
|
423
|
-
tabs.forEach(function (item, i) {
|
|
424
|
-
let navlink = i == 0 ? ' active' : '';
|
|
425
|
-
let ariaselected = i == 0 ? "true" : "false";
|
|
426
|
-
let showActive = i == 0 ? ' show active ' : '';
|
|
427
|
-
let n = i + 1;
|
|
428
|
-
let arrName = 'arr' + i;
|
|
429
|
-
let dynamicsLeft = '', dynamicsRight = '', dynamicsOneColumn = '';
|
|
430
|
-
tabLeft = ALL_FIELDS.tabLeft[arrName];
|
|
431
|
-
tabRight = ALL_FIELDS.tabRight[arrName];
|
|
432
|
-
tabOneColum = ALL_FIELDS.tabOneColumn[arrName];
|
|
433
|
-
if (tabLeft.length) {
|
|
434
|
-
if(i==0) {
|
|
435
|
-
console.log(JSON.stringify(tabLeft))
|
|
436
|
-
}
|
|
437
|
-
tabLeft.map((o) => {
|
|
438
|
-
dynamicsLeft += makeItemsOl(o,"LEFT",i,datas);
|
|
439
|
-
});
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
if (tabRight.length) {
|
|
443
|
-
tabRight.map((o) => {
|
|
444
|
-
dynamicsRight += makeItemsOl(o,"RIGHT",i,datas);
|
|
445
|
-
});
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
if (tabOneColum.length) {
|
|
449
|
-
tabOneColum.map((o) => {
|
|
450
|
-
dynamicsOneColumn += makeItemsOl(o,"ONE_COLUMN",i,datas);
|
|
451
|
-
});
|
|
452
|
-
}
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
tabView += `<li class="item" draggable="true"><div class='divtabs'>${n}. <span class="tabname"> ${item}</span><input type='hidden' name='tabs[]' value='${item}' /> <button type='button' class='btn btn-sm btn-info edittab' data-toggle="modal" data-target="#modal_tab" data-name="${item}" data-id="${i}" > <i class='fas fa-edit'></i> </button> <button type='button' onclick='$(this).parent().remove();' class='btn btn-sm btn-danger trashtab'><i class='fas fa-trash'></i> </button></div></li>`;
|
|
456
|
-
tabUl += `<li class="nav-item">
|
|
457
|
-
<a class="nav-link ${navlink}" id="tabid${i}" data-toggle="tab" href="#tabgo${i}" role="tab" aria-controls="tabgo${i}" aria-selected="${ariaselected}">${item}</a>
|
|
458
|
-
</li>`;
|
|
459
|
-
|
|
460
|
-
tabContent += `<div class="tab-pane fade ${showActive}" id="tabgo${i}" role="tabpanel" aria-labelledby="tabtabgo${i}">
|
|
461
|
-
<div class="container">
|
|
462
|
-
<div class="row">
|
|
463
|
-
<div class="col-md-6"><ol class="mydragable divbox" data-name="LEFT" id="arr${i}">${dynamicsLeft}</ol></div>
|
|
464
|
-
<div class="col-md-6"><ol class="mydragable divbox" data-name="RIGHT" id="arr${i}">${dynamicsRight}</ol></div>
|
|
465
|
-
</div>
|
|
466
|
-
<div class="row">
|
|
467
|
-
<div class="col-md-12"><ol class="mydragable divbox" data-name="ONE_COLUMN" id="arr${i}">${dynamicsOneColumn}</ol></div>
|
|
468
|
-
</div>
|
|
469
|
-
</div>
|
|
470
|
-
</div>`;
|
|
471
|
-
});
|
|
472
|
-
//end tabs
|
|
473
|
-
tabUl += '</ul>';
|
|
474
|
-
tabContent += '</div>';
|
|
475
|
-
count = tabs.length + 1;
|
|
476
|
-
}
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
//caption left or right
|
|
482
|
-
let datasLeft = ALL_FIELDS.left;
|
|
483
|
-
let datasRight = ALL_FIELDS.right;
|
|
484
|
-
let datasOneColumn = ALL_FIELDS.oneColumn;
|
|
485
|
-
//console.log(JSON.stringify(ALL_FIELDS));
|
|
486
|
-
|
|
487
|
-
if (datasLeft.length) {
|
|
488
|
-
datasLeft.forEach(function (item) {
|
|
489
|
-
if(!Util.in_array(item,leftsNew)) {
|
|
490
|
-
left += makeItemsOl(item,"LEFT","",datas);
|
|
491
|
-
}
|
|
492
|
-
});
|
|
493
|
-
}
|
|
494
|
-
if (datasRight.length) {
|
|
495
|
-
datasRight.forEach(function (item) {
|
|
496
|
-
if(!Util.in_array(item,rightsNew)) {
|
|
497
|
-
right += makeItemsOl(item,"RIGHT","",datas);
|
|
498
|
-
}
|
|
499
|
-
});
|
|
500
|
-
}
|
|
501
|
-
if (datasOneColumn.length) {
|
|
502
|
-
datasOneColumn.forEach(function (item) {
|
|
503
|
-
//console.log(`item ${item}`);
|
|
504
|
-
if(!Util.in_array(item,oneColumnsNew)) {
|
|
505
|
-
oneColumn += makeItemsOl(item,"ONE_COLUMN","",datas);
|
|
506
|
-
}
|
|
507
|
-
});
|
|
508
|
-
}
|
|
509
|
-
|
|
510
|
-
datas.sorting.forEach(function (item, index) {
|
|
511
|
-
if (item == 1) {
|
|
512
|
-
html += columnOne(oneColumn);
|
|
513
|
-
} else {
|
|
514
|
-
html += `<div class="row sortable"><i class="fa fa-arrows icon-floats"></i>${columnLR(left, "LEFT")} ${columnLR(right, "RIGHT")}</div>`;
|
|
515
|
-
}
|
|
516
|
-
});
|
|
517
|
-
datas.others = others;
|
|
518
|
-
let json = {}
|
|
519
|
-
json.html = html;
|
|
520
|
-
json.datas = datas;
|
|
521
|
-
json.tabview = tabView;
|
|
522
|
-
json.count = count;
|
|
523
|
-
json.tabBox = tabUl + tabContent;
|
|
524
|
-
|
|
525
|
-
//console.log(JSON.stringify(json))
|
|
526
|
-
//res.json(json);
|
|
527
|
-
return json;
|
|
528
|
-
} catch (e) {
|
|
529
|
-
console.log(e)
|
|
530
|
-
//res.status(400).json({message: e.toString()})
|
|
531
|
-
return Util.flashError(e.toString());
|
|
532
|
-
}
|
|
533
|
-
};
|
|
534
|
-
|
|
535
|
-
Api.modalClassic = async (body) => {
|
|
536
|
-
try {
|
|
537
|
-
//const body = req.body;
|
|
538
|
-
//console.log(body)
|
|
539
|
-
const table = body.table || "";
|
|
540
|
-
let html = '';
|
|
541
|
-
var datas = {table: '', tabs: [], labels: {}, details: {}, left: [], right: []};
|
|
542
|
-
let count = 1;
|
|
543
|
-
let tabView = '';
|
|
544
|
-
let tabUl = '';
|
|
545
|
-
let tabContent = '';
|
|
546
|
-
let left = '', right = '', oneColumn = '';
|
|
547
|
-
let hasTab = false;
|
|
548
|
-
let properties = {}
|
|
549
|
-
let rowsFields;
|
|
550
|
-
if (table) {
|
|
551
|
-
let result = body.result;
|
|
552
|
-
rowsFields = body.rowsFields;
|
|
553
|
-
//console.log('result : ' + JSON.stringify(result))
|
|
554
|
-
if (result.id) {
|
|
555
|
-
datas = {
|
|
556
|
-
details: result.details || {},
|
|
557
|
-
labels: result.labels || {},
|
|
558
|
-
tabs: result.tabs || [],
|
|
559
|
-
left: result.left || [],
|
|
560
|
-
right: result.right || [],
|
|
561
|
-
oneColumn: result.one_column || [],
|
|
562
|
-
sorting: result.sorting || [],
|
|
563
|
-
property: result.properties || {}
|
|
564
|
-
};
|
|
565
|
-
let details = datas.details;
|
|
566
|
-
properties = datas.property;
|
|
567
|
-
let tabs = datas.tabs;
|
|
568
|
-
if (tabs.length) {
|
|
569
|
-
hasTab = true;
|
|
570
|
-
}
|
|
571
|
-
if (hasTab) {
|
|
572
|
-
tabUl += '<ul class="nav nav-tabs" id="myTab" role="tablist">';
|
|
573
|
-
tabContent += '<div class="tab-content" id="myTabContent">';
|
|
574
|
-
tabs.forEach(function (item, i) {
|
|
575
|
-
const navlink = i == 0 ? ' active' : '';
|
|
576
|
-
const ariaselected = i == 0 ? "true" : "false";
|
|
577
|
-
const showActive = i == 0 ? ' show active ' : '';
|
|
578
|
-
const n = i + 1;
|
|
579
|
-
const arrName = 'arr' + i;
|
|
580
|
-
let dynamicsLeft = '', dynamicsRight = '', dynamicsOneColumn = '';
|
|
581
|
-
let tabLeft = [], tabRight = [], tabOneColum = [];
|
|
582
|
-
if (datas.left.length) {
|
|
583
|
-
datas.left.forEach(function (o) {
|
|
584
|
-
if (typeof o == "object") {
|
|
585
|
-
for (var key in o) {
|
|
586
|
-
if (key == arrName) {
|
|
587
|
-
tabLeft = o[key];
|
|
588
|
-
}
|
|
589
|
-
}
|
|
590
|
-
}
|
|
591
|
-
});
|
|
592
|
-
}
|
|
593
|
-
if (datas.right.length) {
|
|
594
|
-
datas.right.forEach(function (o) {
|
|
595
|
-
if (typeof o == "object") {
|
|
596
|
-
for (var key in o) {
|
|
597
|
-
if (key == arrName) {
|
|
598
|
-
tabRight = o[key];
|
|
599
|
-
}
|
|
600
|
-
}
|
|
601
|
-
}
|
|
602
|
-
});
|
|
603
|
-
}
|
|
604
|
-
if (datas.oneColumn.length) {
|
|
605
|
-
datas.oneColumn.forEach(function (o) {
|
|
606
|
-
if (typeof o == "object") {
|
|
607
|
-
for (var key in o) {
|
|
608
|
-
if (key == arrName) {
|
|
609
|
-
tabOneColum = o[key];
|
|
610
|
-
}
|
|
611
|
-
}
|
|
612
|
-
}
|
|
613
|
-
});
|
|
614
|
-
}
|
|
615
|
-
|
|
616
|
-
/* console.log(arrName);
|
|
617
|
-
console.log("tableft");
|
|
618
|
-
console.log(JSON.stringify(tabLeft));
|
|
619
|
-
console.log("tableft end");
|
|
620
|
-
console.log("tabright");
|
|
621
|
-
console.log(JSON.stringify(tabRight));
|
|
622
|
-
console.log("tabright");
|
|
623
|
-
console.log("tabonecolumn");
|
|
624
|
-
console.log(JSON.stringify(tabOneColum));
|
|
625
|
-
console.log("tabonecolumn end");*/
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
if (tabLeft.length) {
|
|
629
|
-
tabLeft.map((o) => {
|
|
630
|
-
if(datas.property[o] && datas.property[o].hasOwnProperty("type") ) {
|
|
631
|
-
dynamicsLeft += dragable_with_icon(o, datas.labels[o], i, "LEFT", datas.property[o].type);
|
|
632
|
-
}
|
|
633
|
-
});
|
|
634
|
-
}
|
|
635
|
-
if (tabRight.length) {
|
|
636
|
-
tabRight.map((o) => {
|
|
637
|
-
if(datas.property[o] && datas.property[o].hasOwnProperty("type") ) {
|
|
638
|
-
dynamicsRight += dragable_with_icon(o, datas.labels[o], i, "RIGHT", datas.property[o].type);
|
|
639
|
-
}
|
|
640
|
-
});
|
|
641
|
-
}
|
|
642
|
-
|
|
643
|
-
if (tabOneColum.length) {
|
|
644
|
-
tabOneColum.map((o) => {
|
|
645
|
-
if(datas.property[o] && datas.property[o].hasOwnProperty("type") ) {
|
|
646
|
-
dynamicsOneColumn += dragable_with_icon(o, datas.labels[o], i, "ONE_COLUMN", datas.property[o].type);
|
|
647
|
-
}
|
|
648
|
-
});
|
|
649
|
-
}
|
|
650
|
-
|
|
651
|
-
tabView += `<li class="item" draggable="true"><div class='divtabs'>${n}. <span class="tabname"> ${item}</span><input type='hidden' name='tabs[]' value='${item}' /> <button type='button' class='btn btn-sm btn-info edittab' data-toggle="modal" data-target="#modal_tab" data-name="${item}" data-id="${i}" > <i class='fas fa-edit'></i> </button> <button type='button' onclick='$(this).parent().remove();' class='btn btn-sm btn-danger trashtab'><i class='fas fa-trash'></i> </button></div></li>`;
|
|
652
|
-
tabUl += `<li class="nav-item">
|
|
653
|
-
<a class="nav-link ${navlink}" id="tabid${i}" data-toggle="tab" href="#tabgo${i}" role="tab" aria-controls="tabgo${i}" aria-selected="${ariaselected}">${item}</a>
|
|
654
|
-
</li>`;
|
|
655
|
-
|
|
656
|
-
tabContent += `<div class="tab-pane fade ${showActive}" id="tabgo${i}" role="tabpanel" aria-labelledby="tabtabgo${i}">
|
|
657
|
-
<div class="container">
|
|
658
|
-
<div class="row">
|
|
659
|
-
<div class="col-md-6"><ol class="mydragable divbox" data-name="LEFT" id="arr${i}">${dynamicsLeft}</ol></div>
|
|
660
|
-
<div class="col-md-6"><ol class="mydragable divbox" data-name="RIGHT" id="arr${i}">${dynamicsRight}</ol></div>
|
|
661
|
-
</div>
|
|
662
|
-
<div class="row">
|
|
663
|
-
<div class="col-md-12"><ol class="mydragable divbox" data-name="ONE_COLUMN" id="arr${i}">${dynamicsOneColumn}</ol></div>
|
|
664
|
-
</div>
|
|
665
|
-
</div>
|
|
666
|
-
</div>`;
|
|
667
|
-
});
|
|
668
|
-
//end tabs
|
|
669
|
-
tabUl += '</ul>';
|
|
670
|
-
tabContent += '</div>';
|
|
671
|
-
count = tabs.length + 1;
|
|
672
|
-
}
|
|
673
|
-
}
|
|
674
|
-
}
|
|
675
|
-
|
|
676
|
-
/* var rows = [];
|
|
677
|
-
if (Util.isEmptyObject(datas.details)) {
|
|
678
|
-
rows = await fieldsTable(table, rowsFields);
|
|
679
|
-
} else {
|
|
680
|
-
var d = datas.details;
|
|
681
|
-
var notabs = d.hasOwnProperty('notabs') ? d.notabs : [];
|
|
682
|
-
for (var i = 0; i < notabs.length; i++) {
|
|
683
|
-
rows.push({name: notabs[i], label: datas.labels[notabs[i]]})
|
|
684
|
-
}
|
|
685
|
-
}*/
|
|
686
|
-
|
|
687
|
-
//caption left or right
|
|
688
|
-
if (datas.left.length) {
|
|
689
|
-
datas.left.forEach(function (item) {
|
|
690
|
-
if (properties.hasOwnProperty(item)) {
|
|
691
|
-
left += dragable_with_icon(item, datas.labels[item], "", "LEFT", datas.property[item].type);
|
|
692
|
-
}
|
|
693
|
-
});
|
|
694
|
-
}
|
|
695
|
-
if (datas.right.length) {
|
|
696
|
-
datas.right.forEach(function (item) {
|
|
697
|
-
if (properties.hasOwnProperty(item)) {
|
|
698
|
-
right += dragable_with_icon(item, datas.labels[item], "", "RIGHT", datas.property[item].type);
|
|
699
|
-
}
|
|
700
|
-
});
|
|
701
|
-
}
|
|
702
|
-
if (datas.oneColumn.length) {
|
|
703
|
-
datas.oneColumn.forEach(function (item) {
|
|
704
|
-
if (properties.hasOwnProperty(item)) {
|
|
705
|
-
oneColumn += dragable_with_icon(item, datas.labels[item], "", "ONE_COLUMN", datas.property[item].type);
|
|
706
|
-
}
|
|
707
|
-
});
|
|
708
|
-
}
|
|
709
|
-
datas.sorting.forEach(function (item, index) {
|
|
710
|
-
if (item == 1) {
|
|
711
|
-
html += columnOne(oneColumn);
|
|
712
|
-
} else {
|
|
713
|
-
html += `<div class="row sortable"><i class="fa fa-arrows icon-floats"></i>${columnLR(left, "LEFT")} ${columnLR(right, "RIGHT")}</div>`;
|
|
714
|
-
}
|
|
715
|
-
});
|
|
716
|
-
let json = {}
|
|
717
|
-
json.html = html;
|
|
718
|
-
json.datas = datas;
|
|
719
|
-
json.tabview = tabView;
|
|
720
|
-
json.count = count;
|
|
721
|
-
json.tabBox = tabUl + tabContent;
|
|
722
|
-
|
|
723
|
-
return json;
|
|
724
|
-
//res.json(json);
|
|
725
|
-
} catch (e) {
|
|
726
|
-
console.log(e)
|
|
727
|
-
//res.status(400).json({message: e.toString()})
|
|
728
|
-
//json = {}
|
|
729
|
-
return {}
|
|
730
|
-
}
|
|
731
|
-
}
|
|
732
599
|
|
|
733
600
|
const makeItemsOl = (o,columnName,tabName, datas) => {
|
|
734
601
|
let html = '';
|
|
@@ -189,6 +189,75 @@
|
|
|
189
189
|
html += `</ul>`
|
|
190
190
|
return html
|
|
191
191
|
}
|
|
192
|
+
function deleteTab($this) {
|
|
193
|
+
// Dapatkan index tab dari tombol edit yang ada di sebelah tombol delete
|
|
194
|
+
let $editBtn = $($this).siblings('.edittab');
|
|
195
|
+
let tabIndex = $editBtn.data('id');
|
|
196
|
+
|
|
197
|
+
// Jika tidak ada data-id, cari dari posisi tab dalam list
|
|
198
|
+
if (tabIndex === undefined || tabIndex === null) {
|
|
199
|
+
let $tabItem = $($this).closest('li.item');
|
|
200
|
+
let $allTabs = $('#tabs li.item');
|
|
201
|
+
tabIndex = $allTabs.index($tabItem);
|
|
202
|
+
|
|
203
|
+
// Jika masih tidak ditemukan, coba cari dari nama tab
|
|
204
|
+
if (tabIndex < 0) {
|
|
205
|
+
let tabName = $($this).siblings('.tabname').text().trim();
|
|
206
|
+
$allTabs.each(function(index) {
|
|
207
|
+
if ($(this).find('.tabname').text().trim() === tabName) {
|
|
208
|
+
tabIndex = index;
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// Cek apakah tab memiliki konten di dalam tab content
|
|
216
|
+
let $tabContent = $('#tabgo' + tabIndex);
|
|
217
|
+
if ($tabContent.length === 0) {
|
|
218
|
+
// Jika tidak ada tab content, mungkin tab belum dibuat atau sudah dihapus
|
|
219
|
+
$($this).closest('li.item').remove();
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// Cek di LEFT, RIGHT, dan ONE_COLUMN untuk tab ini
|
|
224
|
+
// Cari semua ol dengan id yang sesuai di dalam tab content
|
|
225
|
+
let $allBoxes = $tabContent.find('ol[id="arr' + tabIndex + '"]');
|
|
226
|
+
|
|
227
|
+
// Fungsi untuk cek apakah ol memiliki konten yang valid (bukan hanya icon add-container)
|
|
228
|
+
function hasValidContent($ol) {
|
|
229
|
+
if (!$ol || $ol.length === 0) return false;
|
|
230
|
+
|
|
231
|
+
// Cek apakah ada input-group (field) di dalam ol ini
|
|
232
|
+
// Ini akan menangkap semua field baik yang langsung di dalam ol maupun di dalam container
|
|
233
|
+
let $fields = $ol.find('.input-group');
|
|
234
|
+
|
|
235
|
+
// Jika ada field, berarti ada konten
|
|
236
|
+
if ($fields.length > 0) {
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Cek apakah ada konten di salah satu box
|
|
244
|
+
let hasContent = false;
|
|
245
|
+
$allBoxes.each(function() {
|
|
246
|
+
if (hasValidContent($(this))) {
|
|
247
|
+
hasContent = true;
|
|
248
|
+
return false; // break loop
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
|
|
252
|
+
// Jika ada konten, tampilkan alert dan jangan hapus
|
|
253
|
+
if (hasContent) {
|
|
254
|
+
alert('Tab tidak dapat dihapus karena masih memiliki field. Silakan hapus semua field terlebih dahulu.');
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// Jika tidak ada konten, hapus tab
|
|
259
|
+
$($this).closest('li.item').remove();
|
|
260
|
+
}
|
|
192
261
|
|
|
193
262
|
$(function () {
|
|
194
263
|
let counter = $('.divtabs').length || 1
|
package/lib/zGeneratorRouter.js
CHANGED
|
@@ -169,20 +169,7 @@ router.post("/fields", async (req, res) => {
|
|
|
169
169
|
rowsFields: rowsFields,
|
|
170
170
|
table: table,
|
|
171
171
|
};
|
|
172
|
-
|
|
173
|
-
`${generatorUrl}/api/generator/modal`,
|
|
174
|
-
objData
|
|
175
|
-
); */
|
|
176
|
-
let others = result.others || {};
|
|
177
|
-
let othersArr = Object.keys(others) || [];
|
|
178
|
-
let json = {}
|
|
179
|
-
if(othersArr.length) {
|
|
180
|
-
console.log('masuk ke container')
|
|
181
|
-
json = await Api.modalWithContainer(objData);
|
|
182
|
-
} else {
|
|
183
|
-
json = await Api.modalClassic(objData);
|
|
184
|
-
}
|
|
185
|
-
|
|
172
|
+
let json = await Api.modal(objData);
|
|
186
173
|
res.json(json);
|
|
187
174
|
} catch (e) {
|
|
188
175
|
console.log(e);
|
|
@@ -195,10 +182,6 @@ Create new Module/Table
|
|
|
195
182
|
*/
|
|
196
183
|
router.post("/", csrfProtection, async (req, res) => {
|
|
197
184
|
try {
|
|
198
|
-
/* let results = await axios.post(
|
|
199
|
-
`${generatorUrl}/api/generator/create`,
|
|
200
|
-
req.body
|
|
201
|
-
); */
|
|
202
185
|
let body = req.body;
|
|
203
186
|
let datas = Api.createTable(body);
|
|
204
187
|
if (datas.status == 0) {
|
|
@@ -227,10 +210,6 @@ router.post("/reset", async (req, res) => {
|
|
|
227
210
|
return res.json(Util.flashError("Table is locked"));
|
|
228
211
|
}
|
|
229
212
|
if (table) {
|
|
230
|
-
/* let results = await axios.post(
|
|
231
|
-
`${generatorUrl}/api/generator/reset`,
|
|
232
|
-
req.body
|
|
233
|
-
); */
|
|
234
213
|
let body = req.body;
|
|
235
214
|
let datas = Api.reset(body);
|
|
236
215
|
//let datas = results.data;
|
package/lib/zRoute.js
CHANGED
|
@@ -4167,6 +4167,8 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
|
|
|
4167
4167
|
let hasLocation = false;
|
|
4168
4168
|
let hasDragdrop = false;
|
|
4169
4169
|
let hasDropbox = false;
|
|
4170
|
+
let hasDropdownMulti = false;
|
|
4171
|
+
let hasSelectize = false;
|
|
4170
4172
|
let lexicals = [];
|
|
4171
4173
|
let mapKey = "";
|
|
4172
4174
|
let hasAttributes = [];
|
|
@@ -4182,6 +4184,8 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
|
|
|
4182
4184
|
hasDatePicker = true;
|
|
4183
4185
|
} else if (widgets[key].name == "number") {
|
|
4184
4186
|
hasNumber = true;
|
|
4187
|
+
} else if (widgets[key].name == "dropdown_multi") {
|
|
4188
|
+
hasDropdownMulti = true;
|
|
4185
4189
|
} else if (widgets[key].name == "money") {
|
|
4186
4190
|
hasNumber = true;
|
|
4187
4191
|
moneys.push(key);
|
|
@@ -4261,6 +4265,7 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
|
|
|
4261
4265
|
//add search on select
|
|
4262
4266
|
if (widgets[key].isSearch) {
|
|
4263
4267
|
selectize.push(key);
|
|
4268
|
+
hasSelectize = true;
|
|
4264
4269
|
}
|
|
4265
4270
|
}
|
|
4266
4271
|
}
|
|
@@ -4363,12 +4368,15 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
|
|
|
4363
4368
|
headObj.datetimepicker = datetimepickerObj.head;
|
|
4364
4369
|
endObj.datetimepicker = datetimepickerObj.end;
|
|
4365
4370
|
}
|
|
4371
|
+
if(hasSelectize || hasDropdownMulti) {
|
|
4372
|
+
let selectizeObject = moduleLib.selectize(req, res);
|
|
4373
|
+
headObj.selectize = selectizeObject.head;
|
|
4374
|
+
endObj.selectize = selectizeObject.end;
|
|
4375
|
+
}
|
|
4366
4376
|
if (selectize.length > 0) {
|
|
4367
4377
|
selectize.map((item) => {
|
|
4368
4378
|
let selectizeObj = moduleLib.selectize(req, res, `#${item}`);
|
|
4369
4379
|
scriptForm += selectizeObj.script;
|
|
4370
|
-
headObj.selectize = selectizeObj.head;
|
|
4371
|
-
endObj.selectize = selectizeObj.end;
|
|
4372
4380
|
});
|
|
4373
4381
|
}
|
|
4374
4382
|
if (hasIde) {
|
|
@@ -4643,6 +4651,50 @@ zRoute.generateJS = (req, res, MYMODEL, relations, zForms = "", data = {}) => {
|
|
|
4643
4651
|
break;
|
|
4644
4652
|
|
|
4645
4653
|
case "dropdown_multi":
|
|
4654
|
+
scriptForm += `$(document).ready(function () {
|
|
4655
|
+
var $${keys}Select = $('#${keys}');
|
|
4656
|
+
if ($${keys}Select.length && typeof $.fn.selectize !== 'undefined') {
|
|
4657
|
+
if (!$${keys}Select[0].selectize) {
|
|
4658
|
+
var isMultiple = $${keys}Select.hasClass('dropdown-multi');
|
|
4659
|
+
if (isMultiple && !$${keys}Select.attr('multiple')) {
|
|
4660
|
+
$${keys}Select.attr('multiple', 'multiple');
|
|
4661
|
+
}
|
|
4662
|
+
var selectizeOptions = {
|
|
4663
|
+
plugins: isMultiple ? ['remove_button'] : [],
|
|
4664
|
+
delimiter: ',',
|
|
4665
|
+
persist: false,
|
|
4666
|
+
create: false,
|
|
4667
|
+
search: true,
|
|
4668
|
+
openOnFocus: true,
|
|
4669
|
+
closeAfterSelect: true,
|
|
4670
|
+
maxItems: 1,
|
|
4671
|
+
placeholder: 'Please select ${keys}',
|
|
4672
|
+
onType: function (str) {
|
|
4673
|
+
var results = this.search(str);
|
|
4674
|
+
if (results.length === 1) {
|
|
4675
|
+
var self = this;
|
|
4676
|
+
setTimeout(function () {
|
|
4677
|
+
self.setValue(results[0].value);
|
|
4678
|
+
self.close();
|
|
4679
|
+
}, 100);
|
|
4680
|
+
}
|
|
4681
|
+
}
|
|
4682
|
+
};
|
|
4683
|
+
$${keys}Select.selectize(selectizeOptions);
|
|
4684
|
+
}
|
|
4685
|
+
}
|
|
4686
|
+
$(document).on('click', '#dropdownadd${keys}', function () {
|
|
4687
|
+
var $select = $('#${keys}');
|
|
4688
|
+
if ($select.length) {
|
|
4689
|
+
var selectize = $select[0].selectize;
|
|
4690
|
+
if (selectize) {
|
|
4691
|
+
selectize.clear();
|
|
4692
|
+
} else {
|
|
4693
|
+
$select.val('').trigger('change');
|
|
4694
|
+
}
|
|
4695
|
+
}
|
|
4696
|
+
});
|
|
4697
|
+
});`
|
|
4646
4698
|
scriptForm += ` $("#dropdownadd${keys}").on("click", function () {
|
|
4647
4699
|
var val = $("#${keys}").val();
|
|
4648
4700
|
if(val == ""){
|
package/package.json
CHANGED
package/lib/routes/api.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
const express = require('express');
|
|
2
|
-
const router = express.Router();
|
|
3
|
-
const Api = require('../generatorApi');
|
|
4
|
-
const Model = require('../Model');
|
|
5
|
-
|
|
6
|
-
//Home of Generator index
|
|
7
|
-
router.post('/generator/index', (req,res) => {
|
|
8
|
-
let json = {};
|
|
9
|
-
try {
|
|
10
|
-
let datas = {table: '', tabs: [], labels: {}, details: {}, hardcode_grid: ""};
|
|
11
|
-
let table = req.body.table || "", route = "";
|
|
12
|
-
json = {
|
|
13
|
-
datas: datas,
|
|
14
|
-
table: table,
|
|
15
|
-
route: table,
|
|
16
|
-
selects: Model.keys,
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
} catch (e) {
|
|
20
|
-
console.log(e.toString());
|
|
21
|
-
res.status(400).json({message: e.toString()})
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
res.json(json)
|
|
25
|
-
});
|
|
26
|
-
router.post('/generator/modal', async(req,res) => {
|
|
27
|
-
let body = req.body;
|
|
28
|
-
let result = body.result;
|
|
29
|
-
let others = result.others || {};
|
|
30
|
-
let othersArr = Object.keys(others) || [];
|
|
31
|
-
let json = {}
|
|
32
|
-
if(othersArr.length) {
|
|
33
|
-
console.log('masuk ke container')
|
|
34
|
-
json = await Api.modalWithContainer(req,res);
|
|
35
|
-
} else {
|
|
36
|
-
json = await Api.modalClassic(req,res);
|
|
37
|
-
}
|
|
38
|
-
//console.log(JSON.stringify(json))
|
|
39
|
-
res.json(json)
|
|
40
|
-
});
|
|
41
|
-
router.post('/generator/create', (req,res) => {
|
|
42
|
-
res.json(Api.createTable(req.body))
|
|
43
|
-
});
|
|
44
|
-
router.post('/generator/create_field', Api.create_field);
|
|
45
|
-
router.post('/generator/modal_settings', Api.modal_settings);
|
|
46
|
-
|
|
47
|
-
//generate
|
|
48
|
-
router.post('/generator/properties', Api.properties);
|
|
49
|
-
router.post('/generator/generate', Api.generate);
|
|
50
|
-
router.post('/generator/reset', Api.reset);
|
|
51
|
-
|
|
52
|
-
module.exports = router;
|