@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.
Files changed (86) hide show
  1. package/dist/martyrs/src/components/Feed/Feed.vue.js +1 -1
  2. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +6 -12
  3. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
  4. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +1 -1
  5. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js.map +1 -1
  6. package/dist/martyrs/src/modules/auth/views/components/pages/UserDashboard.vue.js +182 -89
  7. package/dist/martyrs/src/modules/auth/views/components/pages/UserDashboard.vue.js.map +1 -1
  8. package/dist/martyrs/src/modules/auth/views/configs/navigation.user.config.js +11 -5
  9. package/dist/martyrs/src/modules/auth/views/configs/navigation.user.config.js.map +1 -1
  10. package/dist/martyrs/src/modules/auth/views/router/users.router.js +1 -2
  11. package/dist/martyrs/src/modules/auth/views/router/users.router.js.map +1 -1
  12. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +1 -1
  13. package/dist/martyrs/src/modules/core/views/classes/ws.manager.js +16 -1
  14. package/dist/martyrs/src/modules/core/views/classes/ws.manager.js.map +1 -1
  15. package/dist/martyrs/src/modules/core/views/components/sections/{Filters.vue.js → Filters.vue2.js} +2 -2
  16. package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue2.js.map +1 -0
  17. package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js +7 -0
  18. package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js.map +1 -1
  19. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +1 -1
  20. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +1 -1
  21. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
  22. package/dist/martyrs/src/modules/marketplace/views/components/pages/Marketplace.vue.js +1 -1
  23. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js +3 -3
  24. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js.map +1 -1
  25. package/dist/martyrs/src/modules/notifications/components/layouts/NotificationsLayout.vue.js +11 -40
  26. package/dist/martyrs/src/modules/notifications/components/layouts/NotificationsLayout.vue.js.map +1 -1
  27. package/dist/martyrs/src/modules/notifications/components/pages/Notifications.vue.js +26 -21
  28. package/dist/martyrs/src/modules/notifications/components/pages/Notifications.vue.js.map +1 -1
  29. package/dist/martyrs/src/modules/notifications/components/sections/NotificationPreferences.vue.js +54 -48
  30. package/dist/martyrs/src/modules/notifications/components/sections/NotificationPreferences.vue.js.map +1 -1
  31. package/dist/martyrs/src/modules/notifications/components/sections/NotificationsList.vue.js +37 -117
  32. package/dist/martyrs/src/modules/notifications/components/sections/NotificationsList.vue.js.map +1 -1
  33. package/dist/martyrs/src/modules/notifications/notifications.client.js +18 -15
  34. package/dist/martyrs/src/modules/notifications/notifications.client.js.map +1 -1
  35. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js +90 -175
  36. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js.map +1 -1
  37. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +6 -6
  38. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js.map +1 -1
  39. package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +41 -28
  40. package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js.map +1 -1
  41. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +1 -1
  42. package/dist/martyrs/src/modules/orders/orders.client.js +14 -14
  43. package/dist/martyrs/src/modules/orders/orders.client.js.map +1 -1
  44. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
  45. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +88 -39
  46. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js.map +1 -1
  47. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +1 -1
  48. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +1 -1
  49. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +1 -1
  50. package/dist/style.css +73 -265
  51. package/package.json +1 -1
  52. package/src/modules/TASKS.MD +26 -1
  53. package/src/modules/auth/views/components/pages/Profile.vue +9 -15
  54. package/src/modules/auth/views/components/pages/ProfileEdit.vue +1 -1
  55. package/src/modules/auth/views/components/pages/UserDashboard.vue +214 -125
  56. package/src/modules/auth/views/configs/navigation.user.config.js +17 -11
  57. package/src/modules/auth/views/router/users.router.js +0 -1
  58. package/src/modules/core/views/classes/ws.manager.js +20 -1
  59. package/src/modules/core/views/utils/vue-app-renderer.js +9 -3
  60. package/src/modules/notifications/components/elements/NotificationBadge.vue +1 -1
  61. package/src/modules/notifications/components/layouts/NotificationsLayout.vue +9 -53
  62. package/src/modules/notifications/components/pages/Notifications.vue +21 -22
  63. package/src/modules/notifications/components/sections/NotificationPreferences.vue +41 -180
  64. package/src/modules/notifications/components/sections/NotificationsList.vue +39 -219
  65. package/src/modules/notifications/notifications.client.js +17 -16
  66. package/src/modules/orders/components/blocks/CardOrderUser.vue +88 -190
  67. package/src/modules/orders/components/pages/OrderBackoffice.vue +5 -5
  68. package/src/modules/orders/components/pages/Orders.vue +56 -50
  69. package/src/modules/organizations/components/pages/OrganizationEdit.vue +42 -11
  70. package/dist/martyrs/src/components/SelectMulti/SelectMulti.vue.js +0 -625
  71. package/dist/martyrs/src/components/SelectMulti/SelectMulti.vue.js.map +0 -1
  72. package/dist/martyrs/src/modules/auth/views/components/blocks/ProfileCard.vue.js +0 -44
  73. package/dist/martyrs/src/modules/auth/views/components/blocks/ProfileCard.vue.js.map +0 -1
  74. package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue.js.map +0 -1
  75. package/dist/martyrs/src/modules/orders/components/icons/IconStatusCanceled.vue.js +0 -32
  76. package/dist/martyrs/src/modules/orders/components/icons/IconStatusCanceled.vue.js.map +0 -1
  77. package/dist/martyrs/src/modules/orders/components/icons/IconStatusConfirmed.vue.js +0 -32
  78. package/dist/martyrs/src/modules/orders/components/icons/IconStatusConfirmed.vue.js.map +0 -1
  79. package/dist/martyrs/src/modules/orders/components/icons/IconStatusCreated.vue.js +0 -32
  80. package/dist/martyrs/src/modules/orders/components/icons/IconStatusCreated.vue.js.map +0 -1
  81. package/dist/martyrs/src/modules/orders/components/icons/IconStatusDelay.vue.js +0 -32
  82. package/dist/martyrs/src/modules/orders/components/icons/IconStatusDelay.vue.js.map +0 -1
  83. package/dist/martyrs/src/modules/orders/components/icons/IconStatusFinished.vue.js +0 -32
  84. package/dist/martyrs/src/modules/orders/components/icons/IconStatusFinished.vue.js.map +0 -1
  85. package/dist/martyrs/src/modules/orders/components/icons/IconStatusInUse.vue.js +0 -32
  86. 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.vue.js";
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
- route: "User Events",
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
- route: "User Organizations",
69
+ path: (_id) => `/users/${_id}/organizations`,
70
70
  icon: _sfc_main$9,
