@hashtagcms/admin-ui-kit 1.0.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.
Files changed (79) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +83 -0
  3. package/dist/admin-ui-kit.min.css +14 -0
  4. package/dist/admin-ui-kit.min.js +2 -0
  5. package/dist/admin-ui-kit.min.js.LICENSE.txt +175 -0
  6. package/package.json +53 -0
  7. package/packages/components/README.md +92 -0
  8. package/packages/components/package.json +28 -0
  9. package/packages/components/src/action-bar.vue +237 -0
  10. package/packages/components/src/category-platform.vue +97 -0
  11. package/packages/components/src/category-settings.vue +815 -0
  12. package/packages/components/src/cms-module-dropdown.vue +78 -0
  13. package/packages/components/src/downlods.vue +21 -0
  14. package/packages/components/src/file-uploader.vue +188 -0
  15. package/packages/components/src/frontend-module-creator.vue +599 -0
  16. package/packages/components/src/global-site-button.vue +94 -0
  17. package/packages/components/src/homepage.vue +1087 -0
  18. package/packages/components/src/html-slot.vue +23 -0
  19. package/packages/components/src/image-gallery.vue +144 -0
  20. package/packages/components/src/index.js +53 -0
  21. package/packages/components/src/info-boxes.vue +68 -0
  22. package/packages/components/src/info-popup.vue +121 -0
  23. package/packages/components/src/language-button.vue +80 -0
  24. package/packages/components/src/language-copier.vue +177 -0
  25. package/packages/components/src/left-nav.vue +159 -0
  26. package/packages/components/src/library/copy-paste.vue +186 -0
  27. package/packages/components/src/library/info-box.vue +102 -0
  28. package/packages/components/src/library/left-menu-show-hide.vue +47 -0
  29. package/packages/components/src/library/loader.vue +141 -0
  30. package/packages/components/src/library/modal-box.vue +136 -0
  31. package/packages/components/src/library/split-button.vue +127 -0
  32. package/packages/components/src/library/timer-button.vue +43 -0
  33. package/packages/components/src/library/toast-box.vue +53 -0
  34. package/packages/components/src/menu-sorter.vue +265 -0
  35. package/packages/components/src/module-creator.vue +650 -0
  36. package/packages/components/src/module-permission.vue +334 -0
  37. package/packages/components/src/pagination.vue +125 -0
  38. package/packages/components/src/platform-button.vue +118 -0
  39. package/packages/components/src/search-bar.vue +144 -0
  40. package/packages/components/src/site-button.vue +42 -0
  41. package/packages/components/src/site-cloner.vue +150 -0
  42. package/packages/components/src/sitewise-copier.vue +234 -0
  43. package/packages/components/src/sitewise-data.vue +347 -0
  44. package/packages/components/src/sorter.vue +239 -0
  45. package/packages/components/src/tabular-view.vue +824 -0
  46. package/packages/components/src/title-bar.vue +76 -0
  47. package/packages/components/src/top-nav.vue +96 -0
  48. package/packages/helpers/README.md +88 -0
  49. package/packages/helpers/package.json +20 -0
  50. package/packages/helpers/src/admin-config.js +9 -0
  51. package/packages/helpers/src/common.js +89 -0
  52. package/packages/helpers/src/dashboard.js +16 -0
  53. package/packages/helpers/src/editor.js +163 -0
  54. package/packages/helpers/src/error-message-handler.js +50 -0
  55. package/packages/helpers/src/event-bus.js +4 -0
  56. package/packages/helpers/src/form.js +4 -0
  57. package/packages/helpers/src/fx.js +106 -0
  58. package/packages/helpers/src/humanize.js +14 -0
  59. package/packages/helpers/src/map.js +3 -0
  60. package/packages/styles/README.md +37 -0
  61. package/packages/styles/package.json +15 -0
  62. package/packages/styles/src/_action-bar.scss +35 -0
  63. package/packages/styles/src/_admin.scss +22 -0
  64. package/packages/styles/src/_animate.scss +1579 -0
  65. package/packages/styles/src/_badges.scss +34 -0
  66. package/packages/styles/src/_category-list.scss +14 -0
  67. package/packages/styles/src/_common.scss +163 -0
  68. package/packages/styles/src/_info-box.scss +96 -0
  69. package/packages/styles/src/_left-nav.scss +59 -0
  70. package/packages/styles/src/_loader.scss +82 -0
  71. package/packages/styles/src/_menu-sorter.scss +39 -0
  72. package/packages/styles/src/_model-creator.scss +48 -0
  73. package/packages/styles/src/_module-permission.scss +25 -0
  74. package/packages/styles/src/_page-manager.scss +63 -0
  75. package/packages/styles/src/_popover-modal.scss +20 -0
  76. package/packages/styles/src/_table-grid.scss +39 -0
  77. package/packages/styles/src/_toast.scss +20 -0
  78. package/packages/styles/src/_variables.scss +37 -0
  79. package/packages/styles/src/app.scss +2 -0
