@ozdao/martyrs 0.2.584 → 0.2.585
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/builder.js +2 -0
- package/dist/{main-fmp55tJF.js → main-xL-jtBkT.js} +2 -1
- package/dist/martyrs/dist/{main-fmp55tJF.js → main-xL-jtBkT.js} +3 -2
- package/dist/martyrs/dist/{main-fmp55tJF.js.map → main-xL-jtBkT.js.map} +1 -1
- package/dist/martyrs/dist/{web-BDuQSQKS.js → web-BA6h6Z8P.js} +2 -2
- package/dist/martyrs/dist/{web-BDuQSQKS.js.map → web-BA6h6Z8P.js.map} +1 -1
- package/dist/martyrs/src/components/EditImages/{EditImages.vue2.js → EditImages.vue.js} +2 -2
- package/dist/martyrs/src/components/EditImages/EditImages.vue.js.map +1 -0
- package/dist/martyrs/src/components/Tab/{Tab.vue.js → Tab.vue2.js} +2 -2
- package/dist/martyrs/src/components/Tab/Tab.vue2.js.map +1 -0
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +59 -40
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +1 -1
- package/dist/martyrs/src/modules/backoffice/backoffice.client.js +3 -15
- package/dist/martyrs/src/modules/backoffice/backoffice.client.js.map +1 -1
- package/dist/martyrs/src/modules/backoffice/configs/navigation.backoffice.config.js +99 -0
- package/dist/martyrs/src/modules/backoffice/configs/navigation.backoffice.config.js.map +1 -0
- package/dist/martyrs/src/modules/backoffice/{backoffice.router.js → router/backoffice.router.js} +9 -7
- package/dist/martyrs/src/modules/backoffice/router/backoffice.router.js.map +1 -0
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +6 -0
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/core.client.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/classes/core.app.js +5 -1
- package/dist/martyrs/src/modules/core/views/classes/core.app.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js +20 -26
- package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/pages/404.vue.js +76 -7
- package/dist/martyrs/src/modules/core/views/components/pages/404.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/sections/SectionPageTitle.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/store/core.store.js +1 -0
- package/dist/martyrs/src/modules/core/views/store/core.store.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js +2 -1
- package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +1 -0
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +2 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/pages/pages.router.js +7 -5
- package/dist/martyrs/src/modules/pages/pages.router.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +1 -1
- package/dist/martyrs.es.js +1 -1
- package/dist/style.css +5 -0
- package/dist/{web-BDuQSQKS.js → web-BA6h6Z8P.js} +1 -1
- package/package.json +1 -1
- package/src/builder/modes/ssr.rspack.dev.js +2 -0
- package/src/modules/auth/views/components/pages/Profile.vue +33 -5
- package/src/modules/backoffice/backoffice.client.js +1 -25
- package/src/modules/backoffice/configs/navigation.backoffice.config.js +99 -0
- package/src/modules/backoffice/router/backoffice.router.js +8 -7
- package/src/modules/community/components/pages/BlogPost.vue +9 -1
- package/src/modules/core/core.client.js +1 -0
- package/src/modules/core/views/classes/core.app.js +8 -3
- package/src/modules/core/views/components/layouts/Client.vue +41 -42
- package/src/modules/core/views/components/pages/404.vue +55 -3
- package/src/modules/core/views/store/core.store.js +1 -0
- package/src/modules/core/views/utils/vue-app-renderer.js +9 -1
- package/src/modules/pages/pages.router.js +4 -2
- package/src/modules/pages/views/router/pages.backoffice.router.js +4 -3
- package/dist/martyrs/src/components/EditImages/EditImages.vue2.js.map +0 -1
- package/dist/martyrs/src/components/Tab/Tab.vue.js.map +0 -1
- package/dist/martyrs/src/modules/backoffice/backoffice.router.js.map +0 -1
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +0 -150
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js.map +0 -1
- package/src/modules/backoffice/backoffice.router.js +0 -69
- package/src/modules/backoffice/components/partials/Sidebar.vue +0 -165
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.store.js","sources":["../../../../../../../src/modules/core/views/store/core.store.js"],"sourcesContent":["// Vue modules\nimport { Preferences } from '@capacitor/preferences';\nimport { isReactive, reactive } from 'vue';\n\nimport SessionManager from '../classes/session.manager.js';\n\n// AsyncLocalStorage для изоляции SSR store per-request (только Node.js)\nlet asyncLocalStorage = null;\n\nasync function getAsyncLocalStorage() {\n if (!asyncLocalStorage && typeof window === 'undefined') {\n const { AsyncLocalStorage } = await import('async_hooks');\n asyncLocalStorage = new AsyncLocalStorage();\n }\n return asyncLocalStorage;\n}\n\n// ============================================================================\n// GLOBAL FUNCTIONS (используют useStore() для доступа к state)\n// ============================================================================\n\n// Mutations\nexport function setError(error) {\n const state = useStore().core.state;\n state.error.show = true;\n let errorData;\n\n errorData = error;\n\n // Обработка ошибок из fetch API (Store class)\n if (error?.info) errorData = error.info;\n\n // Обработка ошибок из axios\n if (error?.response?.data) errorData = error.response.data;\n\n // Обработка ошибок верификации\n if ((errorData?.error === 'VALIDATION_ERROR' || errorData?.errors) && errorData?.errors) {\n // Собираем все сообщения об ошибках в одну строку\n const errorMessages = [];\n for (const field in errorData.errors) {\n const fieldErrors = errorData.errors[field];\n if (Array.isArray(fieldErrors)) {\n errorMessages.push(...fieldErrors);\n } else if (typeof fieldErrors === 'string') {\n errorMessages.push(fieldErrors);\n }\n }\n state.error.message = errorMessages.join(', ') || errorData.message || 'Validation error';\n } else if (error && errorData.errorCode) {\n // state.error.message = i18n.global.t(`errors.${errorData.errorCode}`);\n state.error.message = errorData.errorCode;\n } else {\n state.error.message = errorData.message || error.message || 'Unknown error';\n }\n\n state.error.show = true;\n\n if (typeof window !== 'undefined' && window.requestAnimationFrame) {\n requestAnimationFrame(() => {\n setTimeout(() => (state.error.show = false), 5000);\n });\n } else {\n setTimeout(() => (state.error.show = false), 5000);\n }\n}\n\nexport function setSnack(data) {\n const state = useStore().core.state;\n\n // Handle different input formats\n let type = 'notification'\n let message = ''\n let duration = 3000\n\n if (typeof data === 'string') {\n message = data\n } else if (data instanceof Error) {\n type = 'error'\n message = data.message\n } else if (data?.response?.data) {\n // Handle API errors\n type = 'error'\n const errorData = data.response.data\n message = errorData.errorCode || errorData.message || 'Unknown error'\n } else if (typeof data === 'object') {\n type = data.type || 'notification'\n message = data.message || ''\n duration = data.duration || 3000\n }\n\n // Update state\n state.snack = {\n show: true,\n type,\n message,\n duration\n }\n\n // Auto-hide\n if (typeof window !== 'undefined' && window.requestAnimationFrame) {\n requestAnimationFrame(() => {\n setTimeout(() => {state.snack.show = false }, duration)\n });\n } else {\n setTimeout(() => {state.snack.show = false }, duration)\n }\n}\n\n// ============================================================================\n// GLOBAL STORE FACTORY\n// ============================================================================\n\n// Фабрика для создания store\nexport function createStore() {\n // State создается для каждого store instance (изоляция SSR)\n const state = reactive({\n loading: false,\n\n isOpenLocationPopup: false,\n isOpenSidebar: false,\n\n position: null,\n search: null,\n\n theme: {\n mode: 'system', // 'light' | 'dark' | 'system'\n },\n\n navigation_bar: {\n name: null,\n actions: null,\n },\n\n error: {\n status: '',\n headers: '',\n data: '',\n show: false,\n name: '',\n message: '',\n },\n snack: {\n show: false,\n type: 'notification',\n message: '',\n duration: 3000\n },\n\n // Session state - данные сессии хранятся здесь\n session: {\n token: null,\n userId: null,\n roles: null,\n accesses: []\n },\n });\n\n // Actions с closure на локальный state\n const actions = {\n setLoading(status) {\n state.loading = status;\n },\n\n // Theme: 'light' | 'dark' | 'system'\n async setTheme(mode) {\n state.theme.mode = mode;\n\n // Cookie/Preferences ТОЛЬКО для явного выбора light/dark\n // system — не сохраняем, пусть работает CSS media query\n if (mode === 'light' || mode === 'dark') {\n if (typeof document !== 'undefined') {\n document.cookie = `theme=${mode}; path=/; max-age=31536000; SameSite=Lax`;\n }\n await Preferences.set({ key: 'theme', value: mode });\n } else {\n // system — удаляем cookie чтобы SSR не фиксировал тему\n if (typeof document !== 'undefined') {\n document.cookie = `theme=; path=/; max-age=0`;\n }\n await Preferences.remove({ key: 'theme' });\n }\n\n const root = document.documentElement;\n\n // Убираем старые атрибуты\n root.classList.remove('dark-theme', 'light-theme');\n root.removeAttribute('data-theme');\n\n if (mode === 'dark') {\n root.classList.add('dark-theme');\n root.setAttribute('data-theme', 'dark');\n root.setAttribute('color-scheme', 'dark');\n } else if (mode === 'light') {\n root.classList.add('light-theme');\n root.setAttribute('data-theme', 'light');\n root.setAttribute('color-scheme', 'light');\n } else {\n // system - без классов, CSS media query сработает\n root.setAttribute('color-scheme', 'light dark');\n }\n\n },\n\n toggleTheme() {\n // Прямое переключение между light и dark\n const isDark = state.theme.mode === 'dark' ||\n (state.theme.mode === 'system' && typeof window !== 'undefined' &&\n window.matchMedia('(prefers-color-scheme: dark)').matches);\n this.setTheme(isDark ? 'light' : 'dark');\n },\n\n add(array, item) {\n const existingItemIndex = array.findIndex(i => i._id === item._id);\n\n if (existingItemIndex === -1) {\n array.push(item);\n } else {\n array[existingItemIndex] = item;\n }\n },\n\n update(array, item) {\n const existingItemIndex = array.findIndex(i => i._id === item._id);\n if (existingItemIndex === -1) {\n // If the item doesn't exist, push it to the array\n array.push(item);\n } else {\n // Update the item in the array without creating a new array\n Object.assign(array[existingItemIndex], item);\n }\n },\n\n delete(array, item) {\n const existingItemIndex = array.findIndex(c => c._id === item._id);\n\n if (existingItemIndex !== -1) {\n array.splice(existingItemIndex, 1);\n }\n },\n\n increment(array, item) {\n console.log(array);\n console.log(item);\n const arrayItem = array.find(i => i._id === item._id);\n\n if (arrayItem) {\n arrayItem.quantity++;\n }\n },\n\n decrement(array, item) {\n const arrayItem = array.find(i => i._id === item._id);\n\n const arrayItemIndex = array.indexOf(arrayItem);\n\n if (arrayItemIndex > -1) {\n arrayItem.quantity--;\n\n if (arrayItem.quantity < 1) array.splice(arrayItemIndex, 1);\n }\n },\n\n reset(array) {\n array = [];\n },\n };\n\n // SessionManager создается внутри createStore для правильной изоляции в SSR\n const sessionManager = new SessionManager(state.session);\n\n const store = reactive({\n modules: [],\n\n // Core module registered by default\n core: { state, actions, session: sessionManager },\n\n addStore(name, storage) {\n this[name] = storage;\n this.modules.push(name);\n },\n\n async getInitialState() {\n const initialState = {};\n for (const [moduleName, moduleStore] of Object.entries(this)) {\n if (moduleName !== 'modules' && moduleName !== 'addStore' && moduleName !== 'getInitialState' && moduleName !== 'setInitialState') {\n if (moduleStore.state) {\n initialState[moduleName] = JSON.parse(JSON.stringify(moduleStore.state));\n }\n }\n }\n return initialState;\n },\n\n async setInitialState(initialState, isHydration = false) {\n const modules = Object.entries(initialState);\n\n for (const [moduleName, moduleState] of modules) {\n if (this[moduleName] && this[moduleName].state) {\n // При гидратации просто заменяем state целиком для скорости\n if (isHydration) {\n Object.assign(this[moduleName].state, moduleState);\n } else {\n mergeReactive(this[moduleName].state, moduleState);\n }\n }\n }\n }\n });\n\n function mergeReactive(target, source) {\n // Оптимизированная версия слияния\n const keys = Object.keys(source);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const sourceValue = source[key];\n\n if (sourceValue !== null && typeof sourceValue === 'object' && !Array.isArray(sourceValue)) {\n if (isReactive(target[key])) {\n mergeReactive(target[key], sourceValue);\n } else {\n target[key] = sourceValue;\n }\n } else {\n target[key] = sourceValue;\n }\n }\n }\n\n return store;\n}\n\n// ============================================================================\n// SSR AND SINGLETON\n// ============================================================================\n\n// Синглтон для клиента\nlet clientStore = null;\n\n// AsyncLocalStorage для SSR (изоляция per-request)\nexport async function setSSRStore(store) {\n if (typeof window === 'undefined') {\n const als = await getAsyncLocalStorage();\n als?.enterWith(store);\n }\n}\n\nexport async function clearSSRStore() {\n if (typeof window === 'undefined') {\n const als = await getAsyncLocalStorage();\n als?.enterWith(null);\n }\n}\n\nexport function useStore() {\n if (typeof window === 'undefined') {\n // SSR: используем store из AsyncLocalStorage (может быть null если не инициализирован)\n const store = asyncLocalStorage?.getStore();\n if (store) {\n return store;\n }\n // Fallback для обратной совместимости\n console.warn('[WARN] SSR store not in AsyncLocalStorage, creating new store instance');\n return createStore();\n }\n // Client: синглтон\n if (!clientStore) {\n clientStore = createStore();\n }\n return clientStore;\n}\n\n// ============================================================================\n// SESSION ACCESSOR\n// ============================================================================\n\n/**\n * Получить текущий экземпляр SessionManager\n * Использовать вместо прямого импорта session для правильной работы с SSR\n */\nexport function useSession() {\n const store = useStore();\n return store.core.session;\n}\n\n// ============================================================================\n// EXPORTS\n// ============================================================================\n\n// Не экспортируем singleton state/actions - теперь используется useStore()\nexport default useStore();\n"],"names":[],"mappings":";;;AAOA,IAAI,oBAAoB;AAExB,eAAe,uBAAuB;AACpC,MAAI,CAAC,qBAAqB,OAAO,WAAW,aAAa;AACvD,UAAM,EAAE,kBAAiB,IAAK,MAAM,OAAO,aAAa;AACxD,wBAAoB,IAAI,kBAAiB;AAAA,EAC3C;AACA,SAAO;AACT;AAOO,SAAS,SAAS,OAAO;AAC9B,QAAM,QAAQ,WAAW,KAAK;AAC9B,QAAM,MAAM,OAAO;AACnB,MAAI;AAEJ,cAAY;AAGZ,MAAI,OAAO,KAAM,aAAY,MAAM;AAGnC,MAAI,OAAO,UAAU,KAAM,aAAY,MAAM,SAAS;AAGtD,OAAK,WAAW,UAAU,sBAAsB,WAAW,WAAW,WAAW,QAAQ;AAEvF,UAAM,gBAAgB,CAAA;AACtB,eAAW,SAAS,UAAU,QAAQ;AACpC,YAAM,cAAc,UAAU,OAAO,KAAK;AAC1C,UAAI,MAAM,QAAQ,WAAW,GAAG;AAC9B,sBAAc,KAAK,GAAG,WAAW;AAAA,MACnC,WAAW,OAAO,gBAAgB,UAAU;AAC1C,sBAAc,KAAK,WAAW;AAAA,MAChC;AAAA,IACF;AACA,UAAM,MAAM,UAAU,cAAc,KAAK,IAAI,KAAK,UAAU,WAAW;AAAA,EACzE,WAAW,SAAS,UAAU,WAAW;AAEvC,UAAM,MAAM,UAAU,UAAU;AAAA,EAClC,OAAO;AACL,UAAM,MAAM,UAAU,UAAU,WAAW,MAAM,WAAW;AAAA,EAC9D;AAEA,QAAM,MAAM,OAAO;AAEnB,MAAI,OAAO,WAAW,eAAe,OAAO,uBAAuB;AACjE,0BAAsB,MAAM;AAC1B,iBAAW,MAAO,MAAM,MAAM,OAAO,OAAQ,GAAI;AAAA,IACnD,CAAC;AAAA,EACH,OAAO;AACL,eAAW,MAAO,MAAM,MAAM,OAAO,OAAQ,GAAI;AAAA,EACnD;AACF;AAEO,SAAS,SAAS,MAAM;AAC7B,QAAM,QAAQ,WAAW,KAAK;AAG9B,MAAI,OAAO;AACX,MAAI,UAAU;AACd,MAAI,WAAW;AAEf,MAAI,OAAO,SAAS,UAAU;AAC5B,cAAU;AAAA,EACZ,WAAW,gBAAgB,OAAO;AAChC,WAAO;AACP,cAAU,KAAK;AAAA,EACjB,WAAW,MAAM,UAAU,MAAM;AAE/B,WAAO;AACP,UAAM,YAAY,KAAK,SAAS;AAChC,cAAU,UAAU,aAAa,UAAU,WAAW;AAAA,EACxD,WAAW,OAAO,SAAS,UAAU;AACnC,WAAO,KAAK,QAAQ;AACpB,cAAU,KAAK,WAAW;AAC1B,eAAW,KAAK,YAAY;AAAA,EAC9B;AAGA,QAAM,QAAQ;AAAA,IACZ,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AAGE,MAAI,OAAO,WAAW,eAAe,OAAO,uBAAuB;AACjE,0BAAsB,MAAM;AAC1B,iBAAW,MAAM;AAAC,cAAM,MAAM,OAAO;AAAA,MAAM,GAAG,QAAQ;AAAA,IACxD,CAAC;AAAA,EACH,OAAO;AACL,eAAW,MAAM;AAAC,YAAM,MAAM,OAAO;AAAA,IAAM,GAAG,QAAQ;AAAA,EACxD;AACF;AAOO,SAAS,cAAc;AAE5B,QAAM,QAAQ,SAAS;AAAA,IACrB,SAAS;AAAA,IAET,qBAAqB;AAAA,IACrB,eAAe;AAAA,IAEf,UAAU;AAAA,IACV,QAAQ;AAAA,IAER,OAAO;AAAA,MACL,MAAM;AAAA;AAAA,IACZ;AAAA,IAEI,gBAAgB;AAAA,MACd,MAAM;AAAA,MACN,SAAS;AAAA,IACf;AAAA,IAEI,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,IACf;AAAA,IACI,OAAO;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,UAAU;AAAA,IAChB;AAAA;AAAA,IAGI,SAAS;AAAA,MACP,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,UAAU,CAAA;AAAA,IAChB;AAAA,EACA,CAAG;AAGD,QAAM,UAAU;AAAA,IACd,WAAW,QAAQ;AACjB,YAAM,UAAU;AAAA,IAClB;AAAA;AAAA,IAGA,MAAM,SAAS,MAAM;AACnB,YAAM,MAAM,OAAO;AAInB,UAAI,SAAS,WAAW,SAAS,QAAQ;AACvC,YAAI,OAAO,aAAa,aAAa;AACnC,mBAAS,SAAS,SAAS,IAAI;AAAA,QACjC;AACA,cAAM,YAAY,IAAI,EAAE,KAAK,SAAS,OAAO,MAAM;AAAA,MACrD,OAAO;AAEL,YAAI,OAAO,aAAa,aAAa;AACnC,mBAAS,SAAS;AAAA,QACpB;AACA,cAAM,YAAY,OAAO,EAAE,KAAK,QAAO,CAAE;AAAA,MAC3C;AAEA,YAAM,OAAO,SAAS;AAGtB,WAAK,UAAU,OAAO,cAAc,aAAa;AACjD,WAAK,gBAAgB,YAAY;AAEjC,UAAI,SAAS,QAAQ;AACnB,aAAK,UAAU,IAAI,YAAY;AAC/B,aAAK,aAAa,cAAc,MAAM;AACtC,aAAK,aAAa,gBAAgB,MAAM;AAAA,MAC1C,WAAW,SAAS,SAAS;AAC3B,aAAK,UAAU,IAAI,aAAa;AAChC,aAAK,aAAa,cAAc,OAAO;AACvC,aAAK,aAAa,gBAAgB,OAAO;AAAA,MAC3C,OAAO;AAEL,aAAK,aAAa,gBAAgB,YAAY;AAAA,MAChD;AAAA,IAEF;AAAA,IAEA,cAAc;AAEZ,YAAM,SAAS,MAAM,MAAM,SAAS,UACjC,MAAM,MAAM,SAAS,YAAY,OAAO,WAAW,eACnD,OAAO,WAAW,8BAA8B,EAAE;AACrD,WAAK,SAAS,SAAS,UAAU,MAAM;AAAA,IACzC;AAAA,IAEA,IAAI,OAAO,MAAM;AACf,YAAM,oBAAoB,MAAM,UAAU,OAAK,EAAE,QAAQ,KAAK,GAAG;AAEjE,UAAI,sBAAsB,IAAI;AAC5B,cAAM,KAAK,IAAI;AAAA,MACjB,OAAO;AACL,cAAM,iBAAiB,IAAI;AAAA,MAC7B;AAAA,IACF;AAAA,IAEA,OAAO,OAAO,MAAM;AAClB,YAAM,oBAAoB,MAAM,UAAU,OAAK,EAAE,QAAQ,KAAK,GAAG;AACjE,UAAI,sBAAsB,IAAI;AAE5B,cAAM,KAAK,IAAI;AAAA,MACjB,OAAO;AAEL,eAAO,OAAO,MAAM,iBAAiB,GAAG,IAAI;AAAA,MAC9C;AAAA,IACF;AAAA,IAEA,OAAO,OAAO,MAAM;AAClB,YAAM,oBAAoB,MAAM,UAAU,OAAK,EAAE,QAAQ,KAAK,GAAG;AAEjE,UAAI,sBAAsB,IAAI;AAC5B,cAAM,OAAO,mBAAmB,CAAC;AAAA,MACnC;AAAA,IACF;AAAA,IAEA,UAAU,OAAO,MAAM;AACrB,cAAQ,IAAI,KAAK;AACjB,cAAQ,IAAI,IAAI;AAChB,YAAM,YAAY,MAAM,KAAK,OAAK,EAAE,QAAQ,KAAK,GAAG;AAEpD,UAAI,WAAW;AACb,kBAAU;AAAA,MACZ;AAAA,IACF;AAAA,IAEA,UAAU,OAAO,MAAM;AACrB,YAAM,YAAY,MAAM,KAAK,OAAK,EAAE,QAAQ,KAAK,GAAG;AAEpD,YAAM,iBAAiB,MAAM,QAAQ,SAAS;AAE9C,UAAI,iBAAiB,IAAI;AACvB,kBAAU;AAEV,YAAI,UAAU,WAAW,EAAG,OAAM,OAAO,gBAAgB,CAAC;AAAA,MAC5D;AAAA,IACF;AAAA,IAEA,MAAM,OAAO;AAAA,IAEb;AAAA,EACJ;AAGE,QAAM,iBAAiB,IAAI,eAAe,MAAM,OAAO;AAEvD,QAAM,QAAQ,SAAS;AAAA,IACrB,SAAS,CAAA;AAAA;AAAA,IAGT,MAAM,EAAE,OAAO,SAAS,SAAS,eAAc;AAAA,IAE/C,SAAS,MAAM,SAAS;AACtB,WAAK,IAAI,IAAI;AACb,WAAK,QAAQ,KAAK,IAAI;AAAA,IACxB;AAAA,IAEA,MAAM,kBAAkB;AACtB,YAAM,eAAe,CAAA;AACrB,iBAAW,CAAC,YAAY,WAAW,KAAK,OAAO,QAAQ,IAAI,GAAG;AAC5D,YAAI,eAAe,aAAa,eAAe,cAAc,eAAe,qBAAqB,eAAe,mBAAmB;AACjI,cAAI,YAAY,OAAO;AACrB,yBAAa,UAAU,IAAI,KAAK,MAAM,KAAK,UAAU,YAAY,KAAK,CAAC;AAAA,UACzE;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IAEA,MAAM,gBAAgB,cAAc,cAAc,OAAO;AACvD,YAAM,UAAU,OAAO,QAAQ,YAAY;AAE3C,iBAAW,CAAC,YAAY,WAAW,KAAK,SAAS;AAC/C,YAAI,KAAK,UAAU,KAAK,KAAK,UAAU,EAAE,OAAO;AAE9C,cAAI,aAAa;AACf,mBAAO,OAAO,KAAK,UAAU,EAAE,OAAO,WAAW;AAAA,UACnD,OAAO;AACL,0BAAc,KAAK,UAAU,EAAE,OAAO,WAAW;AAAA,UACnD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACJ,CAAG;AAED,WAAS,cAAc,QAAQ,QAAQ;AAErC,UAAM,OAAO,OAAO,KAAK,MAAM;AAC/B,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,YAAM,MAAM,KAAK,CAAC;AAClB,YAAM,cAAc,OAAO,GAAG;AAE9B,UAAI,gBAAgB,QAAQ,OAAO,gBAAgB,YAAY,CAAC,MAAM,QAAQ,WAAW,GAAG;AAC1F,YAAI,WAAW,OAAO,GAAG,CAAC,GAAG;AAC3B,wBAAc,OAAO,GAAG,GAAG,WAAW;AAAA,QACxC,OAAO;AACL,iBAAO,GAAG,IAAI;AAAA,QAChB;AAAA,MACF,OAAO;AACL,eAAO,GAAG,IAAI;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAOA,IAAI,cAAc;AAGX,eAAe,YAAY,OAAO;AACvC,MAAI,OAAO,WAAW,aAAa;AACjC,UAAM,MAAM,MAAM,qBAAoB;AACtC,SAAK,UAAU,KAAK;AAAA,EACtB;AACF;AAEO,eAAe,gBAAgB;AACpC,MAAI,OAAO,WAAW,aAAa;AACjC,UAAM,MAAM,MAAM,qBAAoB;AACtC,SAAK,UAAU,IAAI;AAAA,EACrB;AACF;AAEO,SAAS,WAAW;AACzB,MAAI,OAAO,WAAW,aAAa;AAEjC,UAAM,QAAQ,mBAAmB,SAAQ;AACzC,QAAI,OAAO;AACT,aAAO;AAAA,IACT;AAEA,YAAQ,KAAK,wEAAwE;AACrF,WAAO,YAAW;AAAA,EACpB;AAEA,MAAI,CAAC,aAAa;AAChB,kBAAc,YAAW;AAAA,EAC3B;AACA,SAAO;AACT;AAUO,SAAS,aAAa;AAC3B,QAAM,QAAQ,SAAQ;AACtB,SAAO,MAAM,KAAK;AACpB;AAOA,MAAA,aAAe,SAAQ;"}
|
|
1
|
+
{"version":3,"file":"core.store.js","sources":["../../../../../../../src/modules/core/views/store/core.store.js"],"sourcesContent":["// Vue modules\nimport { Preferences } from '@capacitor/preferences';\nimport { isReactive, reactive } from 'vue';\n\nimport SessionManager from '../classes/session.manager.js';\n\n// AsyncLocalStorage для изоляции SSR store per-request (только Node.js)\nlet asyncLocalStorage = null;\n\nasync function getAsyncLocalStorage() {\n if (!asyncLocalStorage && typeof window === 'undefined') {\n const { AsyncLocalStorage } = await import('async_hooks');\n asyncLocalStorage = new AsyncLocalStorage();\n }\n return asyncLocalStorage;\n}\n\n// ============================================================================\n// GLOBAL FUNCTIONS (используют useStore() для доступа к state)\n// ============================================================================\n\n// Mutations\nexport function setError(error) {\n const state = useStore().core.state;\n state.error.show = true;\n let errorData;\n\n errorData = error;\n\n // Обработка ошибок из fetch API (Store class)\n if (error?.info) errorData = error.info;\n\n // Обработка ошибок из axios\n if (error?.response?.data) errorData = error.response.data;\n\n // Обработка ошибок верификации\n if ((errorData?.error === 'VALIDATION_ERROR' || errorData?.errors) && errorData?.errors) {\n // Собираем все сообщения об ошибках в одну строку\n const errorMessages = [];\n for (const field in errorData.errors) {\n const fieldErrors = errorData.errors[field];\n if (Array.isArray(fieldErrors)) {\n errorMessages.push(...fieldErrors);\n } else if (typeof fieldErrors === 'string') {\n errorMessages.push(fieldErrors);\n }\n }\n state.error.message = errorMessages.join(', ') || errorData.message || 'Validation error';\n } else if (error && errorData.errorCode) {\n // state.error.message = i18n.global.t(`errors.${errorData.errorCode}`);\n state.error.message = errorData.errorCode;\n } else {\n state.error.message = errorData.message || error.message || 'Unknown error';\n }\n\n state.error.show = true;\n\n if (typeof window !== 'undefined' && window.requestAnimationFrame) {\n requestAnimationFrame(() => {\n setTimeout(() => (state.error.show = false), 5000);\n });\n } else {\n setTimeout(() => (state.error.show = false), 5000);\n }\n}\n\nexport function setSnack(data) {\n const state = useStore().core.state;\n\n // Handle different input formats\n let type = 'notification'\n let message = ''\n let duration = 3000\n\n if (typeof data === 'string') {\n message = data\n } else if (data instanceof Error) {\n type = 'error'\n message = data.message\n } else if (data?.response?.data) {\n // Handle API errors\n type = 'error'\n const errorData = data.response.data\n message = errorData.errorCode || errorData.message || 'Unknown error'\n } else if (typeof data === 'object') {\n type = data.type || 'notification'\n message = data.message || ''\n duration = data.duration || 3000\n }\n\n // Update state\n state.snack = {\n show: true,\n type,\n message,\n duration\n }\n\n // Auto-hide\n if (typeof window !== 'undefined' && window.requestAnimationFrame) {\n requestAnimationFrame(() => {\n setTimeout(() => {state.snack.show = false }, duration)\n });\n } else {\n setTimeout(() => {state.snack.show = false }, duration)\n }\n}\n\n// ============================================================================\n// GLOBAL STORE FACTORY\n// ============================================================================\n\n// Фабрика для создания store\nexport function createStore() {\n // State создается для каждого store instance (изоляция SSR)\n const state = reactive({\n loading: false,\n notFound: false,\n\n isOpenLocationPopup: false,\n isOpenSidebar: false,\n\n position: null,\n search: null,\n\n theme: {\n mode: 'system', // 'light' | 'dark' | 'system'\n },\n\n navigation_bar: {\n name: null,\n actions: null,\n },\n\n error: {\n status: '',\n headers: '',\n data: '',\n show: false,\n name: '',\n message: '',\n },\n snack: {\n show: false,\n type: 'notification',\n message: '',\n duration: 3000\n },\n\n // Session state - данные сессии хранятся здесь\n session: {\n token: null,\n userId: null,\n roles: null,\n accesses: []\n },\n });\n\n // Actions с closure на локальный state\n const actions = {\n setLoading(status) {\n state.loading = status;\n },\n\n // Theme: 'light' | 'dark' | 'system'\n async setTheme(mode) {\n state.theme.mode = mode;\n\n // Cookie/Preferences ТОЛЬКО для явного выбора light/dark\n // system — не сохраняем, пусть работает CSS media query\n if (mode === 'light' || mode === 'dark') {\n if (typeof document !== 'undefined') {\n document.cookie = `theme=${mode}; path=/; max-age=31536000; SameSite=Lax`;\n }\n await Preferences.set({ key: 'theme', value: mode });\n } else {\n // system — удаляем cookie чтобы SSR не фиксировал тему\n if (typeof document !== 'undefined') {\n document.cookie = `theme=; path=/; max-age=0`;\n }\n await Preferences.remove({ key: 'theme' });\n }\n\n const root = document.documentElement;\n\n // Убираем старые атрибуты\n root.classList.remove('dark-theme', 'light-theme');\n root.removeAttribute('data-theme');\n\n if (mode === 'dark') {\n root.classList.add('dark-theme');\n root.setAttribute('data-theme', 'dark');\n root.setAttribute('color-scheme', 'dark');\n } else if (mode === 'light') {\n root.classList.add('light-theme');\n root.setAttribute('data-theme', 'light');\n root.setAttribute('color-scheme', 'light');\n } else {\n // system - без классов, CSS media query сработает\n root.setAttribute('color-scheme', 'light dark');\n }\n\n },\n\n toggleTheme() {\n // Прямое переключение между light и dark\n const isDark = state.theme.mode === 'dark' ||\n (state.theme.mode === 'system' && typeof window !== 'undefined' &&\n window.matchMedia('(prefers-color-scheme: dark)').matches);\n this.setTheme(isDark ? 'light' : 'dark');\n },\n\n add(array, item) {\n const existingItemIndex = array.findIndex(i => i._id === item._id);\n\n if (existingItemIndex === -1) {\n array.push(item);\n } else {\n array[existingItemIndex] = item;\n }\n },\n\n update(array, item) {\n const existingItemIndex = array.findIndex(i => i._id === item._id);\n if (existingItemIndex === -1) {\n // If the item doesn't exist, push it to the array\n array.push(item);\n } else {\n // Update the item in the array without creating a new array\n Object.assign(array[existingItemIndex], item);\n }\n },\n\n delete(array, item) {\n const existingItemIndex = array.findIndex(c => c._id === item._id);\n\n if (existingItemIndex !== -1) {\n array.splice(existingItemIndex, 1);\n }\n },\n\n increment(array, item) {\n console.log(array);\n console.log(item);\n const arrayItem = array.find(i => i._id === item._id);\n\n if (arrayItem) {\n arrayItem.quantity++;\n }\n },\n\n decrement(array, item) {\n const arrayItem = array.find(i => i._id === item._id);\n\n const arrayItemIndex = array.indexOf(arrayItem);\n\n if (arrayItemIndex > -1) {\n arrayItem.quantity--;\n\n if (arrayItem.quantity < 1) array.splice(arrayItemIndex, 1);\n }\n },\n\n reset(array) {\n array = [];\n },\n };\n\n // SessionManager создается внутри createStore для правильной изоляции в SSR\n const sessionManager = new SessionManager(state.session);\n\n const store = reactive({\n modules: [],\n\n // Core module registered by default\n core: { state, actions, session: sessionManager },\n\n addStore(name, storage) {\n this[name] = storage;\n this.modules.push(name);\n },\n\n async getInitialState() {\n const initialState = {};\n for (const [moduleName, moduleStore] of Object.entries(this)) {\n if (moduleName !== 'modules' && moduleName !== 'addStore' && moduleName !== 'getInitialState' && moduleName !== 'setInitialState') {\n if (moduleStore.state) {\n initialState[moduleName] = JSON.parse(JSON.stringify(moduleStore.state));\n }\n }\n }\n return initialState;\n },\n\n async setInitialState(initialState, isHydration = false) {\n const modules = Object.entries(initialState);\n\n for (const [moduleName, moduleState] of modules) {\n if (this[moduleName] && this[moduleName].state) {\n // При гидратации просто заменяем state целиком для скорости\n if (isHydration) {\n Object.assign(this[moduleName].state, moduleState);\n } else {\n mergeReactive(this[moduleName].state, moduleState);\n }\n }\n }\n }\n });\n\n function mergeReactive(target, source) {\n // Оптимизированная версия слияния\n const keys = Object.keys(source);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const sourceValue = source[key];\n\n if (sourceValue !== null && typeof sourceValue === 'object' && !Array.isArray(sourceValue)) {\n if (isReactive(target[key])) {\n mergeReactive(target[key], sourceValue);\n } else {\n target[key] = sourceValue;\n }\n } else {\n target[key] = sourceValue;\n }\n }\n }\n\n return store;\n}\n\n// ============================================================================\n// SSR AND SINGLETON\n// ============================================================================\n\n// Синглтон для клиента\nlet clientStore = null;\n\n// AsyncLocalStorage для SSR (изоляция per-request)\nexport async function setSSRStore(store) {\n if (typeof window === 'undefined') {\n const als = await getAsyncLocalStorage();\n als?.enterWith(store);\n }\n}\n\nexport async function clearSSRStore() {\n if (typeof window === 'undefined') {\n const als = await getAsyncLocalStorage();\n als?.enterWith(null);\n }\n}\n\nexport function useStore() {\n if (typeof window === 'undefined') {\n // SSR: используем store из AsyncLocalStorage (может быть null если не инициализирован)\n const store = asyncLocalStorage?.getStore();\n if (store) {\n return store;\n }\n // Fallback для обратной совместимости\n console.warn('[WARN] SSR store not in AsyncLocalStorage, creating new store instance');\n return createStore();\n }\n // Client: синглтон\n if (!clientStore) {\n clientStore = createStore();\n }\n return clientStore;\n}\n\n// ============================================================================\n// SESSION ACCESSOR\n// ============================================================================\n\n/**\n * Получить текущий экземпляр SessionManager\n * Использовать вместо прямого импорта session для правильной работы с SSR\n */\nexport function useSession() {\n const store = useStore();\n return store.core.session;\n}\n\n// ============================================================================\n// EXPORTS\n// ============================================================================\n\n// Не экспортируем singleton state/actions - теперь используется useStore()\nexport default useStore();\n"],"names":[],"mappings":"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"}
|
|
@@ -178,11 +178,12 @@ async function render({ url, cookies, headers, ssrContext, createApp }) {
|
|
|
178
178
|
performance.measure("loading-26-total", "loading-26-start", "loading-28-end");
|
|
179
179
|
const measure26Total = performance.getEntriesByName("loading-26-total")[0];
|
|
180
180
|
console.log(`[LOADING 26] Total SSR render completed in ${measure26Total?.duration?.toFixed(2)}ms`);
|
|
181
|
+
const statusCode = store.core.state.notFound ? 404 : router.currentRoute?.value?.name?.toLowerCase() === "notfound" ? 404 : 200;
|
|
181
182
|
return {
|
|
182
183
|
html,
|
|
183
184
|
meta: payload,
|
|
184
185
|
state: initialState,
|
|
185
|
-
statusCode
|
|
186
|
+
statusCode,
|
|
186
187
|
usedModules: Array.from(ctx.modules || /* @__PURE__ */ new Set())
|
|
187
188
|
// Return used modules
|
|
188
189
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vue-app-renderer.js","sources":["../../../../../../../src/modules/core/views/utils/vue-app-renderer.js"],"sourcesContent":["import { setAuthToken } from '@martyrs/src/modules/core/views/utils/axios-instance.js';\nimport { renderSSRHead } from '@unhead/ssr';\nimport { renderToString } from '@vue/server-renderer';\n\nexport function renderAndMountApp({ createApp, hooks = {} }) {\n const start = async () => {\n // [LOADING 22] Starting client-side hydration\n performance.mark('loading-22-start');\n console.log('[LOADING 22] Starting client-side hydration...');\n\n const { app, router, store, moduleManager, config } = await createApp();\n \n let serverModules = [];\n \n // Загружаем модули которые были загружены на сервере\n if (typeof window !== 'undefined') {\n try {\n const modulesElement = document.querySelector('[data-loaded-modules]');\n if (modulesElement) {\n serverModules = JSON.parse(modulesElement.innerHTML);\n }\n } catch (e) {\n console.error('Failed to parse loaded modules', e);\n }\n \n const context = { app, store, router, config };\n\n // [LOADING 23] Loading server modules for hydration\n performance.mark('loading-23-start');\n console.log(`[LOADING 23] Loading ${serverModules.length} server modules for hydration...`);\n\n for (const moduleName of serverModules) {\n try {\n await moduleManager.load(moduleName, context);\n await moduleManager.initialize(moduleName, context);\n } catch (error) {\n console.error(`Failed to load module ${moduleName}:`, error);\n }\n }\n\n performance.mark('loading-23-end');\n performance.measure('loading-23', 'loading-23-start', 'loading-23-end');\n const measure23 = performance.getEntriesByName('loading-23')[0];\n console.log(`[LOADING 23] Server modules loaded in ${measure23?.duration?.toFixed(2)}ms`);\n }\n \n // Call beforeHydration hook if provided\n if (hooks.beforeHydration) {\n hooks.beforeHydration({ app, router, store, moduleManager });\n }\n\n // [LOADING 24] Parsing and applying initialState\n performance.mark('loading-24-start');\n console.log('[LOADING 24] Parsing and applying initialState...');\n\n let initialState;\n\n try {\n const initialStateElement = document.querySelector('[data-state]');\n\n if (initialStateElement && initialStateElement.innerHTML.trim() !== '') {\n const stateContent = initialStateElement.innerHTML.trim();\n \n // Validate JSON format before parsing\n if (stateContent.startsWith('{') && stateContent.endsWith('}')) {\n initialState = JSON.parse(stateContent);\n \n // Basic validation of state structure\n if (typeof initialState !== 'object' || initialState === null) {\n throw new Error('Invalid state format');\n }\n } else {\n throw new Error('Invalid JSON format');\n }\n }\n } catch (error) {\n console.error('Failed to parse user state', error);\n initialState = null;\n }\n\n if (initialState) {\n console.log('[AUTH COOKIE DEBUG] Browser initialState.auth:', initialState.auth);\n console.log('[AUTH COOKIE DEBUG] Has token?', !!initialState?.auth?.access?.token);\n console.log('[AUTH COOKIE DEBUG] Has auth but no status?', !!initialState?.auth && !initialState.auth.access?.status);\n\n // Применяем начальное состояние ко всем модулям (true = гидратация)\n store.setInitialState(initialState, true);\n\n // Гидратация session из auth данных — напрямую в reactive state\n if (initialState?.auth?.user?._id && store.core?.state?.session) {\n store.core.state.session.userId = initialState.auth.user._id;\n store.core.state.session.token = initialState.auth.access?.token;\n store.core.state.session.roles = initialState.auth.access?.roles;\n store.core.state.session.accesses = initialState.auth.accesses || [];\n console.log('[AUTH COOKIE DEBUG] Session hydrated with userId:', initialState.auth.user._id);\n }\n\n if (initialState?.auth?.access?.token) {\n console.log('[AUTH COOKIE DEBUG] Setting auth token from initialState');\n\n setAuthToken(initialState.auth.access.token);\n } else if (initialState?.auth && !initialState.auth.access?.status) {\n // Если SSR сбросил auth (из-за ошибки), удаляем куку в браузере\n console.log('[AUTH COOKIE DEBUG] SSR reset auth, removing cookie in browser');\n if (store.auth && store.auth.removeCookie) {\n await store.auth.removeCookie('user');\n }\n }\n } else {\n // Если нет initialState, сбрасываем авторизацию (если модуль auth загружен)\n if (store.auth && store.auth.actions) {\n store.auth.actions.resetState();\n // await store.auth.removeCookie('user');\n await store.auth.actions.logout();\n }\n }\n\n const savedPosition = localStorage.getItem('position');\n\n if (savedPosition) {\n store.core.state.position = JSON.parse(savedPosition);\n }\n\n // app.config.globalProperties.$i18n.locale = router.currentRoute.value.params.locale\n // app.config.globalProperties.$i18n.locale = router.currentRoute.value.params.locale\n // If user browser locae supported then change locale\n // if (i18n.global.availableLocales.includes(browserLocale)) {\n // app.config.globalProperties.$i18n.locale = browserLocale;\n // }\n\n performance.mark('loading-24-end');\n performance.measure('loading-24', 'loading-24-start', 'loading-24-end');\n const measure24 = performance.getEntriesByName('loading-24')[0];\n console.log(`[LOADING 24] InitialState parsed and applied in ${measure24?.duration?.toFixed(2)}ms`);\n\n await router.isReady();\n\n // [LOADING 25] Mounting the application\n performance.mark('loading-25-start');\n console.log('[LOADING 25] Mounting the application...');\n\n app.mount('#app');\n\n performance.mark('loading-25-end');\n performance.measure('loading-25', 'loading-25-start', 'loading-25-end');\n const measure25 = performance.getEntriesByName('loading-25')[0];\n console.log(`[LOADING 25] Application mounted in ${measure25?.duration?.toFixed(2)}ms`);\n\n // Return the objects for further use\n return { app, router, store, moduleManager };\n };\n return start();\n}\n\nexport async function render({ url, cookies, headers, ssrContext, createApp }) {\n // [LOADING 26] SSR render starting\n performance.mark('loading-26-start');\n console.log('[LOADING 26] SSR render starting...');\n\n const { app, router, store, meta } = createApp();\n\n await router.push(url);\n await router.isReady();\n\n // If user's language is supported, change the locale\n // if (language === 'en' || language === 'ru') {\n // app.config.globalProperties.$i18n.locale = language\n // }\n\n // app.config.globalProperties.$i18n.locale = router.currentRoute.value.params.locale\n\n const ctx = ssrContext || {};\n\n if (router.currentRoute.value.name?.toLowerCase() === 'notfound') {\n ctx.notFound = true;\n }\n\n let user = null;\n\n if (cookies.user) {\n try {\n user = JSON.parse(cookies.user);\n } catch (error) {\n console.error('Failed to parse user cookie', error);\n user = null;\n }\n }\n\n \n\n\n if (user) {\n // [LOADING 27] SSR auth initialization\n performance.mark('loading-27-start');\n console.log('[LOADING 27] SSR auth initialization...');\n\n if (store.auth && store.auth.actions) {\n try {\n await store.auth.actions.initialize(user);\n } catch (error) {\n console.error('[SSR] Auth initialization failed, continuing without auth:', error);\n // Сбрасываем состояние если инициализация упала\n if (store.auth.actions.resetState) {\n store.auth.actions.resetState();\n }\n }\n } else {\n console.warn('[SSR] Auth module not loaded, cannot initialize user');\n }\n\n performance.mark('loading-27-end');\n performance.measure('loading-27', 'loading-27-start', 'loading-27-end');\n const measure27 = performance.getEntriesByName('loading-27')[0];\n console.log(`[LOADING 27] SSR auth initialized in ${measure27?.duration?.toFixed(2)}ms`);\n } else {\n if (store.auth && store.auth.actions) {\n store.auth.actions.resetState();\n } else {\n console.warn('[SSR] Auth module not loaded, cannot reset state');\n }\n }\n\n // [LOADING 28] SSR renderToString\n performance.mark('loading-28-start');\n console.log('[LOADING 28] SSR renderToString starting...');\n\n // After render, ctx.modules will be populated with used module identifiers\n const html = await renderToString(app, ctx);\n\n // Добавляем атрибуты темы через meta API перед renderSSRHead\n let theme = cookies?.theme;\n if (!theme) {\n // Fallback на sec-ch-prefers-color-scheme если нет cookie\n const prefersColorScheme = headers?.['sec-ch-prefers-color-scheme'];\n theme = prefersColorScheme === 'dark' ? 'system-dark' : 'system';\n }\n\n const themeAttrs = {};\n if (theme === 'dark') {\n themeAttrs.class = 'dark-theme';\n themeAttrs['data-theme'] = 'dark';\n themeAttrs['color-scheme'] = 'dark';\n } else if (theme === 'light') {\n themeAttrs.class = 'light-theme';\n themeAttrs['data-theme'] = 'light';\n themeAttrs['color-scheme'] = 'light';\n } else {\n // system/system-dark - без класса, CSS media query сработает\n themeAttrs['color-scheme'] = 'light dark';\n }\n\n meta.push({ htmlAttrs: themeAttrs });\n\n // Синхронизируем store state с определённой темой для SSR\n store.core.state.theme.mode = (theme === 'dark') ? 'dark'\n : (theme === 'light') ? 'light'\n : 'system';\n\n const payload = await renderSSRHead(meta, {});\n const initialState = await store.getInitialState();\n\n performance.mark('loading-28-end');\n performance.measure('loading-28', 'loading-28-start', 'loading-28-end');\n const measure28 = performance.getEntriesByName('loading-28')[0];\n console.log(`[LOADING 28] SSR renderToString completed in ${measure28?.duration?.toFixed(2)}ms`);\n\n // Total SSR render time\n performance.measure('loading-26-total', 'loading-26-start', 'loading-28-end');\n const measure26Total = performance.getEntriesByName('loading-26-total')[0];\n console.log(`[LOADING 26] Total SSR render completed in ${measure26Total?.duration?.toFixed(2)}ms`);\n\n return {\n html,\n meta: payload,\n state: initialState,\n statusCode: router.currentRoute?.value?.name?.toLowerCase() === 'notfound' ? 404 : 200,\n usedModules: Array.from(ctx.modules || new Set()), // Return used modules\n };\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vue-app-renderer.js","sources":["../../../../../../../src/modules/core/views/utils/vue-app-renderer.js"],"sourcesContent":["import { setAuthToken } from '@martyrs/src/modules/core/views/utils/axios-instance.js';\nimport { renderSSRHead } from '@unhead/ssr';\nimport { renderToString } from '@vue/server-renderer';\n\nexport function renderAndMountApp({ createApp, hooks = {} }) {\n const start = async () => {\n // [LOADING 22] Starting client-side hydration\n performance.mark('loading-22-start');\n console.log('[LOADING 22] Starting client-side hydration...');\n\n const { app, router, store, moduleManager, config } = await createApp();\n \n let serverModules = [];\n \n // Загружаем модули которые были загружены на сервере\n if (typeof window !== 'undefined') {\n try {\n const modulesElement = document.querySelector('[data-loaded-modules]');\n if (modulesElement) {\n serverModules = JSON.parse(modulesElement.innerHTML);\n }\n } catch (e) {\n console.error('Failed to parse loaded modules', e);\n }\n \n const context = { app, store, router, config };\n\n // [LOADING 23] Loading server modules for hydration\n performance.mark('loading-23-start');\n console.log(`[LOADING 23] Loading ${serverModules.length} server modules for hydration...`);\n\n for (const moduleName of serverModules) {\n try {\n await moduleManager.load(moduleName, context);\n await moduleManager.initialize(moduleName, context);\n } catch (error) {\n console.error(`Failed to load module ${moduleName}:`, error);\n }\n }\n\n performance.mark('loading-23-end');\n performance.measure('loading-23', 'loading-23-start', 'loading-23-end');\n const measure23 = performance.getEntriesByName('loading-23')[0];\n console.log(`[LOADING 23] Server modules loaded in ${measure23?.duration?.toFixed(2)}ms`);\n }\n \n // Call beforeHydration hook if provided\n if (hooks.beforeHydration) {\n hooks.beforeHydration({ app, router, store, moduleManager });\n }\n\n // [LOADING 24] Parsing and applying initialState\n performance.mark('loading-24-start');\n console.log('[LOADING 24] Parsing and applying initialState...');\n\n let initialState;\n\n try {\n const initialStateElement = document.querySelector('[data-state]');\n\n if (initialStateElement && initialStateElement.innerHTML.trim() !== '') {\n const stateContent = initialStateElement.innerHTML.trim();\n \n // Validate JSON format before parsing\n if (stateContent.startsWith('{') && stateContent.endsWith('}')) {\n initialState = JSON.parse(stateContent);\n \n // Basic validation of state structure\n if (typeof initialState !== 'object' || initialState === null) {\n throw new Error('Invalid state format');\n }\n } else {\n throw new Error('Invalid JSON format');\n }\n }\n } catch (error) {\n console.error('Failed to parse user state', error);\n initialState = null;\n }\n\n if (initialState) {\n console.log('[AUTH COOKIE DEBUG] Browser initialState.auth:', initialState.auth);\n console.log('[AUTH COOKIE DEBUG] Has token?', !!initialState?.auth?.access?.token);\n console.log('[AUTH COOKIE DEBUG] Has auth but no status?', !!initialState?.auth && !initialState.auth.access?.status);\n\n // Применяем начальное состояние ко всем модулям (true = гидратация)\n store.setInitialState(initialState, true);\n\n // Гидратация session из auth данных — напрямую в reactive state\n if (initialState?.auth?.user?._id && store.core?.state?.session) {\n store.core.state.session.userId = initialState.auth.user._id;\n store.core.state.session.token = initialState.auth.access?.token;\n store.core.state.session.roles = initialState.auth.access?.roles;\n store.core.state.session.accesses = initialState.auth.accesses || [];\n console.log('[AUTH COOKIE DEBUG] Session hydrated with userId:', initialState.auth.user._id);\n }\n\n if (initialState?.auth?.access?.token) {\n console.log('[AUTH COOKIE DEBUG] Setting auth token from initialState');\n\n setAuthToken(initialState.auth.access.token);\n } else if (initialState?.auth && !initialState.auth.access?.status) {\n // Если SSR сбросил auth (из-за ошибки), удаляем куку в браузере\n console.log('[AUTH COOKIE DEBUG] SSR reset auth, removing cookie in browser');\n if (store.auth && store.auth.removeCookie) {\n await store.auth.removeCookie('user');\n }\n }\n } else {\n // Если нет initialState, сбрасываем авторизацию (если модуль auth загружен)\n if (store.auth && store.auth.actions) {\n store.auth.actions.resetState();\n // await store.auth.removeCookie('user');\n await store.auth.actions.logout();\n }\n }\n\n const savedPosition = localStorage.getItem('position');\n\n if (savedPosition) {\n store.core.state.position = JSON.parse(savedPosition);\n }\n\n // app.config.globalProperties.$i18n.locale = router.currentRoute.value.params.locale\n // app.config.globalProperties.$i18n.locale = router.currentRoute.value.params.locale\n // If user browser locae supported then change locale\n // if (i18n.global.availableLocales.includes(browserLocale)) {\n // app.config.globalProperties.$i18n.locale = browserLocale;\n // }\n\n performance.mark('loading-24-end');\n performance.measure('loading-24', 'loading-24-start', 'loading-24-end');\n const measure24 = performance.getEntriesByName('loading-24')[0];\n console.log(`[LOADING 24] InitialState parsed and applied in ${measure24?.duration?.toFixed(2)}ms`);\n\n await router.isReady();\n\n // [LOADING 25] Mounting the application\n performance.mark('loading-25-start');\n console.log('[LOADING 25] Mounting the application...');\n\n app.mount('#app');\n\n performance.mark('loading-25-end');\n performance.measure('loading-25', 'loading-25-start', 'loading-25-end');\n const measure25 = performance.getEntriesByName('loading-25')[0];\n console.log(`[LOADING 25] Application mounted in ${measure25?.duration?.toFixed(2)}ms`);\n\n // Return the objects for further use\n return { app, router, store, moduleManager };\n };\n return start();\n}\n\nexport async function render({ url, cookies, headers, ssrContext, createApp }) {\n // [LOADING 26] SSR render starting\n performance.mark('loading-26-start');\n console.log('[LOADING 26] SSR render starting...');\n\n const { app, router, store, meta } = createApp();\n\n await router.push(url);\n await router.isReady();\n\n // If user's language is supported, change the locale\n // if (language === 'en' || language === 'ru') {\n // app.config.globalProperties.$i18n.locale = language\n // }\n\n // app.config.globalProperties.$i18n.locale = router.currentRoute.value.params.locale\n\n const ctx = ssrContext || {};\n\n if (router.currentRoute.value.name?.toLowerCase() === 'notfound') {\n ctx.notFound = true;\n }\n\n let user = null;\n\n if (cookies.user) {\n try {\n user = JSON.parse(cookies.user);\n } catch (error) {\n console.error('Failed to parse user cookie', error);\n user = null;\n }\n }\n\n \n\n\n if (user) {\n // [LOADING 27] SSR auth initialization\n performance.mark('loading-27-start');\n console.log('[LOADING 27] SSR auth initialization...');\n\n if (store.auth && store.auth.actions) {\n try {\n await store.auth.actions.initialize(user);\n } catch (error) {\n console.error('[SSR] Auth initialization failed, continuing without auth:', error);\n // Сбрасываем состояние если инициализация упала\n if (store.auth.actions.resetState) {\n store.auth.actions.resetState();\n }\n }\n } else {\n console.warn('[SSR] Auth module not loaded, cannot initialize user');\n }\n\n performance.mark('loading-27-end');\n performance.measure('loading-27', 'loading-27-start', 'loading-27-end');\n const measure27 = performance.getEntriesByName('loading-27')[0];\n console.log(`[LOADING 27] SSR auth initialized in ${measure27?.duration?.toFixed(2)}ms`);\n } else {\n if (store.auth && store.auth.actions) {\n store.auth.actions.resetState();\n } else {\n console.warn('[SSR] Auth module not loaded, cannot reset state');\n }\n }\n\n // [LOADING 28] SSR renderToString\n performance.mark('loading-28-start');\n console.log('[LOADING 28] SSR renderToString starting...');\n\n // After render, ctx.modules will be populated with used module identifiers\n const html = await renderToString(app, ctx);\n\n // Добавляем атрибуты темы через meta API перед renderSSRHead\n let theme = cookies?.theme;\n if (!theme) {\n // Fallback на sec-ch-prefers-color-scheme если нет cookie\n const prefersColorScheme = headers?.['sec-ch-prefers-color-scheme'];\n theme = prefersColorScheme === 'dark' ? 'system-dark' : 'system';\n }\n\n const themeAttrs = {};\n if (theme === 'dark') {\n themeAttrs.class = 'dark-theme';\n themeAttrs['data-theme'] = 'dark';\n themeAttrs['color-scheme'] = 'dark';\n } else if (theme === 'light') {\n themeAttrs.class = 'light-theme';\n themeAttrs['data-theme'] = 'light';\n themeAttrs['color-scheme'] = 'light';\n } else {\n // system/system-dark - без класса, CSS media query сработает\n themeAttrs['color-scheme'] = 'light dark';\n }\n\n meta.push({ htmlAttrs: themeAttrs });\n\n // Синхронизируем store state с определённой темой для SSR\n store.core.state.theme.mode = (theme === 'dark') ? 'dark'\n : (theme === 'light') ? 'light'\n : 'system';\n\n const payload = await renderSSRHead(meta, {});\n const initialState = await store.getInitialState();\n\n performance.mark('loading-28-end');\n performance.measure('loading-28', 'loading-28-start', 'loading-28-end');\n const measure28 = performance.getEntriesByName('loading-28')[0];\n console.log(`[LOADING 28] SSR renderToString completed in ${measure28?.duration?.toFixed(2)}ms`);\n\n // Total SSR render time\n performance.measure('loading-26-total', 'loading-26-start', 'loading-28-end');\n const measure26Total = performance.getEntriesByName('loading-26-total')[0];\n console.log(`[LOADING 26] Total SSR render completed in ${measure26Total?.duration?.toFixed(2)}ms`);\n\n // Определяем HTTP статус код:\n // 1. Если store.core.state.notFound === true - 404\n // 2. Если роут называется 'notfound' - 404\n // 3. Иначе - 200\n const statusCode = store.core.state.notFound\n ? 404\n : (router.currentRoute?.value?.name?.toLowerCase() === 'notfound' ? 404 : 200);\n\n return {\n html,\n meta: payload,\n state: initialState,\n statusCode,\n usedModules: Array.from(ctx.modules || new Set()), // Return used modules\n };\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@ import "axios";
|
|
|
13
13
|
/* empty css */
|
|
14
14
|
import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
|
|
15
15
|
/* empty css */
|
|
16
|
-
/* empty css
|
|
16
|
+
/* empty css */
|
|
17
17
|
import _sfc_main$8 from "../../../../components/Feed/Feed.vue.js";
|
|
18
18
|
import _sfc_main$a from "../../../../components/Button/Button.vue2.js";
|
|
19
19
|
import _sfc_main$7 from "../../../core/views/components/blocks/Card.vue.js";
|
|
@@ -20,6 +20,7 @@ import SkeletonEvent from "../../../icons/skeletons/SkeletonEvent.vue.js";
|
|
|
20
20
|
/* empty css */
|
|
21
21
|
/* empty css */
|
|
22
22
|
/* empty css */
|
|
23
|
+
/* empty css */
|
|
23
24
|
/* empty css */
|
|
24
25
|
import ButtonJoin from "../elements/ButtonJoin.vue.js";
|
|
25
26
|
import _sfc_main$5 from "../../../community/components/sections/Comments.vue.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Event.vue.js","sources":["../../../../../../../src/modules/events/components/pages/Event.vue"],"sourcesContent":["<template>\n <section id=\"eventPage\">\n <TransitionGroup tag=\"ul\" name=\"fade\" class=\"bg-light\">\n <SkeletonEvent\n v-if=\"isLoading\"\n v-for=\"i in 3\" :key=\"i\"\n />\n\n <HeroEvent\n v-if=\"!isLoading && event &&event.cover\"\n :content=\"{\n title: event.name,\n ticketLinkStripe: event.ticketLinkStripe,\n cover: event.cover,\n subtitle: event.subtitle,\n }\"\n :options=\"{\n date: event.date.start,\n }\"\n class=\"o-hidden\"\n />\n\n <div class=\"cols-[2fr_1fr] mobile:cols-1 gap-small bg-white t-black pd-t-zero mobile:pd-small pd-extra\" v-if=\"!isLoading && event\"> \n \n <div class=\"bg-light mobile:pd-medium pd-big radius-big\">\n\n <h1 class=\"z-index-1 mn-b-semi\">\n {{event?.name}}\n </h1>\n\n <div class=\"flex flex-wrap gap-micro fw-medium p-medium mn-b-semi justify-start align-center\">\n <span v-if=\"event.date?.start\" class=\"mn-r-nano d-inline-block w-max pd-b-micro pd-t-micro pd-r-thin pd-l-thin radius-small fw-medium bg-white\">\n <IconDate :fill=\"'rgb(var(--black))'\" class=\"w-1r h-auto\"/>\n {{formatDate(event.date.start, locale)}}\n </span>\n\n\n <span\n v-for=\"(chip, index) in event.tags\"\n :key=\"index\"\n class=\"d-inline-flex pd-b-micro pd-t-micro pd-r-thin pd-l-thin radius-small bg-main\"\n >\n {{ chip }}\n </span>\n </div>\n\n <p class=\"z-index-1 p-medium mn-b-semi\">\n {{event?.description}}\n </p>\n\n <hr v-if=\"event?.content?.length > 0\" class=\"bg-black-transp-10 mn-b-semi mn-t-semi d-block\">\n\n <Viewer\n v-if=\"event && event.content\"\n :content=\"event.content\"\n :notitle=\"true\"\n />\n\n </div>\n\n <div class=\"\">\n \n <div class=\"radius-semi pd-medium bg-light mn-b-thin\">\n\n <div class=\"mn-b-small flex-nowrap flex-v-center flex pos-relative\">\n <h4 class=\"mn-r-auto\">Tickets</h4>\n <PhotoStack\n :number=\"event.numberOfTickets\"\n :photos=\"event.participantsPhotos\" \n />\n </div>\n <div v-if=\"event?.ticketsTypes?.length > 0\" v-for=\"ticketType in event.ticketsTypes\" class=\"pd-medium w-100 radius-medium bg-white mn-b-small\">\n <div class=\"flex-nowrap mn-b-small p-medium flex\">\n <span class=\"mn-r-auto\">{{ticketType.name}}</span>\n <span class=\"fw-medium\">{{ticketType.price}} {{returnCurrency()}}</span>\n </div>\n <a :href=\"ticketType.link\" class=\"d-block t-center pd-l-medium pd-r-medium pd-t-small pd-b-small radius-extra uppercase fw-medium t-white w-100 bg-second \">\n Buy Now\n </a>\n </div>\n\n <ButtonJoin \n v-if=\"auth.state.user._id && !event?.ticketsTypes?.length > 0\"\n :type=\"'event'\" \n :hasTicket=\"event.hasTicket\" \n :targetId=\"event._id\" \n :userId=\"auth.state.user._id\"\n class=\" w-100 pd-medium mn-auto\"\n @updateTicket=\"handleTicketUpdate\"\n />\n\n <p v-if=\"event?.ticketsTypes.length > 0\" class=\"z-index-1 t-transp p-small mn-t-small \">Buy ticket online with special price:</p>\n <Countdown \n v-if=\"event?.date?.start && event?.ticketsTypes?.length > 0\"\n class=\"mn-t-thin radius-medium bg-white w-100\"\n :date=\"event?.date?.start\"\n />\n </div>\n\n\n </div>\n\n <Comments \n v-if=\"!isLoading && event\" \n :type=\"'event'\" \n :target=\"event._id\" \n :owner=\"auth.state.user._id\"\n class=\"bg-light radius-medium mobile:radius-zero pd-medium\"\n />\n\n </div>\n \n </TransitionGroup> \n\n </section>\n</template>\n\n<script setup>\nimport { ref, onMounted } from 'vue';\n\nimport Loader from '@martyrs/src/components/Loader/Loader.vue';\nimport Chips from '@martyrs/src/components/Chips/Chips.vue';\nimport EmptyState from '@martyrs/src/components/EmptyState/EmptyState.vue';\n\nimport Viewer from '@martyrs/src/modules/constructor/components/sections/Viewer.vue';\n\nimport Countdown from \"@martyrs/src/components/Countdown/Countdown.vue\";\n\nimport HeroEvent from '@martyrs/src/modules/events/components/sections/HeroEvent.vue';\n\nimport PhotoStack from \"@martyrs/src/modules/core/views/components/elements/PhotoStack.vue\";\n\nimport { SkeletonEvent, IconDate } from '@martyrs/src/modules/icons/icons.client.js';\n\nimport ButtonJoin from '@martyrs/src/modules/events/components/elements/ButtonJoin.vue';\nimport Comments from '@martyrs/src/modules/community/components/sections/Comments.vue';\n\nimport Image from '@martyrs/src/modules/constructor/components/elements/Image.vue';\nimport User from '@martyrs/src/modules/auth/views/components/blocks/CardUser.vue';\n\nimport * as events from '@martyrs/src/modules/events/store/events.js';\nimport * as tickets from '@martyrs/src/modules/events/store/tickets.js';\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\n\nimport { useRoute } from 'vue-router';\nimport { useI18n } from 'vue-i18n';\nimport { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js';\n\nconst route = useRoute();\nconst { locale } = useI18n();\nconst { returnCurrency, formatDate } = useGlobalMixins();\nconst qrcode = ref(null);\n\nconst handleTicketUpdate = ({ ticket, hasTicket, targetId }) => {\n tickets.mutations.handleTicketUpdate(event.value, ticket, hasTicket, targetId);\n console.log('HANDLE TICKET UPDATE', ticket, event.value);\n qrcode.value = ticket.qrcode;\n};\n\nfunction clickBuyTicket() {\n gtag('event', 'buy_ticket', {\n 'event_category': 'conversion',\n 'event_label': 'Buy Ticket'\n });\n}\n\nconst event = ref(null);\nconst isLoading = ref(true);\n\nonMounted(async () => {\n isLoading.value = true;\n\n const data = await events.read({\n user: auth.state.user._id,\n url: route.params.url\n });\n\n event.value = data[0];\n isLoading.value = false;\n});\n</script>\n\n\n<style>\n #eventPage {\n display: block;\n }\n</style>"],"names":["tickets.mutations","events.read","auth.state"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Event.vue.js","sources":["../../../../../../../src/modules/events/components/pages/Event.vue"],"sourcesContent":["<template>\n <section id=\"eventPage\">\n <TransitionGroup tag=\"ul\" name=\"fade\" class=\"bg-light\">\n <SkeletonEvent\n v-if=\"isLoading\"\n v-for=\"i in 3\" :key=\"i\"\n />\n\n <HeroEvent\n v-if=\"!isLoading && event &&event.cover\"\n :content=\"{\n title: event.name,\n ticketLinkStripe: event.ticketLinkStripe,\n cover: event.cover,\n subtitle: event.subtitle,\n }\"\n :options=\"{\n date: event.date.start,\n }\"\n class=\"o-hidden\"\n />\n\n <div class=\"cols-[2fr_1fr] mobile:cols-1 gap-small bg-white t-black pd-t-zero mobile:pd-small pd-extra\" v-if=\"!isLoading && event\"> \n \n <div class=\"bg-light mobile:pd-medium pd-big radius-big\">\n\n <h1 class=\"z-index-1 mn-b-semi\">\n {{event?.name}}\n </h1>\n\n <div class=\"flex flex-wrap gap-micro fw-medium p-medium mn-b-semi justify-start align-center\">\n <span v-if=\"event.date?.start\" class=\"mn-r-nano d-inline-block w-max pd-b-micro pd-t-micro pd-r-thin pd-l-thin radius-small fw-medium bg-white\">\n <IconDate :fill=\"'rgb(var(--black))'\" class=\"w-1r h-auto\"/>\n {{formatDate(event.date.start, locale)}}\n </span>\n\n\n <span\n v-for=\"(chip, index) in event.tags\"\n :key=\"index\"\n class=\"d-inline-flex pd-b-micro pd-t-micro pd-r-thin pd-l-thin radius-small bg-main\"\n >\n {{ chip }}\n </span>\n </div>\n\n <p class=\"z-index-1 p-medium mn-b-semi\">\n {{event?.description}}\n </p>\n\n <hr v-if=\"event?.content?.length > 0\" class=\"bg-black-transp-10 mn-b-semi mn-t-semi d-block\">\n\n <Viewer\n v-if=\"event && event.content\"\n :content=\"event.content\"\n :notitle=\"true\"\n />\n\n </div>\n\n <div class=\"\">\n \n <div class=\"radius-semi pd-medium bg-light mn-b-thin\">\n\n <div class=\"mn-b-small flex-nowrap flex-v-center flex pos-relative\">\n <h4 class=\"mn-r-auto\">Tickets</h4>\n <PhotoStack\n :number=\"event.numberOfTickets\"\n :photos=\"event.participantsPhotos\" \n />\n </div>\n <div v-if=\"event?.ticketsTypes?.length > 0\" v-for=\"ticketType in event.ticketsTypes\" class=\"pd-medium w-100 radius-medium bg-white mn-b-small\">\n <div class=\"flex-nowrap mn-b-small p-medium flex\">\n <span class=\"mn-r-auto\">{{ticketType.name}}</span>\n <span class=\"fw-medium\">{{ticketType.price}} {{returnCurrency()}}</span>\n </div>\n <a :href=\"ticketType.link\" class=\"d-block t-center pd-l-medium pd-r-medium pd-t-small pd-b-small radius-extra uppercase fw-medium t-white w-100 bg-second \">\n Buy Now\n </a>\n </div>\n\n <ButtonJoin \n v-if=\"auth.state.user._id && !event?.ticketsTypes?.length > 0\"\n :type=\"'event'\" \n :hasTicket=\"event.hasTicket\" \n :targetId=\"event._id\" \n :userId=\"auth.state.user._id\"\n class=\" w-100 pd-medium mn-auto\"\n @updateTicket=\"handleTicketUpdate\"\n />\n\n <p v-if=\"event?.ticketsTypes.length > 0\" class=\"z-index-1 t-transp p-small mn-t-small \">Buy ticket online with special price:</p>\n <Countdown \n v-if=\"event?.date?.start && event?.ticketsTypes?.length > 0\"\n class=\"mn-t-thin radius-medium bg-white w-100\"\n :date=\"event?.date?.start\"\n />\n </div>\n\n\n </div>\n\n <Comments \n v-if=\"!isLoading && event\" \n :type=\"'event'\" \n :target=\"event._id\" \n :owner=\"auth.state.user._id\"\n class=\"bg-light radius-medium mobile:radius-zero pd-medium\"\n />\n\n </div>\n \n </TransitionGroup> \n\n </section>\n</template>\n\n<script setup>\nimport { ref, onMounted } from 'vue';\n\nimport Loader from '@martyrs/src/components/Loader/Loader.vue';\nimport Chips from '@martyrs/src/components/Chips/Chips.vue';\nimport EmptyState from '@martyrs/src/components/EmptyState/EmptyState.vue';\n\nimport Viewer from '@martyrs/src/modules/constructor/components/sections/Viewer.vue';\n\nimport Countdown from \"@martyrs/src/components/Countdown/Countdown.vue\";\n\nimport HeroEvent from '@martyrs/src/modules/events/components/sections/HeroEvent.vue';\n\nimport PhotoStack from \"@martyrs/src/modules/core/views/components/elements/PhotoStack.vue\";\n\nimport { SkeletonEvent, IconDate } from '@martyrs/src/modules/icons/icons.client.js';\n\nimport ButtonJoin from '@martyrs/src/modules/events/components/elements/ButtonJoin.vue';\nimport Comments from '@martyrs/src/modules/community/components/sections/Comments.vue';\n\nimport Image from '@martyrs/src/modules/constructor/components/elements/Image.vue';\nimport User from '@martyrs/src/modules/auth/views/components/blocks/CardUser.vue';\n\nimport * as events from '@martyrs/src/modules/events/store/events.js';\nimport * as tickets from '@martyrs/src/modules/events/store/tickets.js';\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\n\nimport { useRoute } from 'vue-router';\nimport { useI18n } from 'vue-i18n';\nimport { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js';\n\nconst route = useRoute();\nconst { locale } = useI18n();\nconst { returnCurrency, formatDate } = useGlobalMixins();\nconst qrcode = ref(null);\n\nconst handleTicketUpdate = ({ ticket, hasTicket, targetId }) => {\n tickets.mutations.handleTicketUpdate(event.value, ticket, hasTicket, targetId);\n console.log('HANDLE TICKET UPDATE', ticket, event.value);\n qrcode.value = ticket.qrcode;\n};\n\nfunction clickBuyTicket() {\n gtag('event', 'buy_ticket', {\n 'event_category': 'conversion',\n 'event_label': 'Buy Ticket'\n });\n}\n\nconst event = ref(null);\nconst isLoading = ref(true);\n\nonMounted(async () => {\n isLoading.value = true;\n\n const data = await events.read({\n user: auth.state.user._id,\n url: route.params.url\n });\n\n event.value = data[0];\n isLoading.value = false;\n});\n</script>\n\n\n<style>\n #eventPage {\n display: block;\n }\n</style>"],"names":["tickets.mutations","events.read","auth.state"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoJA,UAAM,QAAQ,SAAQ;AACtB,UAAM,EAAE,OAAM,IAAK,QAAO;AAC1B,UAAM,EAAE,gBAAgB,WAAU,IAAK,gBAAe;AACtD,UAAM,SAAS,IAAI,IAAI;AAEvB,UAAM,qBAAqB,CAAC,EAAE,QAAQ,WAAW,SAAQ,MAAO;AAC9DA,gBAAkB,mBAAmB,MAAM,OAAO,QAAQ,WAAW,QAAQ;AAC7E,cAAQ,IAAI,wBAAwB,QAAQ,MAAM,KAAK;AACvD,aAAO,QAAQ,OAAO;AAAA,IACxB;AASA,UAAM,QAAQ,IAAI,IAAI;AACtB,UAAM,YAAY,IAAI,IAAI;AAE1B,cAAU,YAAY;AACnB,gBAAU,QAAQ;AAElB,YAAM,OAAO,MAAMC,KAAY;AAAA,QAC5B,MAAMC,MAAW,KAAK;AAAA,QACtB,KAAK,MAAM,OAAO;AAAA,MACxB,CAAI;AAED,YAAM,QAAQ,KAAK,CAAC;AACpB,gBAAU,QAAQ;AAAA,IACrB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { computed, ref, watch, createElementBlock, openBlock, createElementVNode, createCommentVNode, unref, createBlock, createVNode, isRef, withCtx, Fragment, renderList } from "vue";
|
|
2
2
|
import { useRoute, useRouter } from "vue-router";
|
|
3
|
-
import _sfc_main$1 from "../../../../components/Tab/Tab.
|
|
3
|
+
import _sfc_main$1 from "../../../../components/Tab/Tab.vue2.js";
|
|
4
4
|
import _sfc_main$2 from "../../../../components/Feed/Feed.vue.js";
|
|
5
5
|
/* empty css */
|
|
6
6
|
import _sfc_main$3 from "../blocks/CardEvent.vue.js";
|
|
@@ -12,7 +12,7 @@ import { state } from "../../../auth/views/store/auth.js";
|
|
|
12
12
|
import gallery from "../../store/gallery.js";
|
|
13
13
|
import _sfc_main$3 from "../../../core/views/components/blocks/CardHeader.vue.js";
|
|
14
14
|
import _sfc_main$1 from "../../../core/views/components/sections/SectionPageTitle.vue.js";
|
|
15
|
-
import _sfc_main$6 from "../../../../components/EditImages/EditImages.
|
|
15
|
+
import _sfc_main$6 from "../../../../components/EditImages/EditImages.vue.js";
|
|
16
16
|
import _sfc_main$7 from "../../../../components/FieldTags/BlockTags.vue.js";
|
|
17
17
|
const _hoisted_1 = { class: "cols-1 gap-thin pd-thin" };
|
|
18
18
|
const _hoisted_2 = { class: "pos-relative" };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ref, onMounted, createElementBlock, openBlock, createElementVNode, createCommentVNode, normalizeClass, unref, normalizeStyle, Fragment, renderList, createBlock, withCtx, createTextVNode, toDisplayString, createVNode } from "vue";
|
|
2
2
|
import _imports_0 from "./tonar.png.js";
|
|
3
|
-
import { r as cu } from "../../../../../dist/main-
|
|
3
|
+
import { r as cu } from "../../../../../dist/main-xL-jtBkT.js";
|
|
4
4
|
import _sfc_main$1 from "../../../icons/navigation/IconLike.vue.js";
|
|
5
5
|
import _sfc_main$2 from "../../../icons/entities/IconEvents.vue.js";
|
|
6
6
|
import _sfc_main$3 from "../cards/TrackListCard.vue.js";
|
|
@@ -2,7 +2,7 @@ import { getCurrentInstance, computed, ref, onMounted, createElementBlock, openB
|
|
|
2
2
|
import { useRoute, useRouter } from "vue-router";
|
|
3
3
|
/* empty css */
|
|
4
4
|
import _sfc_main$2 from "../../../../components/Button/Button.vue2.js";
|
|
5
|
-
import _sfc_main$3 from "../../../../components/Tab/Tab.
|
|
5
|
+
import _sfc_main$3 from "../../../../components/Tab/Tab.vue2.js";
|
|
6
6
|
import _sfc_main$4 from "../../../../components/Popup/Popup.vue.js";
|
|
7
7
|
import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
|
|
8
8
|
import _sfc_main$5 from "../../../../components/Feed/Feed.vue.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ref, computed, resolveComponent, createElementBlock, openBlock, createBlock, createCommentVNode, createVNode, unref, withCtx, createElementVNode, toDisplayString, normalizeClass, Fragment, renderList } from "vue";
|
|
2
2
|
import { useRoute } from "vue-router";
|
|
3
|
-
import _sfc_main$3 from "../../../../components/Tab/Tab.
|
|
3
|
+
import _sfc_main$3 from "../../../../components/Tab/Tab.vue2.js";
|
|
4
4
|
import _sfc_main$2 from "../../../../components/Block/Block.vue.js";
|
|
5
5
|
import _sfc_main$4 from "../../../../components/Feed/Feed.vue.js";
|
|
6
6
|
import { state, actions, getters } from "../../store/orders.js";
|
|
@@ -16,11 +16,12 @@ import Field from "../../../../components/Field/Field.vue.js";
|
|
|
16
16
|
/* empty css */
|
|
17
17
|
/* empty css */
|
|
18
18
|
/* empty css */
|
|
19
|
+
/* empty css */
|
|
19
20
|
/* empty css */
|
|
20
21
|
import "vue-i18n";
|
|
21
22
|
/* empty css */
|
|
22
23
|
import _sfc_main$4 from "../../../../components/FieldTags/BlockTags.vue.js";
|
|
23
|
-
/* empty css
|
|
24
|
+
/* empty css */
|
|
24
25
|
/* empty css */
|
|
25
26
|
/* empty css */
|
|
26
27
|
import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrganizationEdit.vue.js","sources":["../../../../../../../src/modules/organizations/components/pages/OrganizationEdit.vue"],"sourcesContent":["<template>\n<div class=\"for-transition pd-thin\">\n \n <h3 class=\"mn-b-small\">Access & Privacy</h3>\n\n <div class=\"d-grid cols-1 tablet:cols-3 gap-regular mn-b-semi\">\n <button\n v-for=\"option in typeOptions\"\n :key=\"option.value\"\n @click=\"organization.state.current.types = [option.value]\"\n :class=\"[\n 'd-flex items-start gap-regular pd-regular radius-semi br-1px t-left transition-timing-2',\n isTypeSelected(option.value)\n ? 'br-main bg-main-transp-10'\n : 'br-light dark:br-dark-thin hover:br-grey bg-white dark:bg-dark'\n ]\"\n >\n <div :class=\"[\n 'pd-thin radius-[50%]',\n isTypeSelected(option.value)\n ? 'bg-main t-white'\n : 'bg-light dark:bg-dark-thin t-grey'\n ]\">\n <component :is=\"option.icon\" class=\"i-medium\" />\n </div>\n <div>\n <div class=\"fw-semi t-black dark:t-white d-flex items-center gap-thin\">\n {{ option.label }}\n <span v-if=\"isTypeSelected(option.value)\" class=\"w-[0.5rem] h-[0.5rem] radius-[50%] bg-main\"></span>\n </div>\n <p class=\"p-small t-grey dark:t-grey-thin mn-t-micro\">{{ option.desc }}</p>\n </div>\n </button>\n </div>\n\n\n <h3 class=\"mn-b-small\">Profile</h3>\n\n <div class=\"mn-b-thin radius-small w-100 h-10r bg-light flex-center flex-column flex\">\n <UploadImage \n v-model:photo=\"organization.state.current.profile.photo\"\n :uploadPath=\"'organizations/' + organization.state.current._id + '/avatars'\"\n class=\"h-4r w-4r aspect-1x1 o-hidden mn-b-thin radius-extra\" \n />\n <h4>Upload photo</h4>\n </div>\n\n <Field \n v-model:field=\"organization.state.current.profile.name\" \n placeholder=\"Name of organization\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n\n <Field \n v-model:field=\"organization.state.current.profile.description\" \n placeholder=\"Brief description of your group\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n <BlockTags\n @tags-changed=\"newTags => organization.state.current.profile.tags = newTags\"\n :tags=\"organization.state.current.profile.tags\"\n class=\"mn-b-small\"\n />\n\n <h3 class=\"mn-b-small\">Contacts</h3>\n <Field \n v-model:field=\"organization.state.current.contacts.email\"\n label=\"Email\" \n placeholder=\"\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n <Field \n v-model:field=\"organization.state.current.contacts.website\"\n label=\"Website\" \n placeholder=\"\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n <Field \n v-model:field=\"organization.state.current.contacts.phone\"\n label=\"Phone\" \n placeholder=\"\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n <Field \n v-model:field=\"organization.state.current.contacts.address\"\n label=\"Address\" \n placeholder=\"\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n\n <h3 class=\"mn-b-small\">Socials</h3>\n <p class=\"mn-b-thin\">Please provide only the username for social media profiles, without full links.</p>\n\n <Field \n v-model:field=\"organization.state.current.socials.instagram\"\n label=\"Instagram\" \n placeholder=\"\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n <Field \n v-model:field=\"organization.state.current.socials.twitter\"\n label=\"Twitter\" \n placeholder=\"\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n <Field \n v-model:field=\"organization.state.current.socials.facebook\"\n label=\"Facebook\" \n placeholder=\"\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n <Field \n v-model:field=\"organization.state.current.socials.telegram\"\n label=\"Telegram\" \n placeholder=\"\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n <Field \n v-model:field=\"organization.state.current.socials.youtube\"\n label=\"Youtube\" \n placeholder=\"\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n \n \n <Button :submit=\"onSubmit\" :callback=\"redirectTo\" class=\"bg-main w-100 mn-b-thin\">Save</Button>\n <!-- <Button :submit=\"onDelete\" :callback=\"redirectDash\" class=\"mn-b-thin bg-fourth\">Delete</Button> -->\n\n</div>\n\n</template>\n\n<script setup>\n import { onMounted, computed } from 'vue';\n\n import { useRoute, useRouter } from 'vue-router';\n\n import { IconGroups, IconLock, IconShow } from '@martyrs/src/modules/icons/icons.client.js'\n import Breadcrumbs from '@martyrs/src/components/Breadcrumbs/Breadcrumbs.vue'\n import BlockTags from '@martyrs/src/components/FieldTags/BlockTags.vue'\n import Tab from '@martyrs/src/components/Tab/Tab.vue';\n import Field from '@martyrs/src/components/Field/Field.vue';\n import Select from '@martyrs/src/components/Select/Select.vue';\n import SelectMulti from '@martyrs/src/components/SelectMulti/SelectMulti.vue'\n import UploadImage from '@martyrs/src/components/UploadImage/UploadImage.vue';\n import Button from '@martyrs/src/components/Button/Button.vue';\n import Popup from '@martyrs/src/components/Popup/Popup.vue';\n\n import * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\n import * as organization from '@martyrs/src/modules/organizations/store/organizations.js';\n import membershipsStore from '@martyrs/src/modules/organizations/store/memberships.store.js';\n\n const route = useRoute()\n const router = useRouter()\n\n organization.actions.reset();\n\n const typeOptions = [\n { value: 'public', label: 'Public', icon: IconGroups, desc: 'Visible to everyone. Anyone can join.' },\n { value: 'exclusive', label: 'Exclusive', icon: IconLock, desc: 'Visible, but membership requires approval.' },\n { value: 'hidden', label: 'Hidden', icon: IconShow, desc: 'Invite only. Hidden from search.' }\n ];\n\n function isTypeSelected(type) {\n return organization.state.current.types?.includes(type);\n }\n\n onMounted(async()=>{\n if (route.params._id) {\n await organization.actions.read({ _id: route.params._id });\n } \n })\n \n const organizationData = computed(() => organization.state.current)\n\n async function onSubmit() {\n if (route.params._id) {\n await organization.actions.update(route.params._id, organizationData.value)\n } else {\n await organization.actions.create(organization.state.current, auth.state.user._id)\n }\n }\n\n async function onDelete() {\n if (route.params._id) {\n await organization.actions.remove(route.params._id)\n router.push('/organizations/' + route.params._id)\n }\n }\n\n function redirectTo () {\n router.replace('/organizations/' + organization.state.current._id);\n }\n</script>"],"names":["organization.actions","IconGroups","IconLock","IconShow","organization.state","auth.state"],"mappings":"
|
|
1
|
+
{"version":3,"file":"OrganizationEdit.vue.js","sources":["../../../../../../../src/modules/organizations/components/pages/OrganizationEdit.vue"],"sourcesContent":["<template>\n<div class=\"for-transition pd-thin\">\n \n <h3 class=\"mn-b-small\">Access & Privacy</h3>\n\n <div class=\"d-grid cols-1 tablet:cols-3 gap-regular mn-b-semi\">\n <button\n v-for=\"option in typeOptions\"\n :key=\"option.value\"\n @click=\"organization.state.current.types = [option.value]\"\n :class=\"[\n 'd-flex items-start gap-regular pd-regular radius-semi br-1px t-left transition-timing-2',\n isTypeSelected(option.value)\n ? 'br-main bg-main-transp-10'\n : 'br-light dark:br-dark-thin hover:br-grey bg-white dark:bg-dark'\n ]\"\n >\n <div :class=\"[\n 'pd-thin radius-[50%]',\n isTypeSelected(option.value)\n ? 'bg-main t-white'\n : 'bg-light dark:bg-dark-thin t-grey'\n ]\">\n <component :is=\"option.icon\" class=\"i-medium\" />\n </div>\n <div>\n <div class=\"fw-semi t-black dark:t-white d-flex items-center gap-thin\">\n {{ option.label }}\n <span v-if=\"isTypeSelected(option.value)\" class=\"w-[0.5rem] h-[0.5rem] radius-[50%] bg-main\"></span>\n </div>\n <p class=\"p-small t-grey dark:t-grey-thin mn-t-micro\">{{ option.desc }}</p>\n </div>\n </button>\n </div>\n\n\n <h3 class=\"mn-b-small\">Profile</h3>\n\n <div class=\"mn-b-thin radius-small w-100 h-10r bg-light flex-center flex-column flex\">\n <UploadImage \n v-model:photo=\"organization.state.current.profile.photo\"\n :uploadPath=\"'organizations/' + organization.state.current._id + '/avatars'\"\n class=\"h-4r w-4r aspect-1x1 o-hidden mn-b-thin radius-extra\" \n />\n <h4>Upload photo</h4>\n </div>\n\n <Field \n v-model:field=\"organization.state.current.profile.name\" \n placeholder=\"Name of organization\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n\n <Field \n v-model:field=\"organization.state.current.profile.description\" \n placeholder=\"Brief description of your group\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n <BlockTags\n @tags-changed=\"newTags => organization.state.current.profile.tags = newTags\"\n :tags=\"organization.state.current.profile.tags\"\n class=\"mn-b-small\"\n />\n\n <h3 class=\"mn-b-small\">Contacts</h3>\n <Field \n v-model:field=\"organization.state.current.contacts.email\"\n label=\"Email\" \n placeholder=\"\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n <Field \n v-model:field=\"organization.state.current.contacts.website\"\n label=\"Website\" \n placeholder=\"\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n <Field \n v-model:field=\"organization.state.current.contacts.phone\"\n label=\"Phone\" \n placeholder=\"\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n <Field \n v-model:field=\"organization.state.current.contacts.address\"\n label=\"Address\" \n placeholder=\"\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n\n <h3 class=\"mn-b-small\">Socials</h3>\n <p class=\"mn-b-thin\">Please provide only the username for social media profiles, without full links.</p>\n\n <Field \n v-model:field=\"organization.state.current.socials.instagram\"\n label=\"Instagram\" \n placeholder=\"\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n <Field \n v-model:field=\"organization.state.current.socials.twitter\"\n label=\"Twitter\" \n placeholder=\"\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n <Field \n v-model:field=\"organization.state.current.socials.facebook\"\n label=\"Facebook\" \n placeholder=\"\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n <Field \n v-model:field=\"organization.state.current.socials.telegram\"\n label=\"Telegram\" \n placeholder=\"\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n <Field \n v-model:field=\"organization.state.current.socials.youtube\"\n label=\"Youtube\" \n placeholder=\"\" \n class=\"mn-b-thin bg-light pd-medium radius-small\" \n />\n \n \n <Button :submit=\"onSubmit\" :callback=\"redirectTo\" class=\"bg-main w-100 mn-b-thin\">Save</Button>\n <!-- <Button :submit=\"onDelete\" :callback=\"redirectDash\" class=\"mn-b-thin bg-fourth\">Delete</Button> -->\n\n</div>\n\n</template>\n\n<script setup>\n import { onMounted, computed } from 'vue';\n\n import { useRoute, useRouter } from 'vue-router';\n\n import { IconGroups, IconLock, IconShow } from '@martyrs/src/modules/icons/icons.client.js'\n import Breadcrumbs from '@martyrs/src/components/Breadcrumbs/Breadcrumbs.vue'\n import BlockTags from '@martyrs/src/components/FieldTags/BlockTags.vue'\n import Tab from '@martyrs/src/components/Tab/Tab.vue';\n import Field from '@martyrs/src/components/Field/Field.vue';\n import Select from '@martyrs/src/components/Select/Select.vue';\n import SelectMulti from '@martyrs/src/components/SelectMulti/SelectMulti.vue'\n import UploadImage from '@martyrs/src/components/UploadImage/UploadImage.vue';\n import Button from '@martyrs/src/components/Button/Button.vue';\n import Popup from '@martyrs/src/components/Popup/Popup.vue';\n\n import * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\n import * as organization from '@martyrs/src/modules/organizations/store/organizations.js';\n import membershipsStore from '@martyrs/src/modules/organizations/store/memberships.store.js';\n\n const route = useRoute()\n const router = useRouter()\n\n organization.actions.reset();\n\n const typeOptions = [\n { value: 'public', label: 'Public', icon: IconGroups, desc: 'Visible to everyone. Anyone can join.' },\n { value: 'exclusive', label: 'Exclusive', icon: IconLock, desc: 'Visible, but membership requires approval.' },\n { value: 'hidden', label: 'Hidden', icon: IconShow, desc: 'Invite only. Hidden from search.' }\n ];\n\n function isTypeSelected(type) {\n return organization.state.current.types?.includes(type);\n }\n\n onMounted(async()=>{\n if (route.params._id) {\n await organization.actions.read({ _id: route.params._id });\n } \n })\n \n const organizationData = computed(() => organization.state.current)\n\n async function onSubmit() {\n if (route.params._id) {\n await organization.actions.update(route.params._id, organizationData.value)\n } else {\n await organization.actions.create(organization.state.current, auth.state.user._id)\n }\n }\n\n async function onDelete() {\n if (route.params._id) {\n await organization.actions.remove(route.params._id)\n router.push('/organizations/' + route.params._id)\n }\n }\n\n function redirectTo () {\n router.replace('/organizations/' + organization.state.current._id);\n }\n</script>"],"names":["organization.actions","IconGroups","IconLock","IconShow","organization.state","auth.state"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwJE,UAAM,QAAQ,SAAQ;AACtB,UAAM,SAAS,UAAS;AAExBA,YAAqB,MAAK;AAE1B,UAAM,cAAc;AAAA,MAClB,EAAE,OAAO,UAAU,OAAO,UAAU,MAAMC,aAAY,MAAM,wCAAuC;AAAA,MACnG,EAAE,OAAO,aAAa,OAAO,aAAa,MAAMC,aAAU,MAAM,6CAA4C;AAAA,MAC5G,EAAE,OAAO,UAAU,OAAO,UAAU,MAAMC,aAAU,MAAM,mCAAkC;AAAA,IAChG;AAEE,aAAS,eAAe,MAAM;AAC5B,aAAOC,MAAmB,QAAQ,OAAO,SAAS,IAAI;AAAA,IACxD;AAEA,cAAU,YAAS;AACjB,UAAI,MAAM,OAAO,KAAK;AACpB,cAAMJ,QAAqB,KAAK,EAAE,KAAK,MAAM,OAAO,KAAK;AAAA,MAC3D;AAAA,IACF,CAAC;AAED,UAAM,mBAAmB,SAAS,MAAMI,MAAmB,OAAO;AAElE,mBAAe,WAAW;AACxB,UAAI,MAAM,OAAO,KAAK;AACpB,cAAMJ,QAAqB,OAAO,MAAM,OAAO,KAAK,iBAAiB,KAAK;AAAA,MAC5E,OAAO;AACL,cAAMA,QAAqB,OAAOI,MAAmB,SAASC,QAAW,KAAK,GAAG;AAAA,MACnF;AAAA,IACF;AASA,aAAS,aAAc;AACrB,aAAO,QAAQ,oBAAoBD,MAAmB,QAAQ,GAAG;AAAA,IACnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ref, watch, createElementBlock, openBlock, createCommentVNode, createVNode, createElementVNode, Transition, withCtx, unref, Fragment, renderList, isMemoSame, createBlock } from "vue";
|
|
2
2
|
import { useRoute, useRouter } from "vue-router";
|
|
3
|
-
import _sfc_main$1 from "../../../../components/Tab/Tab.
|
|
3
|
+
import _sfc_main$1 from "../../../../components/Tab/Tab.vue2.js";
|
|
4
4
|
import _sfc_main$2 from "../../../../components/Feed/Feed.vue.js";
|
|
5
5
|
import { state } from "../../../auth/views/store/auth.js";
|
|
6
6
|
import { actions } from "../../store/organizations.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ref, withAsyncContext, watch, createElementBlock, openBlock, createElementVNode, createBlock, Fragment, renderList, normalizeClass } from "vue";
|
|
2
2
|
import { useRouter, useRoute } from "vue-router";
|
|
3
3
|
import "../../../../../../node_modules/.pnpm/js-cookie@3.0.5/node_modules/js-cookie/dist/js.cookie.js";
|
|
4
|
-
/* empty css
|
|
4
|
+
/* empty css */
|
|
5
5
|
/* empty css */
|
|
6
6
|
/* empty css */
|
|
7
7
|
/* empty css */
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import layoutEmpty from "../core/views/components/layouts/Empty.vue.js";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import Navigation from "../core/views/components/partials/Navigation.vue.js";
|
|
3
|
+
import { navigationItems } from "../backoffice/configs/navigation.backoffice.config.js";
|
|
4
|
+
import _sfc_main from "./views/components/partials/SidebarPages.vue.js";
|
|
4
5
|
function createPublicRoutes(options = {}) {
|
|
5
6
|
return [
|
|
6
7
|
{
|
|
@@ -36,7 +37,7 @@ function createBackofficeRoutes(options = {}) {
|
|
|
36
37
|
title: {
|
|
37
38
|
en: "New Page"
|
|
38
39
|
},
|
|
39
|
-
sidebar: _sfc_main
|
|
40
|
+
sidebar: _sfc_main
|
|
40
41
|
},
|
|
41
42
|
component: () => import(
|
|
42
43
|
/* webpackChunkName: 'Pages' */
|
|
@@ -50,7 +51,7 @@ function createBackofficeRoutes(options = {}) {
|
|
|
50
51
|
title: {
|
|
51
52
|
en: "Edit Page"
|
|
52
53
|
},
|
|
53
|
-
sidebar: _sfc_main
|
|
54
|
+
sidebar: _sfc_main
|
|
54
55
|
},
|
|
55
56
|
component: () => import(
|
|
56
57
|
/* webpackChunkName: 'Pages' */
|
|
@@ -87,7 +88,8 @@ function getRoutes(options = {}) {
|
|
|
87
88
|
title: {
|
|
88
89
|
en: "Pages"
|
|
89
90
|
},
|
|
90
|
-
|
|
91
|
+
sidebar_navigation: Navigation,
|
|
92
|
+
sidebar_navigation_items: navigationItems
|
|
91
93
|
},
|
|
92
94
|
routes: createBackofficeRoutes(options)
|
|
93
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pages.router.js","sources":["../../../../../src/modules/pages/pages.router.js"],"sourcesContent":["import layoutEmpty from '@martyrs/src/modules/core/views/components/layouts/Empty.vue';\nimport
|
|
1
|
+
{"version":3,"file":"pages.router.js","sources":["../../../../../src/modules/pages/pages.router.js"],"sourcesContent":["import layoutEmpty from '@martyrs/src/modules/core/views/components/layouts/Empty.vue';\nimport Navigation from '@martyrs/src/modules/core/views/components/partials/Navigation.vue';\nimport { navigationItems } from '@martyrs/src/modules/backoffice/configs/navigation.backoffice.config.js';\nimport SidebarPages from './views/components/partials/SidebarPages.vue';\n\nfunction createPublicRoutes(options = {}) {\n return [\n {\n path: ':url+',\n name: options.publicRouteName || 'Page',\n meta: {\n title: {\n en: 'Page',\n ru: 'Страница',\n },\n },\n component: () => import(\n /* webpackChunkName: 'Page' */\n './views/components/pages/Page.vue'\n ),\n },\n ];\n}\n\nfunction createBackofficeRoutes(options = {}) {\n return [\n {\n path: '',\n name: 'Pages',\n component: () => import(\n /* webpackChunkName: 'Pages' */\n './views/components/pages/Pages.vue'\n ),\n },\n {\n path: 'add',\n name: 'Pages Add',\n meta: {\n title: {\n en: 'New Page',\n },\n sidebar: SidebarPages,\n },\n component: () => import(\n /* webpackChunkName: 'Pages' */\n './views/components/pages/PageEdit.vue'\n ),\n },\n {\n path: ':url+',\n name: 'Pages Edit',\n meta: {\n title: {\n en: 'Edit Page',\n },\n sidebar: SidebarPages,\n },\n component: () => import(\n /* webpackChunkName: 'Pages' */\n './views/components/pages/PageEdit.vue'\n ),\n },\n ];\n}\n\nexport function getRoutes(options = {}) {\n const routes = [];\n const routeHome = options.route?.home || options.routeHome || 'Home';\n const routeBackoffice = options.route?.backoffice || options.routeBackoffice || 'Backoffice Root';\n\n routes.push({\n parentName: routeHome,\n config: {\n basePath: options.publicBasePath || 'pages',\n component: options.publicLayout || layoutEmpty,\n meta: {\n title: {\n en: 'Pages',\n ru: 'Информация',\n },\n },\n routes: createPublicRoutes(options),\n },\n });\n\n if (!options.withBackoffice) {\n routes.push({\n parentName: routeBackoffice,\n config: {\n basePath: options.backofficeBasePath || 'pages',\n routeNamePrefix: options.backofficeRouteNamePrefix || 'Backoffice ',\n meta: {\n title: {\n en: 'Pages',\n },\n sidebar_navigation: Navigation,\n sidebar_navigation_items: navigationItems,\n },\n routes: createBackofficeRoutes(options),\n },\n });\n }\n\n return routes;\n}\n\nexport default { getRoutes };\n"],"names":["SidebarPages"],"mappings":";;;;AAKA,SAAS,mBAAmB,UAAU,IAAI;AACxC,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,MAAM,QAAQ,mBAAmB;AAAA,MACjC,MAAM;AAAA,QACJ,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,IAAI;AAAA,QACd;AAAA,MACA;AAAA,MACM,WAAW,MAAM;AAAA;AAAA,QAEf;AAAA,MACR;AAAA,IACA;AAAA,EACA;AACA;AAEA,SAAS,uBAAuB,UAAU,IAAI;AAC5C,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,WAAW,MAAM;AAAA;AAAA,QAEf;AAAA,MACR;AAAA,IACA;AAAA,IACI;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,OAAO;AAAA,UACL,IAAI;AAAA,QACd;AAAA,QACQ,SAASA;AAAAA,MACjB;AAAA,MACM,WAAW,MAAM;AAAA;AAAA,QAEf;AAAA,MACR;AAAA,IACA;AAAA,IACI;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,OAAO;AAAA,UACL,IAAI;AAAA,QACd;AAAA,QACQ,SAASA;AAAAA,MACjB;AAAA,MACM,WAAW,MAAM;AAAA;AAAA,QAEf;AAAA,MACR;AAAA,IACA;AAAA,EACA;AACA;AAEO,SAAS,UAAU,UAAU,IAAI;AACtC,QAAM,SAAS,CAAA;AACf,QAAM,YAAY,QAAQ,OAAO,QAAQ,QAAQ,aAAa;AAC9D,QAAM,kBAAkB,QAAQ,OAAO,cAAc,QAAQ,mBAAmB;AAEhF,SAAO,KAAK;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,MACN,UAAU,QAAQ,kBAAkB;AAAA,MACpC,WAAW,QAAQ,gBAAgB;AAAA,MACnC,MAAM;AAAA,QACJ,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,IAAI;AAAA,QACd;AAAA,MACA;AAAA,MACM,QAAQ,mBAAmB,OAAO;AAAA,IACxC;AAAA,EACA,CAAG;AAED,MAAI,CAAC,QAAQ,gBAAgB;AAC3B,WAAO,KAAK;AAAA,MACV,YAAY;AAAA,MACZ,QAAQ;AAAA,QACN,UAAU,QAAQ,sBAAsB;AAAA,QACxC,iBAAiB,QAAQ,6BAA6B;AAAA,QACtD,MAAM;AAAA,UACJ,OAAO;AAAA,YACL,IAAI;AAAA,UAChB;AAAA,UACU,oBAAoB;AAAA,UACpB,0BAA0B;AAAA,QACpC;AAAA,QACQ,QAAQ,uBAAuB,OAAO;AAAA,MAC9C;AAAA,IACA,CAAK;AAAA,EACH;AAEA,SAAO;AACT;"}
|
|
@@ -8,7 +8,7 @@ import { state as state$2, actions as actions$1 } from "../../../orders/store/sh
|
|
|
8
8
|
/* empty css */
|
|
9
9
|
/* empty css */
|
|
10
10
|
/* empty css */
|
|
11
|
-
/* empty css
|
|
11
|
+
/* empty css */
|
|
12
12
|
/* empty css */
|
|
13
13
|
import _sfc_main$1 from "../../../icons/navigation/IconEdit.vue.js";
|
|
14
14
|
import _sfc_main$4 from "../../../icons/navigation/IconInfo.vue.js";
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { ref, onMounted, createElementBlock, createCommentVNode, unref, openBlock, createBlock, createElementVNode, withCtx, createVNode, toDisplayString, createTextVNode, isRef, withModifiers, Fragment, renderList } from "vue";
|
|
2
2
|
import { useRoute, useRouter } from "vue-router";
|
|
3
3
|
import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
|
|
4
|
-
import _sfc_main$3 from "../../../../components/Tab/Tab.
|
|
4
|
+
import _sfc_main$3 from "../../../../components/Tab/Tab.vue2.js";
|
|
5
5
|
import Field from "../../../../components/Field/Field.vue.js";
|
|
6
6
|
import Select from "../../../../components/Select/Select.vue.js";
|
|
7
7
|
import _sfc_main$2 from "../../../../components/Button/Button.vue2.js";
|
|
8
|
-
import _sfc_main$4 from "../../../../components/EditImages/EditImages.
|
|
8
|
+
import _sfc_main$4 from "../../../../components/EditImages/EditImages.vue.js";
|
|
9
9
|
import BlockMultiselect from "../../../core/views/components/blocks/BlockMultiselect.vue.js";
|
|
10
10
|
import _sfc_main$5 from "../../../icons/navigation/IconCross.vue.js";
|
|
11
11
|
import _sfc_main$a from "../../../icons/navigation/IconDelete.vue.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ref, computed, onMounted, onUnmounted, resolveComponent, createElementBlock, openBlock, createCommentVNode, createElementVNode, createVNode, unref, toDisplayString, Fragment, renderList, createTextVNode, createBlock, withCtx, normalizeClass, renderSlot } from "vue";
|
|
2
2
|
import { useRoute, useRouter } from "vue-router";
|
|
3
3
|
import { useGlobalMixins } from "../../../core/views/mixins/mixins.js";
|
|
4
|
-
/* empty css
|
|
4
|
+
/* empty css */
|
|
5
5
|
import _sfc_main$5 from "../../../../components/Feed/Feed.vue.js";
|
|
6
6
|
import _sfc_main$2 from "../../../../components/Spoiler/Spoiler.vue2.js";
|
|
7
7
|
import _sfc_main$3 from "../../../../components/Checkbox/Checkbox.vue.js";
|
|
@@ -9,7 +9,7 @@ import _sfc_main$3 from "../../../../components/Button/Button.vue2.js";
|
|
|
9
9
|
import _sfc_main$7 from "../../../../components/Popup/Popup.vue.js";
|
|
10
10
|
import Select from "../../../../components/Select/Select.vue.js";
|
|
11
11
|
import _sfc_main$2 from "../../../../components/Feed/Feed.vue.js";
|
|
12
|
-
import _sfc_main$9 from "../../../../components/EditImages/EditImages.
|
|
12
|
+
import _sfc_main$9 from "../../../../components/EditImages/EditImages.vue.js";
|
|
13
13
|
import _sfc_main$8 from "./EditIngredients.vue.js";
|
|
14
14
|
import PlaceholderImage from "../../../icons/placeholders/PlaceholderImage.vue.js";
|
|
15
15
|
import _sfc_main$5 from "../../../icons/navigation/IconEdit.vue.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { computed, ref, createElementBlock, openBlock, createElementVNode, createBlock, createCommentVNode, createVNode, unref, toDisplayString, Transition, withCtx, Fragment, renderList, createTextVNode } from "vue";
|
|
2
2
|
import _sfc_main$4 from "../../../../components/Button/Button.vue2.js";
|
|
3
|
-
import _sfc_main$3 from "../../../../components/Tab/Tab.
|
|
3
|
+
import _sfc_main$3 from "../../../../components/Tab/Tab.vue2.js";
|
|
4
4
|
import _sfc_main$1 from "../../../icons/navigation/IconEdit.vue.js";
|
|
5
5
|
import PlaceholderImage from "../../../icons/placeholders/PlaceholderImage.vue.js";
|
|
6
6
|
import Image360 from "../elements/Image360.vue.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { computed, ref, watch, createElementBlock, openBlock, createElementVNode, createVNode, withCtx, createTextVNode } from "vue";
|
|
2
2
|
import dayjs from "../../../../../../../../_virtual/dayjs.min.js";
|
|
3
|
-
import _sfc_main$2 from "../../../../../../components/Tab/Tab.
|
|
3
|
+
import _sfc_main$2 from "../../../../../../components/Tab/Tab.vue2.js";
|
|
4
4
|
import _sfc_main$3 from "../../../../../../components/Button/Button.vue2.js";
|
|
5
5
|
import _sfc_main$4 from "../../../../../../components/Dropdown/Dropdown.vue.js";
|
|
6
6
|
import Calendar from "../../../../../../components/Calendar/Calendar.vue2.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ref, computed, createElementBlock, openBlock, createElementVNode, createVNode, unref, toDisplayString, withCtx } from "vue";
|
|
2
2
|
import dayjs from "../../../../../../../_virtual/dayjs.min.js";
|
|
3
|
-
/* empty css
|
|
3
|
+
/* empty css */
|
|
4
4
|
import _sfc_main$1 from "../../../../../components/Feed/Feed.vue.js";
|
|
5
5
|
/* empty css */
|
|
6
6
|
import _sfc_main$2 from "./Gant/GanttChart.vue.js";
|
|
@@ -2,7 +2,7 @@ import { ref, onMounted, createElementBlock, createCommentVNode, openBlock, crea
|
|
|
2
2
|
import { useRouter, useRoute } from "vue-router";
|
|
3
3
|
import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
|
|
4
4
|
import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
|
|
5
|
-
/* empty css
|
|
5
|
+
/* empty css */
|
|
6
6
|
import Field from "../../../../components/Field/Field.vue.js";
|
|
7
7
|
import Select from "../../../../components/Select/Select.vue.js";
|
|
8
8
|
import _sfc_main$3 from "../../../../components/Checkbox/Checkbox.vue.js";
|
package/dist/martyrs.es.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ as e, a as o, b as d, C as r, k as t, c as l, d as i, e as p, f as u, g as n, h as M, i as S, j as c, F as m, l as C, n as F, o as g, p as h, L as b, q as k, M as x, r as B, I, s as T, t as U, u as f, v as w, S as D, w as E, x as L, y as P, z as q, A as y, B as A, D as G, E as j, U as v, G as z, H, m as R } from "./main-
|
|
1
|
+
import { _ as e, a as o, b as d, C as r, k as t, c as l, d as i, e as p, f as u, g as n, h as M, i as S, j as c, F as m, l as C, n as F, o as g, p as h, L as b, q as k, M as x, r as B, I, s as T, t as U, u as f, v as w, S as D, w as E, x as L, y as P, z as q, A as y, B as A, D as G, E as j, U as v, G as z, H, m as R } from "./main-xL-jtBkT.js";
|
|
2
2
|
export {
|
|
3
3
|
e as Address,
|
|
4
4
|
o as Breadcrumbs,
|
package/dist/style.css
CHANGED
package/package.json
CHANGED