@ozdao/martyrs 0.2.584 → 0.2.585
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/dist/builder.js +2 -0
- package/dist/{main-fmp55tJF.js → main-xL-jtBkT.js} +2 -1
- package/dist/martyrs/dist/{main-fmp55tJF.js → main-xL-jtBkT.js} +3 -2
- package/dist/martyrs/dist/{main-fmp55tJF.js.map → main-xL-jtBkT.js.map} +1 -1
- package/dist/martyrs/dist/{web-BDuQSQKS.js → web-BA6h6Z8P.js} +2 -2
- package/dist/martyrs/dist/{web-BDuQSQKS.js.map → web-BA6h6Z8P.js.map} +1 -1
- package/dist/martyrs/src/components/EditImages/{EditImages.vue2.js → EditImages.vue.js} +2 -2
- package/dist/martyrs/src/components/EditImages/EditImages.vue.js.map +1 -0
- package/dist/martyrs/src/components/Tab/{Tab.vue.js → Tab.vue2.js} +2 -2
- package/dist/martyrs/src/components/Tab/Tab.vue2.js.map +1 -0
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +59 -40
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +1 -1
- package/dist/martyrs/src/modules/backoffice/backoffice.client.js +3 -15
- package/dist/martyrs/src/modules/backoffice/backoffice.client.js.map +1 -1
- package/dist/martyrs/src/modules/backoffice/configs/navigation.backoffice.config.js +99 -0
- package/dist/martyrs/src/modules/backoffice/configs/navigation.backoffice.config.js.map +1 -0
- package/dist/martyrs/src/modules/backoffice/{backoffice.router.js → router/backoffice.router.js} +9 -7
- package/dist/martyrs/src/modules/backoffice/router/backoffice.router.js.map +1 -0
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +6 -0
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/core.client.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/classes/core.app.js +5 -1
- package/dist/martyrs/src/modules/core/views/classes/core.app.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js +20 -26
- package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/pages/404.vue.js +76 -7
- package/dist/martyrs/src/modules/core/views/components/pages/404.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/sections/SectionPageTitle.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/store/core.store.js +1 -0
- package/dist/martyrs/src/modules/core/views/store/core.store.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js +2 -1
- package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +1 -0
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +2 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/pages/pages.router.js +7 -5
- package/dist/martyrs/src/modules/pages/pages.router.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +1 -1
- package/dist/martyrs.es.js +1 -1
- package/dist/style.css +5 -0
- package/dist/{web-BDuQSQKS.js → web-BA6h6Z8P.js} +1 -1
- package/package.json +1 -1
- package/src/builder/modes/ssr.rspack.dev.js +2 -0
- package/src/modules/auth/views/components/pages/Profile.vue +33 -5
- package/src/modules/backoffice/backoffice.client.js +1 -25
- package/src/modules/backoffice/configs/navigation.backoffice.config.js +99 -0
- package/src/modules/backoffice/router/backoffice.router.js +8 -7
- package/src/modules/community/components/pages/BlogPost.vue +9 -1
- package/src/modules/core/core.client.js +1 -0
- package/src/modules/core/views/classes/core.app.js +8 -3
- package/src/modules/core/views/components/layouts/Client.vue +41 -42
- package/src/modules/core/views/components/pages/404.vue +55 -3
- package/src/modules/core/views/store/core.store.js +1 -0
- package/src/modules/core/views/utils/vue-app-renderer.js +9 -1
- package/src/modules/pages/pages.router.js +4 -2
- package/src/modules/pages/views/router/pages.backoffice.router.js +4 -3
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.js.map +0 -1
- package/dist/martyrs/src/components/Tab/Tab.vue.js.map +0 -1
- package/dist/martyrs/src/modules/backoffice/backoffice.router.js.map +0 -1
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +0 -150
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js.map +0 -1
- package/src/modules/backoffice/backoffice.router.js +0 -69
- package/src/modules/backoffice/components/partials/Sidebar.vue +0 -165
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { W as Rn } from "./main-
|
|
1
|
+
import { W as Rn } from "./main-xL-jtBkT.js";
|
|
2
2
|
class f extends Rn {
|
|
3
3
|
constructor() {
|
|
4
4
|
super(...arguments), this.group = "CapacitorStorage";
|
|
@@ -52,4 +52,4 @@ class f extends Rn {
|
|
|
52
52
|
export {
|
|
53
53
|
f as PreferencesWeb
|
|
54
54
|
};
|
|
55
|
-
//# sourceMappingURL=web-
|
|
55
|
+
//# sourceMappingURL=web-BA6h6Z8P.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-
|
|
1
|
+
{"version":3,"file":"web-BA6h6Z8P.js","sources":["../../web-BA6h6Z8P.js"],"sourcesContent":["import { W as p } from \"./main-xL-jtBkT.js\";\nclass f extends p {\n constructor() {\n super(...arguments), this.group = \"CapacitorStorage\";\n }\n async configure({ group: e }) {\n typeof e == \"string\" && (this.group = e);\n }\n async get(e) {\n return { value: this.impl.getItem(this.applyPrefix(e.key)) };\n }\n async set(e) {\n this.impl.setItem(this.applyPrefix(e.key), e.value);\n }\n async remove(e) {\n this.impl.removeItem(this.applyPrefix(e.key));\n }\n async keys() {\n return { keys: this.rawKeys().map((t) => t.substring(this.prefix.length)) };\n }\n async clear() {\n for (const e of this.rawKeys())\n this.impl.removeItem(e);\n }\n async migrate() {\n var e;\n const t = [], s = [], n = \"_cap_\", o = Object.keys(this.impl).filter((i) => i.indexOf(n) === 0);\n for (const i of o) {\n const r = i.substring(n.length), a = (e = this.impl.getItem(i)) !== null && e !== void 0 ? e : \"\", { value: l } = await this.get({ key: r });\n typeof l == \"string\" ? s.push(r) : (await this.set({ key: r, value: a }), t.push(r));\n }\n return { migrated: t, existing: s };\n }\n async removeOld() {\n const e = \"_cap_\", t = Object.keys(this.impl).filter((s) => s.indexOf(e) === 0);\n for (const s of t)\n this.impl.removeItem(s);\n }\n get impl() {\n return window.localStorage;\n }\n get prefix() {\n return this.group === \"NativeStorage\" ? \"\" : `${this.group}.`;\n }\n rawKeys() {\n return Object.keys(this.impl).filter((e) => e.indexOf(this.prefix) === 0);\n }\n applyPrefix(e) {\n return this.prefix + e;\n }\n}\nexport {\n f as PreferencesWeb\n};\n"],"names":["p"],"mappings":";AACA,MAAM,UAAUA,GAAE;AAAA,EAChB,cAAc;AACZ,UAAM,GAAG,SAAS,GAAG,KAAK,QAAQ;AAAA,EACpC;AAAA,EACA,MAAM,UAAU,EAAE,OAAO,KAAK;AAC5B,WAAO,KAAK,aAAa,KAAK,QAAQ;AAAA,EACxC;AAAA,EACA,MAAM,IAAI,GAAG;AACX,WAAO,EAAE,OAAO,KAAK,KAAK,QAAQ,KAAK,YAAY,EAAE,GAAG,CAAC,EAAC;AAAA,EAC5D;AAAA,EACA,MAAM,IAAI,GAAG;AACX,SAAK,KAAK,QAAQ,KAAK,YAAY,EAAE,GAAG,GAAG,EAAE,KAAK;AAAA,EACpD;AAAA,EACA,MAAM,OAAO,GAAG;AACd,SAAK,KAAK,WAAW,KAAK,YAAY,EAAE,GAAG,CAAC;AAAA,EAC9C;AAAA,EACA,MAAM,OAAO;AACX,WAAO,EAAE,MAAM,KAAK,QAAO,EAAG,IAAI,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,MAAM,CAAC,EAAC;AAAA,EAC3E;AAAA,EACA,MAAM,QAAQ;AACZ,eAAW,KAAK,KAAK,QAAO;AAC1B,WAAK,KAAK,WAAW,CAAC;AAAA,EAC1B;AAAA,EACA,MAAM,UAAU;AACd,QAAI;AACJ,UAAM,IAAI,CAAA,GAAI,IAAI,CAAA,GAAI,IAAI,SAAS,IAAI,OAAO,KAAK,KAAK,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;AAC9F,eAAW,KAAK,GAAG;AACjB,YAAM,IAAI,EAAE,UAAU,EAAE,MAAM,GAAG,KAAK,IAAI,KAAK,KAAK,QAAQ,CAAC,OAAO,QAAQ,MAAM,SAAS,IAAI,IAAI,EAAE,OAAO,MAAM,MAAM,KAAK,IAAI,EAAE,KAAK,EAAC,CAAE;AAC3I,aAAO,KAAK,WAAW,EAAE,KAAK,CAAC,KAAK,MAAM,KAAK,IAAI,EAAE,KAAK,GAAG,OAAO,EAAC,CAAE,GAAG,EAAE,KAAK,CAAC;AAAA,IACpF;AACA,WAAO,EAAE,UAAU,GAAG,UAAU,EAAC;AAAA,EACnC;AAAA,EACA,MAAM,YAAY;AAChB,UAAM,IAAI,SAAS,IAAI,OAAO,KAAK,KAAK,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;AAC9E,eAAW,KAAK;AACd,WAAK,KAAK,WAAW,CAAC;AAAA,EAC1B;AAAA,EACA,IAAI,OAAO;AACT,WAAO,OAAO;AAAA,EAChB;AAAA,EACA,IAAI,SAAS;AACX,WAAO,KAAK,UAAU,kBAAkB,KAAK,GAAG,KAAK,KAAK;AAAA,EAC5D;AAAA,EACA,UAAU;AACR,WAAO,OAAO,KAAK,KAAK,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,KAAK,MAAM,MAAM,CAAC;AAAA,EAC1E;AAAA,EACA,YAAY,GAAG;AACb,WAAO,KAAK,SAAS;AAAA,EACvB;AACF;"}
|
|
@@ -2,7 +2,7 @@ import { ref, watchEffect, createElementBlock, openBlock, createBlock, createCom
|
|
|
2
2
|
import { VueDraggableNext } from "../../../../node_modules/.pnpm/vue-draggable-next@2.2.1_sortablejs@1.15.6_vue@3.5.13_typescript@5.8.3_/node_modules/vue-draggable-next/dist/vue-draggable-next.esm-bundler.js";
|
|
3
3
|
import _sfc_main$2 from "../UploadImageMultiple/UploadImageMultiple.vue.js";
|
|
4
4
|
import _sfc_main$1 from "../../modules/icons/navigation/IconCross.vue.js";
|
|
5
|
-
/* empty css
|
|
5
|
+
/* empty css */
|
|
6
6
|
const _hoisted_1 = { class: "flex-nowrap flex gap-small" };
|
|
7
7
|
const _hoisted_2 = { class: "pos-relative" };
|
|
8
8
|
const _hoisted_3 = ["src"];
|
|
@@ -92,4 +92,4 @@ const _sfc_main = {
|
|
|
92
92
|
export {
|
|
93
93
|
_sfc_main as default
|
|
94
94
|
};
|
|
95
|
-
//# sourceMappingURL=EditImages.
|
|
95
|
+
//# sourceMappingURL=EditImages.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EditImages.vue.js","sources":["../../../../../src/components/EditImages/EditImages.vue"],"sourcesContent":["<template>\n\t<div class=\"flex-nowrap flex gap-small\">\n <VueDraggableNext v-if=\"localImages.length > 0\" class=\"gap-small flex dragArea list-group w-full\" v-model=\"localImages\" @change=\"emitChanges\">\n\t\t\t<div v-for=\"(image, index) in localImages\" class=\"pos-relative\">\n\t\t\t\t<img loading=\"lazy\" class=\"i-extra object-fit-contain bg-black-transp-5 pd-nano radius-small o-hidden\" :src=\"(FILE_SERVER_URL || '') + image\" />\n\t\t\t\t\n <IconCross \n @click=\"deleteImage(index)\" \n class=\"cursor-pointer pos-absolute t-center flex-center flex radius-extra i-medium bg-red pos-t-10-negative pos-r-10-negative pd-micro\"\n />\n\t\t\t</div>\n\t\t</VueDraggableNext>\n <div\n v-if=\"localImages.length > 0\" \n class=\"i-extra uppercase flex-center flex radius-small o-hidden br-main br-2px pd-small\"\n >\n <UploadImageMultiple \n @update:images=\"onImagesUpdate\"\n text=\"Add\"\n :options=\"{\n showText: false\n }\"\n :uploadPath=\"'photos'\"\n class=\"radius-big\"\n />\n </div>\n\n\n\t\t<UploadImageMultiple \t\n v-if=\"localImages.length < 1\" \n @update:images=\"onImagesUpdate\"\n :uploadPath=\"props.uploadPath\"\n :text=\"props.text\"\n :options=\"props.options\"\n class=\"w-100 pd-medium\"\n />\n\t</div>\t\n</template>\n\n<script setup>\nimport { ref, defineProps, watchEffect } from 'vue';\nimport { VueDraggableNext } from 'vue-draggable-next'\nimport UploadImageMultiple from \"@martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue\";\nimport IconCross from '@martyrs/src/modules/icons/navigation/IconCross.vue';\n\nconst props = defineProps({\n images: Array,\n text: Object,\n options: Object,\n uploadPath: {\n type: Object,\n default: 'unsorted'\n }\n});\n\nconst emit = defineEmits(['update:images'])\n\nconst localImages = ref([...props.images])\n\nwatchEffect(() => {\n localImages.value = [...props.images]; // Обновление localImages при изменении props.images\n});\n\nconst emitChanges = () => {\n emit('update:images', localImages.value)\n}\n\nconst onImagesUpdate = (newImages) => {\n localImages.value = [...localImages.value, ...newImages]\n emitChanges()\n}\n\nconst deleteImage = (index) => {\n localImages.value.splice(index, 1)\n emitChanges()\n}\n</script>\n\n<style lang=\"scss\">\n// Your styles here\n</style>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,UAAM,QAAQ;AAUd,UAAM,OAAO;AAEb,UAAM,cAAc,IAAI,CAAC,GAAG,MAAM,MAAM,CAAC;AAEzC,gBAAY,MAAM;AAChB,kBAAY,QAAQ,CAAC,GAAG,MAAM,MAAM;AAAA,IACtC,CAAC;AAED,UAAM,cAAc,MAAM;AACxB,WAAK,iBAAiB,YAAY,KAAK;AAAA,IACzC;AAEA,UAAM,iBAAiB,CAAC,cAAc;AACpC,kBAAY,QAAQ,CAAC,GAAG,YAAY,OAAO,GAAG,SAAS;AACvD,kBAAW;AAAA,IACb;AAEA,UAAM,cAAc,CAAC,UAAU;AAC7B,kBAAY,MAAM,OAAO,OAAO,CAAC;AACjC,kBAAW;AAAA,IACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ref, watch, createElementBlock, openBlock, Fragment, renderList, normalizeStyle, normalizeClass, unref, toDisplayString } from "vue";
|
|
2
2
|
import { useGlobalMixins } from "../../modules/core/views/mixins/mixins.js";
|
|
3
|
-
/* empty css
|
|
3
|
+
/* empty css */
|
|
4
4
|
const _hoisted_1 = { class: "flex-nowrap flex-v-center flex pos-relative" };
|
|
5
5
|
const _hoisted_2 = ["onClick"];
|
|
6
6
|
const _sfc_main = {
|
|
@@ -71,4 +71,4 @@ const _sfc_main = {
|
|
|
71
71
|
export {
|
|
72
72
|
_sfc_main as default
|
|
73
73
|
};
|
|
74
|
-
//# sourceMappingURL=Tab.
|
|
74
|
+
//# sourceMappingURL=Tab.vue2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tab.vue2.js","sources":["../../../../../src/components/Tab/Tab.vue"],"sourcesContent":["<template>\n <div class=\"flex-nowrap flex-v-center flex pos-relative\">\n <button \n v-for=\"(tab, index) in tabs\" \n :key=\"index\" \n @click=\"handleTabClick(index, tab)\" \n class=\"z-index-1 t-center cursor-pointer\"\n :style=\"isSelected(index, tab) ? 'background: rgb(var(--main)) !important' : ''\"\n :class=\"[\n isSelected(index, tab) ? 'bg-main' : '',\n replaceClasses('pd-small pd-r-medium pd-l-medium w-max pd-small radius-small', classTab)\n ]\"\n >\n {{tab.name || tab.label}}\n </button>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, watch } from 'vue'\nimport { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js';\n\nconst { replaceClasses } = useGlobalMixins();\nconst emit = defineEmits(['update:selected', 'tab-click']);\n\nconst props = defineProps({\n tabs: Array,\n classTab: String,\n selected: [String, Number],\n modelValue: [String, Number],\n callback: Function\n})\n\nconst selectedTab = ref(0)\n\n// Handle both v-model and selected prop for backward compatibility\nconst updateSelectedIndex = () => {\n if (props.modelValue !== undefined) {\n const selectedIndex = props.tabs.findIndex(tab => tab.value === props.modelValue)\n if (selectedIndex !== -1) {\n selectedTab.value = selectedIndex\n }\n } else if (props.selected !== undefined) {\n const selectedIndex = props.tabs.findIndex(tab => tab.value === props.selected)\n if (selectedIndex !== -1) {\n selectedTab.value = selectedIndex\n }\n }\n}\n\n// Initial setup\nupdateSelectedIndex()\n\n// Watch for changes in selected or modelValue props\nwatch(() => props.selected, updateSelectedIndex)\nwatch(() => props.modelValue, updateSelectedIndex)\n\n// Check if tab is selected\nconst isSelected = (index, tab) => {\n if (props.modelValue !== undefined) {\n return tab.value === props.modelValue\n } else if (props.selected !== undefined) {\n return tab.value === props.selected\n }\n return index === selectedTab.value\n}\n\n// Handle tab click\nfunction handleTabClick(index, tab) {\n selectedTab.value = index\n \n // Emit both events for flexibility\n emit('update:selected', tab.value)\n emit('tab-click', { index, tab })\n \n // For v-model support\n if (props.modelValue !== undefined) {\n emit('update:modelValue', tab.value)\n }\n \n // Call callback if provided\n if (props.callback) props.callback(tab)\n}\n</script>\n\n<style lang=\"scss\">\n.tab-selector {\n position: absolute;\n width: 50%;\n height: 100%;\n left: 0;\n top: 0;\n z-index: 0;\n transition: left 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n</style>"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAsBA,UAAM,EAAE,eAAc,IAAK,gBAAe;AAC1C,UAAM,OAAO;AAEb,UAAM,QAAQ;AAQd,UAAM,cAAc,IAAI,CAAC;AAGzB,UAAM,sBAAsB,MAAM;AAChC,UAAI,MAAM,eAAe,QAAW;AAClC,cAAM,gBAAgB,MAAM,KAAK,UAAU,SAAO,IAAI,UAAU,MAAM,UAAU;AAChF,YAAI,kBAAkB,IAAI;AACxB,sBAAY,QAAQ;AAAA,QACtB;AAAA,MACF,WAAW,MAAM,aAAa,QAAW;AACvC,cAAM,gBAAgB,MAAM,KAAK,UAAU,SAAO,IAAI,UAAU,MAAM,QAAQ;AAC9E,YAAI,kBAAkB,IAAI;AACxB,sBAAY,QAAQ;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAGA,wBAAmB;AAGnB,UAAM,MAAM,MAAM,UAAU,mBAAmB;AAC/C,UAAM,MAAM,MAAM,YAAY,mBAAmB;AAGjD,UAAM,aAAa,CAAC,OAAO,QAAQ;AACjC,UAAI,MAAM,eAAe,QAAW;AAClC,eAAO,IAAI,UAAU,MAAM;AAAA,MAC7B,WAAW,MAAM,aAAa,QAAW;AACvC,eAAO,IAAI,UAAU,MAAM;AAAA,MAC7B;AACA,aAAO,UAAU,YAAY;AAAA,IAC/B;AAGA,aAAS,eAAe,OAAO,KAAK;AAClC,kBAAY,QAAQ;AAGpB,WAAK,mBAAmB,IAAI,KAAK;AACjC,WAAK,aAAa,EAAE,OAAO,IAAG,CAAE;AAGhC,UAAI,MAAM,eAAe,QAAW;AAClC,aAAK,qBAAqB,IAAI,KAAK;AAAA,MACrC;AAGA,UAAI,MAAM,SAAU,OAAM,SAAS,GAAG;AAAA,IACxC;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ref, createElementBlock, openBlock, createElementVNode, createCommentVNode, createVNode, toDisplayString, unref, createTextVNode, withCtx } from "vue";
|
|
2
|
-
/* empty css
|
|
2
|
+
/* empty css */
|
|
3
3
|
import Field from "../../../../../components/Field/Field.vue.js";
|
|
4
4
|
import _sfc_main$1 from "../../../../../components/Button/Button.vue2.js";
|
|
5
5
|
import { useRoute, useRouter } from "vue-router";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ref, onMounted, createElementBlock, openBlock, createElementVNode, createVNode, withCtx } from "vue";
|
|
2
|
-
/* empty css
|
|
2
|
+
/* empty css */
|
|
3
3
|
import Field from "../../../../../components/Field/Field.vue.js";
|
|
4
4
|
import _sfc_main$1 from "../../../../../components/Button/Button.vue2.js";
|
|
5
5
|
import { useRoute, useRouter } from "vue-router";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ref,
|
|
1
|
+
import { ref, onServerPrefetch, onMounted, resolveComponent, createElementBlock, openBlock, createElementVNode, createVNode, createBlock, createCommentVNode, unref, withCtx, toDisplayString, Fragment, renderList, normalizeClass, resolveDynamicComponent } from "vue";
|
|
2
2
|
/* empty css */
|
|
3
3
|
/* empty css */
|
|
4
4
|
/* empty css */
|
|
@@ -16,15 +16,13 @@ import _sfc_main$4 from "../../../../icons/navigation/IconEdit.vue.js";
|
|
|
16
16
|
import PlaceholderUserpic from "../../../../icons/placeholders/PlaceholderUserpic.vue.js";
|
|
17
17
|
import { useRoute, useRouter } from "vue-router";
|
|
18
18
|
import * as auth from "../../store/auth.js";
|
|
19
|
-
import { state, actions as actions$1 } from "../../store/auth.js";
|
|
20
|
-
import {
|
|
19
|
+
import { state as state$1, actions as actions$1 } from "../../store/auth.js";
|
|
20
|
+
import { state, actions } from "../../store/users.js";
|
|
21
21
|
import membershipsStore from "../../../../organizations/store/memberships.store.js";
|
|
22
22
|
import { useGlobalMixins } from "../../../../core/views/mixins/mixins.js";
|
|
23
|
+
import { useStore } from "../../../../core/views/store/core.store.js";
|
|
23
24
|
/* empty css */
|
|
24
|
-
const _hoisted_1 = {
|
|
25
|
-
key: 0,
|
|
26
|
-
class: "for-transition bg-white w-100"
|
|
27
|
-
};
|
|
25
|
+
const _hoisted_1 = { class: "for-transition bg-white w-100" };
|
|
28
26
|
const _hoisted_2 = {
|
|
29
27
|
key: 0,
|
|
30
28
|
class: "flex-center flex pd-medium radius-big bg-light uppercase fw-semi w-100 h-100"
|
|
@@ -55,7 +53,7 @@ const _sfc_main = {
|
|
|
55
53
|
const route = useRoute();
|
|
56
54
|
const router = useRouter();
|
|
57
55
|
const show = ref(false);
|
|
58
|
-
|
|
56
|
+
const store = useStore();
|
|
59
57
|
const { isModuleInstalled } = useGlobalMixins();
|
|
60
58
|
const modules = {
|
|
61
59
|
events: {
|
|
@@ -83,12 +81,33 @@ const _sfc_main = {
|
|
|
83
81
|
visible: (auth2) => auth2.state.user && (auth2.state.user._id === route.params._id || auth2.state.access && auth2.state.access.roles && (auth2.state.access.roles.includes("ROLE_MODERATOR") || auth2.state.access.roles.includes("ROLE_ADMIN")))
|
|
84
82
|
}
|
|
85
83
|
};
|
|
84
|
+
async function fetchUser() {
|
|
85
|
+
try {
|
|
86
|
+
const result = await actions.read({ _id: route.params._id, user: state$1.user?._id });
|
|
87
|
+
if (!result || result.length === 0 || !state.current?._id) {
|
|
88
|
+
store.core.state.notFound = true;
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
return true;
|
|
92
|
+
} catch (error) {
|
|
93
|
+
console.error("Error fetching user:", error);
|
|
94
|
+
store.core.state.notFound = true;
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
onServerPrefetch(async () => {
|
|
99
|
+
console.log("[SSR-404] Profile onServerPrefetch, route._id:", route.params._id);
|
|
100
|
+
await fetchUser();
|
|
101
|
+
console.log("[SSR-404] Profile fetchUser completed");
|
|
102
|
+
});
|
|
86
103
|
onMounted(async () => {
|
|
87
|
-
|
|
104
|
+
if (!state.current?._id || state.current._id !== route.params._id) {
|
|
105
|
+
await fetchUser();
|
|
106
|
+
}
|
|
88
107
|
show.value = true;
|
|
89
108
|
});
|
|
90
109
|
const handleMembershipUpdate = ({ membership, status, target }, statusName, statusNumber) => {
|
|
91
|
-
membershipsStore.handleMembershipUpdate(state
|
|
110
|
+
membershipsStore.handleMembershipUpdate(state.current, membership, status, target, statusName, statusNumber);
|
|
92
111
|
};
|
|
93
112
|
function logout() {
|
|
94
113
|
actions$1.logout();
|
|
@@ -96,10 +115,10 @@ const _sfc_main = {
|
|
|
96
115
|
}
|
|
97
116
|
return (_ctx, _cache) => {
|
|
98
117
|
const _component_RouterView = resolveComponent("RouterView");
|
|
99
|
-
return
|
|
100
|
-
state
|
|
118
|
+
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
119
|
+
state.current?.status === "removed" ? (openBlock(), createElementBlock("div", _hoisted_2, " Sorry, user has been removed. ")) : (openBlock(), createElementBlock("div", _hoisted_3, [
|
|
101
120
|
createElementVNode("section", _hoisted_4, [
|
|
102
|
-
unref(route).params._id && unref(route).params._id !== state.user._id ? (openBlock(), createBlock(_sfc_main$1, {
|
|
121
|
+
unref(route).params._id && unref(route).params._id !== state$1.user._id ? (openBlock(), createBlock(_sfc_main$1, {
|
|
103
122
|
key: 0,
|
|
104
123
|
label: "...",
|
|
105
124
|
align: "right",
|
|
@@ -108,9 +127,9 @@ const _sfc_main = {
|
|
|
108
127
|
default: withCtx(() => [
|
|
109
128
|
createElementVNode("section", _hoisted_5, [
|
|
110
129
|
createVNode(_sfc_main$2, {
|
|
111
|
-
user: state.user._id,
|
|
130
|
+
user: state$1.user._id,
|
|
112
131
|
type: "user",
|
|
113
|
-
target: state
|
|
132
|
+
target: state.current._id,
|
|
114
133
|
text: "Report",
|
|
115
134
|
class: "w-100"
|
|
116
135
|
}, {
|
|
@@ -119,13 +138,13 @@ const _sfc_main = {
|
|
|
119
138
|
])),
|
|
120
139
|
_: 1
|
|
121
140
|
}, 8, ["user", "target"]),
|
|
122
|
-
state.user._id ? (openBlock(), createBlock(_sfc_main$3, {
|
|
141
|
+
state$1.user._id ? (openBlock(), createBlock(_sfc_main$3, {
|
|
123
142
|
key: 0,
|
|
124
|
-
user: state.user._id,
|
|
143
|
+
user: state$1.user._id,
|
|
125
144
|
type: "user",
|
|
126
145
|
role: "blocked",
|
|
127
|
-
target: state
|
|
128
|
-
status: state
|
|
146
|
+
target: state.current._id,
|
|
147
|
+
status: state.current.isBlocked,
|
|
129
148
|
text: { create: "Block", remove: "Unblock" },
|
|
130
149
|
onUpdateMembership: _cache[0] || (_cache[0] = (event) => handleMembershipUpdate(event, "isBlocked")),
|
|
131
150
|
class: "t-white mn-t-thin bg-red"
|
|
@@ -134,53 +153,53 @@ const _sfc_main = {
|
|
|
134
153
|
]),
|
|
135
154
|
_: 1
|
|
136
155
|
})) : createCommentVNode("", true),
|
|
137
|
-
unref(route).params._id === state.user._id ? (openBlock(), createBlock(_sfc_main$4, {
|
|
156
|
+
unref(route).params._id === state$1.user._id ? (openBlock(), createBlock(_sfc_main$4, {
|
|
138
157
|
key: 1,
|
|
139
158
|
onClick: _cache[1] || (_cache[1] = ($event) => _ctx.$router.push({
|
|
140
159
|
name: "Profile Edit Profile",
|
|
141
160
|
params: {
|
|
142
|
-
_id: state.user._id
|
|
161
|
+
_id: state$1.user._id
|
|
143
162
|
}
|
|
144
163
|
})),
|
|
145
164
|
class: "cursor-pointer pos-absolute pos-t-regular pos-r-regular i-medium t-transp"
|
|
146
165
|
})) : createCommentVNode("", true),
|
|
147
|
-
state
|
|
166
|
+
state.current.profile.photo && state.current.profile.photo.length > 0 ? (openBlock(), createElementBlock("img", {
|
|
148
167
|
key: 2,
|
|
149
168
|
loading: "lazy",
|
|
150
|
-
src: (_ctx.FILE_SERVER_URL || "") + state
|
|
169
|
+
src: (_ctx.FILE_SERVER_URL || "") + state.current.profile.photo,
|
|
151
170
|
class: "radius-extra bg-white mn-b-small object-fit-cover i-extra"
|
|
152
171
|
}, null, 8, _hoisted_6)) : (openBlock(), createBlock(PlaceholderUserpic, {
|
|
153
172
|
key: 3,
|
|
154
173
|
class: "radius-medium mn-b-small i-extra"
|
|
155
174
|
})),
|
|
156
|
-
createElementVNode("h3", _hoisted_7, toDisplayString(state
|
|
157
|
-
state
|
|
158
|
-
createElementVNode("p", _hoisted_9, toDisplayString(state
|
|
175
|
+
createElementVNode("h3", _hoisted_7, toDisplayString(state.current.profile.name ? state.current.profile.name : "Anonymous"), 1),
|
|
176
|
+
state.current.username ? (openBlock(), createElementBlock("p", _hoisted_8, " @" + toDisplayString(state.current.username ? state.current.username : "Not specified"), 1)) : createCommentVNode("", true),
|
|
177
|
+
createElementVNode("p", _hoisted_9, toDisplayString(state.current.profile.description ? state.current.profile.description : "Bio not specified"), 1),
|
|
159
178
|
createElementVNode("div", _hoisted_10, [
|
|
160
|
-
(openBlock(true), createElementBlock(Fragment, null, renderList(state
|
|
179
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(state.current.roles, (role, index) => {
|
|
161
180
|
return openBlock(), createElementBlock("div", {
|
|
162
|
-
class: normalizeClass(["pd-thin radius-small fw-semi bg-white", { "mn-r-thin": index !== state
|
|
181
|
+
class: normalizeClass(["pd-thin radius-small fw-semi bg-white", { "mn-r-thin": index !== state.current.roles.length - 1 }])
|
|
163
182
|
}, toDisplayString(role.icon) + " " + toDisplayString(role.name), 3);
|
|
164
183
|
}), 256))
|
|
165
184
|
]),
|
|
166
|
-
createElementVNode("p", _hoisted_11, " 👨👨👧👧 " + toDisplayString(state
|
|
167
|
-
state.user._id && unref(route).params._id && unref(route).params._id !== state.user._id ? (openBlock(), createBlock(_sfc_main$3, {
|
|
185
|
+
createElementVNode("p", _hoisted_11, " 👨👨👧👧 " + toDisplayString(state.current.numberOfSubscribers) + " followers ", 1),
|
|
186
|
+
state$1.user._id && unref(route).params._id && unref(route).params._id !== state$1.user._id ? (openBlock(), createBlock(_sfc_main$3, {
|
|
168
187
|
key: 5,
|
|
169
|
-
user: state.user._id,
|
|
188
|
+
user: state$1.user._id,
|
|
170
189
|
type: "user",
|
|
171
190
|
role: "subscriber",
|
|
172
|
-
target: state
|
|
173
|
-
status: state
|
|
191
|
+
target: state.current._id,
|
|
192
|
+
status: state.current.isSubscriber,
|
|
174
193
|
text: { create: "Follow", remove: "Unfollow" },
|
|
175
194
|
onUpdateMembership: _cache[2] || (_cache[2] = (event) => handleMembershipUpdate(event, "isSubscriber", "numberOfSubscribers")),
|
|
176
195
|
class: "w-min mn-b-medium mn-r-auto mn-l-auto"
|
|
177
196
|
}, null, 8, ["user", "target", "status"])) : createCommentVNode("", true),
|
|
178
|
-
Object.values(state
|
|
197
|
+
Object.values(state.current.socials).some((value) => value) ? (openBlock(), createElementBlock("h4", _hoisted_12, " Find Me in Socials ")) : createCommentVNode("", true),
|
|
179
198
|
createVNode(_sfc_main$5, {
|
|
180
|
-
telegram: state
|
|
181
|
-
facebook: state
|
|
182
|
-
instagram: state
|
|
183
|
-
twitter: state
|
|
199
|
+
telegram: state.current.socials.telegram,
|
|
200
|
+
facebook: state.current.socials.facebook,
|
|
201
|
+
instagram: state.current.socials.instagram,
|
|
202
|
+
twitter: state.current.socials.twitter,
|
|
184
203
|
class: "mn-r-auto mn-l-auto"
|
|
185
204
|
}, null, 8, ["telegram", "facebook", "instagram", "twitter"])
|
|
186
205
|
]),
|
|
@@ -209,7 +228,7 @@ const _sfc_main = {
|
|
|
209
228
|
]),
|
|
210
229
|
_: 1
|
|
211
230
|
}),
|
|
212
|
-
state.user._id === unref(route).params._id ? (openBlock(), createBlock(_sfc_main$6, {
|
|
231
|
+
state$1.user._id === unref(route).params._id ? (openBlock(), createBlock(_sfc_main$6, {
|
|
213
232
|
key: 0,
|
|
214
233
|
class: "bg-light"
|
|
215
234
|
}, {
|
|
@@ -269,7 +288,7 @@ const _sfc_main = {
|
|
|
269
288
|
_: 1
|
|
270
289
|
})) : createCommentVNode("", true)
|
|
271
290
|
]))
|
|
272
|
-
])
|
|
291
|
+
]);
|
|
273
292
|
};
|
|
274
293
|
}
|
|
275
294
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Profile.vue.js","sources":["../../../../../../../../src/modules/auth/views/components/pages/Profile.vue"],"sourcesContent":["<template>\n\t<div \n\t\tv-if=\"show\"\n\t\tclass=\"for-transition bg-white w-100\"\n\t>\n\t\t<div \n\t\t\tv-if=\"users.state.current?.status === 'removed'\"\n\t\t\tclass=\"flex-center flex pd-medium radius-big bg-light uppercase fw-semi w-100 h-100\"\n\t\t>\n\t\t\tSorry, user has been removed.\n\t\t</div>\n\n\t\t<div \n\t\t\tv-else\n\t\t\t_id=\"dash\" \n\t\t\tclass=\"pd-thin w-100\"\n\t\t>\n\t\t\t<!-- <Completion \n\t\t\t\tv-if=\"route.params._id === auth.state.user._id && show\" \n\t\t :user=\"auth.state.user._id\"\n\t\t :target=\"users.state.current\"\n\t\t :cta=\"false\" \n\t\t text_cta=\"Fill\"\n\t\t text=\"Profile completed at\"\n\t\t class=\"mn-b-medium mn-b-regular pd-medium radius-semi t-white bg-second\"\n\t\t\t/> -->\n\n\t\t\t<section \n\t\t\t\tclass=\"flex-center pos-relative flex flex-column t-center w-100 mn-b-regular radius-medium pd-medium bg-light\"\n\t\t\t>\n\n\t\t\t\t<Dropdown \n\t\t\t\t\tv-if=\"route.params._id && route.params._id !== auth.state.user._id\"\n\t\t\t\t\t:label=\"'...'\" \n\t\t\t\t\t:align=\"'right'\"\n\t\t\t\t\tclass=\"cursor-pointer pos-absolute pos-r-0 pos-t-0 pd-thin radius-extra \"\n\t\t\t\t>\n\t\t\t\t\t<section \n\t\t\t\t\t\tclass=\"bg-black pd-thin radius-small\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<FormReport \n\t\t\t\t\t\t\t:user=\"auth.state.user._id\"\n\t\t\t\t\t\t\t:type=\"'user'\" \n\t\t\t\t\t\t\t:target=\"users.state.current._id\" \n\t\t\t\t\t\t\t:text=\"'Report'\" \n\t\t\t\t\t\t\tclass=\"w-100\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<button \n\t\t\t\t\t\t\t\tclass=\"w-100 bg-black br-1px br-white-transp-20 t-white button-small button\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tReport\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</FormReport>\n\n\t\t\t\t\t\t<ButtonToggleMembership\n\t\t\t\t\t\t\tv-if=\"auth.state.user._id\"\n\t\t\t\t :user=\"auth.state.user._id\"\n\t\t\t\t :type=\"'user'\" \n\t\t\t \t:role=\"'blocked'\" \n\t\t\t\t :target=\"users.state.current._id\" \n\t\t\t\t :status=\"users.state.current.isBlocked\" \n\t\t\t\t :text=\"{create: 'Block', remove: 'Unblock'}\"\n\t\t\t\t @updateMembership=\"event => handleMembershipUpdate(event, 'isBlocked')\"\n\t\t\t\t class=\"t-white mn-t-thin bg-red\" \n\t\t\t \t/>\n\t\t\t\t\t</section>\n\t </Dropdown>\t\n\n\n\t\t\t\t<IconEdit\n\t\t\t\t\tv-if=\"route.params._id === auth.state.user._id\"\n\t\t\t\t\t@click=\"$router.push({\n\t\t\t\t\t\tname: 'Profile Edit Profile', \n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t_id: auth.state.user._id\n\t\t\t\t\t\t}\n\t\t\t\t\t})\" \n\t\t\t\t\tclass=\"cursor-pointer pos-absolute pos-t-regular pos-r-regular i-medium t-transp\"\n\t\t\t\t/>\n\n\t\t\t\t<img loading=\"lazy\" \n\t\t\t\t\tv-if=\"users.state.current.profile.photo && users.state.current.profile.photo.length > 0\" \n\t\t\t\t\t:src=\"(FILE_SERVER_URL || '') + users.state.current.profile.photo\" \n\t\t\t\t\tclass=\"radius-extra bg-white mn-b-small object-fit-cover i-extra\" \n\t\t\t\t/>\n\t\t\t\t\n\t\t\t\t<PlaceholderUserpic \n\t\t\t\t\tv-else \n\t\t\t\t\tclass=\"radius-medium mn-b-small i-extra\"\n\t\t\t\t/>\n\n\t\t\t\t<h3 \n\t\t\t\t\tclass=\"mn-b-thin\"\n\t\t\t\t>\n\t\t\t\t\t{{users.state.current.profile.name ? users.state.current.profile.name : 'Anonymous' }}\n\t\t\t\t</h3>\n\t\t\t\t\n\t\t\t\t<p \n\t\t\t\t\tv-if=\"users.state.current.username\"\n\t\t\t\t\tclass=\"mn-b-thin t-main fw-semi\"\n\t\t\t\t>\n\t\t\t\t\t@{{ users.state.current.username ? users.state.current.username : 'Not specified' }}\n\t\t\t\t</p>\n\n\t\t\t\t<p \n\t\t\t\t\tclass=\"mn-b-small p-regular\"\n\t\t\t\t>\n\t\t\t\t {{ users.state.current.profile.description ? users.state.current.profile.description : 'Bio not specified' }}\n\t\t\t\t</p>\n\t\t\t\t\n\t\t\t\t<div class=\"mn-b-medium flex-center flex-nowrap flex\">\n\t\t\t\t\t<div \n\t\t\t\t\t v-for=\"(role,index) in users.state.current.roles\" \n\t\t\t\t\t class=\"pd-thin radius-small fw-semi bg-white\" \n\t\t\t\t\t :class=\"{'mn-r-thin': index !== users.state.current.roles.length - 1}\"\n\t\t\t\t\t >\n\t\t\t\t\t\t{{role.icon}}\n\t\t\t\t\t\t{{role.name}}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\t\t\t\n\n\t\t\t\t<p \n\t\t\t\t\tclass=\"fw-semi mn-b-small\"\n\t\t\t\t>\n\t\t\t\t\t<!-- 👍 3 212 likes · -->\n\t\t\t\t\t<!-- 💬 342 comments · -->\n\t\t\t\t\t👨👨👧👧 {{users.state.current.numberOfSubscribers}} followers\n\t\t\t\t</p>\n\t\t\t\t\n\t \t<ButtonToggleMembership\n\t \t\tv-if=\"auth.state.user._id && route.params._id && route.params._id !== auth.state.user._id\"\n\t\t :user=\"auth.state.user._id\"\n\t\t :type=\"'user'\" \n\t \t:role=\"'subscriber'\" \n\t\t :target=\"users.state.current._id\" \n\t\t :status=\"users.state.current.isSubscriber\" \n\t\t\t\t\t:text=\"{create: 'Follow', remove: 'Unfollow'}\"\n\t\t @updateMembership=\"event => handleMembershipUpdate(event, 'isSubscriber', 'numberOfSubscribers')\"\n\t\t class=\"w-min mn-b-medium\tmn-r-auto mn-l-auto\" \n\t \t/>\n\n\t \t<h4 \n\t \tv-if=\"Object.values(users.state.current.socials).some(value => value)\" \n\t \tclass=\"mn-t-small mn-b-thin\"\n\t >\n\t \t\tFind Me in Socials\n\t \t</h4>\n\t \t<Socials \n\t \t\t:telegram=\"users.state.current.socials.telegram\"\n\t \t\t:facebook=\"users.state.current.socials.facebook\"\n\t \t\t:instagram=\"users.state.current.socials.instagram\"\n\t \t\t:twitter=\"users.state.current.socials.twitter\"\n\t \t\tclass=\"mn-r-auto mn-l-auto\"\n\t \t/>\n\n\t\t\t</section>\n\t\t\t\n\t\t\t<RouterView />\n\n\t\t\t<Menu class=\"mn-b-regular bg-light\">\n\t <template v-for=\"(module, moduleName) in modules\" :key=\"moduleName\">\n\t <MenuItem \n\t v-if=\"isModuleInstalled(moduleName) && (!module.visible || module.visible(auth))\"\n\t @click=\"router.push(module.path(route.params._id))\" \n\t class=\"profile-menu-item cursor-pointer\"\n\t >\n\t <component \n\t :is=\"module.icon\" \n\t v-if=\"module.icon\"\n\t class=\"i-medium\" \n\t :icon=\"true\"\n\t />\n\t <span>{{ module.displayName }}</span>\n\t </MenuItem>\n\t </template>\n \t\t</Menu>\n\t\t\t \n\t\t\t<Menu \n\t\t\t\tv-if=\"auth.state.user._id === route.params._id\"\n\t\t\t\tclass=\"bg-light\"\n\t\t\t>\n\t\t\t\t<MenuItem \n\t\t\t \t@click=\"router.push({\n\t\t\t \t\tname: 'Notifications', \n\t\t\t \t\tparams: {\n\t\t\t \t\t\t_id: route.params._id\n\t\t\t \t\t}\n\t\t\t \t})\" \n\t\t\t \tclass=\"cursor-pointer\">\n\t\t\t <span>\n\t\t\t \tNotifications\n\t\t\t </span>\n\t\t\t </MenuItem>\n\t\t\t <MenuItem \n\t\t\t \t@click=\"router.push({\n\t\t\t \t\tname: 'Profile Edit Profile', \n\t\t\t \t\tparams: {\n\t\t\t \t\t\t_id: route.params._id\n\t\t\t \t\t}\n\t\t\t \t})\" \n\t\t\t \tclass=\"cursor-pointer\">\n\t\t\t <span>\n\t\t\t \tSettings\n\t\t\t </span>\n\t\t\t </MenuItem>\n\n\t\t\t <MenuItem \n\t\t\t \t@click=\"router.push({\n\t\t\t \t\tname: 'Legal', \n\t\t\t \t\tparams: {\n\t\t\t \t\t\t_id: route.params._id\n\t\t\t \t\t}\n\t\t\t \t})\" \n\t\t\t \tclass=\"cursor-pointer\">\n\t\t\t <span>\n\t\t\t \tAbout\n\t\t\t </span>\n\t\t\t </MenuItem>\n\t\t\t \n\t\t\t <MenuItem \n\t\t\t \tclass=\"cursor-pointer\"\n\t\t\t\t\t@click=\"logout()\"\n\t\t\t >\n\t\t\t <span \n\t\t\t \tclass=\"t-red\"\n\t\t\t >\n\t\t\t \tLogout\n\t\t\t </span>\n\t\t\t </MenuItem>\n\t\t\t</Menu>\n\n\t\t</div>\n\t</div>\n</template>\n\n<script setup>\n// Import components\nimport Field from '@martyrs/src/components/Field/Field.vue'\nimport Button from '@martyrs/src/components/Button/Button.vue'\nimport Dropdown from \"@martyrs/src/components/Dropdown/Dropdown.vue\";\nimport Completion from '@martyrs/src/components/Completion/Completion.vue'\n// Mobile Module\nimport Menu from '@martyrs/src/components/Menu/Menu.vue'\nimport MenuItem from '@martyrs/src/components/Menu/MenuItem.vue'\n// Org Module\nimport ButtonToggleMembership from '@martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue'\n// Report Module\nimport FormReport from '@martyrs/src/modules/reports/components/sections/FormReport.vue' \n// Community Module \nimport Activity from '@martyrs/src/modules/community/components/blocks/Activity.vue'; \nimport Socials from '@martyrs/src/modules/organizations/components/blocks/Socials.vue'\n// Icons Module\nimport IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue'\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\nimport IconCommunity from '@martyrs/src/modules/icons/entities/IconCommunity.vue'\nimport IconOrders from '@martyrs/src/modules/icons/entities/IconOrders.vue'\n\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue'\n\nimport PlaceholderUserpic from '@martyrs/src/modules/icons/placeholders/PlaceholderUserpic.vue'\n// Import libs\nimport { computed, watch, onMounted, ref, onBeforeMount, inject } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\n\n// Import state\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\nimport * as users from '@martyrs/src/modules/auth/views/store/users.js'\nimport membershipsStore from '@martyrs/src/modules/organizations/store/memberships.store.js'\nimport { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js'\n// Accessing router\nconst route = useRoute()\nconst router = useRouter()\n// Get organization _id from cookie\nconst show = ref(false)\n\nconst store = inject('store')\nconst { isModuleInstalled } = useGlobalMixins()\n\nconst modules = {\n events: {\n displayName: 'Events',\n path: (_id) => `/users/${_id}/events`,\n icon: IconEvents,\n visible: () => true\n },\n organizations: {\n displayName: 'Groups',\n path: (_id) => `/users/${_id}/organizations`,\n icon: IconGroups,\n visible: () => true\n },\n community: {\n displayName: 'Posts',\n path: (_id) => `/users/${_id}/blogposts`,\n icon: IconCommunity,\n visible: () => true\n },\n orders: {\n displayName: 'Orders',\n path: (_id) => `/users/${_id}/orders`,\n icon: IconOrders,\n visible: (auth) => auth.state.user && (\n auth.state.user._id === route.params._id ||\n (auth.state.access && auth.state.access.roles &&\n (auth.state.access.roles.includes('ROLE_MODERATOR') ||\n auth.state.access.roles.includes('ROLE_ADMIN'))\n )\n )\n }\n}\n\n\nonMounted(async () => {\n \tawait users.actions.read({ _id: route.params._id, user: auth.state.user._id });\n \tshow.value = true\n})\n\nconst handleMembershipUpdate = ({ membership, status, target }, statusName, statusNumber) => {\n membershipsStore.handleMembershipUpdate(users.state.current, membership, status, target, statusName, statusNumber)\n};\n\nfunction logout () {\n auth.actions.logout()\n\n router.push({name: 'Sign In'})\n}\n</script>\n\n<style lang=\"scss\">\n\t#header {\n\t\t// height: 3rem;\n\t}\n</style>\n"],"names":["IconEvents","IconGroups","IconCommunity","IconOrders","auth","users.actions","auth.state","users.state","auth.actions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8QA,UAAM,QAAQ,SAAQ;AACtB,UAAM,SAAS,UAAS;AAExB,UAAM,OAAO,IAAI,KAAK;AAER,WAAO,OAAO;AAC5B,UAAM,EAAE,kBAAiB,IAAK,gBAAe;AAE7C,UAAM,UAAU;AAAA,MACd,QAAQ;AAAA,QACN,aAAa;AAAA,QACb,MAAM,CAAC,QAAQ,UAAU,GAAG;AAAA,QAC5B,MAAMA;AAAAA,QACN,SAAS,MAAM;AAAA,MACnB;AAAA,MACE,eAAe;AAAA,QACb,aAAa;AAAA,QACb,MAAM,CAAC,QAAQ,UAAU,GAAG;AAAA,QAC5B,MAAMC;AAAAA,QACN,SAAS,MAAM;AAAA,MACnB;AAAA,MACE,WAAW;AAAA,QACT,aAAa;AAAA,QACb,MAAM,CAAC,QAAQ,UAAU,GAAG;AAAA,QAC5B,MAAMC;AAAAA,QACN,SAAS,MAAM;AAAA,MACnB;AAAA,MACE,QAAQ;AAAA,QACN,aAAa;AAAA,QACb,MAAM,CAAC,QAAQ,UAAU,GAAG;AAAA,QAC5B,MAAMC;AAAAA,QACN,SAAS,CAACC,UAASA,MAAK,MAAM,SAC5BA,MAAK,MAAM,KAAK,QAAQ,MAAM,OAAO,OACpCA,MAAK,MAAM,UAAUA,MAAK,MAAM,OAAO,UACrCA,MAAK,MAAM,OAAO,MAAM,SAAS,gBAAgB,KACjDA,MAAK,MAAM,OAAO,MAAM,SAAS,YAAY;AAAA,MAGtD;AAAA,IACA;AAGA,cAAU,YAAY;AACpB,YAAMC,QAAc,KAAK,EAAE,KAAK,MAAM,OAAO,KAAK,MAAMC,MAAW,KAAK,IAAG,CAAE;AAC7E,WAAK,QAAQ;AAAA,IACf,CAAC;AAED,UAAM,yBAAyB,CAAC,EAAE,YAAY,QAAQ,OAAM,GAAI,YAAY,iBAAiB;AAC3F,uBAAiB,uBAAuBC,QAAY,SAAS,YAAY,QAAQ,QAAQ,YAAY,YAAY;AAAA,IACnH;AAEA,aAAS,SAAU;AACjBC,gBAAa,OAAM;AAEnB,aAAO,KAAK,EAAC,MAAM,UAAS,CAAC;AAAA,IAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"Profile.vue.js","sources":["../../../../../../../../src/modules/auth/views/components/pages/Profile.vue"],"sourcesContent":["<template>\n\t<div \n\t\tclass=\"for-transition bg-white w-100\"\n\t>\n\t\t<div \n\t\t\tv-if=\"users.state.current?.status === 'removed'\"\n\t\t\tclass=\"flex-center flex pd-medium radius-big bg-light uppercase fw-semi w-100 h-100\"\n\t\t>\n\t\t\tSorry, user has been removed.\n\t\t</div>\n\n\t\t<div \n\t\t\tv-else\n\t\t\t_id=\"dash\" \n\t\t\tclass=\"pd-thin w-100\"\n\t\t>\n\t\t\t<!-- <Completion \n\t\t\t\tv-if=\"route.params._id === auth.state.user._id && show\" \n\t\t :user=\"auth.state.user._id\"\n\t\t :target=\"users.state.current\"\n\t\t :cta=\"false\" \n\t\t text_cta=\"Fill\"\n\t\t text=\"Profile completed at\"\n\t\t class=\"mn-b-medium mn-b-regular pd-medium radius-semi t-white bg-second\"\n\t\t\t/> -->\n\n\t\t\t<section \n\t\t\t\tclass=\"flex-center pos-relative flex flex-column t-center w-100 mn-b-regular radius-medium pd-medium bg-light\"\n\t\t\t>\n\n\t\t\t\t<Dropdown \n\t\t\t\t\tv-if=\"route.params._id && route.params._id !== auth.state.user._id\"\n\t\t\t\t\t:label=\"'...'\" \n\t\t\t\t\t:align=\"'right'\"\n\t\t\t\t\tclass=\"cursor-pointer pos-absolute pos-r-0 pos-t-0 pd-thin radius-extra \"\n\t\t\t\t>\n\t\t\t\t\t<section \n\t\t\t\t\t\tclass=\"bg-black pd-thin radius-small\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<FormReport \n\t\t\t\t\t\t\t:user=\"auth.state.user._id\"\n\t\t\t\t\t\t\t:type=\"'user'\" \n\t\t\t\t\t\t\t:target=\"users.state.current._id\" \n\t\t\t\t\t\t\t:text=\"'Report'\" \n\t\t\t\t\t\t\tclass=\"w-100\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<button \n\t\t\t\t\t\t\t\tclass=\"w-100 bg-black br-1px br-white-transp-20 t-white button-small button\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tReport\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</FormReport>\n\n\t\t\t\t\t\t<ButtonToggleMembership\n\t\t\t\t\t\t\tv-if=\"auth.state.user._id\"\n\t\t\t\t :user=\"auth.state.user._id\"\n\t\t\t\t :type=\"'user'\" \n\t\t\t \t:role=\"'blocked'\" \n\t\t\t\t :target=\"users.state.current._id\" \n\t\t\t\t :status=\"users.state.current.isBlocked\" \n\t\t\t\t :text=\"{create: 'Block', remove: 'Unblock'}\"\n\t\t\t\t @updateMembership=\"event => handleMembershipUpdate(event, 'isBlocked')\"\n\t\t\t\t class=\"t-white mn-t-thin bg-red\" \n\t\t\t \t/>\n\t\t\t\t\t</section>\n\t </Dropdown>\t\n\n\n\t\t\t\t<IconEdit\n\t\t\t\t\tv-if=\"route.params._id === auth.state.user._id\"\n\t\t\t\t\t@click=\"$router.push({\n\t\t\t\t\t\tname: 'Profile Edit Profile', \n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t_id: auth.state.user._id\n\t\t\t\t\t\t}\n\t\t\t\t\t})\" \n\t\t\t\t\tclass=\"cursor-pointer pos-absolute pos-t-regular pos-r-regular i-medium t-transp\"\n\t\t\t\t/>\n\n\t\t\t\t<img loading=\"lazy\" \n\t\t\t\t\tv-if=\"users.state.current.profile.photo && users.state.current.profile.photo.length > 0\" \n\t\t\t\t\t:src=\"(FILE_SERVER_URL || '') + users.state.current.profile.photo\" \n\t\t\t\t\tclass=\"radius-extra bg-white mn-b-small object-fit-cover i-extra\" \n\t\t\t\t/>\n\t\t\t\t\n\t\t\t\t<PlaceholderUserpic \n\t\t\t\t\tv-else \n\t\t\t\t\tclass=\"radius-medium mn-b-small i-extra\"\n\t\t\t\t/>\n\n\t\t\t\t<h3 \n\t\t\t\t\tclass=\"mn-b-thin\"\n\t\t\t\t>\n\t\t\t\t\t{{users.state.current.profile.name ? users.state.current.profile.name : 'Anonymous' }}\n\t\t\t\t</h3>\n\t\t\t\t\n\t\t\t\t<p \n\t\t\t\t\tv-if=\"users.state.current.username\"\n\t\t\t\t\tclass=\"mn-b-thin t-main fw-semi\"\n\t\t\t\t>\n\t\t\t\t\t@{{ users.state.current.username ? users.state.current.username : 'Not specified' }}\n\t\t\t\t</p>\n\n\t\t\t\t<p \n\t\t\t\t\tclass=\"mn-b-small p-regular\"\n\t\t\t\t>\n\t\t\t\t {{ users.state.current.profile.description ? users.state.current.profile.description : 'Bio not specified' }}\n\t\t\t\t</p>\n\t\t\t\t\n\t\t\t\t<div class=\"mn-b-medium flex-center flex-nowrap flex\">\n\t\t\t\t\t<div \n\t\t\t\t\t v-for=\"(role,index) in users.state.current.roles\" \n\t\t\t\t\t class=\"pd-thin radius-small fw-semi bg-white\" \n\t\t\t\t\t :class=\"{'mn-r-thin': index !== users.state.current.roles.length - 1}\"\n\t\t\t\t\t >\n\t\t\t\t\t\t{{role.icon}}\n\t\t\t\t\t\t{{role.name}}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\t\t\t\n\n\t\t\t\t<p \n\t\t\t\t\tclass=\"fw-semi mn-b-small\"\n\t\t\t\t>\n\t\t\t\t\t<!-- 👍 3 212 likes · -->\n\t\t\t\t\t<!-- 💬 342 comments · -->\n\t\t\t\t\t👨👨👧👧 {{users.state.current.numberOfSubscribers}} followers\n\t\t\t\t</p>\n\t\t\t\t\n\t \t<ButtonToggleMembership\n\t \t\tv-if=\"auth.state.user._id && route.params._id && route.params._id !== auth.state.user._id\"\n\t\t :user=\"auth.state.user._id\"\n\t\t :type=\"'user'\" \n\t \t:role=\"'subscriber'\" \n\t\t :target=\"users.state.current._id\" \n\t\t :status=\"users.state.current.isSubscriber\" \n\t\t\t\t\t:text=\"{create: 'Follow', remove: 'Unfollow'}\"\n\t\t @updateMembership=\"event => handleMembershipUpdate(event, 'isSubscriber', 'numberOfSubscribers')\"\n\t\t class=\"w-min mn-b-medium\tmn-r-auto mn-l-auto\" \n\t \t/>\n\n\t \t<h4 \n\t \tv-if=\"Object.values(users.state.current.socials).some(value => value)\" \n\t \tclass=\"mn-t-small mn-b-thin\"\n\t >\n\t \t\tFind Me in Socials\n\t \t</h4>\n\t \t<Socials \n\t \t\t:telegram=\"users.state.current.socials.telegram\"\n\t \t\t:facebook=\"users.state.current.socials.facebook\"\n\t \t\t:instagram=\"users.state.current.socials.instagram\"\n\t \t\t:twitter=\"users.state.current.socials.twitter\"\n\t \t\tclass=\"mn-r-auto mn-l-auto\"\n\t \t/>\n\n\t\t\t</section>\n\t\t\t\n\t\t\t<RouterView />\n\n\t\t\t<Menu class=\"mn-b-regular bg-light\">\n\t <template v-for=\"(module, moduleName) in modules\" :key=\"moduleName\">\n\t <MenuItem \n\t v-if=\"isModuleInstalled(moduleName) && (!module.visible || module.visible(auth))\"\n\t @click=\"router.push(module.path(route.params._id))\" \n\t class=\"profile-menu-item cursor-pointer\"\n\t >\n\t <component \n\t :is=\"module.icon\" \n\t v-if=\"module.icon\"\n\t class=\"i-medium\" \n\t :icon=\"true\"\n\t />\n\t <span>{{ module.displayName }}</span>\n\t </MenuItem>\n\t </template>\n \t\t</Menu>\n\t\t\t \n\t\t\t<Menu \n\t\t\t\tv-if=\"auth.state.user._id === route.params._id\"\n\t\t\t\tclass=\"bg-light\"\n\t\t\t>\n\t\t\t\t<MenuItem \n\t\t\t \t@click=\"router.push({\n\t\t\t \t\tname: 'Notifications', \n\t\t\t \t\tparams: {\n\t\t\t \t\t\t_id: route.params._id\n\t\t\t \t\t}\n\t\t\t \t})\" \n\t\t\t \tclass=\"cursor-pointer\">\n\t\t\t <span>\n\t\t\t \tNotifications\n\t\t\t </span>\n\t\t\t </MenuItem>\n\t\t\t <MenuItem \n\t\t\t \t@click=\"router.push({\n\t\t\t \t\tname: 'Profile Edit Profile', \n\t\t\t \t\tparams: {\n\t\t\t \t\t\t_id: route.params._id\n\t\t\t \t\t}\n\t\t\t \t})\" \n\t\t\t \tclass=\"cursor-pointer\">\n\t\t\t <span>\n\t\t\t \tSettings\n\t\t\t </span>\n\t\t\t </MenuItem>\n\n\t\t\t <MenuItem \n\t\t\t \t@click=\"router.push({\n\t\t\t \t\tname: 'Legal', \n\t\t\t \t\tparams: {\n\t\t\t \t\t\t_id: route.params._id\n\t\t\t \t\t}\n\t\t\t \t})\" \n\t\t\t \tclass=\"cursor-pointer\">\n\t\t\t <span>\n\t\t\t \tAbout\n\t\t\t </span>\n\t\t\t </MenuItem>\n\t\t\t \n\t\t\t <MenuItem \n\t\t\t \tclass=\"cursor-pointer\"\n\t\t\t\t\t@click=\"logout()\"\n\t\t\t >\n\t\t\t <span \n\t\t\t \tclass=\"t-red\"\n\t\t\t >\n\t\t\t \tLogout\n\t\t\t </span>\n\t\t\t </MenuItem>\n\t\t\t</Menu>\n\n\t\t</div>\n\t</div>\n</template>\n\n<script setup>\n// Import components\nimport Field from '@martyrs/src/components/Field/Field.vue'\nimport Button from '@martyrs/src/components/Button/Button.vue'\nimport Dropdown from \"@martyrs/src/components/Dropdown/Dropdown.vue\";\nimport Completion from '@martyrs/src/components/Completion/Completion.vue'\n// Mobile Module\nimport Menu from '@martyrs/src/components/Menu/Menu.vue'\nimport MenuItem from '@martyrs/src/components/Menu/MenuItem.vue'\n// Org Module\nimport ButtonToggleMembership from '@martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue'\n// Report Module\nimport FormReport from '@martyrs/src/modules/reports/components/sections/FormReport.vue' \n// Community Module \nimport Activity from '@martyrs/src/modules/community/components/blocks/Activity.vue'; \nimport Socials from '@martyrs/src/modules/organizations/components/blocks/Socials.vue'\n// Icons Module\nimport IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue'\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\nimport IconCommunity from '@martyrs/src/modules/icons/entities/IconCommunity.vue'\nimport IconOrders from '@martyrs/src/modules/icons/entities/IconOrders.vue'\n\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue'\n\nimport PlaceholderUserpic from '@martyrs/src/modules/icons/placeholders/PlaceholderUserpic.vue'\n// Import libs\nimport { computed, watch, onMounted, onServerPrefetch, ref, onBeforeMount, inject } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\n\n// Import state\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\nimport * as users from '@martyrs/src/modules/auth/views/store/users.js'\nimport membershipsStore from '@martyrs/src/modules/organizations/store/memberships.store.js'\nimport { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js'\nimport { useStore } from '@martyrs/src/modules/core/views/store/core.store.js'\n// Accessing router\nconst route = useRoute()\nconst router = useRouter()\n// Get organization _id from cookie\nconst show = ref(false)\n\nconst store = useStore()\nconst { isModuleInstalled } = useGlobalMixins()\n\nconst modules = {\n events: {\n displayName: 'Events',\n path: (_id) => `/users/${_id}/events`,\n icon: IconEvents,\n visible: () => true\n },\n organizations: {\n displayName: 'Groups',\n path: (_id) => `/users/${_id}/organizations`,\n icon: IconGroups,\n visible: () => true\n },\n community: {\n displayName: 'Posts',\n path: (_id) => `/users/${_id}/blogposts`,\n icon: IconCommunity,\n visible: () => true\n },\n orders: {\n displayName: 'Orders',\n path: (_id) => `/users/${_id}/orders`,\n icon: IconOrders,\n visible: (auth) => auth.state.user && (\n auth.state.user._id === route.params._id ||\n (auth.state.access && auth.state.access.roles &&\n (auth.state.access.roles.includes('ROLE_MODERATOR') ||\n auth.state.access.roles.includes('ROLE_ADMIN'))\n )\n )\n }\n}\n\n\n// Функция загрузки данных пользователя\nasync function fetchUser() {\n try {\n const result = await users.actions.read({ _id: route.params._id, user: auth.state.user?._id });\n // Если пользователь не найден - устанавливаем 404\n if (!result || result.length === 0 || !users.state.current?._id) {\n store.core.state.notFound = true;\n return false;\n }\n return true;\n } catch (error) {\n console.error('Error fetching user:', error);\n store.core.state.notFound = true;\n return false;\n }\n}\n\n// SSR: загружаем данные на сервере для SEO\nonServerPrefetch(async () => {\n console.log('[SSR-404] Profile onServerPrefetch, route._id:', route.params._id);\n await fetchUser();\n console.log('[SSR-404] Profile fetchUser completed');\n});\n\n// Client: загружаем данные если еще не загружены (после гидратации)\nonMounted(async () => {\n // Если данные уже загружены на сервере (SSR) - не загружаем повторно\n if (!users.state.current?._id || users.state.current._id !== route.params._id) {\n await fetchUser();\n }\n show.value = true;\n})\n\nconst handleMembershipUpdate = ({ membership, status, target }, statusName, statusNumber) => {\n membershipsStore.handleMembershipUpdate(users.state.current, membership, status, target, statusName, statusNumber)\n};\n\nfunction logout () {\n auth.actions.logout()\n\n router.push({name: 'Sign In'})\n}\n</script>\n\n<style lang=\"scss\">\n\t#header {\n\t\t// height: 3rem;\n\t}\n</style>\n"],"names":["IconEvents","IconGroups","IconCommunity","IconOrders","auth","users.actions","auth.state","users.state","auth.actions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8QA,UAAM,QAAQ,SAAQ;AACtB,UAAM,SAAS,UAAS;AAExB,UAAM,OAAO,IAAI,KAAK;AAEtB,UAAM,QAAQ,SAAQ;AACtB,UAAM,EAAE,kBAAiB,IAAK,gBAAe;AAE7C,UAAM,UAAU;AAAA,MACd,QAAQ;AAAA,QACN,aAAa;AAAA,QACb,MAAM,CAAC,QAAQ,UAAU,GAAG;AAAA,QAC5B,MAAMA;AAAAA,QACN,SAAS,MAAM;AAAA,MACnB;AAAA,MACE,eAAe;AAAA,QACb,aAAa;AAAA,QACb,MAAM,CAAC,QAAQ,UAAU,GAAG;AAAA,QAC5B,MAAMC;AAAAA,QACN,SAAS,MAAM;AAAA,MACnB;AAAA,MACE,WAAW;AAAA,QACT,aAAa;AAAA,QACb,MAAM,CAAC,QAAQ,UAAU,GAAG;AAAA,QAC5B,MAAMC;AAAAA,QACN,SAAS,MAAM;AAAA,MACnB;AAAA,MACE,QAAQ;AAAA,QACN,aAAa;AAAA,QACb,MAAM,CAAC,QAAQ,UAAU,GAAG;AAAA,QAC5B,MAAMC;AAAAA,QACN,SAAS,CAACC,UAASA,MAAK,MAAM,SAC5BA,MAAK,MAAM,KAAK,QAAQ,MAAM,OAAO,OACpCA,MAAK,MAAM,UAAUA,MAAK,MAAM,OAAO,UACrCA,MAAK,MAAM,OAAO,MAAM,SAAS,gBAAgB,KACjDA,MAAK,MAAM,OAAO,MAAM,SAAS,YAAY;AAAA,MAGtD;AAAA,IACA;AAIA,mBAAe,YAAY;AACzB,UAAI;AACF,cAAM,SAAS,MAAMC,QAAc,KAAK,EAAE,KAAK,MAAM,OAAO,KAAK,MAAMC,QAAW,MAAM,IAAG,CAAE;AAE7F,YAAI,CAAC,UAAU,OAAO,WAAW,KAAK,CAACC,MAAY,SAAS,KAAK;AAC/D,gBAAM,KAAK,MAAM,WAAW;AAC5B,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT,SAAS,OAAO;AACd,gBAAQ,MAAM,wBAAwB,KAAK;AAC3C,cAAM,KAAK,MAAM,WAAW;AAC5B,eAAO;AAAA,MACT;AAAA,IACF;AAGA,qBAAiB,YAAY;AAC3B,cAAQ,IAAI,kDAAkD,MAAM,OAAO,GAAG;AAC9E,YAAM,UAAS;AACf,cAAQ,IAAI,uCAAuC;AAAA,IACrD,CAAC;AAGD,cAAU,YAAY;AAEpB,UAAI,CAACA,MAAY,SAAS,OAAOA,MAAY,QAAQ,QAAQ,MAAM,OAAO,KAAK;AAC7E,cAAM,UAAS;AAAA,MACjB;AACA,WAAK,QAAQ;AAAA,IACf,CAAC;AAED,UAAM,yBAAyB,CAAC,EAAE,YAAY,QAAQ,OAAM,GAAI,YAAY,iBAAiB;AAC3F,uBAAiB,uBAAuBA,MAAY,SAAS,YAAY,QAAQ,QAAQ,YAAY,YAAY;AAAA,IACnH;AAEA,aAAS,SAAU;AACjBC,gBAAa,OAAM;AAEnB,aAAO,KAAK,EAAC,MAAM,UAAS,CAAC;AAAA,IAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ref, watch, createElementBlock, openBlock, createElementVNode, createBlock, createCommentVNode, createVNode, unref, withCtx, Fragment, renderList } from "vue";
|
|
2
2
|
import { useRoute, useRouter } from "vue-router";
|
|
3
|
-
import _sfc_main$1 from "../../../../../components/Tab/Tab.
|
|
3
|
+
import _sfc_main$1 from "../../../../../components/Tab/Tab.vue2.js";
|
|
4
4
|
import _sfc_main$2 from "../../../../../components/Feed/Feed.vue.js";
|
|
5
5
|
import _sfc_main$3 from "../../../../community/components/blocks/CardBlogpost.vue.js";
|
|
6
6
|
import { state } from "../../store/auth.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ref, computed, createElementBlock, openBlock, createElementVNode, createCommentVNode, createVNode, toDisplayString, unref, Transition, withCtx, createTextVNode } from "vue";
|
|
2
|
-
import _sfc_main$1 from "../../../../../components/Tab/Tab.
|
|
2
|
+
import _sfc_main$1 from "../../../../../components/Tab/Tab.vue2.js";
|
|
3
3
|
import Field from "../../../../../components/Field/Field.vue.js";
|
|
4
4
|
import _sfc_main$2 from "../../../../../components/FieldPhone/FieldPhone.vue.js";
|
|
5
5
|
import _sfc_main$3 from "../../../../../components/Button/Button.vue2.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ref, computed, onMounted, resolveComponent, createElementBlock, openBlock, createElementVNode, createCommentVNode, createVNode, createTextVNode, toDisplayString, unref, withCtx, Transition, withDirectives, vShow } from "vue";
|
|
2
|
-
import _sfc_main$1 from "../../../../../components/Tab/Tab.
|
|
2
|
+
import _sfc_main$1 from "../../../../../components/Tab/Tab.vue2.js";
|
|
3
3
|
import Field from "../../../../../components/Field/Field.vue.js";
|
|
4
4
|
import _sfc_main$2 from "../../../../../components/FieldPhone/FieldPhone.vue.js";
|
|
5
5
|
import _sfc_main$3 from "../../../../../components/Button/Button.vue2.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ref, computed, resolveComponent, createElementBlock, openBlock, createElementVNode, createCommentVNode, createVNode, toDisplayString, unref, Transition, withCtx, withDirectives, vShow, createTextVNode } from "vue";
|
|
2
|
-
import _sfc_main$1 from "../../../../../components/Tab/Tab.
|
|
2
|
+
import _sfc_main$1 from "../../../../../components/Tab/Tab.vue2.js";
|
|
3
3
|
import Field from "../../../../../components/Field/Field.vue.js";
|
|
4
4
|
import _sfc_main$2 from "../../../../../components/FieldPhone/FieldPhone.vue.js";
|
|
5
5
|
import _sfc_main$3 from "../../../../../components/Button/Button.vue2.js";
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import addRoutes from "../core/views/router/addRoutes.js";
|
|
2
|
-
import { getRoutes } from "./backoffice.router.js";
|
|
3
|
-
import _sfc_main
|
|
4
|
-
import _sfc_main from "./components/partials/Sidebar.vue.js";
|
|
2
|
+
import { getRoutes } from "./router/backoffice.router.js";
|
|
3
|
+
import _sfc_main from "./components/pages/Dashboard.vue.js";
|
|
5
4
|
function initializeBackoffice(app, store, router, options = {}) {
|
|
6
5
|
const routes = getRoutes(options);
|
|
7
6
|
routes.forEach(({ parentName, config }) => {
|
|
@@ -15,18 +14,7 @@ const ModuleBackoffice = {
|
|
|
15
14
|
getRoutes
|
|
16
15
|
},
|
|
17
16
|
components: {
|
|
18
|
-
|
|
19
|
-
// Pages
|
|
20
|
-
Dashboard: _sfc_main$1,
|
|
21
|
-
// Admin components
|
|
22
|
-
// AdminDashboard,
|
|
23
|
-
// FastOrders,
|
|
24
|
-
// UserEdit,
|
|
25
|
-
// Users,
|
|
26
|
-
// ProductEdit,
|
|
27
|
-
// Backcalls,
|
|
28
|
-
// Partials
|
|
29
|
-
Sidebar: _sfc_main
|
|
17
|
+
Dashboard: _sfc_main
|
|
30
18
|
}
|
|
31
19
|
}
|
|
32
20
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backoffice.client.js","sources":["../../../../../src/modules/backoffice/backoffice.client.js"],"sourcesContent":["// Router\nimport addRoutes from '@martyrs/src/modules/core/views/router/addRoutes.js';\nimport { getRoutes } from './backoffice.router.js';\n\n// Views\n//
|
|
1
|
+
{"version":3,"file":"backoffice.client.js","sources":["../../../../../src/modules/backoffice/backoffice.client.js"],"sourcesContent":["// Router\nimport addRoutes from '@martyrs/src/modules/core/views/router/addRoutes.js';\nimport { getRoutes } from './router/backoffice.router.js';\n\n// Views\n// Pages\nimport Dashboard from './components/pages/Dashboard.vue';\n\n// Пример функции инициализации для модуля бэкофиса\nfunction initializeBackoffice(app, store, router, options = {}) {\n const routes = getRoutes(options);\n routes.forEach(({ parentName, config }) => {\n addRoutes(router, { ...config, parentName });\n });\n}\n\nconst ModuleBackoffice = {\n initialize: initializeBackoffice,\n views: {\n router: {\n getRoutes,\n },\n components: {\n Dashboard,\n },\n },\n};\n\nexport default ModuleBackoffice;\n"],"names":["Dashboard"],"mappings":";;;AASA,SAAS,qBAAqB,KAAK,OAAO,QAAQ,UAAU,CAAA,GAAI;AAC9D,QAAM,SAAS,UAAU,OAAO;AAChC,SAAO,QAAQ,CAAC,EAAE,YAAY,OAAM,MAAO;AACzC,cAAU,QAAQ,EAAE,GAAG,QAAQ,WAAU,CAAE;AAAA,EAC7C,CAAC;AACH;AAEK,MAAC,mBAAmB;AAAA,EACvB,YAAY;AAAA,EACZ,OAAO;AAAA,IACL,QAAQ;AAAA,MACN;AAAA,IACN;AAAA,IACI,YAAY;AAAA,MAChB,WAAMA;AAAAA,IACN;AAAA,EACA;AACA;"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import _sfc_main$2 from "../../icons/entities/IconProducts.vue.js";
|
|
2
|
+
import _sfc_main$7 from "../../icons/entities/IconPayments.vue.js";
|
|
3
|
+
import _sfc_main$6 from "../../icons/entities/IconEvents.vue.js";
|
|
4
|
+
import _sfc_main from "../../icons/entities/IconGroups.vue.js";
|
|
5
|
+
import _sfc_main$1 from "../../icons/entities/IconCommunity.vue.js";
|
|
6
|
+
import _sfc_main$5 from "../../icons/entities/IconGallery.vue.js";
|
|
7
|
+
import _sfc_main$4 from "../../icons/entities/IconOrders.vue.js";
|
|
8
|
+
import _sfc_main$3 from "../../icons/entities/IconLeftovers.vue.js";
|
|
9
|
+
const navigationItems = [
|
|
10
|
+
{
|
|
11
|
+
category: "Menu",
|
|
12
|
+
visible: () => true,
|
|
13
|
+
items: [
|
|
14
|
+
{
|
|
15
|
+
title: "Organizations",
|
|
16
|
+
iconComponent: _sfc_main,
|
|
17
|
+
route: () => "/backoffice/organizations",
|
|
18
|
+
visible: () => true
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
title: "Community",
|
|
22
|
+
iconComponent: _sfc_main$1,
|
|
23
|
+
route: () => "/backoffice/community",
|
|
24
|
+
visible: () => true
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
title: "Products",
|
|
28
|
+
iconComponent: _sfc_main$2,
|
|
29
|
+
route: () => "/backoffice/products",
|
|
30
|
+
visible: () => true
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
title: "Inventory",
|
|
34
|
+
iconComponent: _sfc_main$3,
|
|
35
|
+
route: () => "/backoffice/inventory",
|
|
36
|
+
visible: () => true
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
title: "Orders",
|
|
40
|
+
iconComponent: _sfc_main$4,
|
|
41
|
+
route: () => "/backoffice/orders",
|
|
42
|
+
visible: () => true
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
title: "Gallery",
|
|
46
|
+
iconComponent: _sfc_main$5,
|
|
47
|
+
route: () => "/backoffice/gallery",
|
|
48
|
+
visible: () => true
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
title: "Applications",
|
|
52
|
+
iconComponent: _sfc_main$6,
|
|
53
|
+
route: () => "/backoffice/applications",
|
|
54
|
+
visible: () => true
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
title: "Events",
|
|
58
|
+
iconComponent: _sfc_main$6,
|
|
59
|
+
route: () => "/backoffice/events",
|
|
60
|
+
visible: () => true
|
|
61
|
+
}
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
category: "General",
|
|
66
|
+
visible: () => true,
|
|
67
|
+
items: [
|
|
68
|
+
{
|
|
69
|
+
title: "Payments",
|
|
70
|
+
iconComponent: _sfc_main$7,
|
|
71
|
+
route: () => "/backoffice/payments",
|
|
72
|
+
visible: () => true
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
title: "Users",
|
|
76
|
+
iconComponent: null,
|
|
77
|
+
route: () => "/backoffice/users",
|
|
78
|
+
visible: () => true
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
title: "Pages",
|
|
82
|
+
iconComponent: null,
|
|
83
|
+
route: () => "/backoffice/pages",
|
|
84
|
+
visible: () => true
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
title: "Reports",
|
|
88
|
+
iconComponent: null,
|
|
89
|
+
route: () => "/backoffice/reports",
|
|
90
|
+
visible: () => true
|
|
91
|
+
}
|
|
92
|
+
]
|
|
93
|
+
}
|
|
94
|
+
];
|
|
95
|
+
export {
|
|
96
|
+
navigationItems as default,
|
|
97
|
+
navigationItems
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=navigation.backoffice.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation.backoffice.config.js","sources":["../../../../../../src/modules/backoffice/configs/navigation.backoffice.config.js"],"sourcesContent":["// Import icons\nimport IconProducts from '@martyrs/src/modules/icons/entities/IconProducts.vue'\nimport IconPayments from '@martyrs/src/modules/icons/entities/IconPayments.vue'\nimport IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue'\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\nimport IconCommunity from '@martyrs/src/modules/icons/entities/IconCommunity.vue'\nimport IconGallery from '@martyrs/src/modules/icons/entities/IconGallery.vue'\nimport IconOrders from '@martyrs/src/modules/icons/entities/IconOrders.vue'\nimport IconLeftovers from '@martyrs/src/modules/icons/entities/IconLeftovers.vue'\n\n// Backoffice navigation configuration\nexport const navigationItems = [\n {\n category: 'Menu',\n visible: () => true,\n items: [\n {\n title: 'Organizations',\n iconComponent: IconGroups,\n route: () => '/backoffice/organizations',\n visible: () => true\n },\n {\n title: 'Community',\n iconComponent: IconCommunity,\n route: () => '/backoffice/community',\n visible: () => true\n },\n {\n title: 'Products',\n iconComponent: IconProducts,\n route: () => '/backoffice/products',\n visible: () => true\n },\n {\n title: 'Inventory',\n iconComponent: IconLeftovers,\n route: () => '/backoffice/inventory',\n visible: () => true\n },\n {\n title: 'Orders',\n iconComponent: IconOrders,\n route: () => '/backoffice/orders',\n visible: () => true\n },\n {\n title: 'Gallery',\n iconComponent: IconGallery,\n route: () => '/backoffice/gallery',\n visible: () => true\n },\n {\n title: 'Applications',\n iconComponent: IconEvents,\n route: () => '/backoffice/applications',\n visible: () => true\n },\n {\n title: 'Events',\n iconComponent: IconEvents,\n route: () => '/backoffice/events',\n visible: () => true\n }\n ]\n },\n {\n category: 'General',\n visible: () => true,\n items: [\n {\n title: 'Payments',\n iconComponent: IconPayments,\n route: () => '/backoffice/payments',\n visible: () => true\n },\n {\n title: 'Users',\n iconComponent: null,\n route: () => '/backoffice/users',\n visible: () => true\n },\n {\n title: 'Pages',\n iconComponent: null,\n route: () => '/backoffice/pages',\n visible: () => true\n },\n {\n title: 'Reports',\n iconComponent: null,\n route: () => '/backoffice/reports',\n visible: () => true\n }\n ]\n }\n]\n\nexport default navigationItems\n"],"names":["IconGroups","IconCommunity","IconProducts","IconLeftovers","IconOrders","IconGallery","IconEvents","IconPayments"],"mappings":";;;;;;;;AAWY,MAAC,kBAAkB;AAAA,EAC7B;AAAA,IACE,UAAU;AAAA,IACV,SAAS,MAAM;AAAA,IACf,OAAO;AAAA,MACL;AAAA,QACE,OAAO;AAAA,QACP,eAAeA;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeA;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,IACA;AAAA,EACA;AAAA,EACE;AAAA,IACE,UAAU;AAAA,IACV,SAAS,MAAM;AAAA,IACf,OAAO;AAAA,MACL;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAe;AAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAe;AAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAe;AAAA,QACf,OAAO,MAAM;AAAA,QACb,SAAS,MAAM;AAAA,MACvB;AAAA,IACA;AAAA,EACA;AACA;"}
|