@mongoosejs/studio 0.0.46 → 0.0.47
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/frontend/public/app.js +104 -12
- package/frontend/public/index.html +2 -1
- package/frontend/src/dashboard/dashboard.html +12 -0
- package/frontend/src/dashboard/dashboard.js +11 -3
- package/frontend/src/dashboard/edit-dashboard/edit-dashboard.js +2 -2
- package/frontend/src/dashboard-result/dashboard-result.js +3 -0
- package/frontend/src/dashboard-result/dashboard-text/dashboard-text.html +8 -0
- package/frontend/src/dashboard-result/dashboard-text/dashboard-text.js +8 -0
- package/frontend/src/document/confirm-delete/confirm-delete.html +18 -0
- package/frontend/src/document/confirm-delete/confirm-delete.js +24 -0
- package/frontend/src/document/document.html +7 -1
- package/frontend/src/document/document.js +2 -1
- package/frontend/src/edit-array/edit-array.js +6 -4
- package/frontend/src/index.js +3 -1
- package/package.json +1 -1
package/frontend/public/app.js
CHANGED
|
@@ -425,11 +425,33 @@ module.exports = app => app.component('dashboard-result', {
|
|
|
425
425
|
if (value.$document) {
|
|
426
426
|
return 'dashboard-document';
|
|
427
427
|
}
|
|
428
|
+
if (value.$text) {
|
|
429
|
+
return 'dashboard-text';
|
|
430
|
+
}
|
|
428
431
|
}
|
|
429
432
|
}
|
|
430
433
|
});
|
|
431
434
|
|
|
432
435
|
|
|
436
|
+
/***/ }),
|
|
437
|
+
|
|
438
|
+
/***/ "./frontend/src/dashboard-result/dashboard-text/dashboard-text.js":
|
|
439
|
+
/*!************************************************************************!*\
|
|
440
|
+
!*** ./frontend/src/dashboard-result/dashboard-text/dashboard-text.js ***!
|
|
441
|
+
\************************************************************************/
|
|
442
|
+
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
443
|
+
|
|
444
|
+
"use strict";
|
|
445
|
+
|
|
446
|
+
|
|
447
|
+
const template = __webpack_require__(/*! ./dashboard-text.html */ "./frontend/src/dashboard-result/dashboard-text/dashboard-text.html");
|
|
448
|
+
|
|
449
|
+
module.exports = app => app.component('dashboard-text', {
|
|
450
|
+
template: template,
|
|
451
|
+
props: ['value']
|
|
452
|
+
});
|
|
453
|
+
|
|
454
|
+
|
|
433
455
|
/***/ }),
|
|
434
456
|
|
|
435
457
|
/***/ "./frontend/src/dashboard/dashboard.js":
|
|
@@ -455,7 +477,8 @@ module.exports = app => app.component('dashboard', {
|
|
|
455
477
|
description: '',
|
|
456
478
|
showEditor: false,
|
|
457
479
|
dashboard: null,
|
|
458
|
-
result: null
|
|
480
|
+
result: null,
|
|
481
|
+
errorMessage: null
|
|
459
482
|
}
|
|
460
483
|
},
|
|
461
484
|
methods: {
|
|
@@ -466,15 +489,22 @@ module.exports = app => app.component('dashboard', {
|
|
|
466
489
|
this.code = update.doc.code;
|
|
467
490
|
this.title = update.doc.title;
|
|
468
491
|
this.description = update.doc.description;
|
|
469
|
-
|
|
492
|
+
if (update.result) {
|
|
493
|
+
this.result = update.result;
|
|
494
|
+
} else {
|
|
495
|
+
this.errorMessage = update.error.message;
|
|
496
|
+
}
|
|
470
497
|
}
|
|
471
498
|
},
|
|
472
499
|
mounted: async function() {
|
|
473
|
-
const { dashboard, result } = await api.Dashboard.getDashboard({ dashboardId: this.dashboardId, evaluate: true });
|
|
500
|
+
const { dashboard, result, error } = await api.Dashboard.getDashboard({ dashboardId: this.dashboardId, evaluate: true });
|
|
474
501
|
if (!dashboard) {
|
|
475
502
|
return;
|
|
476
503
|
}
|
|
477
504
|
this.dashboard = dashboard;
|
|
505
|
+
if (error) {
|
|
506
|
+
this.errorMessage = error.message;
|
|
507
|
+
}
|
|
478
508
|
this.code = this.dashboard.code;
|
|
479
509
|
this.title = this.dashboard.title;
|
|
480
510
|
this.description = this.dashboard.description ?? '';
|
|
@@ -515,13 +545,13 @@ module.exports = app => app.component('edit-dashboard', {
|
|
|
515
545
|
},
|
|
516
546
|
async updateCode() {
|
|
517
547
|
console.log('this.title', this.title, 'this.description', this.description)
|
|
518
|
-
const { doc, result } = await api.Dashboard.updateDashboard({
|
|
548
|
+
const { doc, result, error } = await api.Dashboard.updateDashboard({
|
|
519
549
|
dashboardId: this.dashboardId,
|
|
520
550
|
code: this.editor.getValue(),
|
|
521
551
|
title: this.title,
|
|
522
552
|
description: this.description
|
|
523
553
|
});
|
|
524
|
-
this.$emit('update', { doc, result });
|
|
554
|
+
this.$emit('update', { doc, result, error });
|
|
525
555
|
this.editor.setValue(doc.code);
|
|
526
556
|
this.closeEditor();
|
|
527
557
|
}
|
|
@@ -801,6 +831,40 @@ module.exports = app => app.component('confirm-changes', {
|
|
|
801
831
|
|
|
802
832
|
/***/ }),
|
|
803
833
|
|
|
834
|
+
/***/ "./frontend/src/document/confirm-delete/confirm-delete.js":
|
|
835
|
+
/*!****************************************************************!*\
|
|
836
|
+
!*** ./frontend/src/document/confirm-delete/confirm-delete.js ***!
|
|
837
|
+
\****************************************************************/
|
|
838
|
+
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
|
839
|
+
|
|
840
|
+
"use strict";
|
|
841
|
+
|
|
842
|
+
|
|
843
|
+
const template = __webpack_require__(/*! ./confirm-delete.html */ "./frontend/src/document/confirm-delete/confirm-delete.html");
|
|
844
|
+
|
|
845
|
+
module.exports = app => app.component('confirm-delete', {
|
|
846
|
+
template: template,
|
|
847
|
+
props: ['value'],
|
|
848
|
+
computed: {
|
|
849
|
+
displayValue() {
|
|
850
|
+
return JSON.stringify(this.value, null, ' ').trim();
|
|
851
|
+
}
|
|
852
|
+
},
|
|
853
|
+
methods: {
|
|
854
|
+
closeDelete() {
|
|
855
|
+
this.$emit('close')
|
|
856
|
+
},
|
|
857
|
+
startDelete() {
|
|
858
|
+
this.$emit('remove');
|
|
859
|
+
}
|
|
860
|
+
},
|
|
861
|
+
mounted() {
|
|
862
|
+
Prism.highlightElement(this.$refs.code);
|
|
863
|
+
}
|
|
864
|
+
});
|
|
865
|
+
|
|
866
|
+
/***/ }),
|
|
867
|
+
|
|
804
868
|
/***/ "./frontend/src/document/document.js":
|
|
805
869
|
/*!*******************************************!*\
|
|
806
870
|
!*** ./frontend/src/document/document.js ***!
|
|
@@ -830,7 +894,8 @@ module.exports = app => app.component('document', {
|
|
|
830
894
|
invalid: {},
|
|
831
895
|
editting: false,
|
|
832
896
|
virtuals: [],
|
|
833
|
-
shouldShowConfirmModal: false
|
|
897
|
+
shouldShowConfirmModal: false,
|
|
898
|
+
shouldShowDeleteModal: false
|
|
834
899
|
}),
|
|
835
900
|
async mounted() {
|
|
836
901
|
window.pageState = this;
|
|
@@ -900,7 +965,7 @@ module.exports = app => app.component('document', {
|
|
|
900
965
|
|
|
901
966
|
const template = __webpack_require__(/*! ./edit-array.html */ "./frontend/src/edit-array/edit-array.html");
|
|
902
967
|
|
|
903
|
-
const { BSON
|
|
968
|
+
const { BSON } = __webpack_require__(/*! bson */ "./node_modules/bson/lib/bson.cjs");
|
|
904
969
|
|
|
905
970
|
const ObjectId = new Proxy(BSON.ObjectId, {
|
|
906
971
|
apply (target, thisArg, argumentsList) {
|
|
@@ -927,15 +992,17 @@ module.exports = app => app.component('edit-array', {
|
|
|
927
992
|
this.editor.on('change', ev => {
|
|
928
993
|
this.currentValue = this.editor.getValue();
|
|
929
994
|
});
|
|
930
|
-
this.status = 'loaded';
|
|
931
995
|
},
|
|
932
996
|
watch: {
|
|
933
|
-
currentValue() {
|
|
997
|
+
currentValue(newValue, oldValue) {
|
|
998
|
+
// Hacky way of skipping initial trigger because `immediate: false` doesn't work in Vue 3
|
|
934
999
|
if (this.status === 'init') {
|
|
935
1000
|
return;
|
|
936
1001
|
}
|
|
1002
|
+
this.status = 'loaded';
|
|
937
1003
|
try {
|
|
938
|
-
|
|
1004
|
+
const array = eval(`(${this.currentValue})`);
|
|
1005
|
+
this.$emit('input', array);
|
|
939
1006
|
} catch (err) {
|
|
940
1007
|
this.$emit('error', err);
|
|
941
1008
|
}
|
|
@@ -2537,6 +2604,17 @@ module.exports = "<div>\n <div v-if=\"Array.isArray(result)\">\n <div v-for=
|
|
|
2537
2604
|
|
|
2538
2605
|
/***/ }),
|
|
2539
2606
|
|
|
2607
|
+
/***/ "./frontend/src/dashboard-result/dashboard-text/dashboard-text.html":
|
|
2608
|
+
/*!**************************************************************************!*\
|
|
2609
|
+
!*** ./frontend/src/dashboard-result/dashboard-text/dashboard-text.html ***!
|
|
2610
|
+
\**************************************************************************/
|
|
2611
|
+
/***/ ((module) => {
|
|
2612
|
+
|
|
2613
|
+
"use strict";
|
|
2614
|
+
module.exports = "<div class=\"py-2\">\n <div v-if=\"header\" class=\"border-b border-gray-100 px-2 pb-2 text-xl font-bold\">\n {{header}}\n </div>\n <div class=\"text-xl p-2\">\n <pre v-text=\"value.$text\"></pre>\n </div>\n</div>\n";
|
|
2615
|
+
|
|
2616
|
+
/***/ }),
|
|
2617
|
+
|
|
2540
2618
|
/***/ "./frontend/src/dashboard/dashboard.html":
|
|
2541
2619
|
/*!***********************************************!*\
|
|
2542
2620
|
!*** ./frontend/src/dashboard/dashboard.html ***!
|
|
@@ -2544,7 +2622,7 @@ module.exports = "<div>\n <div v-if=\"Array.isArray(result)\">\n <div v-for=
|
|
|
2544
2622
|
/***/ ((module) => {
|
|
2545
2623
|
|
|
2546
2624
|
"use strict";
|
|
2547
|
-
module.exports = "<div class=\"dashboard px-1\">\n <div v-if=\"status === 'loading'\" class=\"max-w-5xl mx-auto text-center\">\n <img src=\"images/loader.gif\" class=\"inline mt-10\">\n </div>\n <div v-if=\"dashboard && status === 'loaded'\" class=\"max-w-5xl mx-auto\">\n <div class=\"flex items-center w-full\">\n <h2 class=\"mt-4 mb-4 text-gray-900 font-semibold text-xl grow shrink\">{{title}}</h2>\n <div>\n <button\n v-if=\"!showEditor\"\n @click=\"showEditor = true\"\n type=\"button\"\n class=\"rounded-md bg-teal-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-teal-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-teal-600\">\n <img src=\"images/edit.svg\" class=\"inline h-[1em]\" /> Edit\n </button>\n </div>\n </div>\n <div v-if=\"!showEditor\" class=\"mt-4 mb-4\">\n <dashboard-result :result=\"result\"></dashboard-result>\n </div>\n <div v-if=\"showEditor\">\n <edit-dashboard\n :dashboardId=\"dashboard._id\"\n :code=\"code\"\n :currentDescription=\"description\"\n :currentTitle=\"title\"\n @close=\"showEditor=false;\"\n @update=\"updateCode\"></edit-dashboard>\n </div>\n \n </div>\n <div v-if=\"!dashboard && status === 'loaded'\">\n No dashboard with the given id could be found.\n </div>\n</div>\n";
|
|
2625
|
+
module.exports = "<div class=\"dashboard px-1\">\n <div v-if=\"status === 'loading'\" class=\"max-w-5xl mx-auto text-center\">\n <img src=\"images/loader.gif\" class=\"inline mt-10\">\n </div>\n <div v-if=\"dashboard && status === 'loaded'\" class=\"max-w-5xl mx-auto\">\n <div class=\"flex items-center w-full\">\n <h2 class=\"mt-4 mb-4 text-gray-900 font-semibold text-xl grow shrink\">{{title}}</h2>\n <div>\n <button\n v-if=\"!showEditor\"\n @click=\"showEditor = true\"\n type=\"button\"\n class=\"rounded-md bg-teal-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-teal-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-teal-600\">\n <img src=\"images/edit.svg\" class=\"inline h-[1em]\" /> Edit\n </button>\n </div>\n </div>\n <div v-if=\"!showEditor\" class=\"mt-4 mb-4\">\n <dashboard-result :result=\"result\"></dashboard-result>\n </div>\n <div v-if=\"showEditor\">\n <edit-dashboard\n :dashboardId=\"dashboard._id\"\n :code=\"code\"\n :currentDescription=\"description\"\n :currentTitle=\"title\"\n @close=\"showEditor=false;\"\n @update=\"updateCode\"></edit-dashboard>\n </div>\n <div v-if=\"errorMessage\" class=\"rounded-md bg-red-50 p-4 mt-4\">\n <div class=\"flex\">\n <div class=\"flex-shrink-0\">\n <svg class=\"h-5 w-5 text-red-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\" data-slot=\"icon\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16ZM8.28 7.22a.75.75 0 0 0-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 1 0 1.06 1.06L10 11.06l1.72 1.72a.75.75 0 1 0 1.06-1.06L11.06 10l1.72-1.72a.75.75 0 0 0-1.06-1.06L10 8.94 8.28 7.22Z\" clip-rule=\"evenodd\" />\n </svg>\n </div>\n <div class=\"ml-3\">\n <h3 class=\"text-sm font-medium text-red-800\">{{errorMessage}}</h3>\n </div>\n </div>\n </div>\n \n </div>\n <div v-if=\"!dashboard && status === 'loaded'\">\n No dashboard with the given id could be found.\n </div>\n</div>\n";
|
|
2548
2626
|
|
|
2549
2627
|
/***/ }),
|
|
2550
2628
|
|
|
@@ -2647,6 +2725,17 @@ module.exports = "<div>\n <h2>\n Are you sure you want to save the fol
|
|
|
2647
2725
|
|
|
2648
2726
|
/***/ }),
|
|
2649
2727
|
|
|
2728
|
+
/***/ "./frontend/src/document/confirm-delete/confirm-delete.html":
|
|
2729
|
+
/*!******************************************************************!*\
|
|
2730
|
+
!*** ./frontend/src/document/confirm-delete/confirm-delete.html ***!
|
|
2731
|
+
\******************************************************************/
|
|
2732
|
+
/***/ ((module) => {
|
|
2733
|
+
|
|
2734
|
+
"use strict";
|
|
2735
|
+
module.exports = "<div>\n <h2>\n Are you sure you want to delete the following document?\n </h2>\n <pre class=\"max-h-[50vh] overflow-auto\"><code ref=\"code\" class=\"language-javascript\" v-text=\"displayValue\"></code></pre>\n <div class=\"flex gap-2 mt-2\">\n <async-button\n class=\"rounded-md bg-green-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-green-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-green-600\"\n @click=\"startDelete\">\n Confirm\n </async-button>\n <button \n class=\"rounded-md bg-gray-200 px-2.5 py-1.5 text-sm font-semibold text-black shadow-sm hover:bg-gray-300 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-300\"\n @click=\"closeDelete\">\n Cancel\n </button>\n </div>\n</div>";
|
|
2736
|
+
|
|
2737
|
+
/***/ }),
|
|
2738
|
+
|
|
2650
2739
|
/***/ "./frontend/src/document/document.css":
|
|
2651
2740
|
/*!********************************************!*\
|
|
2652
2741
|
!*** ./frontend/src/document/document.css ***!
|
|
@@ -2665,7 +2754,7 @@ module.exports = ".document {\n max-width: 1200px;\n margin-left: auto;\n mar
|
|
|
2665
2754
|
/***/ ((module) => {
|
|
2666
2755
|
|
|
2667
2756
|
"use strict";
|
|
2668
|
-
module.exports = "<div class=\"document\">\n <div class=\"document-menu\">\n <div class=\"left\">\n <button @click=\"$router.push('/model/' + this.model)\">\n ‹ Back\n </button>\n </div>\n\n <div class=\"right\">\n <button\n v-if=\"!editting\"\n @click=\"editting = true\"\n type=\"button\"\n class=\"rounded-md bg-teal-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-teal-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-teal-600\">\n <img src=\"images/edit.svg\" class=\"inline\" /> Edit\n </button>\n <button\n v-if=\"editting\"\n @click=\"editting = false\"\n type=\"button\"\n class=\"rounded-md bg-slate-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-slate-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-slate-600\">\n × Cancel\n </button>\n <button\n v-if=\"editting\"\n @click=\"shouldShowConfirmModal=true;\"\n type=\"button\"\n class=\"rounded-md bg-green-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-green-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-green-600\">\n <img src=\"images/save.svg\" class=\"inline\" /> Save\n </button>\n <button\n @click=\"
|
|
2757
|
+
module.exports = "<div class=\"document\">\n <div class=\"document-menu\">\n <div class=\"left\">\n <button @click=\"$router.push('/model/' + this.model)\">\n ‹ Back\n </button>\n </div>\n\n <div class=\"right\">\n <button\n v-if=\"!editting\"\n @click=\"editting = true\"\n type=\"button\"\n class=\"rounded-md bg-teal-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-teal-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-teal-600\">\n <img src=\"images/edit.svg\" class=\"inline\" /> Edit\n </button>\n <button\n v-if=\"editting\"\n @click=\"editting = false\"\n type=\"button\"\n class=\"rounded-md bg-slate-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-slate-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-slate-600\">\n × Cancel\n </button>\n <button\n v-if=\"editting\"\n @click=\"shouldShowConfirmModal=true;\"\n type=\"button\"\n class=\"rounded-md bg-green-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-green-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-green-600\">\n <img src=\"images/save.svg\" class=\"inline\" /> Save\n </button>\n <button\n @click=\"shouldShowDeleteModal=true;\"\n type=\"button\"\n class=\"rounded-md bg-red-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-red-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-red-600\">\n <img src=\"images/delete.svg\" class=\"inline\" /> Delete\n </button>\n </div>\n </div>\n <div v-if=\"status === 'loaded'\">\n <document-details\n :document=\"document\"\n :schemaPaths=\"schemaPaths\"\n :editting=\"editting\"\n :changes=\"changes\"\n :invalid=\"invalid\"></document-details>\n <modal v-if=\"shouldShowConfirmModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"shouldShowConfirmModal = false;\">×</div>\n <confirm-changes @close=\"shouldShowConfirmModal = false;\" @save=\"save\" :value=\"changes\"></confirm-changes>\n </template>\n </modal>\n <modal v-if=\"shouldShowDeleteModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"shouldShowConfirmModal = false;\">×</div>\n <confirm-delete @close=\"shouldShowConfirmModal = false;\" @remove=\"remove\" :value=\"document\"></confirm-delete>\n </template>\n </modal>\n </div>\n</div>\n";
|
|
2669
2758
|
|
|
2670
2759
|
/***/ }),
|
|
2671
2760
|
|
|
@@ -10787,11 +10876,13 @@ __webpack_require__(/*! ./dashboard-result/dashboard-result */ "./frontend/src/d
|
|
|
10787
10876
|
__webpack_require__(/*! ./dashboard-result/dashboard-chart/dashboard-chart */ "./frontend/src/dashboard-result/dashboard-chart/dashboard-chart.js")(app);
|
|
10788
10877
|
__webpack_require__(/*! ./dashboard-result/dashboard-document/dashboard-document */ "./frontend/src/dashboard-result/dashboard-document/dashboard-document.js")(app);
|
|
10789
10878
|
__webpack_require__(/*! ./dashboard-result/dashboard-primitive/dashboard-primitive */ "./frontend/src/dashboard-result/dashboard-primitive/dashboard-primitive.js")(app);
|
|
10879
|
+
__webpack_require__(/*! ./dashboard-result/dashboard-text/dashboard-text */ "./frontend/src/dashboard-result/dashboard-text/dashboard-text.js")(app);
|
|
10790
10880
|
__webpack_require__(/*! ./dashboard/edit-dashboard/edit-dashboard */ "./frontend/src/dashboard/edit-dashboard/edit-dashboard.js")(app)
|
|
10791
10881
|
__webpack_require__(/*! ./detail-array/detail-array */ "./frontend/src/detail-array/detail-array.js")(app);
|
|
10792
10882
|
__webpack_require__(/*! ./detail-default/detail-default */ "./frontend/src/detail-default/detail-default.js")(app);
|
|
10793
10883
|
__webpack_require__(/*! ./document/document */ "./frontend/src/document/document.js")(app);
|
|
10794
10884
|
__webpack_require__(/*! ./document/confirm-changes/confirm-changes */ "./frontend/src/document/confirm-changes/confirm-changes.js")(app);
|
|
10885
|
+
__webpack_require__(/*! ./document/confirm-delete/confirm-delete */ "./frontend/src/document/confirm-delete/confirm-delete.js")(app);
|
|
10795
10886
|
__webpack_require__(/*! ./document-details/document-details */ "./frontend/src/document-details/document-details.js")(app);
|
|
10796
10887
|
__webpack_require__(/*! ./document-details/document-property/document-property */ "./frontend/src/document-details/document-property/document-property.js")(app);
|
|
10797
10888
|
__webpack_require__(/*! ./edit-array/edit-array */ "./frontend/src/edit-array/edit-array.js")(app);
|
|
@@ -10842,6 +10933,7 @@ const router = VueRouter.createRouter({
|
|
|
10842
10933
|
app.use(router);
|
|
10843
10934
|
|
|
10844
10935
|
app.mount('#content');
|
|
10936
|
+
|
|
10845
10937
|
})();
|
|
10846
10938
|
|
|
10847
10939
|
/******/ })()
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
<link rel="stylesheet" href="tw.css">
|
|
12
12
|
<link rel="stylesheet" href="vanillatoasts/vanillatoasts.css">
|
|
13
13
|
<link rel="stylesheet" href="https://unpkg.com/codemirror@5.65.16/lib/codemirror.css">
|
|
14
|
+
<link rel="icon" href="images/logo.svg" type="image/svg+xml">
|
|
14
15
|
<script src="https://unpkg.com/vue@3.x"></script>
|
|
15
16
|
<script src="https://unpkg.com/vue-router@4.0.10"></script>
|
|
16
17
|
<script src="https://unpkg.com/chart.js@4.2.0/dist/chart.umd.js"></script>
|
|
@@ -25,4 +26,4 @@
|
|
|
25
26
|
<script src="https://unpkg.com/chart.js@4.2.0/dist/chart.umd.js"></script>
|
|
26
27
|
<script src="app.js"></script>
|
|
27
28
|
</body>
|
|
28
|
-
</html>
|
|
29
|
+
</html>
|
|
@@ -27,6 +27,18 @@
|
|
|
27
27
|
@close="showEditor=false;"
|
|
28
28
|
@update="updateCode"></edit-dashboard>
|
|
29
29
|
</div>
|
|
30
|
+
<div v-if="errorMessage" class="rounded-md bg-red-50 p-4 mt-4">
|
|
31
|
+
<div class="flex">
|
|
32
|
+
<div class="flex-shrink-0">
|
|
33
|
+
<svg class="h-5 w-5 text-red-400" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true" data-slot="icon">
|
|
34
|
+
<path fill-rule="evenodd" d="M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16ZM8.28 7.22a.75.75 0 0 0-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 1 0 1.06 1.06L10 11.06l1.72 1.72a.75.75 0 1 0 1.06-1.06L11.06 10l1.72-1.72a.75.75 0 0 0-1.06-1.06L10 8.94 8.28 7.22Z" clip-rule="evenodd" />
|
|
35
|
+
</svg>
|
|
36
|
+
</div>
|
|
37
|
+
<div class="ml-3">
|
|
38
|
+
<h3 class="text-sm font-medium text-red-800">{{errorMessage}}</h3>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
30
42
|
|
|
31
43
|
</div>
|
|
32
44
|
<div v-if="!dashboard && status === 'loaded'">
|
|
@@ -14,7 +14,8 @@ module.exports = app => app.component('dashboard', {
|
|
|
14
14
|
description: '',
|
|
15
15
|
showEditor: false,
|
|
16
16
|
dashboard: null,
|
|
17
|
-
result: null
|
|
17
|
+
result: null,
|
|
18
|
+
errorMessage: null
|
|
18
19
|
}
|
|
19
20
|
},
|
|
20
21
|
methods: {
|
|
@@ -25,15 +26,22 @@ module.exports = app => app.component('dashboard', {
|
|
|
25
26
|
this.code = update.doc.code;
|
|
26
27
|
this.title = update.doc.title;
|
|
27
28
|
this.description = update.doc.description;
|
|
28
|
-
|
|
29
|
+
if (update.result) {
|
|
30
|
+
this.result = update.result;
|
|
31
|
+
} else {
|
|
32
|
+
this.errorMessage = update.error.message;
|
|
33
|
+
}
|
|
29
34
|
}
|
|
30
35
|
},
|
|
31
36
|
mounted: async function() {
|
|
32
|
-
const { dashboard, result } = await api.Dashboard.getDashboard({ dashboardId: this.dashboardId, evaluate: true });
|
|
37
|
+
const { dashboard, result, error } = await api.Dashboard.getDashboard({ dashboardId: this.dashboardId, evaluate: true });
|
|
33
38
|
if (!dashboard) {
|
|
34
39
|
return;
|
|
35
40
|
}
|
|
36
41
|
this.dashboard = dashboard;
|
|
42
|
+
if (error) {
|
|
43
|
+
this.errorMessage = error.message;
|
|
44
|
+
}
|
|
37
45
|
this.code = this.dashboard.code;
|
|
38
46
|
this.title = this.dashboard.title;
|
|
39
47
|
this.description = this.dashboard.description ?? '';
|
|
@@ -20,13 +20,13 @@ module.exports = app => app.component('edit-dashboard', {
|
|
|
20
20
|
},
|
|
21
21
|
async updateCode() {
|
|
22
22
|
console.log('this.title', this.title, 'this.description', this.description)
|
|
23
|
-
const { doc, result } = await api.Dashboard.updateDashboard({
|
|
23
|
+
const { doc, result, error } = await api.Dashboard.updateDashboard({
|
|
24
24
|
dashboardId: this.dashboardId,
|
|
25
25
|
code: this.editor.getValue(),
|
|
26
26
|
title: this.title,
|
|
27
27
|
description: this.description
|
|
28
28
|
});
|
|
29
|
-
this.$emit('update', { doc, result });
|
|
29
|
+
this.$emit('update', { doc, result, error });
|
|
30
30
|
this.editor.setValue(doc.code);
|
|
31
31
|
this.closeEditor();
|
|
32
32
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<div>
|
|
2
|
+
<h2>
|
|
3
|
+
Are you sure you want to delete the following document?
|
|
4
|
+
</h2>
|
|
5
|
+
<pre class="max-h-[50vh] overflow-auto"><code ref="code" class="language-javascript" v-text="displayValue"></code></pre>
|
|
6
|
+
<div class="flex gap-2 mt-2">
|
|
7
|
+
<async-button
|
|
8
|
+
class="rounded-md bg-green-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-green-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-green-600"
|
|
9
|
+
@click="startDelete">
|
|
10
|
+
Confirm
|
|
11
|
+
</async-button>
|
|
12
|
+
<button
|
|
13
|
+
class="rounded-md bg-gray-200 px-2.5 py-1.5 text-sm font-semibold text-black shadow-sm hover:bg-gray-300 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-300"
|
|
14
|
+
@click="closeDelete">
|
|
15
|
+
Cancel
|
|
16
|
+
</button>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const template = require('./confirm-delete.html');
|
|
4
|
+
|
|
5
|
+
module.exports = app => app.component('confirm-delete', {
|
|
6
|
+
template: template,
|
|
7
|
+
props: ['value'],
|
|
8
|
+
computed: {
|
|
9
|
+
displayValue() {
|
|
10
|
+
return JSON.stringify(this.value, null, ' ').trim();
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
methods: {
|
|
14
|
+
closeDelete() {
|
|
15
|
+
this.$emit('close')
|
|
16
|
+
},
|
|
17
|
+
startDelete() {
|
|
18
|
+
this.$emit('remove');
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
mounted() {
|
|
22
|
+
Prism.highlightElement(this.$refs.code);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
<img src="images/save.svg" class="inline" /> Save
|
|
30
30
|
</button>
|
|
31
31
|
<button
|
|
32
|
-
@click="
|
|
32
|
+
@click="shouldShowDeleteModal=true;"
|
|
33
33
|
type="button"
|
|
34
34
|
class="rounded-md bg-red-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-red-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-red-600">
|
|
35
35
|
<img src="images/delete.svg" class="inline" /> Delete
|
|
@@ -49,5 +49,11 @@
|
|
|
49
49
|
<confirm-changes @close="shouldShowConfirmModal = false;" @save="save" :value="changes"></confirm-changes>
|
|
50
50
|
</template>
|
|
51
51
|
</modal>
|
|
52
|
+
<modal v-if="shouldShowDeleteModal">
|
|
53
|
+
<template v-slot:body>
|
|
54
|
+
<div class="modal-exit" @click="shouldShowConfirmModal = false;">×</div>
|
|
55
|
+
<confirm-delete @close="shouldShowConfirmModal = false;" @remove="remove" :value="document"></confirm-delete>
|
|
56
|
+
</template>
|
|
57
|
+
</modal>
|
|
52
58
|
</div>
|
|
53
59
|
</div>
|
|
@@ -20,7 +20,8 @@ module.exports = app => app.component('document', {
|
|
|
20
20
|
invalid: {},
|
|
21
21
|
editting: false,
|
|
22
22
|
virtuals: [],
|
|
23
|
-
shouldShowConfirmModal: false
|
|
23
|
+
shouldShowConfirmModal: false,
|
|
24
|
+
shouldShowDeleteModal: false
|
|
24
25
|
}),
|
|
25
26
|
async mounted() {
|
|
26
27
|
window.pageState = this;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const template = require('./edit-array.html');
|
|
4
4
|
|
|
5
|
-
const { BSON
|
|
5
|
+
const { BSON } = require('bson');
|
|
6
6
|
|
|
7
7
|
const ObjectId = new Proxy(BSON.ObjectId, {
|
|
8
8
|
apply (target, thisArg, argumentsList) {
|
|
@@ -29,15 +29,17 @@ module.exports = app => app.component('edit-array', {
|
|
|
29
29
|
this.editor.on('change', ev => {
|
|
30
30
|
this.currentValue = this.editor.getValue();
|
|
31
31
|
});
|
|
32
|
-
this.status = 'loaded';
|
|
33
32
|
},
|
|
34
33
|
watch: {
|
|
35
|
-
currentValue() {
|
|
34
|
+
currentValue(newValue, oldValue) {
|
|
35
|
+
// Hacky way of skipping initial trigger because `immediate: false` doesn't work in Vue 3
|
|
36
36
|
if (this.status === 'init') {
|
|
37
37
|
return;
|
|
38
38
|
}
|
|
39
|
+
this.status = 'loaded';
|
|
39
40
|
try {
|
|
40
|
-
|
|
41
|
+
const array = eval(`(${this.currentValue})`);
|
|
42
|
+
this.$emit('input', array);
|
|
41
43
|
} catch (err) {
|
|
42
44
|
this.$emit('error', err);
|
|
43
45
|
}
|
package/frontend/src/index.js
CHANGED
|
@@ -19,11 +19,13 @@ require('./dashboard-result/dashboard-result')(app);
|
|
|
19
19
|
require('./dashboard-result/dashboard-chart/dashboard-chart')(app);
|
|
20
20
|
require('./dashboard-result/dashboard-document/dashboard-document')(app);
|
|
21
21
|
require('./dashboard-result/dashboard-primitive/dashboard-primitive')(app);
|
|
22
|
+
require('./dashboard-result/dashboard-text/dashboard-text')(app);
|
|
22
23
|
require('./dashboard/edit-dashboard/edit-dashboard')(app)
|
|
23
24
|
require('./detail-array/detail-array')(app);
|
|
24
25
|
require('./detail-default/detail-default')(app);
|
|
25
26
|
require('./document/document')(app);
|
|
26
27
|
require('./document/confirm-changes/confirm-changes')(app);
|
|
28
|
+
require('./document/confirm-delete/confirm-delete')(app);
|
|
27
29
|
require('./document-details/document-details')(app);
|
|
28
30
|
require('./document-details/document-property/document-property')(app);
|
|
29
31
|
require('./edit-array/edit-array')(app);
|
|
@@ -73,4 +75,4 @@ const router = VueRouter.createRouter({
|
|
|
73
75
|
|
|
74
76
|
app.use(router);
|
|
75
77
|
|
|
76
|
-
app.mount('#content');
|
|
78
|
+
app.mount('#content');
|