@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,599 @@
1
+ <template>
2
+ <div>
3
+ <form
4
+ id="addEditFrm"
5
+ :action="saveURL"
6
+ class="form-group"
7
+ method="post"
8
+ role="form"
9
+ v-on:keyup="hideErrorMessage($event)"
10
+ v-on:submit.prevent="createModule"
11
+ >
12
+ <div class="form-group row mb-3">
13
+ <label class="col-sm-2" for="name">Name</label>
14
+ <div class="col-sm-7">
15
+ <input
16
+ @blur="fillCopiedData"
17
+ id="name"
18
+ v-model="form.name"
19
+ class="form-control"
20
+ name="name"
21
+ placeholder="Module name"
22
+ required
23
+ type="text"
24
+ />
25
+ <label
26
+ ><input
27
+ v-model="conventional"
28
+ type="checkbox"
29
+ @click="goConventional()"
30
+ />
31
+ Go Conventional</label
32
+ >
33
+ <div class="text text-danger">{{ this.errors.name }}</div>
34
+ </div>
35
+ </div>
36
+
37
+ <div class="form-group row mb-3">
38
+ <label class="col-sm-2" for="alias">Alias</label>
39
+ <div class="col-sm-7">
40
+ <input
41
+ id="alias"
42
+ v-model="form.alias"
43
+ class="form-control"
44
+ name="alias"
45
+ placeholder="Alias"
46
+ required
47
+ type="text"
48
+ />
49
+ <div class="text text-danger">{{ this.errors.alias }}</div>
50
+ </div>
51
+ </div>
52
+
53
+ <div class="form-group row mb-3">
54
+ <label class="col-sm-2" for="view_name">View Name</label>
55
+ <div class="col-sm-7">
56
+ <input
57
+ id="view_name"
58
+ v-model="form.view_name"
59
+ class="form-control"
60
+ name="view_name"
61
+ placeholder="View name"
62
+ required
63
+ type="text"
64
+ />
65
+ <div class="text text-danger">{{ this.errors.view_name }}</div>
66
+ </div>
67
+ </div>
68
+
69
+ <div class="form-group row mb-3">
70
+ <label class="col-sm-2" for="cache_group">Cache Group</label>
71
+ <div class="col-sm-7">
72
+ <input
73
+ id="cache_group"
74
+ v-model="form.cache_group"
75
+ class="form-control"
76
+ maxlength="60"
77
+ name="cache_group"
78
+ placeholder="Cache Category"
79
+ type="text"
80
+ />
81
+
82
+ <div class="text text-danger">{{ this.errors.cache_group }}</div>
83
+ </div>
84
+ </div>
85
+
86
+ <div class="form-group row mb-3">
87
+ <label class="col-sm-2" for="individual_cache"
88
+ >Is Individual Cache?</label
89
+ >
90
+ <label class="col-sm-7">
91
+ <input
92
+ id="individual_cache"
93
+ v-model="form.individual_cache"
94
+ name="individual_cache"
95
+ type="checkbox"
96
+ />
97
+ </label>
98
+ </div>
99
+
100
+ <div class="form-group row mb-3">
101
+ <label class="col-sm-2" for="data_type">Data Type</label>
102
+ <div class="col-sm-7">
103
+ <select
104
+ id="data_type"
105
+ v-model="form.data_type"
106
+ class="form-select select-big"
107
+ name="data_type"
108
+ @change="checkForService(form.data_type)"
109
+ >
110
+ <option value="">Select</option>
111
+ <option v-for="dataType in allDataTypes" :value="dataType">
112
+ {{ dataType }}
113
+ </option>
114
+ </select>
115
+ <div class="text text-danger">{{ this.errors.data_type }}</div>
116
+ <div
117
+ v-show="form.data_type != '' && this.dataTypesInfo[form.data_type]"
118
+ class="alert alert-info"
119
+ v-html="this.dataTypesInfo[form.data_type] || ''"
120
+ ></div>
121
+ </div>
122
+ </div>
123
+
124
+ <div class="form-group row mb-3">
125
+ <label class="col-sm-2" for="data_handler">Data Handler</label>
126
+ <label class="col-sm-7">
127
+ <textarea
128
+ id="data_handler"
129
+ v-model="form.data_handler"
130
+ class="form-control input"
131
+ mb-2s="5"
132
+ name="data_handler"
133
+ placeholder="Query or Service URL or filteration for this module"
134
+ row
135
+ v-bind:style="fluidCol"
136
+ />
137
+ </label>
138
+ </div>
139
+
140
+ <div v-show="showServiceForm">
141
+ <div class="form-group row mb-3">
142
+ <label class="col-sm-2" for="method_type">Method Type</label>
143
+ <div class="col-sm-7">
144
+ <select
145
+ id="method_type"
146
+ v-model="form.method_type"
147
+ class="form-select select-big"
148
+ name="method_type"
149
+ >
150
+ <option value="">Select</option>
151
+ <option
152
+ v-for="methodType in allMethodTypes"
153
+ :value="methodType.value"
154
+ >
155
+ {{ methodType.name }}
156
+ </option>
157
+ </select>
158
+ <div class="text text-danger">{{ this.errors.data_type }}</div>
159
+ </div>
160
+ </div>
161
+ <div class="form-group row mb-3">
162
+ <label class="col-sm-2" for="service_params">Service Params</label>
163
+ <div class="col-sm-7">
164
+ <input
165
+ id="service_params"
166
+ v-model="form.service_params"
167
+ class="form-control"
168
+ name="service_params"
169
+ placeholder="Service Params"
170
+ type="text"
171
+ />
172
+ <div class="text text-danger">{{ this.errors.service_params }}</div>
173
+ </div>
174
+ </div>
175
+ <div class="form-group row mb-3">
176
+ <label class="col-sm-2" for="service_params">Service Headers</label>
177
+ <div class="col-sm-7">
178
+ <textarea
179
+ id="headers"
180
+ v-model="form.headers"
181
+ class="form-control input"
182
+ name="headers"
183
+ placeholder="Service header as json"
184
+ rows="5"
185
+ />
186
+ <div class="text text-danger">{{ this.errors.headers }}</div>
187
+ </div>
188
+ </div>
189
+ </div>
190
+
191
+ <div class="form-group row mb-3">
192
+ <label class="col-sm-2" for="data_key_map">Data Key Map</label>
193
+ <label class="col-sm-7">
194
+ <textarea
195
+ id="data_key_map"
196
+ v-model="form.data_key_map"
197
+ class="form-control input"
198
+ name="data_key_map"
199
+ placeholder="key to be replaced in comma seperated. ie: :site_id, :lang_id "
200
+ rows="5"
201
+ v-bind:style="fluidCol"
202
+ />
203
+ </label>
204
+ </div>
205
+
206
+ <div class="form-group row mb-3">
207
+ <label class="col-sm-2" for="is_seo_module"
208
+ >Use this module as seo module</label
209
+ >
210
+ <label class="col-sm-7">
211
+ <input
212
+ id="is_seo_module"
213
+ v-model="form.is_seo_module"
214
+ name="is_seo_module"
215
+ type="checkbox"
216
+ />
217
+ </label>
218
+ </div>
219
+
220
+ <div class="form-group row mb-3">
221
+ <label class="col-sm-2" for="is_mandatory">Is Mandatory?</label>
222
+ <label class="col-sm-7">
223
+ <input
224
+ id="is_mandatory"
225
+ v-model="form.is_mandatory"
226
+ name="is_mandatory"
227
+ type="checkbox"
228
+ />
229
+ </label>
230
+ </div>
231
+
232
+ <div class="form-group row mb-3">
233
+ <label class="col-sm-2" for="shared">Is Shared?</label>
234
+ <label class="col-sm-7">
235
+ <input
236
+ id="shared"
237
+ v-model="form.shared"
238
+ name="shared"
239
+ type="checkbox"
240
+ />
241
+ </label>
242
+ </div>
243
+ <div class="form-group row mb-3">
244
+ <label class="col-sm-2" for="linked_module">Linked Module Alias</label>
245
+ <label class="col-sm-7">
246
+ <input
247
+ id="linked_module"
248
+ v-model="form.linked_module"
249
+ name="linked_module"
250
+ type="text"
251
+ class="form-control"
252
+ />
253
+ </label>
254
+ </div>
255
+
256
+ <div class="form-group row mb-3">
257
+ <label class="col-sm-2" for="live_edit">Live Edit?</label>
258
+ <label class="col-sm-7">
259
+ <input
260
+ id="live_edit"
261
+ v-model="form.live_edit"
262
+ name="live_edit"
263
+ type="checkbox"
264
+ />
265
+ </label>
266
+ </div>
267
+
268
+ <div v-show="showQueryForm" class="form-group row mb-3">
269
+ <fieldset class="border">
270
+ <legend>Query Service Properties</legend>
271
+ <div class="form-group">
272
+ <label class="col-sm-2" for="query_statement" v-bind:style="sFont"
273
+ >Query</label
274
+ >
275
+
276
+ <label class="col-sm-7">
277
+ <textarea
278
+ id="query_statement"
279
+ v-model="form.query_statement"
280
+ class="form-control input"
281
+ name="query_statement"
282
+ rows="5"
283
+ v-bind:style="fluidCol"
284
+ />
285
+ </label>
286
+ </div>
287
+
288
+ <div class="form-group row mb-3">
289
+ <label class="col-sm-2" for="query_as" v-bind:style="sFont"
290
+ >Get query data as</label
291
+ >
292
+ <div class="col-sm-7">
293
+ <select
294
+ id="query_as"
295
+ v-model="form.query_as"
296
+ class="form-select select-big"
297
+ name="query_as"
298
+ >
299
+ <option value="">Select</option>
300
+ <option
301
+ v-for="queryData in allQueryDataTypes"
302
+ :value="queryData.value"
303
+ >
304
+ {{ queryData.name }}
305
+ </option>
306
+ </select>
307
+ <div class="text text-danger">{{ this.errors.query_as }}</div>
308
+ </div>
309
+ </div>
310
+ </fieldset>
311
+ </div>
312
+
313
+ <div class="form-group row mb-3">
314
+ <label class="col-sm-2" for="description"
315
+ >Description or different database connection name if it is a query
316
+ module</label
317
+ >
318
+ <label class="col-sm-7">
319
+ <textarea
320
+ id="description"
321
+ v-model="form.description"
322
+ class="form-control input"
323
+ name="description"
324
+ rows="5"
325
+ v-bind:style="fluidCol"
326
+ />
327
+ </label>
328
+ </div>
329
+ <div v-show="this.showAllUpdateSection" class="form-group row mb-3">
330
+ <label class="col-sm-2" for="update_inAllSites"
331
+ >Update in all sites?</label
332
+ >
333
+ <label class="col-sm-7">
334
+ <input
335
+ id="update_inAllSites"
336
+ v-model="form.update_inAllSites"
337
+ name="update_inAllSites"
338
+ type="checkbox"
339
+ />
340
+ <div class="alert alert-info">
341
+ Be careful by clicking this checkbox. Content will be updated in all
342
+ sites based on alias. If you are changing alias it will be updated
343
+ only in this site.
344
+ </div>
345
+ </label>
346
+ </div>
347
+ <div class="row mb-3">
348
+ <div
349
+ v-show="typeof errorMessage === 'string' && errorMessage !== ''"
350
+ class="alert alert-danger"
351
+ >
352
+ {{ errorMessage }}
353
+ </div>
354
+ <div class="form-group center-align">
355
+ <input
356
+ class="btn btn-success btn-from-submit"
357
+ name="submit"
358
+ type="submit"
359
+ value="Save"
360
+ />
361
+ <a :href="dataBackUrl" class="btn btn-outline-secondary">Back</a>
362
+ </div>
363
+ </div>
364
+ </form>
365
+ </div>
366
+ </template>
367
+
368
+ <script>
369
+ import { Toast, PasteFromClipboard, IsJson } from "@hashtagcms/helpers/common";
370
+ import Form from "@hashtagcms/helpers/form";
371
+
372
+ export default {
373
+ mounted() {
374
+ if (this.dataActionPerformed === "edit") {
375
+ this.setFormData(this.formData);
376
+ } else {
377
+ this.form.site_id = this.dataSiteId;
378
+ }
379
+ },
380
+ props: [
381
+ "dataControllerName",
382
+ "dataBackUrl",
383
+ "dataSite",
384
+ "dataResults",
385
+ "dataActionPerformed",
386
+ "dataDataTypes",
387
+ "dataDataTypesInfo",
388
+ "dataFormAction",
389
+ "dataSiteId",
390
+ ],
391
+ data() {
392
+ return {
393
+ sFont: {
394
+ "font-size": "14px",
395
+ },
396
+ fluidCol: {
397
+ width: "100%",
398
+ },
399
+ allQueryDataTypes: [
400
+ { name: "param", value: "param" },
401
+ { name: "data", value: "data" },
402
+ ],
403
+ conventional: false,
404
+ formData:
405
+ typeof this.dataResults != "undefined"
406
+ ? JSON.parse(this.dataResults)
407
+ : [],
408
+ siteData:
409
+ typeof this.dataSite !== "undefined" ? JSON.parse(this.dataSite) : [],
410
+ showExtraData: {},
411
+ allDataTypes:
412
+ typeof this.dataDataTypes != "undefined"
413
+ ? JSON.parse(this.dataDataTypes)
414
+ : [],
415
+ allMethodTypes: [
416
+ { name: "GET", value: "GET" },
417
+ { name: "POST", value: "POST" },
418
+ ],
419
+ form: new Form({
420
+ id: 0,
421
+ name: "",
422
+ icon_css: "",
423
+ alias: "",
424
+ view_name: "",
425
+ cache_group: "",
426
+ data_type: "",
427
+ method_type: "",
428
+ data_handler: "",
429
+ data_key_map: "",
430
+ query_statement: "",
431
+ query_as: "",
432
+ description: "",
433
+ site_id: 1,
434
+ is_seo_module: 0,
435
+ individual_cache: 0,
436
+ shared: 0,
437
+ update_inAllSites: 0,
438
+ is_mandatory: 0,
439
+ service_params: "",
440
+ actionPerformed: this.dataActionPerformed,
441
+ backURL: this.dataBackUrl,
442
+ headers: "",
443
+ live_edit: 0,
444
+ linked_module: "",
445
+ }),
446
+ errors: {},
447
+ cacheData: {},
448
+ sortable: null,
449
+ sortingInterval: -1,
450
+ errorMessage: "",
451
+ dataTypesInfo:
452
+ typeof this.dataDataTypesInfo != "undefined"
453
+ ? JSON.parse(this.dataDataTypesInfo)
454
+ : [],
455
+ saveURL: this.dataFormAction,
456
+ };
457
+ },
458
+ computed: {
459
+ showQueryForm: function () {
460
+ return this.form.data_type.toLowerCase().indexOf("queryservice") > -1;
461
+ },
462
+ showServiceForm: function () {
463
+ return this.form.data_type.toLowerCase().indexOf("service") > -1;
464
+ },
465
+ showAllUpdateSection: function () {
466
+ return this.dataActionPerformed === "edit" && this.siteData.length > 1;
467
+ },
468
+ },
469
+ methods: {
470
+ fillCopiedData() {
471
+ PasteFromClipboard()
472
+ .then((res) => {
473
+ if (IsJson(this.form.name)) {
474
+ this.setFormData(JSON.parse(this.form.name));
475
+ }
476
+ })
477
+ .catch((res) => {
478
+ console.log("unable to paste");
479
+ });
480
+ },
481
+ goConventional(arg) {
482
+ //wanted to go conventional
483
+ if (this.conventional === false) {
484
+ let name = this.form.name;
485
+ this.form.title = name;
486
+ this.form.alias = ("MODULE_" + name.toUpperCase()).replace(/\s/g, "_");
487
+ this.form.view_name = name.toLowerCase().replace(/\s/g, "-");
488
+ }
489
+ },
490
+ setFormData(data) {
491
+ let data_length = Object.keys(data).length;
492
+ let form = document.querySelector("#addEditFrm");
493
+ for (let a in data) {
494
+ //setting document values
495
+ let val = data[a];
496
+ //setting form values;
497
+ if (
498
+ typeof this.form[a] !== "undefined" &&
499
+ typeof this.form[a] !== "function"
500
+ ) {
501
+ this.form[a] = val;
502
+ }
503
+
504
+ let ele = form[a] || document.getElementById(a);
505
+
506
+ if (ele) {
507
+ let eleType = ele.type;
508
+ // to make it visible for checkbox and radio
509
+ if (
510
+ (eleType === "checkbox" || eleType === "radio") &&
511
+ eleType !== "submit"
512
+ ) {
513
+ this.form[a] = val === 1;
514
+ }
515
+ }
516
+ }
517
+ },
518
+ checkForService(dataType) {
519
+ let self = this;
520
+ this.showExtraData["show"] =
521
+ dataType !== "" &&
522
+ (dataType.indexOf("Service") > -1 || dataType.indexOf("service") > -1);
523
+ },
524
+ createModule() {
525
+ let $this = this;
526
+
527
+ preCheck(this);
528
+
529
+ this.form
530
+ .post(this.saveURL)
531
+ .then((response) => {
532
+ this.resetForm(response);
533
+ })
534
+ .catch((response) => {
535
+ this.showError(response);
536
+ });
537
+
538
+ function preCheck() {
539
+ $this.form.is_seo_module = $this.form.is_seo_module
540
+ ? $this.form.is_seo_module
541
+ : 0;
542
+ $this.form.individual_cache = $this.form.individual_cache
543
+ ? $this.form.individual_cache
544
+ : 0;
545
+ $this.form.update_inAllSites = $this.form.update_inAllSites
546
+ ? $this.form.update_inAllSites
547
+ : 0;
548
+ $this.form.is_mandatory = $this.form.is_mandatory
549
+ ? $this.form.is_mandatory
550
+ : 0;
551
+ $this.form.service_params = $this.form.service_params
552
+ ? $this.form.service_params
553
+ : "";
554
+ $this.form.shared = $this.form.shared ? $this.form.shared : 0;
555
+ $this.form.live_edit = $this.form.live_edit ? $this.form.live_edit : 0;
556
+ }
557
+ },
558
+ showError(res) {
559
+ for (let i in res.errors) {
560
+ if (res.errors.hasOwnProperty(i)) {
561
+ this.errors[i] = res.errors[i][0];
562
+ }
563
+ }
564
+
565
+ this.errorMessage = res.message;
566
+ },
567
+ hideErrorMessage(event) {
568
+ let name = event.target.getAttribute("name");
569
+ this.errors[name] = "";
570
+
571
+ if (this.errorMessage !== "") {
572
+ this.errorMessage = "";
573
+ }
574
+ },
575
+ resetForm(response) {
576
+ //console.log("response.isSaved ",response.isSaved);
577
+ if (!isTrue(response.isSaved)) {
578
+ this.errorMessage = {};
579
+ Toast.show(this, "There is some error...");
580
+ this.errorMessage = response.message;
581
+ } else {
582
+ this.errorMessage = "";
583
+
584
+ let action = this.dataActionPerformed.toUpperCase();
585
+
586
+ Toast.show(this, "Saved...");
587
+
588
+ if (isTrue(response.isSaved)) {
589
+ window.location.href = response.backURL;
590
+ }
591
+ }
592
+
593
+ function isTrue(isSaved) {
594
+ return isSaved.toString() === "true" || isSaved.toString() === "1";
595
+ }
596
+ },
597
+ },
598
+ };
599
+ </script>
@@ -0,0 +1,94 @@
1
+ <template>
2
+ <select
3
+ @click="init(true)"
4
+ name="site_combo"
5
+ class="form-select"
6
+ id="site_combo"
7
+ @change="setSite"
8
+ v-model="currentSite"
9
+ >
10
+ <option v-for="site in sites" :value="site.id">
11
+ {{ site.name }}
12
+ </option>
13
+ </select>
14
+ </template>
15
+
16
+ <script>
17
+ import AdminConfig from "@hashtagcms/helpers/admin-config";
18
+ import SplitButton from "./library/split-button.vue";
19
+
20
+ import SecureLS from "secure-ls";
21
+
22
+ export default {
23
+ components: {
24
+ "split-button": SplitButton,
25
+ },
26
+ props: ["dataSites", "dataCurrentSite", "dataSupportedSites", "dataIsAdmin"],
27
+ mounted() {
28
+ this.init();
29
+ },
30
+ data() {
31
+ return {
32
+ sites:
33
+ typeof this.dataSites == "undefined" ? [] : JSON.parse(this.dataSites),
34
+ currentSite:
35
+ typeof this.dataCurrentSite == "undefined"
36
+ ? 1
37
+ : parseInt(this.dataCurrentSite),
38
+ supportedSite:
39
+ typeof this.dataSupportedSites == "undefined"
40
+ ? []
41
+ : JSON.parse(this.dataSupportedSites),
42
+ };
43
+ },
44
+ methods: {
45
+ init(force = false) {
46
+ let $this = this;
47
+ //$this.sites = [{name:"Please wait...", id:0}];
48
+ let ls = new SecureLS();
49
+ let allSites = ls.get("allSites");
50
+
51
+ if (allSites.length === 0 || force === true) {
52
+ let siteController = AdminConfig.admin_path(`site/getSitesForUsers`);
53
+ axios
54
+ .get(siteController, { withCredentials: false })
55
+ .then(function (response) {
56
+ $this.sites = response.data;
57
+
58
+ ls.set("allSites", JSON.stringify($this.sites));
59
+ // $this.$refs.site_combo.setData($this.sites);
60
+ })
61
+ .catch(function (error) {
62
+ console.log(error);
63
+ });
64
+ } else {
65
+ $this.sites = JSON.parse(allSites);
66
+ }
67
+ },
68
+ hasSites() {
69
+ //has language greater than one
70
+ return this.sites != null && this.sites.length > 1;
71
+ },
72
+ parseSite: function (row) {
73
+ // console.log("parseSite");
74
+ //console.log(row);
75
+ return { label: row.name, value: row.id };
76
+ },
77
+ setSite(data) {
78
+ let ajaxController = AdminConfig.admin_path(
79
+ `ajax/setSiteId/${this.currentSite}`,
80
+ );
81
+ axios
82
+ .get(ajaxController)
83
+ .then(function (response) {
84
+ //console.log(response);
85
+ //window.location.reload();
86
+ window.location.href = window.location.pathname;
87
+ })
88
+ .catch(function (error) {
89
+ console.log(error);
90
+ });
91
+ },
92
+ },
93
+ };
94
+ </script>