@ozdao/prometheus-framework 0.2.29 → 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/src/components/Dropdown/Dropdown.vue.cjs +1 -1
- package/dist/prometheus-framework/src/components/Dropdown/Dropdown.vue.js +49 -2
- package/dist/prometheus-framework/src/components/Dropdown/Dropdown.vue2.cjs +1 -1
- package/dist/prometheus-framework/src/components/Dropdown/Dropdown.vue2.js +2 -49
- package/dist/prometheus-framework/src/components/Select/Select.vue.cjs +1 -1
- package/dist/prometheus-framework/src/components/Select/Select.vue.js +78 -2
- package/dist/prometheus-framework/src/components/Select/Select.vue2.cjs +1 -1
- package/dist/prometheus-framework/src/components/Select/Select.vue2.js +2 -78
- package/dist/prometheus-framework/src/modules/backoffice/components/pages/Dashboard.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/backoffice/components/pages/Dashboard.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/community/components/layouts/Community.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/community/components/layouts/Community.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/constructor/components/elements/Textarea.vue.cjs +4 -1
- package/dist/prometheus-framework/src/modules/constructor/components/elements/Textarea.vue.js +62 -2
- package/dist/prometheus-framework/src/modules/constructor/components/elements/Textarea.vue2.cjs +1 -4
- package/dist/prometheus-framework/src/modules/constructor/components/elements/Textarea.vue2.js +2 -62
- package/dist/prometheus-framework/src/modules/constructor/components/sections/Constructor.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/constructor/components/sections/Constructor.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/events/components/layouts/layoutEvents.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/events/components/layouts/layoutEvents.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/events/components/pages/EditEvent.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/events/components/pages/EditEvent.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/events/components/pages/Events.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/events/components/pages/Events.vue.js +2 -2
- package/dist/prometheus-framework/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/gallery/components/sections/GalleryWithCategories.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/gallery/components/sections/GalleryWithCategories.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/globals/components/blocks/CardHeader.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/globals/components/blocks/CardHeader.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/legal/components/pages/Legal.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/legal/components/pages/Legal.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/mobile/components/Menu/Menu.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/mobile/components/Menu/Menu.vue.js +11 -2
- package/dist/prometheus-framework/src/modules/mobile/components/Menu/Menu.vue2.cjs +1 -1
- package/dist/prometheus-framework/src/modules/mobile/components/Menu/Menu.vue2.js +2 -11
- package/dist/prometheus-framework/src/modules/organizations/components/blocks/DepartmentMemberModify.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/blocks/DepartmentMemberModify.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/pages/DepartmentEdit.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/pages/Organization.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/pages/Organization.vue.js +2 -2
- package/dist/prometheus-framework/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/pages/OrganizationEdit.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/sections/DetailsTab.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/sections/DetailsTab.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/organizations/components/sections/Organizations.vue.js +2 -2
- package/dist/prometheus-framework/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/reports/components/sections/FormReport.vue.js +1 -1
- package/dist/prometheus-framework/src/modules/users/components/pages/Profile.vue.cjs +1 -1
- package/dist/prometheus-framework/src/modules/users/components/pages/Profile.vue.js +2 -2
- 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/style.css +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 +144 -12
- 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
@@ -0,0 +1,38 @@
|
|
1
|
+
<template>
|
2
|
+
<div class="chat-window">
|
3
|
+
<div class="h-max-20r o-scroll flex-nowrap flex-column flex gap-thin ">
|
4
|
+
<ChatMessage
|
5
|
+
v-for="message in messages"
|
6
|
+
:key="message._id"
|
7
|
+
:message="message"
|
8
|
+
/>
|
9
|
+
</div>
|
10
|
+
<input class="bg-main w-100 radius-big pd-small" placeholder="Enter your message" type="text" v-model="newMessage" @keyup.enter="sendMessage" />
|
11
|
+
</div>
|
12
|
+
</template>
|
13
|
+
|
14
|
+
<script setup>
|
15
|
+
import { ref, computed } from 'vue';
|
16
|
+
import ChatMessage from '../blocks/ChatMessage.vue';
|
17
|
+
import chatStore from '../../store/chat.store.js';
|
18
|
+
|
19
|
+
const newMessage = ref('');
|
20
|
+
const messages = computed(() => chatStore.state.messages);
|
21
|
+
|
22
|
+
const sendMessage = () => {
|
23
|
+
if (newMessage.value) {
|
24
|
+
|
25
|
+
const message = {
|
26
|
+
text: newMessage.value,
|
27
|
+
username: chatStore.state.username,
|
28
|
+
chatId: chatStore.state.currentChatId
|
29
|
+
};
|
30
|
+
chatStore.methods.addMessage(message);
|
31
|
+
newMessage.value = '';
|
32
|
+
}
|
33
|
+
};
|
34
|
+
</script>
|
35
|
+
|
36
|
+
<style>
|
37
|
+
/* Стили остаются без изменений */
|
38
|
+
</style>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
const { sendChatMessageTelegram } = require('@pf/src/modules/globals/utils/mailing');
|
2
|
+
|
3
|
+
|
4
|
+
const controllerFactory = (db) => {
|
5
|
+
const ChatMessage = db.ChatMessage;
|
6
|
+
|
7
|
+
const saveMessage = async (msg) => {
|
8
|
+
try {
|
9
|
+
const message = new ChatMessage(msg);
|
10
|
+
await message.save();
|
11
|
+
return message;
|
12
|
+
} catch (error) {
|
13
|
+
console.error("Error saving message to database:", error);
|
14
|
+
}
|
15
|
+
};
|
16
|
+
|
17
|
+
const getMessages = async (chatId) => {
|
18
|
+
try {
|
19
|
+
const messages = await ChatMessage.find({ chatId }).sort({ createdAt: 1 });
|
20
|
+
return messages;
|
21
|
+
} catch (error) {
|
22
|
+
console.error("Error retrieving messages from database:", error);
|
23
|
+
}
|
24
|
+
};
|
25
|
+
|
26
|
+
return {
|
27
|
+
saveMessage,
|
28
|
+
getMessages,
|
29
|
+
};
|
30
|
+
};
|
31
|
+
|
32
|
+
module.exports = controllerFactory;
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module.exports = (db) => {
|
2
|
+
|
3
|
+
const ChatMessageSchema = new db.mongoose.Schema({
|
4
|
+
username: {
|
5
|
+
type: String,
|
6
|
+
required: true
|
7
|
+
},
|
8
|
+
chatId: {
|
9
|
+
type: String,
|
10
|
+
required: true
|
11
|
+
},
|
12
|
+
text: {
|
13
|
+
type: String,
|
14
|
+
required: true
|
15
|
+
},
|
16
|
+
createdAt: {
|
17
|
+
type: Date,
|
18
|
+
default: Date.now
|
19
|
+
}
|
20
|
+
});
|
21
|
+
|
22
|
+
const ChatMessage = db.mongoose.model('ChatMessage', ChatMessageSchema);
|
23
|
+
|
24
|
+
return ChatMessage;
|
25
|
+
};
|
26
|
+
|
@@ -0,0 +1,53 @@
|
|
1
|
+
// Factories
|
2
|
+
const controllerFactory = require('../controllers/chats.controller.js');
|
3
|
+
// Middlewares
|
4
|
+
const middlewareFactory = require('@pf/src/modules/middlewares/server');
|
5
|
+
// Routes
|
6
|
+
module.exports = function(app, db, wss) {
|
7
|
+
const controller = controllerFactory(db);
|
8
|
+
|
9
|
+
const { verifySignUp, verifyUser } = middlewareFactory(db);
|
10
|
+
|
11
|
+
wss.on('connection', (ws) => {
|
12
|
+
console.log('ws connecting...')
|
13
|
+
console.log(ws)
|
14
|
+
|
15
|
+
ws.on('message', async (message) => {
|
16
|
+
const msg = JSON.parse(message);
|
17
|
+
|
18
|
+
if (msg.type === 'joinChat') {
|
19
|
+
// Обработка joinChat
|
20
|
+
ws.chatId = msg.chatId;
|
21
|
+
console.log(`Client joined chat: ${msg.chatId}`);
|
22
|
+
} else {
|
23
|
+
// Обработка обычных сообщений чата
|
24
|
+
const savedMessage = await controller.saveMessage(msg);
|
25
|
+
|
26
|
+
// Отправка сообщения всем клиентам в том же чате
|
27
|
+
wss.clients.forEach((client) => {
|
28
|
+
if (client.chatId && client.chatId.toString() === msg.chatId) {
|
29
|
+
client.send(JSON.stringify(savedMessage));
|
30
|
+
}
|
31
|
+
});
|
32
|
+
}
|
33
|
+
});
|
34
|
+
});
|
35
|
+
|
36
|
+
|
37
|
+
app.use(function(req, res, next) {
|
38
|
+
res.header(
|
39
|
+
"Access-Control-Allow-Headers",
|
40
|
+
"Access-Control-Allow-Origin: *",
|
41
|
+
"x-access-token, Origin, Content-Type, Accept"
|
42
|
+
);
|
43
|
+
next();
|
44
|
+
});
|
45
|
+
|
46
|
+
// REST API для получения истории сообщений
|
47
|
+
app.get('/messages/:chatId', async (req, res) => {
|
48
|
+
const { chatId } = req.params;
|
49
|
+
const messages = await controller.getMessages(chatId);
|
50
|
+
res.json(messages);
|
51
|
+
});
|
52
|
+
};
|
53
|
+
|
@@ -0,0 +1,61 @@
|
|
1
|
+
import { reactive, readonly } from 'vue';
|
2
|
+
|
3
|
+
const state = reactive({
|
4
|
+
messages: [],
|
5
|
+
currentChatId: null,
|
6
|
+
username: null,
|
7
|
+
websocket: null
|
8
|
+
});
|
9
|
+
|
10
|
+
const methods = {
|
11
|
+
connectWebSocket() {
|
12
|
+
return new Promise(function(resolve, reject) {
|
13
|
+
state.websocket = new WebSocket('wss://localhost:8080');
|
14
|
+
|
15
|
+
state.websocket.onopen = function() {
|
16
|
+
resolve(state.websocket);
|
17
|
+
};
|
18
|
+
state.websocket.onmessage = (event) => {
|
19
|
+
const message = JSON.parse(event.data);
|
20
|
+
|
21
|
+
if (message.chatId === state.currentChatId) {
|
22
|
+
methods.addMessage(message);
|
23
|
+
}
|
24
|
+
};
|
25
|
+
state.websocket.onerror = function(err) {
|
26
|
+
reject(err);
|
27
|
+
};
|
28
|
+
});
|
29
|
+
},
|
30
|
+
setMessages(messages) {
|
31
|
+
state.messages = messages;
|
32
|
+
},
|
33
|
+
addMessage(message) {
|
34
|
+
state.messages.push(message);
|
35
|
+
|
36
|
+
if (state.websocket) {
|
37
|
+
state.websocket.send(JSON.stringify(message));
|
38
|
+
}
|
39
|
+
},
|
40
|
+
async setCurrentChat(chatId) {
|
41
|
+
state.currentChatId = chatId;
|
42
|
+
state.messages = []; // Очистка текущих сообщений при смене чата
|
43
|
+
|
44
|
+
if (state.websocket) {
|
45
|
+
state.websocket.send(JSON.stringify({ type: 'joinChat', chatId }));
|
46
|
+
}
|
47
|
+
|
48
|
+
const response = await fetch(`/messages/${chatId}`);
|
49
|
+
const messages = await response.json();
|
50
|
+
|
51
|
+
methods.setMessages(messages);
|
52
|
+
},
|
53
|
+
setUsername(username) {
|
54
|
+
state.username = username;
|
55
|
+
}
|
56
|
+
};
|
57
|
+
|
58
|
+
export default {
|
59
|
+
state: readonly(state),
|
60
|
+
methods
|
61
|
+
};
|
@@ -37,6 +37,17 @@
|
|
37
37
|
/>
|
38
38
|
</template>
|
39
39
|
|
40
|
+
<template
|
41
|
+
v-if="!firstImage?.content && firstVideo && firstVideo.content && type !== 'blogpostPage'"
|
42
|
+
>
|
43
|
+
<div class="flex-center flex">
|
44
|
+
<video controls class="mn-b-medium object-fit-cover w-100 h-20r">
|
45
|
+
<source :src="firstVideo.content" type="video/mp4">
|
46
|
+
Your browser does not support the video tag.
|
47
|
+
</video>
|
48
|
+
</div>
|
49
|
+
</template>
|
50
|
+
|
40
51
|
<section
|
41
52
|
class="pd-t-zero pd-medium"
|
42
53
|
>
|
@@ -71,9 +82,9 @@
|
|
71
82
|
<slot></slot>
|
72
83
|
|
73
84
|
<Chips
|
74
|
-
|
75
|
-
|
76
|
-
|
85
|
+
v-if="type !== 'short' && blogpost.tags?.length > 0"
|
86
|
+
:chips="blogpost.tags"
|
87
|
+
/>
|
77
88
|
|
78
89
|
</section>
|
79
90
|
|
@@ -103,10 +114,14 @@
|
|
103
114
|
|
104
115
|
const props = defineProps(['blogpost','user', 'type'])
|
105
116
|
|
106
|
-
|
117
|
+
const firstImage = computed(() => {
|
107
118
|
return props.blogpost.content.find(block => block.type === 'ImageUpload');
|
108
119
|
});
|
109
120
|
|
121
|
+
const firstVideo = computed(() => {
|
122
|
+
return props.blogpost.content.find(block => block.type === 'Video');
|
123
|
+
});
|
124
|
+
|
110
125
|
const firstText = computed(() => {
|
111
126
|
return props.blogpost.content.find(block => block.type === 'Textarea');
|
112
127
|
});
|
@@ -1,57 +1,105 @@
|
|
1
1
|
<template>
|
2
|
-
<div class="
|
3
|
-
|
4
|
-
<
|
5
|
-
<h2 class="flex-v-center flex-nowrap flex t-left">
|
6
|
-
<span class="">Topics for </span>
|
7
|
-
|
8
|
-
<Select
|
9
|
-
:options="['today','week','month','year']"
|
10
|
-
v-model:select="blog.state.filter.period"
|
11
|
-
placeholder="Select type"
|
12
|
-
class="
|
13
|
-
w-max
|
14
|
-
mn-l-small
|
15
|
-
bg-grey
|
16
|
-
pd-thin
|
17
|
-
radius-medium
|
18
|
-
h2
|
19
|
-
t-center
|
20
|
-
t-black
|
21
|
-
"
|
22
|
-
/>
|
23
|
-
</h2>
|
24
|
-
</header>
|
25
|
-
|
26
|
-
<ul class="w-100 bg-grey pd-small radius-big mn-b-semi gap-thin flex-nowrap flex">
|
2
|
+
<div style="grid-template-columns: 1fr 3fr 1fr;" class="cols-3 gap-thin pd-thin">
|
3
|
+
|
4
|
+
<ul class="w-100 bg-grey radius-big pd-medium p-medium gap-thin flex-column flex-nowrap flex">
|
27
5
|
<li
|
28
6
|
:class="{'t-white bg-black': route.params.category === 'featured' }"
|
29
|
-
@click="router.push({name: 'Blog'})"
|
30
|
-
class="t-medium pd-thin radius-small">👑 Featured</li>
|
7
|
+
@click="router.push({name: 'Blog', params: { category: 'featured' } })"
|
8
|
+
class="cursor-pointer t-medium pd-thin radius-small">👑 Featured</li>
|
31
9
|
<li
|
32
10
|
:class="{'t-white bg-black': route.params.category === 'popular' }"
|
33
11
|
@click="router.push({name: 'Blog', params: { category: 'popular' } })"
|
34
|
-
class="t-medium pd-thin radius-small">🔥 Popular</li>
|
12
|
+
class="cursor-pointer t-medium pd-thin radius-small">🔥 Popular</li>
|
35
13
|
<li
|
36
14
|
:class="{'t-white bg-black': route.params.category === 'new'}"
|
37
15
|
@click="router.push({name: 'Blog', params: { category: 'new' } })"
|
38
|
-
class="t-medium pd-thin radius-small">🆕 New</li>
|
16
|
+
class="cursor-pointer t-medium pd-thin radius-small">🆕 New</li>
|
39
17
|
<li
|
40
18
|
v-if="auth.state.user._id"
|
41
19
|
:class="{'t-white bg-black': route.params.category === 'following'}"
|
42
20
|
@click="router.push({name: 'Blog', params: { category: 'following' } })"
|
43
|
-
class="t-medium pd-thin radius-small">👥 Following</li>
|
21
|
+
class="cursor-pointer t-medium pd-thin radius-small">👥 Following</li>
|
22
|
+
|
23
|
+
<router-link :to="{name: 'Create BlogPost'}" class="button mn-t-small bg-main w-100">Create Post</router-link>
|
44
24
|
</ul>
|
45
25
|
|
46
|
-
|
26
|
+
<section class="pos-relative">
|
47
27
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
28
|
+
<header class="bg-black t-white radius-big pd-medium pos-relative mn-b-thin flex-v-center t-left flex-nowrap flex">
|
29
|
+
<h2 class="pos-relative flex-v-center flex-nowrap flex t-left">
|
30
|
+
<span class="">Topics for </span>
|
31
|
+
|
32
|
+
<Select
|
33
|
+
:options="['today','week','month','year']"
|
34
|
+
v-model:select="blog.state.filter.period"
|
35
|
+
placeholder="Select type"
|
36
|
+
class="
|
37
|
+
pos-relative
|
38
|
+
w-max
|
39
|
+
mn-l-small
|
40
|
+
bg-grey
|
41
|
+
pd-thin
|
42
|
+
radius-medium
|
43
|
+
h2
|
44
|
+
t-center
|
45
|
+
t-black
|
46
|
+
"
|
47
|
+
/>
|
48
|
+
</h2>
|
49
|
+
</header>
|
50
|
+
|
51
|
+
<router-view v-slot="{ Component, route }">
|
52
|
+
<transition name="scaleIn" mode="out-in">
|
53
|
+
<component ref="page" :key="route.query" :is="Component" />
|
54
|
+
</transition>
|
55
|
+
</router-view>
|
56
|
+
|
57
|
+
</section>
|
53
58
|
|
54
|
-
|
59
|
+
<div class="bg-grey radius-big pd-medium">
|
60
|
+
<div class="gap-thin flex-nowrap flex">
|
61
|
+
<p class="mn-b-small">POPULAR COMMUNITIES</p>
|
62
|
+
<button class="radius-extra flex-center flex i-medium bg-main ">+</button>
|
63
|
+
</div>
|
64
|
+
|
65
|
+
|
66
|
+
<transition name="slide-fade">
|
67
|
+
<Feed
|
68
|
+
:states="{
|
69
|
+
empty: {
|
70
|
+
title: 'No Organization Found',
|
71
|
+
description: 'Currently, there are no organization available.'
|
72
|
+
}
|
73
|
+
}"
|
74
|
+
:store="{
|
75
|
+
read: (options) => organizations.actions.read(options),
|
76
|
+
state: organizations.state
|
77
|
+
}"
|
78
|
+
:options="{
|
79
|
+
user: auth.state.user._id,
|
80
|
+
sort: 'numberOfMemberships',
|
81
|
+
contain: ['blogposts'],
|
82
|
+
limit: 10
|
83
|
+
}"
|
84
|
+
v-slot="{
|
85
|
+
items
|
86
|
+
}"
|
87
|
+
>
|
88
|
+
<CardOrganization
|
89
|
+
v-for="organization in items"
|
90
|
+
:key="organization._id"
|
91
|
+
:organization="organization"
|
92
|
+
:user="auth.state.user"
|
93
|
+
:showProducts="false"
|
94
|
+
:showRating="false"
|
95
|
+
:showFeatured="false"
|
96
|
+
:showFollowers="false"
|
97
|
+
@updateMembership="handleMembershipUpdate"
|
98
|
+
class="mn-b-thin w-100 pd-0 bg-white radius-big o-hidden"
|
99
|
+
/>
|
100
|
+
</Feed>
|
101
|
+
</transition>
|
102
|
+
</div>
|
55
103
|
</div>
|
56
104
|
</template>
|
57
105
|
|
@@ -60,13 +108,22 @@
|
|
60
108
|
import { useRoute,useRouter } from 'vue-router'
|
61
109
|
|
62
110
|
import Select from '@pf/src/components/Select/Select.vue'
|
111
|
+
import Feed from '@pf/src/components/Feed/Feed.vue'
|
112
|
+
import CardOrganization from '@pf/src/modules/organizations/components/blocks/CardOrganization.vue'
|
113
|
+
|
63
114
|
// Import state
|
64
115
|
import * as blog from '@pf/src/modules/community/store/blogposts.js';
|
65
|
-
import * as auth from '@pf/src/modules/auth/store/auth
|
116
|
+
import * as auth from '@pf/src/modules/auth/store/auth'
|
117
|
+
import * as organizations from '@pf/src/modules/organizations/store/organizations'
|
118
|
+
import * as memberships from '@pf/src/modules/organizations/store/memberships'
|
66
119
|
|
67
120
|
// State
|
68
121
|
const route = useRoute();
|
69
|
-
const router = useRouter()
|
122
|
+
const router = useRouter();
|
123
|
+
|
124
|
+
const handleMembershipUpdate = ({ membership, status, target }, statusName, statusNumber) => {
|
125
|
+
memberships.mutations.handleMembershipUpdate(organizations.state.current, membership, status, target, statusName, statusNumber)
|
126
|
+
};
|
70
127
|
|
71
128
|
</script>
|
72
129
|
|
@@ -25,14 +25,15 @@
|
|
25
25
|
const route = useRoute();
|
26
26
|
const router = useRouter();
|
27
27
|
|
28
|
-
if (!route.params.category) {
|
29
|
-
|
30
|
-
}
|
28
|
+
// if (!route.params.category) {
|
29
|
+
// route.params.category = 'popular'
|
30
|
+
// }
|
31
31
|
|
32
32
|
onMounted(() => {
|
33
33
|
|
34
34
|
if (route.query) {
|
35
35
|
const query = route.query;
|
36
|
+
|
36
37
|
const newFilterValue = {
|
37
38
|
tags: query.tags ? query.tags.split(',') : [],
|
38
39
|
period: query.period ? query.period : 'week',
|
@@ -46,8 +46,14 @@
|
|
46
46
|
class="mn-b-regular"
|
47
47
|
/>
|
48
48
|
</section>
|
49
|
+
|
50
|
+
<a v-if="blogpost.source" :href="blogpost.source" target="_blank" class="mn-b-semi d-block w-max radius-big pd-thin bg-black t-white">
|
51
|
+
Check Source 🔗
|
52
|
+
</a>
|
53
|
+
|
49
54
|
</CardBlogpost>
|
50
55
|
|
56
|
+
|
51
57
|
<Publics
|
52
58
|
class="mn-b-small"
|
53
59
|
/>
|
@@ -76,6 +82,7 @@
|
|
76
82
|
import Comments from '@pf/src/modules/community/components/sections/Comments.vue';
|
77
83
|
|
78
84
|
import Image from '@pf/src/modules/constructor/components/elements/Image.vue';
|
85
|
+
import VideoPlayer from '@pf/src/modules/constructor/components/elements/VideoPlayer.vue';
|
79
86
|
|
80
87
|
import * as blog from '@pf/src/modules/community/store/blogposts.js';
|
81
88
|
import * as auth from '@pf/src/modules/auth/store/auth';
|
@@ -102,7 +109,9 @@
|
|
102
109
|
'H2': 'h2',
|
103
110
|
'Bullets': 'p',
|
104
111
|
'Caption': 'p',
|
105
|
-
'ImageUpload': Image
|
112
|
+
'ImageUpload': Image,
|
113
|
+
'Video': VideoPlayer,
|
114
|
+
'Link': 'a'
|
106
115
|
};
|
107
116
|
|
108
117
|
function getBlockProps(block) {
|
@@ -2,15 +2,16 @@
|
|
2
2
|
<article
|
3
3
|
class="pd-thin"
|
4
4
|
>
|
5
|
-
<section
|
6
|
-
|
7
|
-
class="
|
5
|
+
<section
|
6
|
+
style="min-height: 100%;"
|
7
|
+
class="w-100 bg-grey pd-big radius-big"
|
8
8
|
>
|
9
9
|
<!-- Title -->
|
10
10
|
<div
|
11
11
|
class="w-full h-full"
|
12
12
|
>
|
13
13
|
<Textarea
|
14
|
+
v-if="post"
|
14
15
|
:prop="post"
|
15
16
|
content="name"
|
16
17
|
placeholder="Enter post title"
|
@@ -19,11 +20,14 @@
|
|
19
20
|
</div>
|
20
21
|
|
21
22
|
<Constructor
|
23
|
+
v-if="post"
|
22
24
|
:content="post.content"
|
23
25
|
@update="update => post.content = update"
|
24
26
|
/>
|
25
27
|
</section>
|
26
28
|
|
29
|
+
|
30
|
+
<transition name="scaleIn" >
|
27
31
|
<section v-if="post" class="pd-thin pos-sticky pos-l-0 pos-b-0 w-100 ">
|
28
32
|
<div class="pd-thin radius-big bg-main w-100 flex-nowrap flex">
|
29
33
|
<a v-if="route.params.url" @click="onDelete()" class="mn-r-auto bg-red t-white t-black button">Delete</a>
|
@@ -31,6 +35,7 @@
|
|
31
35
|
<a @click="openPulicationPopup()" class="mn-l-thin bg-black t-white button">Publish</a>
|
32
36
|
</div>
|
33
37
|
</section>
|
38
|
+
</transition>
|
34
39
|
|
35
40
|
<Popup
|
36
41
|
title="Добавить участника"
|
@@ -45,6 +50,13 @@
|
|
45
50
|
:tags="post.tags"
|
46
51
|
/>
|
47
52
|
|
53
|
+
<h5 class="mn-b-thin">Add source:</h5>
|
54
|
+
<Field
|
55
|
+
v-model:field="post.source"
|
56
|
+
placeholder="Add full link to the source"
|
57
|
+
class="mn-b-medium bg-grey radius-medium pd-small"
|
58
|
+
/>
|
59
|
+
|
48
60
|
<h5 class="mn-b-thin">Add to public:</h5>
|
49
61
|
<SelectMulti
|
50
62
|
v-model="selectedOrganization"
|
@@ -65,10 +77,11 @@
|
|
65
77
|
name="prices"
|
66
78
|
class="w-100"
|
67
79
|
/>
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
80
|
+
</div>
|
81
|
+
|
82
|
+
<Button :submit="onSubmit" :callback="redirectTo" class="w-100 bg-black t-white">Publish</Button>
|
83
|
+
</Popup>
|
84
|
+
|
72
85
|
</article>
|
73
86
|
</template>
|
74
87
|
|
@@ -80,6 +93,7 @@ import Popup from '@pf/src/components/Popup/Popup.vue'
|
|
80
93
|
import FieldTags from '@pf/src/components/FieldTags/FieldTags.vue'
|
81
94
|
import BlockTags from '@pf/src/components/FieldTags/BlockTags.vue'
|
82
95
|
import Checkbox from '@pf/src/components/Checkbox/Checkbox.vue'
|
96
|
+
import Field from '@pf/src/components/Field/Field.vue'
|
83
97
|
import SelectMulti from '@pf/src/components/SelectMulti/SelectMulti.vue'
|
84
98
|
import Button from '@pf/src/components/Button/Button.vue';
|
85
99
|
|
@@ -101,6 +115,18 @@ const selectedTags = ref([]);
|
|
101
115
|
const selectedOrganization = ref(null);
|
102
116
|
|
103
117
|
onMounted(async () =>{
|
118
|
+
const dataPublics = await organizations.actions.read({
|
119
|
+
user: auth.state.user._id,
|
120
|
+
postable: auth.state.user._id,
|
121
|
+
limit: 100
|
122
|
+
})
|
123
|
+
|
124
|
+
publics.value = dataPublics.map(publicItem => ({
|
125
|
+
name: publicItem.profile.name,
|
126
|
+
_id: publicItem._id,
|
127
|
+
photo: publicItem.profile.photo
|
128
|
+
}));
|
129
|
+
|
104
130
|
|
105
131
|
if (route.params.url) {
|
106
132
|
const data = await blog.read({ user: auth.state.user._id, url: route.params.url });
|
@@ -128,19 +154,11 @@ onMounted(async () =>{
|
|
128
154
|
photo: post.value.owner.target.profile.photo
|
129
155
|
}
|
130
156
|
|
131
|
-
|
132
|
-
user: auth.state.user._id,
|
133
|
-
postable: auth.state.user._id,
|
134
|
-
limit: 100
|
135
|
-
})
|
157
|
+
|
136
158
|
|
137
159
|
console.log(dataPublics)
|
138
160
|
|
139
|
-
|
140
|
-
name: publicItem.profile.name,
|
141
|
-
_id: publicItem._id,
|
142
|
-
photo: publicItem.profile.photo
|
143
|
-
}));
|
161
|
+
|
144
162
|
|
145
163
|
})
|
146
164
|
// /////////////////////////////////////////
|
@@ -224,6 +242,7 @@ function onSubmit() {
|
|
224
242
|
if (route.params.url) {
|
225
243
|
blog.update(post.value)
|
226
244
|
.then(response => {
|
245
|
+
console.log(post.value)
|
227
246
|
router.push({ name: 'BlogPost', params: { url: response.url } });
|
228
247
|
})
|
229
248
|
.catch(error => {
|
@@ -1,9 +1,15 @@
|
|
1
1
|
<template>
|
2
|
-
<div class="container container-joinus">
|
2
|
+
<div class="w-100 container container-joinus">
|
3
3
|
<div class="content">
|
4
|
-
<span class="h0 mn-b-big">
|
5
|
-
|
6
|
-
|
4
|
+
<span class="h0 mn-b-big">
|
5
|
+
{{ userCount.toLocaleString() }}
|
6
|
+
</span>
|
7
|
+
<p class="w-m-33r t-center mn-b-small p-big">
|
8
|
+
Together, we're shaping the future of the globals cannabis community.
|
9
|
+
</p>
|
10
|
+
<router-link :to="{name: 'Sign In'}" class="bg-black t-white button">
|
11
|
+
Join Now
|
12
|
+
</router-link>
|
7
13
|
</div>
|
8
14
|
</div>
|
9
15
|
</template>
|
@@ -59,22 +65,22 @@
|
|
59
65
|
<script setup>
|
60
66
|
import { ref, onMounted, nextTick } from 'vue';
|
61
67
|
|
62
|
-
const userCount = ref(
|
68
|
+
const userCount = ref(1230); // начальное значение
|
63
69
|
|
64
70
|
const images = ref([
|
65
|
-
'/
|
66
|
-
'/
|
67
|
-
'/
|
68
|
-
'/
|
69
|
-
'/
|
70
|
-
'/
|
71
|
+
'/avatars/01.png',
|
72
|
+
'/avatars/02.png',
|
73
|
+
'/avatars/03.png',
|
74
|
+
'/avatars/04.png',
|
75
|
+
'/avatars/05.png',
|
76
|
+
'/avatars/06.png'
|
71
77
|
]);
|
72
78
|
|
73
79
|
|
74
80
|
const increaseUserCount = () => {
|
75
81
|
setInterval(() => {
|
76
|
-
userCount.value += Math.floor(Math.random() *
|
77
|
-
},
|
82
|
+
userCount.value += Math.floor(Math.random() * 2) + 1; // случайное увеличение от 1 до 5
|
83
|
+
}, 1330); // каждые 0.33 секунды,95
|
78
84
|
};
|
79
85
|
|
80
86
|
|