@ozdao/martyrs 0.2.581 → 0.2.583
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/martyrs/src/components/Feed/Feed.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +6 -12
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/UserDashboard.vue.js +182 -89
- package/dist/martyrs/src/modules/auth/views/components/pages/UserDashboard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/configs/navigation.user.config.js +11 -5
- package/dist/martyrs/src/modules/auth/views/configs/navigation.user.config.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/router/users.router.js +1 -2
- package/dist/martyrs/src/modules/auth/views/router/users.router.js.map +1 -1
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/classes/ws.manager.js +16 -1
- package/dist/martyrs/src/modules/core/views/classes/ws.manager.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/sections/{Filters.vue.js → Filters.vue2.js} +2 -2
- package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue2.js.map +1 -0
- package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js +7 -0
- 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 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/pages/Marketplace.vue.js +1 -1
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js +3 -3
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js.map +1 -1
- package/dist/martyrs/src/modules/notifications/components/layouts/NotificationsLayout.vue.js +11 -40
- package/dist/martyrs/src/modules/notifications/components/layouts/NotificationsLayout.vue.js.map +1 -1
- package/dist/martyrs/src/modules/notifications/components/pages/Notifications.vue.js +26 -21
- package/dist/martyrs/src/modules/notifications/components/pages/Notifications.vue.js.map +1 -1
- package/dist/martyrs/src/modules/notifications/components/sections/NotificationPreferences.vue.js +54 -48
- package/dist/martyrs/src/modules/notifications/components/sections/NotificationPreferences.vue.js.map +1 -1
- package/dist/martyrs/src/modules/notifications/components/sections/NotificationsList.vue.js +37 -117
- package/dist/martyrs/src/modules/notifications/components/sections/NotificationsList.vue.js.map +1 -1
- package/dist/martyrs/src/modules/notifications/notifications.client.js +18 -15
- package/dist/martyrs/src/modules/notifications/notifications.client.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js +90 -175
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +6 -6
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +41 -28
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/orders.client.js +14 -14
- package/dist/martyrs/src/modules/orders/orders.client.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +88 -39
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +1 -1
- package/dist/style.css +73 -265
- package/package.json +1 -1
- package/src/modules/TASKS.MD +26 -1
- package/src/modules/auth/views/components/pages/Profile.vue +9 -15
- package/src/modules/auth/views/components/pages/ProfileEdit.vue +1 -1
- package/src/modules/auth/views/components/pages/UserDashboard.vue +214 -125
- package/src/modules/auth/views/configs/navigation.user.config.js +17 -11
- package/src/modules/auth/views/router/users.router.js +0 -1
- package/src/modules/core/views/classes/ws.manager.js +20 -1
- package/src/modules/core/views/utils/vue-app-renderer.js +9 -3
- package/src/modules/notifications/components/elements/NotificationBadge.vue +1 -1
- package/src/modules/notifications/components/layouts/NotificationsLayout.vue +9 -53
- package/src/modules/notifications/components/pages/Notifications.vue +21 -22
- package/src/modules/notifications/components/sections/NotificationPreferences.vue +41 -180
- package/src/modules/notifications/components/sections/NotificationsList.vue +39 -219
- package/src/modules/notifications/notifications.client.js +17 -16
- package/src/modules/orders/components/blocks/CardOrderUser.vue +88 -190
- package/src/modules/orders/components/pages/OrderBackoffice.vue +5 -5
- package/src/modules/orders/components/pages/Orders.vue +56 -50
- package/src/modules/organizations/components/pages/OrganizationEdit.vue +42 -11
- package/dist/martyrs/src/components/SelectMulti/SelectMulti.vue.js +0 -625
- package/dist/martyrs/src/components/SelectMulti/SelectMulti.vue.js.map +0 -1
- package/dist/martyrs/src/modules/auth/views/components/blocks/ProfileCard.vue.js +0 -44
- package/dist/martyrs/src/modules/auth/views/components/blocks/ProfileCard.vue.js.map +0 -1
- package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue.js.map +0 -1
- package/dist/martyrs/src/modules/orders/components/icons/IconStatusCanceled.vue.js +0 -32
- package/dist/martyrs/src/modules/orders/components/icons/IconStatusCanceled.vue.js.map +0 -1
- package/dist/martyrs/src/modules/orders/components/icons/IconStatusConfirmed.vue.js +0 -32
- package/dist/martyrs/src/modules/orders/components/icons/IconStatusConfirmed.vue.js.map +0 -1
- package/dist/martyrs/src/modules/orders/components/icons/IconStatusCreated.vue.js +0 -32
- package/dist/martyrs/src/modules/orders/components/icons/IconStatusCreated.vue.js.map +0 -1
- package/dist/martyrs/src/modules/orders/components/icons/IconStatusDelay.vue.js +0 -32
- package/dist/martyrs/src/modules/orders/components/icons/IconStatusDelay.vue.js.map +0 -1
- package/dist/martyrs/src/modules/orders/components/icons/IconStatusFinished.vue.js +0 -32
- package/dist/martyrs/src/modules/orders/components/icons/IconStatusFinished.vue.js.map +0 -1
- package/dist/martyrs/src/modules/orders/components/icons/IconStatusInUse.vue.js +0 -32
- package/dist/martyrs/src/modules/orders/components/icons/IconStatusInUse.vue.js.map +0 -1
|
@@ -7,7 +7,7 @@ import _sfc_main$2 from "../Dropdown/Dropdown.vue.js";
|
|
|
7
7
|
import Calendar from "../Calendar/Calendar.vue2.js";
|
|
8
8
|
import _sfc_main$1 from "../../modules/core/views/components/blocks/BlockSearch.vue.js";
|
|
9
9
|
import _sfc_main$5 from "../../modules/core/views/components/blocks/BlockSorting.vue.js";
|
|
10
|
-
import Filters from "../../modules/core/views/components/sections/Filters.
|
|
10
|
+
import Filters from "../../modules/core/views/components/sections/Filters.vue2.js";
|
|
11
11
|
import _sfc_main$4 from "../../modules/core/views/components/elements/ButtonSort.vue.js";
|
|
12
12
|
import _sfc_main$3 from "../../modules/core/views/components/elements/ButtonDate.vue.js";
|
|
13
13
|
/* empty css */
|
|
@@ -60,25 +60,25 @@ const _sfc_main = {
|
|
|
60
60
|
const modules = {
|
|
61
61
|
events: {
|
|
62
62
|
displayName: "Events",
|
|
63
|
-
|
|
63
|
+
path: (_id) => `/users/${_id}/events`,
|
|
64
64
|
icon: _sfc_main$a,
|
|
65
65
|
visible: () => true
|
|
66
66
|
},
|
|
67
67
|
organizations: {
|
|
68
68
|
displayName: "Groups",
|
|
69
|
-
|
|
69
|
+
path: (_id) => `/users/${_id}/organizations`,
|
|
70
70
|
icon: _sfc_main$9,
|
|
71
71
|
visible: () => true
|
|
72
72
|
},
|
|
73
|
-
|
|
73
|
+
community: {
|
|
74
74
|
displayName: "Posts",
|
|
75
|
-
|
|
75
|
+
path: (_id) => `/users/${_id}/blogposts`,
|
|
76
76
|
icon: _sfc_main$8,
|
|
77
77
|
visible: () => true
|
|
78
78
|
},
|
|
79
79
|
orders: {
|
|
80
80
|
displayName: "Orders",
|
|
81
|
-
|
|
81
|
+
path: (_id) => `/users/${_id}/orders`,
|
|
82
82
|
icon: _sfc_main$7,
|
|
83
83
|
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
84
|
}
|
|
@@ -191,13 +191,7 @@ const _sfc_main = {
|
|
|
191
191
|
return openBlock(), createElementBlock(Fragment, { key: moduleName }, [
|
|
192
192
|
unref(isModuleInstalled)(moduleName) && (!module.visible || module.visible(auth)) ? (openBlock(), createBlock(_sfc_main$b, {
|
|
193
193
|
key: 0,
|
|
194
|
-
onClick: ($event) => unref(router).push(
|
|
195
|
-
name: `${module.route}`,
|
|
196
|
-
params: {
|
|
197
|
-
_id: unref(route).params._id,
|
|
198
|
-
user: unref(route).params._id
|
|
199
|
-
}
|
|
200
|
-
}),
|
|
194
|
+
onClick: ($event) => unref(router).push(module.path(unref(route).params._id)),
|
|
201
195
|
class: "profile-menu-item cursor-pointer"
|
|
202
196
|
}, {
|
|
203
197
|
default: withCtx(() => [
|
|
@@ -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({\n\t name: `${module.route}`, \n\t params: {\n\t _id: route.params._id,\n\t user: route.params._id\n\t }\n\t })\" \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 route: 'User Events',\n icon: IconEvents,\n visible: () => true\n },\n organizations: {\n displayName: 'Groups',\n route: 'User Organizations',\n icon: IconGroups,\n visible: () => true\n },\n blogposts: {\n displayName: 'Posts',\n route: 'User Posts',\n icon: IconCommunity,\n visible: () => true\n },\n orders: {\n displayName: 'Orders',\n route: 'UserOrdersList',\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoRA,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,OAAO;AAAA,QACP,MAAMA;AAAAA,QACN,SAAS,MAAM;AAAA,MACnB;AAAA,MACE,eAAe;AAAA,QACb,aAAa;AAAA,QACb,OAAO;AAAA,QACP,MAAMC;AAAAA,QACN,SAAS,MAAM;AAAA,MACnB;AAAA,MACE,WAAW;AAAA,QACT,aAAa;AAAA,QACb,OAAO;AAAA,QACP,MAAMC;AAAAA,QACN,SAAS,MAAM;AAAA,MACnB;AAAA,MACE,QAAQ;AAAA,QACN,aAAa;AAAA,QACb,OAAO;AAAA,QACP,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\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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -57,7 +57,7 @@ const _sfc_main = {
|
|
|
57
57
|
}, {
|
|
58
58
|
default: withCtx(() => [
|
|
59
59
|
loading.value ? (openBlock(), createElementBlock("div", _hoisted_1, [
|
|
60
|
-
createVNode(Loader)
|
|
60
|
+
createVNode(Loader, { centered: true })
|
|
61
61
|
])) : (openBlock(), createElementBlock("div", _hoisted_2, [
|
|
62
62
|
createVNode(_sfc_main$2, { class: "w-10r mobile:w-100 flex-shrink-0" }),
|
|
63
63
|
createVNode(_component_RouterView, { userData: userData.value }, null, 8, ["userData"])
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProfileEdit.vue.js","sources":["../../../../../../../../src/modules/auth/views/components/pages/ProfileEdit.vue"],"sourcesContent":["<template>\n <Popup \n :isPopupOpen=\"isOpen\" \n @close-popup=\"closeProfileEdit()\"\n title=\"Edit Profile\"\n align=\"center center\"\n class=\"w-m-50r h-40r mobile:h-100 h-m-40r bg-white mobile:radius-zero radius-medium pd-medium\"\n >\n <div v-if=\"loading\" class=\"flex-center h-100\">\n <Loader />\n </div>\n \n <div v-else class=\"flex h-min-100 flex-row mobile:flex-column gap-regular\">\n <ProfileEditSidebar class=\"w-10r mobile:w-100 flex-shrink-0\" />\n \n <RouterView :userData=\"userData\" />\n </div>\n </Popup>\n</template>\n\n<script setup>\n import Popup from '@martyrs/src/components/Popup/Popup.vue'\n import Loader from '@martyrs/src/components/Loader/Loader.vue'\n import ProfileEditSidebar from './ProfileEditSidebar.vue'\n \n import { ref, onMounted, provide } from 'vue'\n import { useRoute, useRouter } from 'vue-router'\n \n const route = useRoute()\n const router = useRouter()\n \n import * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\n import * as users from '@martyrs/src/modules/auth/views/store/users.js'\n \n const loading = ref(true)\n const userData = ref(null)\n const isOpen = ref(false)\n\n function closeProfileEdit () {\n isOpen.value = false\n router.push({ \n name: 'User Profile', \n params: { \n _id: auth.state.user._id \n },\n query: { \n afterAuth: 'true' \n }\n })\n }\n \n onMounted(async () => {\n isOpen.value = true\n try {\n const userId = route.params._id || auth.state.user._id\n await users.actions.read({ _id: userId, user: auth.state.user._id })\n userData.value = users.state.current\n } catch (error) {\n console.error('Error loading user data:', error)\n } finally {\n loading.value = false\n }\n })\n \n // Provide user data to nested routes\n provide('userData', userData)\n</script>"],"names":["auth.state","users.actions","users.state"],"mappings":";;;;;;;;;;;;;;;;;;AA4BE,UAAM,QAAQ,SAAQ;AACtB,UAAM,SAAS,UAAS;AAKxB,UAAM,UAAU,IAAI,IAAI;AACxB,UAAM,WAAW,IAAI,IAAI;AACzB,UAAM,SAAS,IAAI,KAAK;AAExB,aAAS,mBAAoB;AAC3B,aAAO,QAAQ;AACf,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,KAAKA,MAAW,KAAK;AAAA,QAC7B;AAAA,QACM,OAAO;AAAA,UACL,WAAW;AAAA,QACnB;AAAA,MACA,CAAK;AAAA,IACH;AAEA,cAAU,YAAY;AACpB,aAAO,QAAQ;AACf,UAAI;AACF,cAAM,SAAS,MAAM,OAAO,OAAOA,MAAW,KAAK;AACnD,cAAMC,QAAc,KAAK,EAAE,KAAK,QAAQ,MAAMD,MAAW,KAAK,IAAG,CAAE;AACnE,iBAAS,QAAQE,QAAY;AAAA,MAC/B,SAAS,OAAO;AACd,gBAAQ,MAAM,4BAA4B,KAAK;AAAA,MACjD,UAAC;AACC,gBAAQ,QAAQ;AAAA,MAClB;AAAA,IACF,CAAC;AAGD,YAAQ,YAAY,QAAQ;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"ProfileEdit.vue.js","sources":["../../../../../../../../src/modules/auth/views/components/pages/ProfileEdit.vue"],"sourcesContent":["<template>\n <Popup \n :isPopupOpen=\"isOpen\" \n @close-popup=\"closeProfileEdit()\"\n title=\"Edit Profile\"\n align=\"center center\"\n class=\"w-m-50r h-40r mobile:h-100 h-m-40r bg-white mobile:radius-zero radius-medium pd-medium\"\n >\n <div v-if=\"loading\" class=\"flex-center h-100\">\n <Loader :centered=\"true\"/>\n </div>\n \n <div v-else class=\"flex h-min-100 flex-row mobile:flex-column gap-regular\">\n <ProfileEditSidebar class=\"w-10r mobile:w-100 flex-shrink-0\" />\n \n <RouterView :userData=\"userData\" />\n </div>\n </Popup>\n</template>\n\n<script setup>\n import Popup from '@martyrs/src/components/Popup/Popup.vue'\n import Loader from '@martyrs/src/components/Loader/Loader.vue'\n import ProfileEditSidebar from './ProfileEditSidebar.vue'\n \n import { ref, onMounted, provide } from 'vue'\n import { useRoute, useRouter } from 'vue-router'\n \n const route = useRoute()\n const router = useRouter()\n \n import * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\n import * as users from '@martyrs/src/modules/auth/views/store/users.js'\n \n const loading = ref(true)\n const userData = ref(null)\n const isOpen = ref(false)\n\n function closeProfileEdit () {\n isOpen.value = false\n router.push({ \n name: 'User Profile', \n params: { \n _id: auth.state.user._id \n },\n query: { \n afterAuth: 'true' \n }\n })\n }\n \n onMounted(async () => {\n isOpen.value = true\n try {\n const userId = route.params._id || auth.state.user._id\n await users.actions.read({ _id: userId, user: auth.state.user._id })\n userData.value = users.state.current\n } catch (error) {\n console.error('Error loading user data:', error)\n } finally {\n loading.value = false\n }\n })\n \n // Provide user data to nested routes\n provide('userData', userData)\n</script>"],"names":["auth.state","users.actions","users.state"],"mappings":";;;;;;;;;;;;;;;;;;AA4BE,UAAM,QAAQ,SAAQ;AACtB,UAAM,SAAS,UAAS;AAKxB,UAAM,UAAU,IAAI,IAAI;AACxB,UAAM,WAAW,IAAI,IAAI;AACzB,UAAM,SAAS,IAAI,KAAK;AAExB,aAAS,mBAAoB;AAC3B,aAAO,QAAQ;AACf,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,KAAKA,MAAW,KAAK;AAAA,QAC7B;AAAA,QACM,OAAO;AAAA,UACL,WAAW;AAAA,QACnB;AAAA,MACA,CAAK;AAAA,IACH;AAEA,cAAU,YAAY;AACpB,aAAO,QAAQ;AACf,UAAI;AACF,cAAM,SAAS,MAAM,OAAO,OAAOA,MAAW,KAAK;AACnD,cAAMC,QAAc,KAAK,EAAE,KAAK,QAAQ,MAAMD,MAAW,KAAK,IAAG,CAAE;AACnE,iBAAS,QAAQE,QAAY;AAAA,MAC/B,SAAS,OAAO;AACd,gBAAQ,MAAM,4BAA4B,KAAK;AAAA,MACjD,UAAC;AACC,gBAAQ,QAAQ;AAAA,MAClB;AAAA,IACF,CAAC;AAGD,YAAQ,YAAY,QAAQ;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,84 +1,166 @@
|
|
|
1
|
-
import { ref, onMounted, createElementBlock, openBlock, createElementVNode, createVNode, withCtx, toDisplayString, Fragment, renderList, createBlock } from "vue";
|
|
2
|
-
import {
|
|
3
|
-
import _sfc_main$
|
|
1
|
+
import { inject, ref, onMounted, resolveComponent, createElementBlock, openBlock, createElementVNode, createVNode, withCtx, toDisplayString, normalizeClass, Fragment, renderList, createBlock, unref } from "vue";
|
|
2
|
+
import { useRouter } from "vue-router";
|
|
3
|
+
import _sfc_main$4 from "../../../../../components/Block/Block.vue.js";
|
|
4
4
|
import _sfc_main$5 from "../../../../../components/Feed/Feed.vue.js";
|
|
5
5
|
import Table from "../../../../../components/Table/Table.vue.js";
|
|
6
|
-
import
|
|
7
|
-
import _sfc_main$
|
|
8
|
-
import _sfc_main$2 from "../../../../icons/entities/
|
|
9
|
-
import _sfc_main$4 from "../../../../icons/entities/IconEvents.vue.js";
|
|
10
|
-
import _sfc_main$3 from "../../../../icons/entities/IconOrders.vue.js";
|
|
6
|
+
import _sfc_main$1 from "../../../../icons/entities/IconGroups.vue.js";
|
|
7
|
+
import _sfc_main$3 from "../../../../icons/entities/IconEvents.vue.js";
|
|
8
|
+
import _sfc_main$2 from "../../../../icons/entities/IconOrders.vue.js";
|
|
11
9
|
import { state } from "../../store/auth.js";
|
|
12
10
|
import { state as state$1, actions } from "../../../../orders/store/orders.js";
|
|
13
11
|
import { read } from "../../../../events/store/events.js";
|
|
14
|
-
const _hoisted_1 = { class: "pd-medium
|
|
15
|
-
const _hoisted_2 = { class: "mn-b-medium cols-3 mobile:cols-1 gap-
|
|
16
|
-
const _hoisted_3 = { class: "
|
|
17
|
-
const _hoisted_4 = { class: "
|
|
18
|
-
const _hoisted_5 = { class: "
|
|
19
|
-
const _hoisted_6 = { class: "
|
|
20
|
-
const _hoisted_7 = { class: "
|
|
21
|
-
const _hoisted_8 = { class: "
|
|
22
|
-
const _hoisted_9 = { class: "
|
|
12
|
+
const _hoisted_1 = { class: "pd-medium" };
|
|
13
|
+
const _hoisted_2 = { class: "mn-b-medium cols-3 mobile:cols-1 gap-small" };
|
|
14
|
+
const _hoisted_3 = { class: "flex flex-v-center gap-small mn-b-small" };
|
|
15
|
+
const _hoisted_4 = { class: "radius-small bg-main flex flex-center" };
|
|
16
|
+
const _hoisted_5 = { class: "h2 fw-semi" };
|
|
17
|
+
const _hoisted_6 = { class: "flex flex-v-center gap-small mn-b-small" };
|
|
18
|
+
const _hoisted_7 = { class: "radius-small bg-main flex flex-center" };
|
|
19
|
+
const _hoisted_8 = { class: "h2 fw-semi" };
|
|
20
|
+
const _hoisted_9 = { class: "flex flex-v-center gap-small mn-b-small" };
|
|
21
|
+
const _hoisted_10 = { class: "radius-small bg-main flex flex-center" };
|
|
22
|
+
const _hoisted_11 = { class: "h2 fw-semi" };
|
|
23
|
+
const _hoisted_12 = { class: "cols-2 mobile:cols-1 gap-small" };
|
|
24
|
+
const _hoisted_13 = { class: "t-dark fw-medium" };
|
|
25
|
+
const _hoisted_14 = { class: "t-dark" };
|
|
26
|
+
const _hoisted_15 = { class: "t-grey t-small" };
|
|
27
|
+
const _hoisted_16 = { class: "flex flex-v-center gap-small" };
|
|
28
|
+
const _hoisted_17 = { class: "flex-none w-3r h-3r radius-small bg-main-transp flex flex-center o-hidden" };
|
|
29
|
+
const _hoisted_18 = ["src"];
|
|
30
|
+
const _hoisted_19 = { class: "flex-child o-hidden" };
|
|
31
|
+
const _hoisted_20 = { class: "fw-medium t-truncate mn-b-nano" };
|
|
32
|
+
const _hoisted_21 = { class: "t-grey t-small" };
|
|
33
|
+
const _hoisted_22 = { class: "flex-none" };
|
|
23
34
|
const _sfc_main = {
|
|
24
35
|
__name: "UserDashboard",
|
|
25
36
|
setup(__props) {
|
|
26
|
-
|
|
37
|
+
const FILE_SERVER_URL = inject("FILE_SERVER_URL", "");
|
|
27
38
|
useRouter();
|
|
28
39
|
const stats = ref({
|
|
29
40
|
organizations: 0,
|
|
30
41
|
orders: 0,
|
|
31
42
|
events: 0
|
|
32
43
|
});
|
|
44
|
+
const columns = {
|
|
45
|
+
orders: [
|
|
46
|
+
{ key: "_id", label: "Order" },
|
|
47
|
+
{ key: "positions", label: "Items" },
|
|
48
|
+
{ key: "status", label: "Status" },
|
|
49
|
+
{ key: "createdAt", label: "Date" }
|
|
50
|
+
]
|
|
51
|
+
};
|
|
52
|
+
const formatId = (id) => id ? `${id.slice(0, 4)}...${id.slice(-4)}` : "";
|
|
53
|
+
const formatDate = (date) => {
|
|
54
|
+
if (!date) return "";
|
|
55
|
+
return new Date(date).toLocaleDateString();
|
|
56
|
+
};
|
|
57
|
+
const formatEventDate = (date) => {
|
|
58
|
+
if (!date?.start) return "";
|
|
59
|
+
const start = new Date(date.start);
|
|
60
|
+
return start.toLocaleDateString(void 0, { day: "2-digit", month: "short", year: "numeric" });
|
|
61
|
+
};
|
|
62
|
+
const getStatusClass = (status) => {
|
|
63
|
+
const classes = {
|
|
64
|
+
pending: "bg-second-transp t-second",
|
|
65
|
+
processing: "bg-main-transp t-main",
|
|
66
|
+
completed: "bg-green-transp t-green",
|
|
67
|
+
cancelled: "bg-red-transp t-red"
|
|
68
|
+
};
|
|
69
|
+
return classes[status] || "bg-light t-grey";
|
|
70
|
+
};
|
|
71
|
+
const getEventStatus = (date) => {
|
|
72
|
+
if (!date?.start) return "No date";
|
|
73
|
+
const now = /* @__PURE__ */ new Date();
|
|
74
|
+
const start = new Date(date.start);
|
|
75
|
+
const end = date.end ? new Date(date.end) : start;
|
|
76
|
+
if (now > end) return "Finished";
|
|
77
|
+
if (now >= start && now <= end) return "Live";
|
|
78
|
+
const diffDays = Math.ceil((start - now) / (1e3 * 60 * 60 * 24));
|
|
79
|
+
if (diffDays <= 1) return "Tomorrow";
|
|
80
|
+
if (diffDays <= 7) return `In ${diffDays} days`;
|
|
81
|
+
return "Upcoming";
|
|
82
|
+
};
|
|
83
|
+
const getEventStatusClass = (date) => {
|
|
84
|
+
const status = getEventStatus(date);
|
|
85
|
+
if (status === "Finished") return "bg-light t-grey";
|
|
86
|
+
if (status === "Live") return "bg-green-transp t-green";
|
|
87
|
+
if (status === "Tomorrow") return "bg-second-transp t-second";
|
|
88
|
+
return "bg-main-transp t-main";
|
|
89
|
+
};
|
|
33
90
|
onMounted(async () => {
|
|
91
|
+
try {
|
|
92
|
+
const [orgsData, ordersData, eventsData] = await Promise.all([
|
|
93
|
+
// Load counts if needed
|
|
94
|
+
]);
|
|
95
|
+
} catch (e) {
|
|
96
|
+
console.error("Failed to load dashboard stats:", e);
|
|
97
|
+
}
|
|
34
98
|
});
|
|
35
99
|
return (_ctx, _cache) => {
|
|
100
|
+
const _component_router_link = resolveComponent("router-link");
|
|
36
101
|
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
37
|
-
_cache[
|
|
102
|
+
_cache[3] || (_cache[3] = createElementVNode("h2", { class: "mn-b-medium" }, "Overview", -1)),
|
|
38
103
|
createElementVNode("div", _hoisted_2, [
|
|
39
|
-
createVNode(
|
|
104
|
+
createVNode(_component_router_link, {
|
|
105
|
+
to: `/users/${state.user._id}/organizations`,
|
|
106
|
+
class: "d-block bg-light pd-medium radius-medium hover-scale-1 transition-default"
|
|
107
|
+
}, {
|
|
40
108
|
default: withCtx(() => [
|
|
41
|
-
_cache[0] || (_cache[0] = createElementVNode("span", { class: "t-green fw-semi pos-absolute pos-t-small pos-r-small" }, "+12.5%", -1)),
|
|
42
109
|
createElementVNode("div", _hoisted_3, [
|
|
43
|
-
|
|
110
|
+
createElementVNode("div", _hoisted_4, [
|
|
111
|
+
createVNode(_sfc_main$1, {
|
|
112
|
+
class: "i-medium mn-small",
|
|
113
|
+
fill: "rgb(var(--white))"
|
|
114
|
+
})
|
|
115
|
+
]),
|
|
116
|
+
_cache[0] || (_cache[0] = createElementVNode("span", { class: "t-grey t-small" }, "My Groups", -1))
|
|
44
117
|
]),
|
|
45
|
-
createElementVNode("p",
|
|
46
|
-
_cache[1] || (_cache[1] = createElementVNode("p", null, "My Groups", -1))
|
|
118
|
+
createElementVNode("p", _hoisted_5, toDisplayString(stats.value.organizations || 0), 1)
|
|
47
119
|
]),
|
|
48
120
|
_: 1
|
|
49
|
-
}),
|
|
50
|
-
createVNode(
|
|
121
|
+
}, 8, ["to"]),
|
|
122
|
+
createVNode(_component_router_link, {
|
|
123
|
+
to: `/users/${state.user._id}/orders`,
|
|
124
|
+
class: "d-block bg-light pd-medium radius-medium hover-scale-1 transition-default"
|
|
125
|
+
}, {
|
|
51
126
|
default: withCtx(() => [
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
127
|
+
createElementVNode("div", _hoisted_6, [
|
|
128
|
+
createElementVNode("div", _hoisted_7, [
|
|
129
|
+
createVNode(_sfc_main$2, {
|
|
130
|
+
class: "i-medium mn-small",
|
|
131
|
+
fill: "rgb(var(--white))"
|
|
132
|
+
})
|
|
133
|
+
]),
|
|
134
|
+
_cache[1] || (_cache[1] = createElementVNode("span", { class: "t-grey t-small" }, "My Orders", -1))
|
|
55
135
|
]),
|
|
56
|
-
createElementVNode("p",
|
|
57
|
-
_cache[3] || (_cache[3] = createElementVNode("p", null, "My Orders", -1))
|
|
136
|
+
createElementVNode("p", _hoisted_8, toDisplayString(stats.value.orders || 0), 1)
|
|
58
137
|
]),
|
|
59
138
|
_: 1
|
|
60
|
-
}),
|
|
61
|
-
createVNode(
|
|
139
|
+
}, 8, ["to"]),
|
|
140
|
+
createVNode(_component_router_link, {
|
|
141
|
+
to: `/users/${state.user._id}/events`,
|
|
142
|
+
class: "d-block bg-light pd-medium radius-medium hover-scale-1 transition-default"
|
|
143
|
+
}, {
|
|
62
144
|
default: withCtx(() => [
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
145
|
+
createElementVNode("div", _hoisted_9, [
|
|
146
|
+
createElementVNode("div", _hoisted_10, [
|
|
147
|
+
createVNode(_sfc_main$3, {
|
|
148
|
+
class: "i-medium mn-small",
|
|
149
|
+
fill: "rgb(var(--white))"
|
|
150
|
+
})
|
|
151
|
+
]),
|
|
152
|
+
_cache[2] || (_cache[2] = createElementVNode("span", { class: "t-grey t-small" }, "My Events", -1))
|
|
66
153
|
]),
|
|
67
|
-
createElementVNode("p",
|
|
68
|
-
_cache[5] || (_cache[5] = createElementVNode("p", null, "My Events", -1))
|
|
154
|
+
createElementVNode("p", _hoisted_11, toDisplayString(stats.value.events || 0), 1)
|
|
69
155
|
]),
|
|
70
156
|
_: 1
|
|
71
|
-
})
|
|
157
|
+
}, 8, ["to"])
|
|
72
158
|
]),
|
|
73
|
-
createElementVNode("div",
|
|
74
|
-
createVNode(_sfc_main$
|
|
75
|
-
title: "Recent Orders",
|
|
76
|
-
class: "pos-relative"
|
|
77
|
-
}, {
|
|
159
|
+
createElementVNode("div", _hoisted_12, [
|
|
160
|
+
createVNode(_sfc_main$4, { title: "Recent Orders" }, {
|
|
78
161
|
default: withCtx(() => [
|
|
79
162
|
createVNode(_sfc_main$5, {
|
|
80
163
|
showLoadMore: false,
|
|
81
|
-
LoadMore: false,
|
|
82
164
|
states: {
|
|
83
165
|
empty: {
|
|
84
166
|
title: "No Orders",
|
|
@@ -93,52 +175,40 @@ const _sfc_main = {
|
|
|
93
175
|
customer: state.user._id,
|
|
94
176
|
limit: 5,
|
|
95
177
|
page: 1
|
|
96
|
-
}
|
|
97
|
-
class: "cols-1 gap-thin"
|
|
178
|
+
}
|
|
98
179
|
}, {
|
|
99
|
-
default: withCtx(({
|
|
100
|
-
items
|
|
101
|
-
}) => [
|
|
180
|
+
default: withCtx(({ items }) => [
|
|
102
181
|
createVNode(Table, {
|
|
103
|
-
class: "radius-
|
|
182
|
+
class: "radius-small bg-white",
|
|
104
183
|
items,
|
|
105
|
-
columns:
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
label: "Date",
|
|
124
|
-
formatter: (value) => new Date(value).toLocaleDateString()
|
|
125
|
-
}
|
|
126
|
-
]
|
|
127
|
-
}, null, 8, ["items", "columns"])
|
|
184
|
+
columns: columns.orders
|
|
185
|
+
}, {
|
|
186
|
+
"cell-_id": withCtx(({ value }) => [
|
|
187
|
+
createElementVNode("span", _hoisted_13, "#" + toDisplayString(formatId(value)), 1)
|
|
188
|
+
]),
|
|
189
|
+
"cell-positions": withCtx(({ value }) => [
|
|
190
|
+
createElementVNode("span", _hoisted_14, toDisplayString(value?.length || 0) + " items", 1)
|
|
191
|
+
]),
|
|
192
|
+
"cell-status": withCtx(({ value }) => [
|
|
193
|
+
createElementVNode("span", {
|
|
194
|
+
class: normalizeClass(["pd-thin pd-l-small pd-r-small radius-small t-small fw-medium", getStatusClass(value)])
|
|
195
|
+
}, toDisplayString(value), 3)
|
|
196
|
+
]),
|
|
197
|
+
"cell-createdAt": withCtx(({ value }) => [
|
|
198
|
+
createElementVNode("span", _hoisted_15, toDisplayString(formatDate(value)), 1)
|
|
199
|
+
]),
|
|
200
|
+
_: 2
|
|
201
|
+
}, 1032, ["items", "columns"])
|
|
128
202
|
]),
|
|
129
203
|
_: 1
|
|
130
204
|
}, 8, ["store", "options"])
|
|
131
205
|
]),
|
|
132
206
|
_: 1
|
|
133
207
|
}),
|
|
134
|
-
createVNode(_sfc_main$
|
|
135
|
-
title: "Upcoming Events",
|
|
136
|
-
class: "pos-relative"
|
|
137
|
-
}, {
|
|
208
|
+
createVNode(_sfc_main$4, { title: "Upcoming Events" }, {
|
|
138
209
|
default: withCtx(() => [
|
|
139
210
|
createVNode(_sfc_main$5, {
|
|
140
211
|
showLoadMore: false,
|
|
141
|
-
LoadMore: false,
|
|
142
212
|
states: {
|
|
143
213
|
empty: {
|
|
144
214
|
title: "No Events",
|
|
@@ -155,19 +225,42 @@ const _sfc_main = {
|
|
|
155
225
|
limit: 5,
|
|
156
226
|
page: 1
|
|
157
227
|
},
|
|
158
|
-
class: "
|
|
228
|
+
class: "flex flex-column gap-thin"
|
|
159
229
|
}, {
|
|
160
|
-
default: withCtx(({
|
|
161
|
-
items
|
|
162
|
-
}) => [
|
|
230
|
+
default: withCtx(({ items }) => [
|
|
163
231
|
(openBlock(true), createElementBlock(Fragment, null, renderList(items, (event) => {
|
|
164
|
-
return openBlock(), createBlock(
|
|
232
|
+
return openBlock(), createBlock(_component_router_link, {
|
|
165
233
|
key: event._id,
|
|
166
|
-
event
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
234
|
+
to: `/events/${event._id}`,
|
|
235
|
+
class: "d-block bg-white pd-small radius-small hover-scale-1 transition-default"
|
|
236
|
+
}, {
|
|
237
|
+
default: withCtx(() => [
|
|
238
|
+
createElementVNode("div", _hoisted_16, [
|
|
239
|
+
createElementVNode("div", _hoisted_17, [
|
|
240
|
+
event.cover ? (openBlock(), createElementBlock("img", {
|
|
241
|
+
key: 0,
|
|
242
|
+
src: (unref(FILE_SERVER_URL) || "") + event.cover,
|
|
243
|
+
class: "w-100 h-100 object-fit-cover",
|
|
244
|
+
alt: ""
|
|
245
|
+
}, null, 8, _hoisted_18)) : (openBlock(), createBlock(_sfc_main$3, {
|
|
246
|
+
key: 1,
|
|
247
|
+
class: "i-regular",
|
|
248
|
+
fill: "rgb(var(--main))"
|
|
249
|
+
}))
|
|
250
|
+
]),
|
|
251
|
+
createElementVNode("div", _hoisted_19, [
|
|
252
|
+
createElementVNode("p", _hoisted_20, toDisplayString(event.name), 1),
|
|
253
|
+
createElementVNode("p", _hoisted_21, toDisplayString(formatEventDate(event.date)), 1)
|
|
254
|
+
]),
|
|
255
|
+
createElementVNode("div", _hoisted_22, [
|
|
256
|
+
createElementVNode("span", {
|
|
257
|
+
class: normalizeClass(["pd-thin pd-l-small pd-r-small radius-small t-small fw-medium", getEventStatusClass(event.date)])
|
|
258
|
+
}, toDisplayString(getEventStatus(event.date)), 3)
|
|
259
|
+
])
|
|
260
|
+
])
|
|
261
|
+
]),
|
|
262
|
+
_: 2
|
|
263
|
+
}, 1032, ["to"]);
|
|
171
264
|
}), 128))
|
|
172
265
|
]),
|
|
173
266
|
_: 1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserDashboard.vue.js","sources":["../../../../../../../../src/modules/auth/views/components/pages/UserDashboard.vue"],"sourcesContent":["<template>\n\t<div class=\"pd-medium bg-white\">\n\t\t<h2 class=\"mn-b-small\">Overview</h2>\n\t\t<div class=\"mn-b-medium cols-3 mobile:cols-1 gap-thin\">\n\t\t\t<Block class=\"pos-relative\">\n\t\t\t\t<span class=\"t-green fw-semi pos-absolute pos-t-small pos-r-small\">+12.5%</span>\n\t\t\t\t<div class=\"mn-b-medium radius-small w-max bg-main\"><IconGroups class=\"i-medium mn-small\"/></div>\n\t\t\t\t<p class=\"h3 mn-b-thin\">{{ stats.organizations || 0 }}</p>\n\t\t\t\t<p>My Groups</p>\n\t\t\t</Block>\n\n\t\t\t<Block class=\"pos-relative\">\n\t\t\t\t<span class=\"t-green fw-semi pos-absolute pos-t-small pos-r-small\">+14.8%</span>\n\t\t\t\t<div class=\"mn-b-medium radius-small w-max bg-main\"><IconOrders class=\"i-medium mn-small\"/></div>\n\t\t\t\t<p class=\"h3 mn-b-thin\">{{ stats.orders || 0 }}</p>\n\t\t\t\t<p>My Orders</p>\n\t\t\t</Block>\n\n\t\t\t<Block class=\"pos-relative\">\n\t\t\t\t<span class=\"t-green fw-semi pos-absolute pos-t-small pos-r-small\">+25.1%</span>\n\t\t\t\t<div class=\"mn-b-medium radius-small w-max bg-main\"><IconEvents class=\"i-medium mn-small\"/></div>\n\t\t\t\t<p class=\"h3 mn-b-thin\">{{ stats.events || 0 }}</p>\n\t\t\t\t<p>My Events</p>\n\t\t\t</Block>\n\t\t</div>\n\n\t\t<div class=\"cols-2 mobile:cols-1 gap-thin\">\n\t\t\t<Block\n\t\t\t\ttitle=\"Recent Orders\"\n\t\t\t\tclass=\"pos-relative\"\n\t\t\t>\n\t\t\t\t<Feed\n\t :showLoadMore=\"false\"\n\t :LoadMore=\"false\"\n\t :states=\"{\n\t empty: {\n\t title: 'No Orders',\n\t description: 'You have no orders yet.'\n\t }\n\t }\"\n\t :store=\"{\n\t read: (options) => orders.actions.read(options),\n\t state: orders.state\n\t }\"\n\t :options=\"{\n\t customer: auth.state.user._id,\n\t limit: 5,\n\t page: 1\n\t }\"\n\t v-slot=\"{\n\t items\n\t }\"\n\t class=\"cols-1 gap-thin\"\n\t >\n\t\t\t\t\t<Table\n\t\t\t\t\t\tclass=\"radius-semi bg-white\"\n\t\t\t\t\t\t:items=\"items\"\n\t\t\t\t\t\t:columns=\"[{\n\t\t\t\t\t key: '_id',\n\t\t\t\t\t label: 'ID',\n\t\t\t\t\t\t\tformatter: (value) => `#${value.slice(0, 4)}...${value.slice(-4)}`\n\t\t\t\t\t },\n\t\t\t\t\t {\n\t\t\t\t\t key: 'positions',\n\t\t\t\t\t label: 'Items',\n\t\t\t\t\t formatter: (value) => value?.length || 0\n\t\t\t\t\t },\n\t\t\t\t\t {\n\t\t\t\t\t key: 'status',\n\t\t\t\t\t label: 'Status',\n\t\t\t\t\t component: StatusBadge\n\t\t\t\t\t },\n\t\t\t\t\t {\n\t\t\t\t\t key: 'createdAt',\n\t\t\t\t\t label: 'Date',\n\t\t\t\t\t formatter: (value) => new Date(value).toLocaleDateString()\n\t\t\t\t\t }]\"\n\t\t\t\t\t/>\n\t </Feed>\n\n\t\t\t</Block>\n\n\t\t\t<Block\n\t\t\t\ttitle=\"Upcoming Events\"\n\t\t\t\tclass=\"pos-relative\"\n\t\t\t>\n\t\t\t\t<Feed\n\t :showLoadMore=\"false\"\n\t :LoadMore=\"false\"\n\t :states=\"{\n\t empty: {\n\t title: 'No Events',\n\t description: 'You have no upcoming events.'\n\t }\n\t }\"\n\t :store=\"{\n\t read: (options) => events.read(options),\n\t }\"\n\t :options=\"{\n\t creator: auth.state.user._id,\n\t sortParam: 'date.start',\n\t sortOrder: 'asc',\n\t limit: 5,\n\t page: 1\n\t }\"\n\t v-slot=\"{\n\t items\n\t }\"\n\t class=\"cols-1 gap-thin\"\n\t >\n\t\t\t\t\t<CardEvent\n\t v-for=\"event in items\"\n\t :key=\"event._id\"\n\t :event=\"event\"\n\t :user=\"auth.state.user._id\"\n\t :type=\"'compact'\"\n\t class=\"bg-light radius-medium\"\n\t />\n\t </Feed>\n\t\t\t</Block>\n\t\t</div>\n\n\t</div>\n\n\n</template>\n\n<script setup>\nimport { ref, onMounted } from 'vue';\nimport { useRoute, useRouter } from 'vue-router'\n\nimport Block from '@martyrs/src/components/Block/Block.vue'\nimport Feed from '@martyrs/src/components/Feed/Feed.vue'\nimport Table from '@martyrs/src/components/Table/Table.vue'\nimport StatusBadge from '@martyrs/src/components/Table/StatusBadge.vue'\n\nimport CardEvent from '@martyrs/src/modules/events/components/blocks/CardEvent.vue';\n\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\nimport IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue'\nimport IconOrders from '@martyrs/src/modules/icons/entities/IconOrders.vue'\n\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\nimport * as orders from '@martyrs/src/modules/orders/store/orders.js'\nimport * as events from '@martyrs/src/modules/events/store/events.js'\n\nconst route = useRoute()\nconst router = useRouter()\n\nconst stats = ref({\n organizations: 0,\n orders: 0,\n events: 0\n})\n\nonMounted(async () => {\n // Load user stats if needed\n})\n</script>\n\n<style lang=\"scss\">\n</style>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAkJc,aAAQ;AACP,cAAS;AAExB,UAAM,QAAQ,IAAI;AAAA,MAChB,eAAe;AAAA,MACf,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV,CAAC;AAED,cAAU,YAAY;AAAA,IAEtB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"UserDashboard.vue.js","sources":["../../../../../../../../src/modules/auth/views/components/pages/UserDashboard.vue"],"sourcesContent":["<template>\n\t<div class=\"pd-medium\">\n\t\t<h2 class=\"mn-b-medium\">Overview</h2>\n\n\t\t<!-- Stats Cards -->\n\t\t<div class=\"mn-b-medium cols-3 mobile:cols-1 gap-small\">\n\t\t\t<router-link\n\t\t\t\t:to=\"`/users/${auth.state.user._id}/organizations`\"\n\t\t\t\tclass=\"d-block bg-light pd-medium radius-medium hover-scale-1 transition-default\"\n\t\t\t>\n\t\t\t\t<div class=\"flex flex-v-center gap-small mn-b-small\">\n\t\t\t\t\t<div class=\"radius-small bg-main flex flex-center\">\n\t\t\t\t\t\t<IconGroups class=\"i-medium mn-small\" :fill=\"'rgb(var(--white))'\"/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<span class=\"t-grey t-small\">My Groups</span>\n\t\t\t\t</div>\n\t\t\t\t<p class=\"h2 fw-semi\">{{ stats.organizations || 0 }}</p>\n\t\t\t</router-link>\n\n\t\t\t<router-link\n\t\t\t\t:to=\"`/users/${auth.state.user._id}/orders`\"\n\t\t\t\tclass=\"d-block bg-light pd-medium radius-medium hover-scale-1 transition-default\"\n\t\t\t>\n\t\t\t\t<div class=\"flex flex-v-center gap-small mn-b-small\">\n\t\t\t\t\t<div class=\"radius-small bg-main flex flex-center\">\n\t\t\t\t\t\t<IconOrders class=\"i-medium mn-small\" :fill=\"'rgb(var(--white))'\"/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<span class=\"t-grey t-small\">My Orders</span>\n\t\t\t\t</div>\n\t\t\t\t<p class=\"h2 fw-semi\">{{ stats.orders || 0 }}</p>\n\t\t\t</router-link>\n\n\t\t\t<router-link\n\t\t\t\t:to=\"`/users/${auth.state.user._id}/events`\"\n\t\t\t\tclass=\"d-block bg-light pd-medium radius-medium hover-scale-1 transition-default\"\n\t\t\t>\n\t\t\t\t<div class=\"flex flex-v-center gap-small mn-b-small\">\n\t\t\t\t\t<div class=\"radius-small bg-main flex flex-center\">\n\t\t\t\t\t\t<IconEvents class=\"i-medium mn-small\" :fill=\"'rgb(var(--white))'\"/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<span class=\"t-grey t-small\">My Events</span>\n\t\t\t\t</div>\n\t\t\t\t<p class=\"h2 fw-semi\">{{ stats.events || 0 }}</p>\n\t\t\t</router-link>\n\t\t</div>\n\n\t\t<!-- Content Grid -->\n\t\t<div class=\"cols-2 mobile:cols-1 gap-small\">\n\t\t\t<!-- Recent Orders -->\n\t\t\t<Block title=\"Recent Orders\">\n\t\t\t\t<Feed\n\t\t\t\t\t:showLoadMore=\"false\"\n\t\t\t\t\t:states=\"{\n\t\t\t\t\t\tempty: {\n\t\t\t\t\t\t\ttitle: 'No Orders',\n\t\t\t\t\t\t\tdescription: 'You have no orders yet.'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\"\n\t\t\t\t\t:store=\"{\n\t\t\t\t\t\tread: (options) => orders.actions.read(options),\n\t\t\t\t\t\tstate: orders.state\n\t\t\t\t\t}\"\n\t\t\t\t\t:options=\"{\n\t\t\t\t\t\tcustomer: auth.state.user._id,\n\t\t\t\t\t\tlimit: 5,\n\t\t\t\t\t\tpage: 1\n\t\t\t\t\t}\"\n\t\t\t\t\tv-slot=\"{ items }\"\n\t\t\t\t>\n\t\t\t\t\t<Table\n\t\t\t\t\t\tclass=\"radius-small bg-white\"\n\t\t\t\t\t\t:items=\"items\"\n\t\t\t\t\t\t:columns=\"columns.orders\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<template #cell-_id=\"{ value }\">\n\t\t\t\t\t\t\t<span class=\"t-dark fw-medium\">#{{ formatId(value) }}</span>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<template #cell-positions=\"{ value }\">\n\t\t\t\t\t\t\t<span class=\"t-dark\">{{ value?.length || 0 }} items</span>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<template #cell-status=\"{ value }\">\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclass=\"pd-thin pd-l-small pd-r-small radius-small t-small fw-medium\"\n\t\t\t\t\t\t\t\t:class=\"getStatusClass(value)\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{{ value }}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\t<template #cell-createdAt=\"{ value }\">\n\t\t\t\t\t\t\t<span class=\"t-grey t-small\">{{ formatDate(value) }}</span>\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</Table>\n\t\t\t\t</Feed>\n\t\t\t</Block>\n\n\t\t\t<!-- Upcoming Events -->\n\t\t\t<Block title=\"Upcoming Events\">\n\t\t\t\t<Feed\n\t\t\t\t\t:showLoadMore=\"false\"\n\t\t\t\t\t:states=\"{\n\t\t\t\t\t\tempty: {\n\t\t\t\t\t\t\ttitle: 'No Events',\n\t\t\t\t\t\t\tdescription: 'You have no upcoming events.'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\"\n\t\t\t\t\t:store=\"{\n\t\t\t\t\t\tread: (options) => events.read(options)\n\t\t\t\t\t}\"\n\t\t\t\t\t:options=\"{\n\t\t\t\t\t\tcreator: auth.state.user._id,\n\t\t\t\t\t\tsortParam: 'date.start',\n\t\t\t\t\t\tsortOrder: 'asc',\n\t\t\t\t\t\tlimit: 5,\n\t\t\t\t\t\tpage: 1\n\t\t\t\t\t}\"\n\t\t\t\t\tv-slot=\"{ items }\"\n\t\t\t\t\tclass=\"flex flex-column gap-thin\"\n\t\t\t\t>\n\t\t\t\t\t<router-link\n\t\t\t\t\t\tv-for=\"event in items\"\n\t\t\t\t\t\t:key=\"event._id\"\n\t\t\t\t\t\t:to=\"`/events/${event._id}`\"\n\t\t\t\t\t\tclass=\"d-block bg-white pd-small radius-small hover-scale-1 transition-default\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div class=\"flex flex-v-center gap-small\">\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"flex-none w-3r h-3r radius-small bg-main-transp flex flex-center o-hidden\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\t\tv-if=\"event.cover\"\n\t\t\t\t\t\t\t\t\t:src=\"(FILE_SERVER_URL || '') + event.cover\"\n\t\t\t\t\t\t\t\t\tclass=\"w-100 h-100 object-fit-cover\"\n\t\t\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<IconEvents v-else class=\"i-regular\" :fill=\"'rgb(var(--main))'\"/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"flex-child o-hidden\">\n\t\t\t\t\t\t\t\t<p class=\"fw-medium t-truncate mn-b-nano\">{{ event.name }}</p>\n\t\t\t\t\t\t\t\t<p class=\"t-grey t-small\">{{ formatEventDate(event.date) }}</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"flex-none\">\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"pd-thin pd-l-small pd-r-small radius-small t-small fw-medium\"\n\t\t\t\t\t\t\t\t\t:class=\"getEventStatusClass(event.date)\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{{ getEventStatus(event.date) }}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</router-link>\n\t\t\t\t</Feed>\n\t\t\t</Block>\n\t\t</div>\n\t</div>\n</template>\n\n<script setup>\nimport { ref, onMounted, inject } from 'vue'\nimport { useRouter } from 'vue-router'\n\nimport Block from '@martyrs/src/components/Block/Block.vue'\nimport Feed from '@martyrs/src/components/Feed/Feed.vue'\nimport Table from '@martyrs/src/components/Table/Table.vue'\n\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\nimport IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue'\nimport IconOrders from '@martyrs/src/modules/icons/entities/IconOrders.vue'\n\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\nimport * as orders from '@martyrs/src/modules/orders/store/orders.js'\nimport * as events from '@martyrs/src/modules/events/store/events.js'\n\nconst FILE_SERVER_URL = inject('FILE_SERVER_URL', '')\nconst router = useRouter()\n\nconst stats = ref({\n\torganizations: 0,\n\torders: 0,\n\tevents: 0\n})\n\nconst columns = {\n\torders: [\n\t\t{ key: '_id', label: 'Order' },\n\t\t{ key: 'positions', label: 'Items' },\n\t\t{ key: 'status', label: 'Status' },\n\t\t{ key: 'createdAt', label: 'Date' }\n\t]\n}\n\n// Formatters\nconst formatId = (id) => id ? `${id.slice(0, 4)}...${id.slice(-4)}` : ''\n\nconst formatDate = (date) => {\n\tif (!date) return ''\n\treturn new Date(date).toLocaleDateString()\n}\n\nconst formatEventDate = (date) => {\n\tif (!date?.start) return ''\n\tconst start = new Date(date.start)\n\treturn start.toLocaleDateString(undefined, { day: '2-digit', month: 'short', year: 'numeric' })\n}\n\nconst getStatusClass = (status) => {\n\tconst classes = {\n\t\tpending: 'bg-second-transp t-second',\n\t\tprocessing: 'bg-main-transp t-main',\n\t\tcompleted: 'bg-green-transp t-green',\n\t\tcancelled: 'bg-red-transp t-red'\n\t}\n\treturn classes[status] || 'bg-light t-grey'\n}\n\nconst getEventStatus = (date) => {\n\tif (!date?.start) return 'No date'\n\tconst now = new Date()\n\tconst start = new Date(date.start)\n\tconst end = date.end ? new Date(date.end) : start\n\n\tif (now > end) return 'Finished'\n\tif (now >= start && now <= end) return 'Live'\n\n\tconst diffDays = Math.ceil((start - now) / (1000 * 60 * 60 * 24))\n\tif (diffDays <= 1) return 'Tomorrow'\n\tif (diffDays <= 7) return `In ${diffDays} days`\n\treturn 'Upcoming'\n}\n\nconst getEventStatusClass = (date) => {\n\tconst status = getEventStatus(date)\n\tif (status === 'Finished') return 'bg-light t-grey'\n\tif (status === 'Live') return 'bg-green-transp t-green'\n\tif (status === 'Tomorrow') return 'bg-second-transp t-second'\n\treturn 'bg-main-transp t-main'\n}\n\nonMounted(async () => {\n\t// Load stats\n\ttry {\n\t\tconst [orgsData, ordersData, eventsData] = await Promise.all([\n\t\t\t// Load counts if needed\n\t\t])\n\t} catch (e) {\n\t\tconsole.error('Failed to load dashboard stats:', e)\n\t}\n})\n</script>\n\n<style lang=\"scss\">\n</style>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4KA,UAAM,kBAAkB,OAAO,mBAAmB,EAAE;AACrC,cAAS;AAExB,UAAM,QAAQ,IAAI;AAAA,MACjB,eAAe;AAAA,MACf,QAAQ;AAAA,MACR,QAAQ;AAAA,IACT,CAAC;AAED,UAAM,UAAU;AAAA,MACf,QAAQ;AAAA,QACP,EAAE,KAAK,OAAO,OAAO,QAAO;AAAA,QAC5B,EAAE,KAAK,aAAa,OAAO,QAAO;AAAA,QAClC,EAAE,KAAK,UAAU,OAAO,SAAQ;AAAA,QAChC,EAAE,KAAK,aAAa,OAAO,OAAM;AAAA,MACnC;AAAA,IACA;AAGA,UAAM,WAAW,CAAC,OAAO,KAAK,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK;AAEtE,UAAM,aAAa,CAAC,SAAS;AAC5B,UAAI,CAAC,KAAM,QAAO;AAClB,aAAO,IAAI,KAAK,IAAI,EAAE,mBAAkB;AAAA,IACzC;AAEA,UAAM,kBAAkB,CAAC,SAAS;AACjC,UAAI,CAAC,MAAM,MAAO,QAAO;AACzB,YAAM,QAAQ,IAAI,KAAK,KAAK,KAAK;AACjC,aAAO,MAAM,mBAAmB,QAAW,EAAE,KAAK,WAAW,OAAO,SAAS,MAAM,UAAS,CAAE;AAAA,IAC/F;AAEA,UAAM,iBAAiB,CAAC,WAAW;AAClC,YAAM,UAAU;AAAA,QACf,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,WAAW;AAAA,MACb;AACC,aAAO,QAAQ,MAAM,KAAK;AAAA,IAC3B;AAEA,UAAM,iBAAiB,CAAC,SAAS;AAChC,UAAI,CAAC,MAAM,MAAO,QAAO;AACzB,YAAM,MAAM,oBAAI,KAAI;AACpB,YAAM,QAAQ,IAAI,KAAK,KAAK,KAAK;AACjC,YAAM,MAAM,KAAK,MAAM,IAAI,KAAK,KAAK,GAAG,IAAI;AAE5C,UAAI,MAAM,IAAK,QAAO;AACtB,UAAI,OAAO,SAAS,OAAO,IAAK,QAAO;AAEvC,YAAM,WAAW,KAAK,MAAM,QAAQ,QAAQ,MAAO,KAAK,KAAK,GAAG;AAChE,UAAI,YAAY,EAAG,QAAO;AAC1B,UAAI,YAAY,EAAG,QAAO,MAAM,QAAQ;AACxC,aAAO;AAAA,IACR;AAEA,UAAM,sBAAsB,CAAC,SAAS;AACrC,YAAM,SAAS,eAAe,IAAI;AAClC,UAAI,WAAW,WAAY,QAAO;AAClC,UAAI,WAAW,OAAQ,QAAO;AAC9B,UAAI,WAAW,WAAY,QAAO;AAClC,aAAO;AAAA,IACR;AAEA,cAAU,YAAY;AAErB,UAAI;AACH,cAAM,CAAC,UAAU,YAAY,UAAU,IAAI,MAAM,QAAQ,IAAI;AAAA;AAAA,QAE/D,CAAG;AAAA,MACF,SAAS,GAAG;AACX,gBAAQ,MAAM,mCAAmC,CAAC;AAAA,MACnD;AAAA,IACD,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import _sfc_main from "../../../icons/entities/IconHome.vue.js";
|
|
2
2
|
import _sfc_main$4 from "../../../icons/entities/IconEvents.vue.js";
|
|
3
3
|
import _sfc_main$5 from "../../../icons/entities/IconGroups.vue.js";
|
|
4
|
-
import _sfc_main$
|
|
4
|
+
import _sfc_main$7 from "../../../icons/entities/IconOrders.vue.js";
|
|
5
|
+
import _sfc_main$6 from "../../../icons/entities/IconCommunity.vue.js";
|
|
5
6
|
import _sfc_main$1 from "../../../icons/entities/IconBell.vue.js";
|
|
6
7
|
import _sfc_main$2 from "../../../icons/entities/IconSettings.vue.js";
|
|
7
8
|
import _sfc_main$3 from "../../../icons/entities/IconProfile.vue.js";
|
|
@@ -55,18 +56,23 @@ const navigationItems = [
|
|
|
55
56
|
iconComponent: _sfc_main$5,
|
|
56
57
|
route: (auth, route) => `/users/${route.params._id}/organizations`,
|
|
57
58
|
visible: () => isModuleInstalled("organizations")
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
title: "Posts",
|
|
62
|
+
iconComponent: _sfc_main$6,
|
|
63
|
+
route: (auth, route) => `/users/${route.params._id}/blogposts`,
|
|
64
|
+
visible: () => isModuleInstalled("community")
|
|
58
65
|
}
|
|
59
66
|
]
|
|
60
67
|
},
|
|
61
68
|
{
|
|
62
69
|
category: "Orders",
|
|
63
|
-
visible: () =>
|
|
70
|
+
visible: (auth, route) => isModuleInstalled("orders") && (auth.user && (auth.user._id === route.params._id || auth.access.roles && (auth.access.roles.includes("ROLE_MODERATOR") || auth.access.roles.includes("ROLE_ADMIN")))),
|
|
64
71
|
items: [
|
|
65
72
|
{
|
|
66
73
|
title: "Orders",
|
|
67
|
-
iconComponent: _sfc_main$
|
|
68
|
-
route: (auth, route) => `/users/${route.params._id}/orders
|
|
69
|
-
visible: (auth, route) => isModuleInstalled("orders") && (auth.user && (auth.user._id === route.params._id || auth.access.roles && (auth.access.roles.includes("ROLE_MODERATOR") || auth.access.roles.includes("ROLE_ADMIN"))))
|
|
74
|
+
iconComponent: _sfc_main$7,
|
|
75
|
+
route: (auth, route) => `/users/${route.params._id}/orders`
|
|
70
76
|
}
|
|
71
77
|
]
|
|
72
78
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.user.config.js","sources":["../../../../../../../src/modules/auth/views/configs/navigation.user.config.js"],"sourcesContent":["// Import icons\nimport IconHome from '@martyrs/src/modules/icons/entities/IconHome.vue';\nimport IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue';\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue';\nimport IconOrders from '@martyrs/src/modules/icons/entities/IconOrders.vue';\nimport IconBell from '@martyrs/src/modules/icons/entities/IconBell.vue';\nimport IconSettings from '@martyrs/src/modules/icons/entities/IconSettings.vue';\nimport IconProfile from '@martyrs/src/modules/icons/entities/IconProfile.vue';\n\n// Import global mixins for access control\nimport { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js';\n\nconst { isModuleInstalled } = useGlobalMixins();\n\n// User profile navigation configuration\nexport const navigationItems = [\n {\n category: '',\n visible: () => true,\n items: [\n {\n title: 'Dashboard',\n iconComponent: IconHome,\n route: (auth, route) => `/users/${route.params._id}/dashboard`,\n visible: (auth, route) => auth.user && auth.user._id === route.params._id // Only owner\n },\n {\n title: 'Notifications',\n iconComponent: IconBell,\n route: (auth, route) => `/users/${route.params._id}/notifications`,\n visible: (auth, route) => auth.user && auth.user._id === route.params._id\n },\n {\n title: 'Settings',\n iconComponent: IconSettings,\n route: (auth, route) => `/users/${route.params._id}/edit/profile`,\n visible: (auth, route) => auth.user && auth.user._id === route.params._id\n },\n ]\n },\n {\n category: 'Profile',\n visible: () => true,\n items: [\n {\n title: 'Profile',\n iconComponent: IconProfile,\n route: (auth, route) => `/users/${route.params._id}`,\n visible: () => true // Public access\n },\n {\n title: 'Events',\n iconComponent: IconEvents,\n route: (auth, route) => `/users/${route.params._id}/events`,\n visible: () => isModuleInstalled('events')\n },\n {\n title: 'Groups',\n iconComponent: IconGroups,\n route: (auth, route) => `/users/${route.params._id}/organizations`,\n visible: () => isModuleInstalled('organizations')\n },\n
|
|
1
|
+
{"version":3,"file":"navigation.user.config.js","sources":["../../../../../../../src/modules/auth/views/configs/navigation.user.config.js"],"sourcesContent":["// Import icons\nimport IconHome from '@martyrs/src/modules/icons/entities/IconHome.vue';\nimport IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue';\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue';\nimport IconOrders from '@martyrs/src/modules/icons/entities/IconOrders.vue';\nimport IconCommunity from '@martyrs/src/modules/icons/entities/IconCommunity.vue';\nimport IconBell from '@martyrs/src/modules/icons/entities/IconBell.vue';\nimport IconSettings from '@martyrs/src/modules/icons/entities/IconSettings.vue';\nimport IconProfile from '@martyrs/src/modules/icons/entities/IconProfile.vue';\n\n// Import global mixins for access control\nimport { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js';\n\nconst { isModuleInstalled } = useGlobalMixins();\n\n// User profile navigation configuration\nexport const navigationItems = [\n {\n category: '',\n visible: () => true,\n items: [\n {\n title: 'Dashboard',\n iconComponent: IconHome,\n route: (auth, route) => `/users/${route.params._id}/dashboard`,\n visible: (auth, route) => auth.user && auth.user._id === route.params._id // Only owner\n },\n {\n title: 'Notifications',\n iconComponent: IconBell,\n route: (auth, route) => `/users/${route.params._id}/notifications`,\n visible: (auth, route) => auth.user && auth.user._id === route.params._id\n },\n {\n title: 'Settings',\n iconComponent: IconSettings,\n route: (auth, route) => `/users/${route.params._id}/edit/profile`,\n visible: (auth, route) => auth.user && auth.user._id === route.params._id\n },\n ]\n },\n {\n category: 'Profile',\n visible: () => true,\n items: [\n {\n title: 'Profile',\n iconComponent: IconProfile,\n route: (auth, route) => `/users/${route.params._id}`,\n visible: () => true // Public access\n },\n {\n title: 'Events',\n iconComponent: IconEvents,\n route: (auth, route) => `/users/${route.params._id}/events`,\n visible: () => isModuleInstalled('events')\n },\n {\n title: 'Groups',\n iconComponent: IconGroups,\n route: (auth, route) => `/users/${route.params._id}/organizations`,\n visible: () => isModuleInstalled('organizations')\n },\n {\n title: 'Posts',\n iconComponent: IconCommunity,\n route: (auth, route) => `/users/${route.params._id}/blogposts`,\n visible: () => isModuleInstalled('community')\n },\n ]\n },\n {\n category: 'Orders',\n visible: (auth, route) => isModuleInstalled('orders') && (\n auth.user && (\n auth.user._id === route.params._id ||\n (auth.access.roles &&\n (auth.access.roles.includes('ROLE_MODERATOR') ||\n auth.access.roles.includes('ROLE_ADMIN'))\n )\n )\n ),\n items: [\n {\n title: 'Orders',\n iconComponent: IconOrders,\n route: (auth, route) => `/users/${route.params._id}/orders`\n },\n ]\n },\n];\n\nexport default navigationItems;\n"],"names":["IconHome","IconBell","IconSettings","IconProfile","IconEvents","IconGroups","IconCommunity","IconOrders"],"mappings":";;;;;;;;;AAaA,MAAM,EAAE,kBAAiB,IAAK,gBAAe;AAGjC,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,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,QAClD,SAAS,CAAC,MAAM,UAAU,KAAK,QAAQ,KAAK,KAAK,QAAQ,MAAM,OAAO;AAAA;AAAA,MAC9E;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,QAClD,SAAS,CAAC,MAAM,UAAU,KAAK,QAAQ,KAAK,KAAK,QAAQ,MAAM,OAAO;AAAA,MAC9E;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,QAClD,SAAS,CAAC,MAAM,UAAU,KAAK,QAAQ,KAAK,KAAK,QAAQ,MAAM,OAAO;AAAA,MAC9E;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,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,QAClD,SAAS,MAAM;AAAA;AAAA,MACvB;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,QAClD,SAAS,MAAM,kBAAkB,QAAQ;AAAA,MACjD;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,QAClD,SAAS,MAAM,kBAAkB,eAAe;AAAA,MACxD;AAAA,MACM;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,QAClD,SAAS,MAAM,kBAAkB,WAAW;AAAA,MACpD;AAAA,IACA;AAAA,EACA;AAAA,EACE;AAAA,IACE,UAAU;AAAA,IACV,SAAS,CAAC,MAAM,UAAU,kBAAkB,QAAQ,MAClD,KAAK,SACH,KAAK,KAAK,QAAQ,MAAM,OAAO,OAC9B,KAAK,OAAO,UACV,KAAK,OAAO,MAAM,SAAS,gBAAgB,KAC1C,KAAK,OAAO,MAAM,SAAS,YAAY;AAAA,IAI/C,OAAO;AAAA,MACL;AAAA,QACE,OAAO;AAAA,QACP,eAAeC;AAAAA,QACf,OAAO,CAAC,MAAM,UAAU,UAAU,MAAM,OAAO,GAAG;AAAA,MAC1D;AAAA,IACA;AAAA,EACA;AACA;"}
|