@ozdao/prometheus-framework 0.2.30 → 0.2.31
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/addMembersQuantity-3505b6f3.mjs +98 -0
- package/dist/addMembersQuantity-fb552ca0.js +97 -0
- package/dist/auth.server.js +6 -9
- package/dist/auth.server.mjs +6 -9
- package/dist/community.server.js +28 -21
- package/dist/community.server.mjs +28 -21
- package/dist/events.server.js +1 -1
- package/dist/events.server.mjs +1 -1
- package/dist/files.server.js +114 -111
- package/dist/files.server.mjs +114 -111
- package/dist/gallery.server.js +3 -3
- package/dist/gallery.server.mjs +3 -3
- package/dist/globals.server.js +1 -1
- package/dist/globals.server.mjs +1 -1
- package/dist/index-a8dffc0c.js +213 -0
- package/dist/index-d769324d.mjs +214 -0
- package/dist/mailing-37c2ba41.mjs +68 -0
- package/dist/mailing-fe16a26a.js +67 -0
- package/dist/main.css +1 -1
- package/dist/middlewares.server.js +1 -1
- package/dist/middlewares.server.mjs +1 -1
- package/dist/organizations.server.js +125 -25
- package/dist/organizations.server.mjs +125 -25
- package/dist/prometheus-framework.cjs.js +30 -29
- package/dist/prometheus-framework.es.js +2478 -2282
- package/dist/reports.server.js +1 -1
- package/dist/reports.server.mjs +1 -1
- package/dist/users.server.js +1 -1
- package/dist/users.server.mjs +1 -1
- package/package.json +4 -2
- package/src/assets/images/logo.svg +7 -7
- package/src/components/Block/Block.vue +77 -0
- package/src/components/Breadcrumbs/Breadcrumbs.vue +2 -2
- package/src/components/Button/Button.vue +32 -227
- package/src/components/Checkbox/Checkbox.vue +1 -1
- package/src/components/Chips/Chips.vue +8 -8
- package/src/components/DatePicker/DatePicker.vue +3 -4
- package/src/components/EditImages/EditImages.vue +32 -14
- package/src/{modules/globals/components/sections → components/Feed}/Feed.vue +60 -45
- package/src/components/FieldBig/FieldBig.vue +16 -5
- package/src/components/FieldPhone/FieldPhone.vue +2 -1
- package/src/components/Footer/Footer.vue +36 -27
- package/src/components/Header/Header.vue +161 -166
- package/src/components/Loader/Loader.vue +9 -2
- package/src/components/LocationMarker/LocationMarker.vue +38 -12
- package/src/components/LocationSelection/LocationSelection.vue +67 -75
- package/src/components/Magnifier/Magnifier.vue +3 -3
- package/src/components/Navigation/Navigation.vue +16 -16
- package/src/components/Popup/Popup.vue +8 -6
- package/src/components/Select/Select.vue +35 -6
- package/src/components/SelectMulti/SelectMulti.vue +5 -13
- package/src/components/Shader/Shader.vue +128 -0
- package/src/components/Sidebar/Sidebar.vue +71 -35
- package/src/components/Spoiler/Spoiler.vue +1 -1
- package/src/components/Tab/Tab.vue +1 -1
- package/src/components/Tooltip/Tooltip.vue +1 -1
- package/src/components/UploadImage/UploadImage.vue +4 -4
- package/src/components/UploadImageMultiple/UploadImageMultiple.vue +54 -10
- package/src/modules/applications/controllers/applications.controller.js +0 -1
- package/src/modules/auth/components/pages/EnterCode.vue +1 -1
- package/src/modules/auth/components/pages/EnterPassword.vue +3 -3
- package/src/modules/auth/components/pages/ResetPassword.vue +1 -2
- package/src/modules/auth/components/pages/SignIn.vue +26 -10
- package/src/modules/auth/components/pages/SignUp.vue +1 -2
- package/src/modules/auth/controllers/twofa.controller.js +4 -4
- package/src/modules/auth/localization/EnterCode.json +2 -2
- package/src/modules/auth/localization/EnterPassword.json +2 -2
- package/src/modules/auth/localization/ResetPassword.json +2 -2
- package/src/modules/auth/localization/SignIn.json +3 -3
- package/src/modules/auth/localization/SignUp.json +3 -3
- package/src/modules/auth/utils/server/verifyAppleIdToken.js +0 -1
- package/src/modules/backoffice/components/layouts/Backoffice.vue +1 -1
- package/src/modules/backoffice/components/pages/Dashboard.vue +171 -120
- package/src/modules/backoffice/router/backoffice.js +119 -129
- package/src/modules/chats/components/blocks/ChatMessage.vue +25 -0
- package/src/modules/chats/components/pages/ChatPage.vue +50 -0
- package/src/modules/chats/components/sections/ChatWindow.vue +38 -0
- package/src/modules/chats/controllers/chats.controller.js +32 -0
- package/src/modules/chats/models/chat.model.js +26 -0
- package/src/modules/chats/routes/chats.routes.js +53 -0
- package/src/modules/chats/store/chat.store.js +61 -0
- package/src/modules/community/components/blocks/CardBlogpost.vue +19 -4
- package/src/modules/community/components/layouts/Community.vue +96 -39
- package/src/modules/community/components/pages/Blog.vue +4 -3
- package/src/modules/community/components/pages/BlogPost.vue +10 -1
- package/src/modules/community/components/pages/CreateBlogPost.vue +36 -17
- package/src/modules/community/components/sections/HotPosts.vue +3 -3
- package/src/modules/community/components/sections/JoinUs.vue +19 -13
- package/src/modules/community/controllers/blog.controller.js +3 -4
- package/src/modules/community/controllers/utils/queryProcessor.js +16 -17
- package/src/modules/community/models/blogpost.model.js +6 -3
- package/src/modules/community/store/blogposts.js +1 -0
- package/src/modules/constructor/components/elements/Embed.vue +12 -1
- package/src/modules/constructor/components/elements/ImageUpload.vue +2 -2
- package/src/modules/constructor/components/elements/Textarea.vue +6 -1
- package/src/modules/constructor/components/elements/Video.vue +79 -0
- package/src/modules/constructor/components/elements/VideoPlayer.vue +59 -0
- package/src/modules/constructor/components/elements/Youtube.vue +52 -0
- package/src/modules/constructor/components/sections/Constructor.vue +27 -3
- package/src/modules/events/components/layouts/layoutEvents.vue +7 -28
- package/src/modules/files/controllers/files.controller.js +9 -22
- package/src/modules/files/middlewares/server/index.js +2 -2
- package/src/modules/files/middlewares/server/middlewareBusboy.js +137 -0
- package/src/modules/files/routes/files.routes.js +9 -9
- package/src/modules/globals/localization/vue-i18n.js +8 -1
- package/src/modules/globals/mixins/mixins.js +23 -13
- package/src/modules/globals/router/routerGuards.js +2 -2
- package/src/modules/globals/store/globals.js +86 -9
- package/src/modules/globals/utils/mailing.js +24 -3
- package/src/modules/icons/entities/IconCommunity.vue +4 -4
- package/src/modules/icons/entities/IconEvents.vue +1 -1
- package/src/modules/icons/entities/IconGroups.vue +1 -1
- package/src/modules/icons/entities/IconPrice.vue +5 -0
- package/src/modules/icons/entities/IconProfile.vue +5 -0
- package/src/modules/icons/entities/IconShopcart.vue +5 -0
- package/src/modules/icons/entities/IconTime.vue +5 -0
- package/src/modules/icons/icons.client.js +4 -0
- package/src/modules/icons/labels/LabelAppStore.vue +24 -24
- package/src/modules/icons/labels/LabelGooglePlay.vue +9 -9
- package/src/modules/icons/logos/Logotype.vue +20 -0
- package/src/modules/icons/navigation/IconAdd.vue +17 -0
- package/src/modules/icons/navigation/IconChevronBottom.vue +18 -0
- package/src/modules/icons/navigation/IconChevronRight.vue +3 -3
- package/src/modules/icons/navigation/IconDelete.vue +19 -0
- package/src/modules/icons/navigation/IconMinus.vue +15 -0
- package/src/modules/icons/navigation/IconSearch.vue +17 -0
- package/src/modules/icons/navigation/IconUpload.vue +16 -0
- package/src/modules/icons/placeholders/PlaceholderImage.vue +5 -0
- package/src/modules/icons/placeholders/PlaceholderOrganizationPic.vue +20 -0
- package/src/modules/icons/placeholders/PlaceholderUserpic.vue +4 -18
- package/src/modules/icons/socials/instagram.vue +1 -1
- package/src/modules/icons/socials/line.vue +1 -1
- package/src/modules/icons/socials/reddit.vue +1 -1
- package/src/modules/icons/socials/telegram.vue +1 -1
- package/src/modules/icons/socials/twitter.vue +1 -1
- package/src/modules/icons/socials/youtube.vue +1 -1
- package/src/modules/landing/components/sections/Guide.vue +92 -0
- package/src/modules/landing/components/sections/MobileApp.vue +23 -12
- package/src/modules/marketplace/components/layouts/Marketplace.vue +76 -188
- package/src/modules/marketplace/components/pages/Catalog.vue +65 -119
- package/src/modules/marketplace/components/sections/Filters.vue +195 -0
- package/src/modules/marketplace/store/marketplace.js +2 -2
- package/src/modules/middlewares/client/auth.validation.js +0 -6
- package/src/modules/middlewares/client/states.validation.js +2 -8
- package/src/modules/middlewares/server/authJwt.js +1 -1
- package/src/modules/mobile/components/Menu/MenuItem.vue +3 -6
- package/src/modules/openai/controllers/openai.controller.js +0 -1
- package/src/modules/orders/components/blocks/CardOrder.vue +166 -0
- package/src/modules/orders/components/blocks/CardOrderItem.vue +59 -66
- package/src/modules/orders/components/blocks/Positions.vue +4 -4
- package/src/modules/orders/components/pages/EditOrder.vue +78 -142
- package/src/modules/orders/components/pages/FormOrder.vue +192 -0
- package/src/modules/orders/components/pages/Order.vue +326 -120
- package/src/modules/orders/components/pages/Orders.vue +13 -9
- package/src/modules/orders/components/pages/{ViewOrder.vue → Orders_refact.vue} +13 -10
- package/src/modules/orders/components/partials/ShopCart.vue +22 -13
- package/src/modules/orders/components/sections/EmptyState.vue +1 -1
- package/src/modules/orders/components/sections/{Form.vue → FormOrderDetails.vue} +38 -106
- package/src/modules/orders/controllers/orders.controller.js +37 -28
- package/src/modules/orders/models/order.model.js +39 -9
- package/src/modules/orders/router/orders.router.js +23 -2
- package/src/modules/orders/routes/orders.routes.js +14 -17
- package/src/modules/orders/store/orders.js +24 -9
- package/src/modules/orders/store/shopcart.js +20 -19
- package/src/modules/organizations/components/blocks/CardDepartment.vue +1 -1
- package/src/modules/organizations/components/blocks/CardOrganization.vue +98 -46
- package/src/modules/organizations/components/blocks/Rating.vue +1 -1
- package/src/modules/organizations/components/blocks/Socials.vue +11 -3
- package/src/modules/organizations/components/elements/ButtonToggleMembership.vue +1 -1
- package/src/modules/organizations/components/pages/Department.vue +1 -1
- package/src/modules/organizations/components/pages/DepartmentEdit.vue +4 -4
- package/src/modules/organizations/components/pages/Members.vue +6 -4
- package/src/modules/organizations/components/pages/Organization.vue +120 -49
- package/src/modules/organizations/components/pages/OrganizationEdit.vue +8 -1
- package/src/modules/organizations/components/pages/Organizations.vue +27 -6
- package/src/modules/organizations/components/sections/DetailsTab.vue +11 -9
- package/src/modules/organizations/components/sections/Feed.vue +0 -3
- package/src/modules/organizations/components/sections/FeedDepartments.vue +2 -2
- package/src/modules/organizations/controllers/organizations.controller.js +126 -15
- package/src/modules/organizations/controllers/utils/addMembersQuantity.js +19 -9
- package/src/modules/organizations/models/organization.model.js +5 -2
- package/src/modules/organizations/router/members.router.js +1 -3
- package/src/modules/organizations/router/organizations.js +8 -6
- package/src/modules/organizations/router/products.router.js +36 -2
- package/src/modules/organizations/store/organizations.js +38 -84
- package/src/modules/pages/controllers/pages.controller.js +0 -4
- package/src/modules/payments/controller/payments.controller.js +1 -1
- package/src/modules/products/components/blocks/CardLeftover.vue +17 -22
- package/src/modules/products/components/blocks/CardPosition.vue +96 -49
- package/src/modules/products/components/blocks/CardProduct.vue +24 -53
- package/src/modules/products/components/blocks/Images360.vue +4 -4
- package/src/modules/products/components/blocks/ImagesThumbnails.vue +2 -7
- package/src/modules/products/components/blocks/ListPositions.vue +74 -0
- package/src/modules/products/components/elements/Price.vue +11 -5
- package/src/modules/products/components/elements/THC.vue +6 -6
- package/src/modules/products/components/pages/{LeftoverAdd.vue → EditLeftover.vue} +93 -79
- package/src/modules/products/components/pages/Leftovers.vue +74 -70
- package/src/modules/products/components/pages/Product.vue +4 -7
- package/src/modules/products/components/pages/ProductEdit.vue +230 -88
- package/src/modules/products/components/pages/ProductRecommmendation.vue +1 -1
- package/src/modules/products/components/pages/Products.vue +6 -3
- package/src/modules/products/components/pages/ProductsBackoffice.vue +3 -5
- package/src/modules/products/components/sections/EditModifications.vue +3 -3
- package/src/modules/products/components/sections/EditProductInfo.vue +40 -50
- package/src/modules/products/components/sections/FilterProducts.vue +57 -18
- package/src/modules/products/components/sections/HeroRecommendation.vue +233 -99
- package/src/modules/products/components/sections/MenuSection.vue +127 -0
- package/src/modules/products/components/sections/PopularProducts.vue +81 -37
- package/src/modules/products/components/sections/SectionProduct.vue +21 -23
- package/src/modules/products/controllers/leftovers.controller.js +11 -1
- package/src/modules/products/controllers/products.controller.js +100 -97
- package/src/modules/products/models/leftover.model.js +6 -4
- package/src/modules/products/models/product.model.js +13 -1
- package/src/modules/products/routes/products.routes.js +4 -4
- package/src/modules/products/store/leftovers.js +4 -24
- package/src/modules/products/store/products.js +44 -30
- package/src/modules/spots/components/blocks/CardSpot.vue +43 -72
- package/src/modules/spots/components/layouts/Spots.vue +9 -91
- package/src/modules/spots/components/pages/Map.vue +171 -62
- package/src/modules/spots/components/pages/Spot.vue +1 -1
- package/src/modules/spots/components/pages/SpotEdit.vue +131 -174
- package/src/modules/spots/controllers/spots.controller.js +1 -0
- package/src/modules/spots/models/spot.model.js +6 -3
- package/src/modules/spots/store/spots.js +42 -48
- package/src/modules/users/components/pages/Profile.vue +6 -28
- package/src/modules/users/components/pages/ProfileBlogposts.vue +1 -1
- package/src/modules/users/components/pages/ProfileEdit.vue +1 -1
- package/src/modules/users/components/pages/ProfileEvents.vue +1 -1
- package/src/modules/users/components/pages/ProfileOrganizations.vue +1 -1
- package/src/modules/users/router/users.js +1 -1
- package/src/modules/wallet/components/pages/Wallet.vue +105 -109
- package/src/modules/wallet/controllers/crypto.controller.js +129 -0
- package/src/modules/wallet/models/reward.model.js +53 -0
- package/src/modules/wallet/routes/crypto.routes.js +36 -0
- package/src/modules/wallet/store/wallet.js +52 -49
- package/src/styles/base/all.scss +143 -11
- package/src/styles/base/backgrounds.scss +2 -34
- package/src/styles/base/borders.scss +18 -23
- package/src/styles/base/scrolling.scss +97 -29
- package/src/styles/base/{shadows.scss → shadow_transitions_hover_refactor.scss} +55 -2
- package/src/styles/config.scss +69 -17
- package/src/styles/layout.scss +12 -182
- package/src/styles/reset.scss +20 -21
- package/src/styles/responsive.scss +4 -67
- package/src/styles/theme.scss +3 -4
- package/src/styles/typography.scss +15 -17
- package/src/assets/fonts/AvenirNext-Bold.woff2 +0 -0
- package/src/assets/fonts/AvenirNext-DemiBold.woff2 +0 -0
- package/src/assets/fonts/AvenirNext-Heavy.woff2 +0 -0
- package/src/assets/fonts/AvenirNext-Medium.woff2 +0 -0
- package/src/assets/fonts/AvenirNext-Regular.woff2 +0 -0
- package/src/assets/fonts/AvenirNext-UltraLight.woff2 +0 -0
- package/src/modules/files/middlewares/server/md.js +0 -152
- package/src/modules/files/middlewares/server/middlewareMulter.js +0 -121
- package/src/modules/organizations/controllers/organizations.new.controller.js +0 -372
- package/src/modules/products/components/blocks/EditCategories.vue +0 -68
- package/src/modules/products/components/sections/EditParameters.vue +0 -58
- package/src/modules/products/components/sections/EditProductImages.vue +0 -67
- package/src/modules/spots/components/sections/Feed.vue +0 -64
- package/src/styles/base/border-radius.scss +0 -47
- package/src/styles/base/cursors.scss +0 -23
- package/src/styles/base/height.scss +0 -60
- package/src/styles/base/hovers.scss +0 -110
- package/src/styles/base/positions.scss +0 -192
- package/src/styles/base/transitions.scss +0 -137
- package/src/styles/base/width.scss +0 -2
- package/src/styles/components/block.scss +0 -18
- package/src/styles/components/breadcrumbs.scss +0 -0
- package/src/styles/components/input.scss +0 -319
@@ -1,101 +1,43 @@
|
|
1
1
|
<template>
|
2
|
-
<div
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
:label="category.name"
|
34
|
-
name="categories"
|
35
|
-
:value="category.url"
|
36
|
-
class="cursor-pointer w-100 mn-t-small mn-b-small bg-black t-white radius-small pd-small"
|
37
|
-
:radio="store.marketplace.state.filter.categories"
|
38
|
-
/>
|
39
|
-
</Dropdown>
|
40
|
-
|
41
|
-
<Dropdown
|
42
|
-
:label="t('filters.price.title')"
|
43
|
-
class="cursor-pointer mn-r-small br-solid br-2px br-white pd-thin t-semi radius-extra uppercase p-medium"
|
44
|
-
:class="[
|
45
|
-
store.marketplace.state.filter.prices.length > 0 ? 'bg-white t-black' : ''
|
46
|
-
]"
|
47
|
-
>
|
48
|
-
<Checkbox
|
49
|
-
v-for="(price, index) in prices"
|
50
|
-
:label="price.label"
|
51
|
-
name="prices"
|
52
|
-
:value="price.value"
|
53
|
-
class="cursor-pointer w-100 mn-t-small bg-black t-white radius-small pd-small"
|
54
|
-
:radio="store.marketplace.state.filter.prices"
|
55
|
-
/>
|
56
|
-
</Dropdown>
|
57
|
-
|
58
|
-
<Dropdown
|
59
|
-
label="Delivery"
|
60
|
-
class="cursor-pointer mn-r-auto br-solid br-2px br-white pd-thin t-semi radius-extra uppercase p-medium"
|
61
|
-
:class="[
|
62
|
-
store.marketplace.state.filter.delivery.length > 0 ? 'bg-white t-black' : ''
|
63
|
-
]"
|
64
|
-
>
|
65
|
-
<Checkbox
|
66
|
-
v-for="(delivery, index) in delivery"
|
67
|
-
:label="delivery.label"
|
68
|
-
name="prices"
|
69
|
-
:value="delivery.value"
|
70
|
-
class="cursor-pointer w-100 mn-t-small bg-black t-white radius-small pd-small"
|
71
|
-
:radio="store.marketplace.state.filter.delivery"
|
72
|
-
/>
|
73
|
-
</Dropdown>
|
74
|
-
<!-- Reset filter -->
|
75
|
-
<p class="t-semi radius-extra uppercase p-medium mn-r-thin">Sort by</p>
|
76
|
-
<Select
|
77
|
-
:options="['popularity','rating','products']"
|
78
|
-
v-model:select="store.marketplace.state.sort.current"
|
79
|
-
placeholder="Select type"
|
80
|
-
class="
|
81
|
-
bg-white
|
82
|
-
cursor-pointer
|
83
|
-
pd-thin t-semi radius-extra uppercase p-medium
|
84
|
-
w-8r
|
85
|
-
t-center
|
86
|
-
t-black
|
87
|
-
"
|
88
|
-
/>
|
89
|
-
|
90
|
-
</div>
|
91
|
-
|
2
|
+
<div style="min-height: 100%;" class="h-min-100 pd-thin">
|
3
|
+
<header class="mn-b-thin radius-big bg-grey pd-medium flex-v-center t-left flex-nowrap flex">
|
4
|
+
<h2 class="t-left">
|
5
|
+
<span class="">Weed in </span>
|
6
|
+
|
7
|
+
<span @click="a => { store.globals.state.isOpenLocationPopup = true }" v-if="localPosition.city || localPosition.state || localPosition.country" class="t-semi t-main">
|
8
|
+
<span v-if="localPosition.city">{{localPosition.city}}, </span>
|
9
|
+
<span v-if="localPosition.state">{{localPosition.state}}, </span>
|
10
|
+
<span v-if="localPosition.country">{{localPosition.country}}</span>
|
11
|
+
</span>
|
12
|
+
|
13
|
+
<span v-else @click="a => { store.globals.state.isOpenLocationPopup = true }" class="t-semi t-main">
|
14
|
+
The World
|
15
|
+
</span>
|
16
|
+
</h2>
|
17
|
+
</header>
|
18
|
+
|
19
|
+
<Filters
|
20
|
+
class="mn-b-thin"
|
21
|
+
/>
|
22
|
+
|
23
|
+
<div class="flex-v-center flex-nowrap flex pd-small bg-grey w-100 radius-big">
|
24
|
+
<IconSearch
|
25
|
+
class="i-medium mn-r-thin"
|
26
|
+
/>
|
27
|
+
<Field
|
28
|
+
placeholder="Enter shop or product name"
|
29
|
+
@update:field="search => store.globals.state.search = search"
|
30
|
+
class="w-100"
|
31
|
+
/>
|
32
|
+
<button class="pd-thin uppercase p-small t-medium cursor-pointer radius-extra bg-main" @click="updateSearchQuery">Search</button>
|
92
33
|
</div>
|
34
|
+
|
93
35
|
<!-- Catalog wrapper -->
|
94
36
|
<div class="cols-1 gap-thin pd-thin">
|
95
37
|
<!-- Products section -->
|
96
38
|
<router-view v-slot="{ Component, route }">
|
97
|
-
<transition
|
98
|
-
<component ref="page" :key="route
|
39
|
+
<transition name="scaleIn" mode="out-in">
|
40
|
+
<component ref="page" :key="route" :localPosition="localPosition" :is="Component" />
|
99
41
|
</transition>
|
100
42
|
</router-view>
|
101
43
|
</div>
|
@@ -105,45 +47,20 @@
|
|
105
47
|
|
106
48
|
<script setup="props">
|
107
49
|
// Import libs
|
108
|
-
import { computed, onMounted, watch,
|
50
|
+
import { computed, onMounted, watch, ref } from 'vue'
|
109
51
|
import { useStore } from '@/store'
|
110
52
|
import { useRoute, useRouter,onBeforeRouteLeave } from 'vue-router'
|
111
|
-
import { useI18n }
|
53
|
+
import { useI18n } from 'vue-i18n'
|
112
54
|
import { useMeta } from 'vue-meta'
|
113
|
-
// Prometheus
|
114
|
-
import Spoiler from "@pf/src/components/Spoiler/Spoiler.vue";
|
115
|
-
import Checkbox from "@pf/src/components/Checkbox/Checkbox.vue";
|
116
|
-
import Field from "@pf/src/components/Field/Field.vue";
|
117
|
-
import Select from "@pf/src/components/Select/Select.vue";
|
118
|
-
import Dropdown from "@pf/src/components/Dropdown/Dropdown.vue";
|
119
|
-
// Partials
|
120
|
-
import Breadcrumbs from '@pf/src/components/Breadcrumbs/Breadcrumbs.vue'
|
121
55
|
// Import components
|
122
|
-
import
|
56
|
+
import Filters from '@pf/src/modules/marketplace/components/sections/Filters.vue'
|
57
|
+
import IconSearch from '@pf/src/modules/icons/navigation/IconSearch.vue'
|
58
|
+
import Field from '@pf/src/components/Field/Field.vue'
|
123
59
|
|
124
60
|
// Accessing router and store
|
125
61
|
const store = useStore()
|
126
62
|
const route = useRoute()
|
127
63
|
const router = useRouter()
|
128
|
-
|
129
|
-
// Data fetching
|
130
|
-
|
131
|
-
|
132
|
-
// Accessing state
|
133
|
-
const categories = computed(() => store.categories.state.all)
|
134
|
-
|
135
|
-
const delivery = [
|
136
|
-
{ label: 'Pickup', value: 'pickup' },
|
137
|
-
{ label: 'Courier', value: 'courier' },
|
138
|
-
{ label: 'Post', value: 'post' }
|
139
|
-
]
|
140
|
-
|
141
|
-
const prices = [
|
142
|
-
{ label: 'Under $5', value: '<5' },
|
143
|
-
{ label: '$5 to $10', value: '5-10' },
|
144
|
-
{ label: '$10 to $20', value: '10-20' },
|
145
|
-
{ label: '$20 and above', value: '>20' }
|
146
|
-
]
|
147
64
|
|
148
65
|
const localPosition = ref({
|
149
66
|
city: null,
|
@@ -151,13 +68,28 @@
|
|
151
68
|
country: null
|
152
69
|
});
|
153
70
|
|
154
|
-
|
155
71
|
function denormalizeUrlParam(param) {
|
156
72
|
return param
|
157
73
|
.replace(/-/g, ' ') // Замена дефисов на пробелы
|
158
74
|
.replace(/\b\w/g, l => l.toUpperCase()); // Преобразование первой буквы каждого слова в заглавную
|
159
75
|
}
|
160
76
|
|
77
|
+
function normalizeUrlParam(param) {
|
78
|
+
return param
|
79
|
+
.toLowerCase()
|
80
|
+
.replace(/ /g, '-')
|
81
|
+
.replace(/[^a-z0-9-]/g, '');
|
82
|
+
}
|
83
|
+
|
84
|
+
|
85
|
+
function updateSearchQuery() {
|
86
|
+
let query = { ...route.query}
|
87
|
+
|
88
|
+
query.search = store.globals.state.search
|
89
|
+
|
90
|
+
router.push({ query });
|
91
|
+
}
|
92
|
+
|
161
93
|
onMounted(async () => {
|
162
94
|
if (route.params) {
|
163
95
|
// Загружаем новые значения из параметров маршрута в состояние
|
@@ -172,19 +104,33 @@
|
|
172
104
|
}
|
173
105
|
|
174
106
|
if (route.query) {
|
175
|
-
|
107
|
+
const query = route.query;
|
108
|
+
|
176
109
|
const newFilterValue = {
|
177
110
|
categories: query.categories ? query.categories.split(',') : [],
|
178
111
|
prices: query.prices ? query.prices.split(',') : [],
|
179
112
|
delivery: query.delivery ? query.delivery.split(',') : [],
|
180
|
-
// Продолжайте этот паттерн для остальных полей фильтра
|
181
113
|
};
|
182
|
-
|
114
|
+
|
115
|
+
store.marketplace.state.filter = newFilterValue;
|
183
116
|
}
|
184
|
-
|
185
|
-
|
117
|
+
|
118
|
+
|
119
|
+
if (route.query.sortParam) store.marketplace.state.sort.param = route.query.sortParam
|
120
|
+
if (route.query.sortOrder) store.marketplace.state.sort.order = route.query.sortOrder
|
186
121
|
})
|
187
122
|
|
123
|
+
watch(() => store.marketplace.state.sort, (newSortValue, oldSortValue) => {
|
124
|
+
let query = { ...route.query}
|
125
|
+
|
126
|
+
query.sortParam = newSortValue.param
|
127
|
+
query.sortOrder = newSortValue.order
|
128
|
+
|
129
|
+
// replace the current route
|
130
|
+
router.push({ query });
|
131
|
+
}, { deep: true });
|
132
|
+
|
133
|
+
|
188
134
|
watch(() => store.marketplace.state.filter, (newFilterValue, oldFilterValue) => {
|
189
135
|
// Переводим фильтр в формат query
|
190
136
|
const query = { ...route.query };
|
@@ -208,14 +154,6 @@
|
|
208
154
|
router.push({ query });
|
209
155
|
}, { deep: true })
|
210
156
|
|
211
|
-
|
212
|
-
function normalizeUrlParam(param) {
|
213
|
-
return param
|
214
|
-
.toLowerCase() // Преобразование всех символов в нижний регистр
|
215
|
-
.replace(/ /g, '-') // Замена всех пробелов на дефисы
|
216
|
-
.replace(/[^a-z0-9-]/g, ''); // Удаление всех символов, которые не являются буквами, цифрами или дефисами
|
217
|
-
}
|
218
|
-
|
219
157
|
watch(() => store.globals.state.position, (newPosition) => {
|
220
158
|
// get the current route
|
221
159
|
const currentRoute = { ...router.currentRoute.value };
|
@@ -241,65 +179,17 @@
|
|
241
179
|
meta: {
|
242
180
|
title: "Marketplace – Shop Our Wide Selection of Quality Weed for Delivery",
|
243
181
|
description: "Browse our marketplace of top-grade weed strains and choose from a variety of delivery options. Order now and have your favorite strains delivered straight to your door. Safe, fast, and reliable.",
|
244
|
-
}
|
245
|
-
breadcrumbs: {
|
246
|
-
home: 'Home',
|
247
|
-
store: 'Marketplace',
|
248
|
-
},
|
249
|
-
categoriesTitle: 'Category',
|
250
|
-
categories: [],
|
251
|
-
sort: {
|
252
|
-
price: 'By price',
|
253
|
-
newest: 'By newest',
|
254
|
-
popularity: 'By popularity'
|
255
|
-
},
|
256
|
-
filters: {
|
257
|
-
title: 'Filters',
|
258
|
-
price: {
|
259
|
-
title: 'Price',
|
260
|
-
from: 'From',
|
261
|
-
to: 'To'
|
262
|
-
},
|
263
|
-
filters: [],
|
264
|
-
reset: 'Reset Filters'
|
265
|
-
}
|
182
|
+
}
|
266
183
|
},
|
267
184
|
ru: {
|
268
185
|
meta: {
|
269
186
|
title: "Маркетплейс – Выбирайте из нашего ассортимента качественной травки для доставки",
|
270
187
|
description: "Маркетплейс – Изучите наши продукты высокого качества и выбирайте из различных вариантов доставки. Закажите сейчас и получите свои любимые сорта на дом. Безопасно, быстро и надежно.",
|
271
|
-
}
|
272
|
-
breadcrumbs: {
|
273
|
-
home: 'Главная',
|
274
|
-
store: 'Маркетплейс',
|
275
|
-
},
|
276
|
-
categoriesTitle: 'Категория',
|
277
|
-
categories: [],
|
278
|
-
sort: {
|
279
|
-
price: 'По цене',
|
280
|
-
newest: 'По новизне',
|
281
|
-
popularity: 'По популярности'
|
282
|
-
},
|
283
|
-
filters: {
|
284
|
-
title: 'Фильтры',
|
285
|
-
price: {
|
286
|
-
title: 'Цена',
|
287
|
-
from: 'От',
|
288
|
-
to: 'До'
|
289
|
-
},
|
290
|
-
filters: [],
|
291
|
-
reset: 'Сбросить фильтры',
|
292
|
-
}
|
188
|
+
}
|
293
189
|
}
|
294
190
|
}
|
295
191
|
}
|
296
192
|
|
297
|
-
store.categories.state.all.forEach( category => {
|
298
|
-
category.localization.forEach( localization => {
|
299
|
-
text.messages[localization.locale].categories.push(localization.text)
|
300
|
-
})
|
301
|
-
})
|
302
|
-
|
303
193
|
const { t } = useI18n(text)
|
304
194
|
|
305
195
|
const computedMeta = computed(() => ({
|
@@ -308,8 +198,6 @@
|
|
308
198
|
}))
|
309
199
|
|
310
200
|
const { meta, onRemoved } = useMeta(computedMeta)
|
311
|
-
|
312
|
-
|
313
201
|
</script>
|
314
202
|
|
315
203
|
<style lang="scss">
|
@@ -1,29 +1,36 @@
|
|
1
1
|
<template>
|
2
2
|
<div class="for-transition radius-big w-100">
|
3
|
-
|
4
|
-
<
|
5
|
-
<
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
<
|
10
|
-
<
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
3
|
+
|
4
|
+
<transition name="fade">
|
5
|
+
<Loader v-if="isLoading" class="z-index-5 pos-t-50 left-t-50 pos-absolute"/>
|
6
|
+
</transition>
|
7
|
+
|
8
|
+
<transition name="fade">
|
9
|
+
<EmptyState
|
10
|
+
v-if="!isLoading && organization.state.all.length < 1"
|
11
|
+
title="No Organizations Found"
|
12
|
+
description="It looks like there are no organizations available at the moment."
|
13
|
+
class="radius-big pd-medium bg-grey"
|
14
|
+
/>
|
15
|
+
<div v-else class="w-100 cols-1 gap-thin">
|
16
|
+
<CardOrganization
|
17
|
+
v-for="organization in organization.state.all"
|
18
|
+
:key="organization._id"
|
19
|
+
:organization="organization"
|
20
|
+
:showRating="true"
|
21
|
+
:showFollowers="false"
|
22
|
+
class="bg-grey w-100 o-hidden radius-big pd-small "
|
23
|
+
/>
|
24
|
+
</div>
|
25
|
+
</transition>
|
26
|
+
|
27
|
+
<button
|
28
|
+
v-if="hasMorePosts"
|
29
|
+
@click="loadMorePosts"
|
30
|
+
class="mn-t-thin bg-main t-black w-100 button"
|
31
|
+
>
|
32
|
+
Load more
|
33
|
+
</button>
|
27
34
|
|
28
35
|
</div>
|
29
36
|
</template>
|
@@ -31,6 +38,7 @@
|
|
31
38
|
<script setup>
|
32
39
|
import { computed,reactive,ref, onMounted,watch } from 'vue'
|
33
40
|
import { useRoute, useRouter } from 'vue-router'
|
41
|
+
import { useStore } from '@/store'
|
34
42
|
// Import dependencies
|
35
43
|
import Cookies from 'js-cookie'
|
36
44
|
// Import components
|
@@ -56,6 +64,7 @@
|
|
56
64
|
});
|
57
65
|
|
58
66
|
// Init router
|
67
|
+
const store = useStore()
|
59
68
|
const router = useRouter()
|
60
69
|
const route = useRoute()
|
61
70
|
|
@@ -65,84 +74,65 @@
|
|
65
74
|
const hasMorePosts = ref(false);
|
66
75
|
let isLoading = ref(true);
|
67
76
|
|
77
|
+
const params = {
|
78
|
+
country: route.params.country,
|
79
|
+
state: route.params.state,
|
80
|
+
city: route.params.city,
|
81
|
+
categories: route.query.categories,
|
82
|
+
prices: route.query.prices,
|
83
|
+
delivery: route.query.delivery,
|
84
|
+
skip: skip.value,
|
85
|
+
limit: limit.value,
|
86
|
+
sortParam: route.query.sortParam || store.marketplace.state.sort.param,
|
87
|
+
sortOrder: route.query.sortOrder || store.marketplace.state.sort.order,
|
88
|
+
location: store.globals.state.position?.location,
|
89
|
+
search: route.query.search,
|
90
|
+
contain: route.query.contain?.split(','),
|
91
|
+
};
|
92
|
+
|
68
93
|
const loadMorePosts = async () => {
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
skip: skip.value,
|
80
|
-
limit: limit.value,
|
81
|
-
};
|
82
|
-
|
83
|
-
const data = await organization.actions.read(params);
|
84
|
-
|
85
|
-
if (data.length === 0) {
|
86
|
-
hasMorePosts.value = false;
|
87
|
-
} else {
|
88
|
-
hasMorePosts.value = true;
|
89
|
-
}
|
90
|
-
|
91
|
-
console.log(data)
|
92
|
-
|
93
|
-
organization.state.all = [...organization.state.all, ...data];
|
94
|
+
skip.value += limit.value;
|
95
|
+
|
96
|
+
params.skip = skip.value
|
97
|
+
|
98
|
+
const data = await organization.actions.read(params);
|
99
|
+
|
100
|
+
if (data.length < limit.value) {
|
101
|
+
hasMorePosts.value = false;
|
102
|
+
} else {
|
103
|
+
hasMorePosts.value = true;
|
94
104
|
}
|
105
|
+
|
106
|
+
organization.state.all = [...organization.state.all, ...data];
|
95
107
|
};
|
96
108
|
|
97
|
-
// В onMounted функции
|
98
109
|
onMounted(async () => {
|
99
|
-
const params = {
|
100
|
-
country: route.params.country,
|
101
|
-
state: route.params.state,
|
102
|
-
city: route.params.city,
|
103
|
-
categories: route.query.categories,
|
104
|
-
prices: route.query.prices,
|
105
|
-
delivery: route.query.delivery,
|
106
|
-
skip: skip.value,
|
107
|
-
limit: limit.value
|
108
|
-
};
|
109
|
-
|
110
110
|
organization.state.all = [];
|
111
111
|
|
112
112
|
const data = await organization.actions.read(params);
|
113
113
|
|
114
|
-
if (data.length
|
114
|
+
if (data.length < limit.value) {
|
115
115
|
hasMorePosts.value = false;
|
116
116
|
} else {
|
117
117
|
hasMorePosts.value = true;
|
118
118
|
}
|
119
119
|
|
120
|
-
console.log(data)
|
121
|
-
|
122
120
|
organization.state.all = [...organization.state.all, ...data];
|
123
121
|
|
124
122
|
isLoading.value = false;
|
125
123
|
});
|
126
124
|
|
127
|
-
// Или в watch функции, если вы хотите обновлять данные при изменении параметров
|
128
125
|
watch(() => route.params, async (newParams, oldParams) => {
|
129
126
|
if (newParams !== oldParams) {
|
130
|
-
|
131
|
-
|
132
|
-
state: newParams.state,
|
133
|
-
city: newParams.city,
|
134
|
-
categories: route.query.categories,
|
135
|
-
prices: route.query.prices,
|
136
|
-
delivery: route.query.delivery,
|
137
|
-
};
|
127
|
+
|
128
|
+
params.skip = skip.value
|
138
129
|
|
139
130
|
const data = await organization.actions.read(params);
|
140
131
|
|
141
|
-
|
132
|
+
if (data.length < limit.value) {
|
142
133
|
hasMorePosts.value = false;
|
143
134
|
}
|
144
135
|
|
145
|
-
console.log(data)
|
146
136
|
|
147
137
|
organization.state.all = data;
|
148
138
|
}
|
@@ -151,48 +141,4 @@
|
|
151
141
|
</script>
|
152
142
|
|
153
143
|
<style lang="scss">
|
154
|
-
.slide-fade-enter-active {
|
155
|
-
// min-height: 100vh;
|
156
|
-
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
157
|
-
}
|
158
|
-
|
159
|
-
.slide-fade-leave-active {
|
160
|
-
// min-height: 100vh;
|
161
|
-
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
162
|
-
}
|
163
|
-
|
164
|
-
.slide-fade-enter-from,
|
165
|
-
.slide-fade-leave-to {
|
166
|
-
min-height: 0;
|
167
|
-
position: absolute;
|
168
|
-
transform: translateX(20px);
|
169
|
-
opacity: 0;
|
170
|
-
left: 0;
|
171
|
-
top: 0;
|
172
|
-
}
|
173
|
-
|
174
|
-
.container {
|
175
|
-
display: inline-grid;
|
176
|
-
grid-template-columns: auto auto;
|
177
|
-
position: relative;
|
178
|
-
}
|
179
|
-
|
180
|
-
.intrinsic-1x1 {
|
181
|
-
align-self: stretch;
|
182
|
-
opacity: 0;
|
183
|
-
}
|
184
|
-
|
185
|
-
.overlay {
|
186
|
-
position: absolute;
|
187
|
-
left: 0;
|
188
|
-
top: 0;
|
189
|
-
height: 100%;
|
190
|
-
aspect-ratio: 1/1;
|
191
|
-
}
|
192
|
-
|
193
|
-
.overlay img {
|
194
|
-
height: 100%;
|
195
|
-
width: 100%;
|
196
|
-
object-fit: cover;
|
197
|
-
}
|
198
144
|
</style>
|