@@ -0,0 +1,650 @@
1
+ <template>
2
+ <div>
3
+ <form
4
+ :action="saveURL"
5
+ class="form-horizontal"
6
+ method="post"
7
+ role="form"
8
+ v-on:keyup="hideErrorMessage($event)"
9
+ v-on:submit.prevent="createModule"
10
+ >
11
+ <div class="form-group row">
12
+ <label class="col-sm-10">
13
+ <input
14
+ v-model="form.createFiles"
15
+ type="checkbox"
16
+ name="create-validator"
17
+ />
18
+ Create Files (Controller/Model/View/Vaidator) -
19
+ <small class="text-info"
20
+ >Try creating it from terminal command. It might not work due to
21
+ rights</small
22
+ >
23
+ </label>
24
+ </div>
25
+
26
+ <input v-model="form.display_name" type="hidden" />
27
+ <div class="form-group row">
28
+ <label class="col-sm-3">Name</label>
29
+ <div class="col-sm-7">
30
+ <input
31
+ v-model="form.name"
32
+ class="form-control"
33
+ name="name"
34
+ placeholder="Module name"
35
+ required
36
+ type="text"
37
+ @blur="updateControllerName()"
38
+ />
39
+ <div class="text text-danger">{{ this.errors.name }}</div>
40
+ </div>
41
+ </div>
42
+
43
+ <div class="form-group row">
44
+ <label class="col-sm-3">Sub Title</label>
45
+ <div class="col-sm-7">
46
+ <input
47
+ v-model="form.sub_title"
48
+ class="form-control"
49
+ name="name"
50
+ placeholder="Sub title"
51
+ type="text"
52
+ />
53
+ <div class="text text-danger">{{ this.errors.sub_title }}</div>
54
+ </div>
55
+ </div>
56
+
57
+ <div class="form-group row">
58
+ <label class="col-sm-3">Controller Name (link rewrite)</label>
59
+ <div class="col-sm-7">
60
+ <input
61
+ v-model="form.controller_name"
62
+ class="form-control"
63
+ name="controller_name"
64
+ placeholder="Controller name"
65
+ required
66
+ type="text"
67
+ @blur="updateControllerName(form.controller_name)"
68
+ />
69
+ <div class="text text-danger">{{ this.errors.controller_name }}</div>
70
+ </div>
71
+ </div>
72
+
73
+ <div class="form-group row">
74
+ <label class="col-sm-3">Parent</label>
75
+ <div class="col-sm-7">
76
+ <select v-model="form.parent_id" class="form-select select-big">
77
+ <option value="">Select</option>
78
+ <option v-for="module in allModules" :value="module.id">
79
+ {{ module.name }}
80
+ </option>
81
+ </select>
82
+
83
+ <div class="text text-danger">{{ this.errors.parent_id }}</div>
84
+ </div>
85
+ </div>
86
+
87
+ <div class="form-group row">
88
+ <label class="col-sm-3">Icon CSS</label>
89
+ <div class="col-sm-7">
90
+ <input
91
+ v-model="form.icon_css"
92
+ class="form-control"
93
+ name="name"
94
+ placeholder="Icon CSS"
95
+ required
96
+ type="text"
97
+ />
98
+ <div class="text text-danger">{{ this.errors.icon_css }}</div>
99
+ </div>
100
+ </div>
101
+
102
+ <div class="form-group row">
103
+ <label class="col-sm-3">List View Name</label>
104
+ <div class="col-sm-7">
105
+ <input
106
+ v-model="form.list_view_name"
107
+ class="form-control"
108
+ name="name"
109
+ placeholder="Enter list view Name (Default list view is common/listing)"
110
+ type="text"
111
+ />
112
+ <div class="text text-danger">{{ this.errors.list_view_name }}</div>
113
+ </div>
114
+ </div>
115
+ <div class="form-group row">
116
+ <label class="col-sm-3">Edit View Name</label>
117
+ <div class="col-sm-7">
118
+ <input
119
+ v-model="form.edit_view_name"
120
+ class="form-control"
121
+ name="name"
122
+ placeholder="Edit list view Name (Default edit view is addedit)"
123
+ type="text"
124
+ />
125
+ <div class="text text-danger">{{ this.errors.edit_view_name }}</div>
126
+ </div>
127
+ </div>
128
+
129
+ <div v-if="form.createFiles">
130
+ <div class="form-group row">
131
+ <label class="col-sm-3">Data Source</label>
132
+ <div class="col-sm-7">
133
+ <select
134
+ v-model="mainModel.tableName"
135
+ class="form-select select-big"
136
+ @change="populateMainDataFields()"
137
+ >
138
+ <option value="">Select</option>
139
+ <option v-for="table in allTables" :value="table.name">
140
+ {{ table.name }}
141
+ </option>
142
+ </select>
143
+ <div class="col-sm-5">
144
+ <span v-if="mainModel.tableName != ''" class="models">
145
+ {{ getModelName(mainModel.tableName) }}
146
+ </span>
147
+ </div>
148
+ </div>
149
+ </div>
150
+
151
+ <div class="form-group row">
152
+ <label class="col-sm-3">Data with? Choose another model.</label>
153
+ <div class="col-sm-7">
154
+ <select
155
+ v-model="relationModels.tableName"
156
+ class="form-select select-big"
157
+ @change="addRelationModel()"
158
+ >
159
+ <option value="">Select</option>
160
+ <option v-for="table in allTables" :value="table.name">
161
+ {{ table.name }}
162
+ </option>
163
+ </select>
164
+
165
+ <div>
166
+ <fieldset v-if="hasRelation()" class="fieldset">
167
+ <legend class="small legendTitle">Relation Models</legend>
168
+ <div
169
+ v-for="(rModel, index) in relationModels.models"
170
+ class="models_row"
171
+ >
172
+ <span class="models">
173
+ {{ rModel.model }}
174
+ <input
175
+ :value="rModel.relationAlias"
176
+ name="relation"
177
+ placeholder="Relation name"
178
+ type="text"
179
+ @change="
180
+ updateRelationModel($event, index, 'relationAlias')
181
+ "
182
+ />
183
+ <select
184
+ class="select"
185
+ name="relationType"
186
+ @change="
187
+ updateRelationModel($event, index, 'relationType')
188
+ "
189
+ >
190
+ <option value="hasMany">hasMany</option>
191
+ <option value="belongsTo">belongsTo</option>
192
+ <option value="hasOne">hasOne</option>
193
+ </select>
194
+ isLanguage:
195
+ <input
196
+ v-model="rModel.isLanguage"
197
+ type="checkbox"
198
+ name="relationModel"
199
+ />
200
+ <span
201
+ class="small fa fa-close"
202
+ @click="removeRelationModel(index, rModel.model)"
203
+ ></span>
204
+ </span>
205
+ </div>
206
+ </fieldset>
207
+ </div>
208
+ </div>
209
+ </div>
210
+ <div class="row" v-if="hasMainDataSource()">
211
+ <strong>Click on fields to choose</strong>
212
+ </div>
213
+ <div v-if="hasMainDataSource()" class="form-group row">
214
+ <div class="col-auto">
215
+ <div class="card shadow-sm models-box">
216
+ <div class="card-header">
217
+ <span
218
+ class="text-small pull-right hand text-success"
219
+ @click="selectAllField(mainModel)"
220
+ >Add all &#187;</span
221
+ >{{ getModelName(mainModel.tableName) }}<br />
222
+ </div>
223
+ <div class="card-body p-0 m-0 tables_panel">
224
+ <ul class="list-group list-group-flush">
225
+ <li
226
+ class="list-group-item"
227
+ v-for="field in mainModel.fields"
228
+ @click="selectField(field, mainModel)"
229
+ >
230
+ {{ field }}
231
+ </li>
232
+ </ul>
233
+ </div>
234
+ </div>
235
+ </div>
236
+ <template v-if="hasRelation()">
237
+ <div
238
+ class="col-auto"
239
+ v-for="(rModel, index) in relationModels.models"
240
+ >
241
+ <div class="card shadow-sm models-box">
242
+ <div class="card-header">
243
+ <span
244
+ class="text-small pull-right hand text-success"
245
+ @click="selectAllField(mainModel, rModel.relationAlias)"
246
+ >Add all &#187;</span
247
+ >{{ rModel.model }}<br />->with['{{ rModel.relationAlias }}']
248
+ </div>
249
+ <div class="card-body p-0 m-0 tables_panel">
250
+ <ul class="list-group list-group-flush">
251
+ <li
252
+ class="list-group-item"
253
+ v-for="field in rModel.fields"
254
+ @click="
255
+ selectField(field, mainModel, rModel.relationAlias)
256
+ "
257
+ >
258
+ {{ field }}
259
+ </li>
260
+ </ul>
261
+ </div>
262
+ </div>
263
+ </div>
264
+ </template>
265
+ </div>
266
+ <div class="row mt-3" v-if="mainModel.selected.length > 0">
267
+ <div class="col">
268
+ <div class="card shadow-sm">
269
+ <div class="card-header">
270
+ Selected Fields
271
+ <span
272
+ class="text-small pull-right hand text-danger"
273
+ @click="removeAllField(mainModel)"
274
+ >Remove all</span
275
+ >
276
+ </div>
277
+ <div class="card-body">
278
+ <ul id="selectedFields">
279
+ <li
280
+ class="fields non-selectable"
281
+ v-for="(val, index) in mainModel.selected"
282
+ :data-fieldname="val"
283
+ >
284
+ {{ val }}
285
+ <span
286
+ class="small fa fa-close"
287
+ @click="removeField(mainModel, index)"
288
+ ></span>
289
+ </li>
290
+ </ul>
291
+ </div>
292
+ </div>
293
+ </div>
294
+ </div>
295
+ </div>
296
+
297
+ <div class="row mt-3">
298
+ <div v-if="errorMessage !== ''" class="alert alert-danger">
299
+ {{ errorMessage }}
300
+ </div>
301
+ <div class="form-group center-align">
302
+ <input
303
+ class="btn btn-success btn-from-submit"
304
+ name="submit"
305
+ type="submit"
306
+ value="Save"
307
+ />
308
+ <a :href="dataBackUrl" class="btn btn-outline-secondary">Cancel</a>
309
+ </div>
310
+ </div>
311
+ </form>
312
+ </div>
313
+ </template>
314
+
315
+ <script>
316
+ import AdminConfig from "@hashtagcms/helpers/admin-config";
317
+ import axios from "axios";
318
+
319
+ import { Toast } from "@hashtagcms/helpers/common";
320
+ import Form from "@hashtagcms/helpers/form";
321
+ import Sortable from "sortablejs";
322
+ import pluralize from "pluralize";
323
+
324
+ class DbData {
325
+ static get data() {
326
+ return {};
327
+ }
328
+
329
+ static getFields(table) {
330
+ return new Promise((resolve, reject) => {
331
+ axios
332
+ .get("getFields?table=" + table)
333
+ .then(function (res) {
334
+ resolve(res);
335
+ })
336
+ .catch(function () {
337
+ reject(this);
338
+ });
339
+ });
340
+ }
341
+ }
342
+
343
+ export default {
344
+ mounted() {
345
+ //console.log("backUrl "+this.dataBackUrl)
346
+ //console.log(this.controllerName);
347
+ },
348
+ props: [
349
+ "dataDatabaseTables",
350
+ "dataControllerName",
351
+ "dataBackUrl",
352
+ "dataCmsModules",
353
+ ],
354
+ computed: {
355
+ saveURL: function () {
356
+ return AdminConfig.admin_path(this.dataControllerName + "/createModule");
357
+ },
358
+ },
359
+ data() {
360
+ return {
361
+ allTables:
362
+ typeof this.dataDatabaseTables !== "undefined"
363
+ ? JSON.parse(this.dataDatabaseTables)
364
+ : [],
365
+ allModules:
366
+ typeof this.dataCmsModules !== "undefined"
367
+ ? JSON.parse(this.dataCmsModules)
368
+ : [],
369
+ mainModel: { tableName: "", fields: [], modelName: "", selected: [] },
370
+ relationModels: { tableName: "", models: [] },
371
+
372
+ form: new Form({
373
+ name: "",
374
+ controller_name: "",
375
+ validator_name: "",
376
+ dataWith: [],
377
+ dataSource: "",
378
+ createFiles: true,
379
+ selectedFields: [],
380
+ relationModels: [],
381
+ parent_id: "",
382
+ display_name: "",
383
+ sub_title: "",
384
+ icon_css: "",
385
+ list_view_name: "",
386
+ edit_view_name: "",
387
+ }),
388
+ errors: {},
389
+ cacheData: {},
390
+ sortable: null,
391
+ sortingInterval: -1,
392
+ errorMessage: "",
393
+ };
394
+ },
395
+ methods: {
396
+ updateControllerName(controller_name) {
397
+ let name = controller_name || this.form.name;
398
+ name = name.toLowerCase().replace(/\s/g, "");
399
+
400
+ this.form.controller_name = pluralize.singular(name);
401
+ this.form.validator_name = this.form.controller_name;
402
+
403
+ //check controller existence
404
+ if (controller_name !== undefined) {
405
+ this.isControllerExists(this.form.controller_name);
406
+ }
407
+
408
+ this.form.icon_css = this.form.controller_name;
409
+
410
+ //console.log("this.form.validator_name "+this.form.validator_name);
411
+ },
412
+ getModelName(modelName = "") {
413
+ let tableName = modelName;
414
+ let $this = this;
415
+ modelName = pluralize.singular(modelName) + "::class";
416
+ let arr = modelName.split("_");
417
+ arr = arr.map((a) => a.charAt(0).toUpperCase() + a.substr(1, a.length));
418
+
419
+ return arr.join("");
420
+ },
421
+ populateMainDataFields() {
422
+ let $this = this;
423
+ if (this.mainModel.tableName !== "") {
424
+ this.mainModel.fields = ["Please wait..."];
425
+ DbData.getFields(this.mainModel.tableName).then(function (res) {
426
+ $this.mainModel.fields = res.data;
427
+ });
428
+ this.mainModel.modelName = this.getModelName(this.mainModel.tableName);
429
+ this.form.dataSource = this.mainModel.modelName;
430
+ }
431
+ },
432
+ updateWithData() {
433
+ this.form.dataWith = [];
434
+ for (let i = 0; i < this.relationModels.models.length; i++) {
435
+ let current = this.relationModels.models[i];
436
+ if (this.form.dataWith.indexOf(current.relationAlias) === -1) {
437
+ this.form.dataWith.push(current.relationAlias);
438
+ }
439
+ }
440
+ },
441
+ addRelationModel() {
442
+ if (this.relationModels.tableName !== "") {
443
+ let tableName = this.relationModels.tableName;
444
+ let modelName = this.getModelName(tableName);
445
+
446
+ if (this.hasInRelationModel(modelName) === false) {
447
+ let relationAlias = "";
448
+ if (tableName.endsWith("_langs") || tableName.endsWith("_sites")) {
449
+ relationAlias = tableName.endsWith("_langs") ? "lang" : "site";
450
+ } else {
451
+ relationAlias = pluralize
452
+ .singular(tableName.replace(/_/g, ""))
453
+ .toLowerCase();
454
+ }
455
+
456
+ let isLanguage = relationAlias === "lang";
457
+
458
+ let relationType = "hasMany";
459
+
460
+ let relationalData = {
461
+ model: modelName,
462
+ relationAlias: relationAlias,
463
+ relationType: relationType,
464
+ isLanguage: isLanguage,
465
+ fields: [],
466
+ selected: [],
467
+ };
468
+
469
+ //not to show same table again.
470
+ if (!this.cacheData[modelName]) {
471
+ this.relationModels.models.push(relationalData);
472
+ }
473
+ //Add in cache
474
+ this.cacheData[modelName] = relationalData;
475
+ this.cacheData[modelName].fields = ["Please wait..."];
476
+ DbData.getFields(tableName).then((res) => {
477
+ this.cacheData[modelName].fields = res.data;
478
+ });
479
+
480
+ this.updateWithData();
481
+ }
482
+ }
483
+ },
484
+ hasInRelationModel(modelName) {
485
+ return this.cacheData[modelName] || false;
486
+ },
487
+ updateRelationModel(event, index, key) {
488
+ let alias = this.relationModels.models[index][key];
489
+ this.relationModels.models[index][key] = event.target.value;
490
+
491
+ if (key === "relationAlias") {
492
+ //reset
493
+ this.relationModels.models[index].selected = [];
494
+ this.removeSelectedRelationFields(alias);
495
+ }
496
+
497
+ this.updateWithData();
498
+ },
499
+ removeSelectedRelationFields(alias) {
500
+ if (this.mainModel.selected.length > 0) {
501
+ let selected = [];
502
+ for (let i = 0; i < this.mainModel.selected.length; i++) {
503
+ let current = this.mainModel.selected[i];
504
+ if (!current.startsWith(alias + ".")) {
505
+ selected.push(current);
506
+ } else {
507
+ // this.mainModel.selected.splice(i, 1); this is not working
508
+ }
509
+ }
510
+ this.mainModel.selected = selected;
511
+ }
512
+ },
513
+ removeRelationModel(index, model) {
514
+ let alias = this.relationModels.models[index].relationAlias;
515
+
516
+ delete this.cacheData[model];
517
+ this.relationModels.models.splice(index, 1);
518
+ this.relationModels.tableName = "";
519
+
520
+ this.removeSelectedRelationFields(alias);
521
+ },
522
+ hasRelation() {
523
+ return this.relationModels.models.length > 0;
524
+ },
525
+ hasMainDataSource() {
526
+ return this.mainModel.tableName !== "";
527
+ },
528
+ selectAllField(where, relation = "") {
529
+ if (where.selected.length === 0) {
530
+ where.selected = where.fields.slice();
531
+ if (relation !== "") {
532
+ where.selected = where.selected.map((c) => relation + "." + c);
533
+ }
534
+ } else {
535
+ for (let i = 0; i < where.fields.length; i++) {
536
+ this.selectField(where.fields[i], where, relation);
537
+ }
538
+ }
539
+
540
+ this.enableSorting();
541
+ },
542
+ selectField(field, where, relation = "") {
543
+ field = relation !== "" ? relation + "." + field : field;
544
+
545
+ if (where.selected.indexOf(field) === -1) {
546
+ where.selected.push(field);
547
+ }
548
+
549
+ this.enableSorting();
550
+ },
551
+ removeField(where, index) {
552
+ where.selected.splice(index, 1);
553
+ },
554
+ removeAllField(where) {
555
+ where.selected = [];
556
+ this.form.selectedFields = [];
557
+ },
558
+ isControllerExists(name = "") {
559
+ if (name !== "") {
560
+ let $this = this;
561
+ axios.get("isControllerExists?name=" + name).then(function (res) {
562
+ if (res.data === 1) {
563
+ Toast.show($this, "Controller already exist");
564
+ }
565
+ });
566
+ }
567
+ },
568
+ createModule() {
569
+ this.setSortedFields();
570
+ this.form.relationModels = this.relationModels;
571
+
572
+ //console.log(this.mainModel);
573
+ //console.log(this.relationModels);
574
+ //console.log(this.form);
575
+
576
+ this.form
577
+ .post(this.saveURL)
578
+ .then((response) => this.resetForm(response))
579
+ .catch((response) => this.showError(response));
580
+ },
581
+ enableSorting() {
582
+ this.$nextTick(function () {
583
+ if (this.sortable != null) {
584
+ this.sortable.destroy();
585
+ }
586
+ let el = document.getElementById("selectedFields");
587
+ this.sortable = Sortable.create(el, {
588
+ onEnd: this.sortingCallback,
589
+ onStart: this.cancelSortingCallback,
590
+ });
591
+ });
592
+ },
593
+ cancelSortingCallback() {
594
+ if (this.sortingInterval !== -1) {
595
+ clearInterval(this.sortingInterval);
596
+ }
597
+ },
598
+ sortingCallback() {
599
+ this.cancelSortingCallback();
600
+ },
601
+ setSortedFields() {
602
+ let items = document.querySelectorAll("#selectedFields li");
603
+ let count = items.length;
604
+ if (count > 1) {
605
+ let selected = [];
606
+ for (let i = 0; i < count; i++) {
607
+ let current = items[i];
608
+ let field = current.getAttribute("data-fieldname");
609
+ selected.push(field);
610
+ }
611
+ this.form.selectedFields = selected;
612
+ }
613
+ },
614
+ showError(res) {
615
+ this.errors = {};
616
+ for (let i in res.errors) {
617
+ if (res.errors.hasOwnProperty(i)) {
618
+ this.errors[i] = res.errors[i][0];
619
+ }
620
+ }
621
+
622
+ this.errorMessage = res.message;
623
+ },
624
+ hideErrorMessage(event) {
625
+ let name = event.target.getAttribute("name");
626
+ this.errors[name] = "";
627
+
628
+ if (this.errorMessage !== "") {
629
+ this.errorMessage = "";
630
+ }
631
+ },
632
+ resetForm(response) {
633
+ this.mainModel = {
634
+ tableName: "",
635
+ fields: [],
636
+ modelName: "",
637
+ selected: [],
638
+ };
639
+ this.relationModels = { tableName: "", models: [] };
640
+
641
+ if (response.created === 0) {
642
+ Toast.show(this, "There is some error...");
643
+ this.errorMessage = response.message;
644
+ } else {
645
+ Toast.show(this, "Created...");
646
+ }
647
+ },
648
+ },
649
+ };
650
+ </script>