71
71
  visible: () => true
72
72
  },
73
- blogposts: {
73
+ community: {
74
74
  displayName: "Posts",
75
- route: "User Posts",
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
- route: "UserOrdersList",
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 { useRoute, useRouter } from "vue-router";
3
- import _sfc_main$1 from "../../../../../components/Block/Block.vue.js";
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 StatusBadge from "../../../../../components/Table/StatusBadge.vue.js";
7
- import _sfc_main$6 from "../../../../events/components/blocks/CardEvent.vue.js";
8
- import _sfc_main$2 from "../../../../icons/entities/IconGroups.vue.js";
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 bg-white" };
15
- const _hoisted_2 = { class: "mn-b-medium cols-3 mobile:cols-1 gap-thin" };
16
- const _hoisted_3 = { class: "mn-b-medium radius-small w-max bg-main" };
17
- const _hoisted_4 = { class: "h3 mn-b-thin" };
18
- const _hoisted_5 = { class: "mn-b-medium radius-small w-max bg-main" };
19
- const _hoisted_6 = { class: "h3 mn-b-thin" };
20
- const _hoisted_7 = { class: "mn-b-medium radius-small w-max bg-main" };
21
- const _hoisted_8 = { class: "h3 mn-b-thin" };
22
- const _hoisted_9 = { class: "cols-2 mobile:cols-1 gap-thin" };
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
- useRoute();
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[6] || (_cache[6] = createElementVNode("h2", { class: "mn-b-small" }, "Overview", -1)),
102
+ _cache[3] || (_cache[3] = createElementVNode("h2", { class: "mn-b-medium" }, "Overview", -1)),
38
103
  createElementVNode("div", _hoisted_2, [
39
- createVNode(_sfc_main$1, { class: "pos-relative" }, {
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
- createVNode(_sfc_main$2, { class: "i-medium mn-small" })
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", _hoisted_4, toDisplayString(stats.value.organizations || 0), 1),
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(_sfc_main$1, { class: "pos-relative" }, {
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
- _cache[2] || (_cache[2] = createElementVNode("span", { class: "t-green fw-semi pos-absolute pos-t-small pos-r-small" }, "+14.8%", -1)),
53
- createElementVNode("div", _hoisted_5, [
54
- createVNode(_sfc_main$3, { class: "i-medium mn-small" })
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", _hoisted_6, toDisplayString(stats.value.orders || 0), 1),
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(_sfc_main$1, { class: "pos-relative" }, {
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
- _cache[4] || (_cache[4] = createElementVNode("span", { class: "t-green fw-semi pos-absolute pos-t-small pos-r-small" }, "+25.1%", -1)),
64
- createElementVNode("div", _hoisted_7, [
65
- createVNode(_sfc_main$4, { class: "i-medium mn-small" })
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", _hoisted_8, toDisplayString(stats.value.events || 0), 1),
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", _hoisted_9, [
74
- createVNode(_sfc_main$1, {
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-semi bg-white",
182
+ class: "radius-small bg-white",
104
183
  items,
105
- columns: [
106
- {
107
- key: "_id",
108
- label: "ID",
109
- formatter: (value) => `#${value.slice(0, 4)}...${value.slice(-4)}`
110
- },
111
- {
112
- key: "positions",
113
- label: "Items",
114
- formatter: (value) => value?.length || 0
115
- },
116
- {
117
- key: "status",
118
- label: "Status",
119
- component: StatusBadge
120
- },
121
- {
122
- key: "createdAt",
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$1, {
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: "cols-1 gap-thin"
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(_sfc_main$6, {
232
+ return openBlock(), createBlock(_component_router_link, {
165
233
  key: event._id,
166
- event,
167
- user: state.user._id,
168
- type: "compact",
169
- class: "bg-light radius-medium"
170
- }, null, 8, ["event", "user"]);
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$6 from "../../../icons/entities/IconOrders.vue.js";
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: () => true,
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$6,
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 ]\n },\n {\n category: 'Orders',\n visible: () => true,\n items: [\n {\n title: 'Orders',\n iconComponent: IconOrders,\n route: (auth, route) => `/users/${route.params._id}/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 },\n ]\n },\n];\n\nexport default navigationItems;\n"],"names":["IconHome","IconBell","IconSettings","IconProfile","IconEvents","IconGroups","IconOrders"],"mappings":";;;;;;;;AAYA,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,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,CAAC,MAAM,UAAU,kBAAkB,QAAQ,MAClD,KAAK,SACH,KAAK,KAAK,QAAQ,MAAM,OAAO,OAC9B,KAAK,OAAO,UACV,KAAK,OAAO,MAAM,SAAS,gBAAgB,KAC3C,KAAK,OAAO,MAAM,SAAS,YAAY;AAAA,MAItD;AAAA,IACA;AAAA,EACA;AACA;"}
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;"}