@ozdao/martyrs 0.2.545 → 0.2.547
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/martyrs/src/components/Button/{Button.vue2.cjs → Button.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Button/{Button.vue2.js.map → Button.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Button/{Button.vue2.js → Button.vue.js} +2 -2
- package/dist/martyrs/src/components/Button/Button.vue.js.map +1 -0
- package/dist/martyrs/src/components/Feed/{Feed.vue2.cjs → Feed.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Feed/{Feed.vue2.js.map → Feed.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Feed/{Feed.vue2.js → Feed.vue.js} +2 -2
- package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -0
- package/dist/martyrs/src/components/Field/{Field.vue2.cjs → Field.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Field/{Field.vue2.js.map → Field.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Field/{Field.vue2.js → Field.vue.js} +2 -2
- package/dist/martyrs/src/components/Field/Field.vue.js.map +1 -0
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs +2 -2
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +2 -2
- package/dist/martyrs/src/components/FieldTags/{BlockTags.vue2.cjs → BlockTags.vue.cjs} +2 -2
- package/dist/martyrs/src/components/FieldTags/{BlockTags.vue2.js.map → BlockTags.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/FieldTags/{BlockTags.vue2.js → BlockTags.vue.js} +2 -2
- package/dist/martyrs/src/components/FieldTags/BlockTags.vue.js.map +1 -0
- package/dist/martyrs/src/components/Popup/{Popup.vue2.cjs → Popup.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Popup/{Popup.vue2.js.map → Popup.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Popup/{Popup.vue2.js → Popup.vue.js} +2 -2
- package/dist/martyrs/src/components/Popup/Popup.vue.js.map +1 -0
- package/dist/martyrs/src/components/UploadImage/{UploadImage.vue2.cjs → UploadImage.vue.cjs} +2 -2
- package/dist/martyrs/src/components/UploadImage/{UploadImage.vue2.js.map → UploadImage.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/UploadImage/{UploadImage.vue2.js → UploadImage.vue.js} +2 -2
- package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js.map +1 -0
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.cjs +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/ProfileEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.cjs +3 -3
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +3 -3
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +2 -2
- package/dist/martyrs/src/modules/backoffice/components/pages/Dashboard.vue.cjs +1 -1
- package/dist/martyrs/src/modules/backoffice/components/pages/Dashboard.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/Blog.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/pages/Blog.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +5 -5
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +5 -5
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.cjs +2 -2
- package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.js +2 -2
- package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.cjs +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +6 -6
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +6 -6
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +4 -4
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +4 -4
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +3 -3
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +3 -3
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs +2 -2
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsSearch.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsSearch.vue.js +1 -1
- package/dist/martyrs/src/modules/gallery/components/pages/Gallery.vue.cjs +2 -2
- package/dist/martyrs/src/modules/gallery/components/pages/Gallery.vue.js +2 -2
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +5 -5
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +5 -5
- package/dist/martyrs/src/modules/globals/views/components/blocks/AlertDialog.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/AlertDialog.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockMultiselect.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockMultiselect.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.cjs +25 -117
- package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.js +25 -117
- package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.js +1 -1
- package/dist/martyrs/src/modules/icons/components/IconSearchPopup.vue.cjs +2 -2
- package/dist/martyrs/src/modules/icons/components/IconSearchPopup.vue.js +2 -2
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs +2 -2
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +2 -2
- package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.cjs +2 -2
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +2 -2
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs +2 -2
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js +2 -2
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +4 -4
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +4 -4
- package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/pages/Catalog.vue.cjs +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/pages/Catalog.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +3 -3
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +3 -3
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +3 -3
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +3 -3
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs +3 -3
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +3 -3
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +3 -3
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +3 -3
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +3 -3
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +3 -3
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +3 -3
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +3 -3
- package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +1 -1
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.cjs +1 -1
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js +1 -1
- package/dist/martyrs/src/modules/notifications/router/notifications.router.cjs +1 -1
- package/dist/martyrs/src/modules/notifications/router/notifications.router.cjs.map +1 -1
- package/dist/martyrs/src/modules/notifications/router/notifications.router.js +1 -1
- package/dist/martyrs/src/modules/notifications/router/notifications.router.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.cjs +2 -2
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.cjs +2 -2
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.cjs +3 -3
- package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +3 -3
- package/dist/martyrs/src/modules/orders/components/pages/Applications.vue.cjs +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/Applications.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/Customers.vue.cjs +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/Customers.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +4 -4
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +4 -4
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +3 -3
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +3 -3
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs +6 -6
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +6 -6
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.cjs +5 -5
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +5 -5
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs +6 -6
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +6 -6
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +6 -6
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +6 -6
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +6 -6
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +6 -6
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +5 -5
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +5 -5
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.cjs +3 -3
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +3 -3
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +3 -3
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +3 -3
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +2 -2
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs +2 -2
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +2 -2
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.cjs +2 -2
- package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +5 -5
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +5 -5
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +3 -3
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.cjs +3 -3
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +3 -3
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/sections/EditIngredients.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditIngredients.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +4 -4
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +4 -4
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs +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.cjs +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.cjs +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.cjs +3 -3
- package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs +2 -2
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +2 -2
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Map.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +4 -4
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +4 -4
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +3 -3
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/pages/Payments.vue.cjs +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/pages/Payments.vue.js +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +2 -2
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +2 -2
- package/package.json +1 -1
- package/src/modules/globals/TASK.MD +9 -102
- package/src/modules/globals/views/components/partials/Footer.vue +27 -127
- package/src/modules/notifications/router/notifications.router.js +1 -1
- package/dist/martyrs/src/components/Button/Button.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/Feed/Feed.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/Field/Field.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/FieldTags/BlockTags.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/Popup/Popup.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/UploadImage/UploadImage.vue2.cjs.map +0 -1
|
@@ -3,15 +3,15 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
3
3
|
const vue = require("vue");
|
|
4
4
|
const vueRouter = require("vue-router");
|
|
5
5
|
const Block = require("../../../../components/Block/Block.vue.cjs");
|
|
6
|
-
const UploadImage = require("../../../../components/UploadImage/UploadImage.
|
|
6
|
+
const UploadImage = require("../../../../components/UploadImage/UploadImage.vue.cjs");
|
|
7
7
|
;/* empty css */
|
|
8
|
-
const Field = require("../../../../components/Field/Field.
|
|
8
|
+
const Field = require("../../../../components/Field/Field.vue.cjs");
|
|
9
9
|
const Select = require("../../../../components/Select/Select.vue2.cjs");
|
|
10
10
|
const Checkbox = require("../../../../components/Checkbox/Checkbox.vue.cjs");
|
|
11
11
|
const Address = require("../../../../components/Address/Address.vue.cjs");
|
|
12
12
|
const LocationMarker = require("../../../../components/LocationMarker/LocationMarker.vue.cjs");
|
|
13
|
-
const Button = require("../../../../components/Button/Button.
|
|
14
|
-
;/* empty css
|
|
13
|
+
const Button = require("../../../../components/Button/Button.vue.cjs");
|
|
14
|
+
;/* empty css */
|
|
15
15
|
const WorktimeEdit = require("../sections/WorktimeEdit.vue.cjs");
|
|
16
16
|
const spots = require("../../store/spots.cjs");
|
|
17
17
|
const _hoisted_1 = { class: "for-transition w-100 cols-1 pd-thin gap-thin" };
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { ref, onMounted, createElementBlock, openBlock, createVNode, createElementVNode, withCtx, toDisplayString, unref, createTextVNode, Fragment, renderList } from "vue";
|
|
2
2
|
import { useRouter, useRoute } from "vue-router";
|
|
3
3
|
import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
|
|
4
|
-
import UploadImage from "../../../../components/UploadImage/UploadImage.
|
|
4
|
+
import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
|
|
5
5
|
/* empty css */
|
|
6
|
-
import Field from "../../../../components/Field/Field.
|
|
6
|
+
import Field from "../../../../components/Field/Field.vue.js";
|
|
7
7
|
import Select from "../../../../components/Select/Select.vue2.js";
|
|
8
8
|
import _sfc_main$3 from "../../../../components/Checkbox/Checkbox.vue.js";
|
|
9
9
|
import _sfc_main$4 from "../../../../components/Address/Address.vue.js";
|
|
10
10
|
import _sfc_main$5 from "../../../../components/LocationMarker/LocationMarker.vue.js";
|
|
11
|
-
import _sfc_main$2 from "../../../../components/Button/Button.
|
|
12
|
-
/* empty css
|
|
11
|
+
import _sfc_main$2 from "../../../../components/Button/Button.vue.js";
|
|
12
|
+
/* empty css */
|
|
13
13
|
import WorktimeEdit from "../sections/WorktimeEdit.vue.js";
|
|
14
14
|
import { actions, state } from "../../store/spots.js";
|
|
15
15
|
const _hoisted_1 = { class: "for-transition w-100 cols-1 pd-thin gap-thin" };
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
3
|
const vue = require("vue");
|
|
4
4
|
const vueRouter = require("vue-router");
|
|
5
|
-
const Feed = require("../../../../components/Feed/Feed.
|
|
5
|
+
const Feed = require("../../../../components/Feed/Feed.vue.cjs");
|
|
6
6
|
const CardSpot = require("../blocks/CardSpot.vue.cjs");
|
|
7
7
|
const IconPlus = require("../../../icons/navigation/IconPlus.vue.cjs");
|
|
8
8
|
const auth = require("../../../auth/views/store/auth.cjs");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ref, onMounted, onUnmounted, createElementBlock, openBlock, createCommentVNode, createElementVNode, unref, createVNode, Fragment, renderList, toDisplayString, withCtx, createBlock } from "vue";
|
|
2
2
|
import { useRoute, useRouter } from "vue-router";
|
|
3
|
-
import _sfc_main$2 from "../../../../components/Feed/Feed.
|
|
3
|
+
import _sfc_main$2 from "../../../../components/Feed/Feed.vue.js";
|
|
4
4
|
import CardSpot from "../blocks/CardSpot.vue.js";
|
|
5
5
|
import _sfc_main$1 from "../../../icons/navigation/IconPlus.vue.js";
|
|
6
6
|
import { state } from "../../../auth/views/store/auth.js";
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
3
|
const vue = require("vue");
|
|
4
4
|
const vueI18n = require("vue-i18n");
|
|
5
|
-
const Button = require("../../../../components/Button/Button.
|
|
6
|
-
const Field = require("../../../../components/Field/Field.
|
|
5
|
+
const Button = require("../../../../components/Button/Button.vue.cjs");
|
|
6
|
+
const Field = require("../../../../components/Field/Field.vue.cjs");
|
|
7
7
|
const Select = require("../../../../components/Select/Select.vue2.cjs");
|
|
8
8
|
const Checkbox = require("../../../../components/Checkbox/Checkbox.vue.cjs");
|
|
9
|
-
const Popup = require("../../../../components/Popup/Popup.
|
|
9
|
+
const Popup = require("../../../../components/Popup/Popup.vue.cjs");
|
|
10
10
|
;/* empty css */
|
|
11
11
|
const _pluginVue_exportHelper = require("../../../../../../_virtual/_plugin-vue_export-helper.cjs");
|
|
12
12
|
const _hoisted_1 = { class: "working-hours-editor w-100" };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { mergeModels, useModel, ref, computed, onMounted, createElementBlock, openBlock, createElementVNode, createVNode, toDisplayString, unref, withCtx, createTextVNode, Fragment, renderList, normalizeClass, createCommentVNode, createBlock } from "vue";
|
|
2
2
|
import { useI18n } from "vue-i18n";
|
|
3
|
-
import _sfc_main$1 from "../../../../components/Button/Button.
|
|
4
|
-
import Field from "../../../../components/Field/Field.
|
|
3
|
+
import _sfc_main$1 from "../../../../components/Button/Button.vue.js";
|
|
4
|
+
import Field from "../../../../components/Field/Field.vue.js";
|
|
5
5
|
import Select from "../../../../components/Select/Select.vue2.js";
|
|
6
6
|
import _sfc_main$3 from "../../../../components/Checkbox/Checkbox.vue.js";
|
|
7
|
-
import _sfc_main$2 from "../../../../components/Popup/Popup.
|
|
7
|
+
import _sfc_main$2 from "../../../../components/Popup/Popup.vue.js";
|
|
8
8
|
/* empty css */
|
|
9
9
|
import _export_sfc from "../../../../../../_virtual/_plugin-vue_export-helper.js";
|
|
10
10
|
const _hoisted_1 = { class: "working-hours-editor w-100" };
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
3
|
const vue = require("vue");
|
|
4
4
|
const wallet = require("../../localization/wallet.json.cjs");
|
|
5
|
-
const Field = require("../../../../../components/Field/Field.
|
|
5
|
+
const Field = require("../../../../../components/Field/Field.vue.cjs");
|
|
6
6
|
const vueI18n = require("vue-i18n");
|
|
7
7
|
const _hoisted_1 = { class: "bg-grey radius-big mn-t-semi mn-b-semi flex flex-justify-between" };
|
|
8
8
|
const _sfc_main = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createElementBlock, openBlock, Fragment, createElementVNode, createVNode, unref, toDisplayString } from "vue";
|
|
2
2
|
import text from "../../localization/wallet.json.js";
|
|
3
|
-
import Field from "../../../../../components/Field/Field.
|
|
3
|
+
import Field from "../../../../../components/Field/Field.vue.js";
|
|
4
4
|
import { useI18n } from "vue-i18n";
|
|
5
5
|
const _hoisted_1 = { class: "bg-grey radius-big mn-t-semi mn-b-semi flex flex-justify-between" };
|
|
6
6
|
const _sfc_main = {
|
|
@@ -5,7 +5,7 @@ const vueI18n = require("vue-i18n");
|
|
|
5
5
|
const bignumber = require("../../../../../../node_modules/.pnpm/bignumber.js@9.2.1/node_modules/bignumber.js/bignumber.cjs");
|
|
6
6
|
const wallet_store = require("../../store/wallet.store.cjs");
|
|
7
7
|
const wallet = require("../../localization/wallet.json.cjs");
|
|
8
|
-
const Field = require("../../../../../components/Field/Field.
|
|
8
|
+
const Field = require("../../../../../components/Field/Field.vue.cjs");
|
|
9
9
|
const Select = require("../../../../../components/Select/Select.vue2.cjs");
|
|
10
10
|
const _hoisted_1 = { class: "mn-b-small t-center t-bold" };
|
|
11
11
|
const _hoisted_2 = { class: "t-semi" };
|
|
@@ -3,7 +3,7 @@ import { useI18n } from "vue-i18n";
|
|
|
3
3
|
import { BigNumber } from "../../../../../../node_modules/.pnpm/bignumber.js@9.2.1/node_modules/bignumber.js/bignumber.js";
|
|
4
4
|
import { state, actions } from "../../store/wallet.store.js";
|
|
5
5
|
import text from "../../localization/wallet.json.js";
|
|
6
|
-
import Field from "../../../../../components/Field/Field.
|
|
6
|
+
import Field from "../../../../../components/Field/Field.vue.js";
|
|
7
7
|
import Select from "../../../../../components/Select/Select.vue2.js";
|
|
8
8
|
const _hoisted_1 = { class: "mn-b-small t-center t-bold" };
|
|
9
9
|
const _hoisted_2 = { class: "t-semi" };
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
3
3
|
const vue = require("vue");
|
|
4
4
|
const vueRouter = require("vue-router");
|
|
5
5
|
const SectionPageTitle = require("../../../../globals/views/components/sections/SectionPageTitle.vue.cjs");
|
|
6
|
-
const Feed = require("../../../../../components/Feed/Feed.
|
|
6
|
+
const Feed = require("../../../../../components/Feed/Feed.vue.cjs");
|
|
7
7
|
const payments_store = require("../../store/payments.store.cjs");
|
|
8
8
|
;/* empty css */
|
|
9
9
|
const _hoisted_1 = { class: "pd-thin" };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ref, createElementBlock, openBlock, createVNode, unref, withCtx, Fragment, renderList, toDisplayString } from "vue";
|
|
2
2
|
import { useRoute, useRouter } from "vue-router";
|
|
3
3
|
import _sfc_main$1 from "../../../../globals/views/components/sections/SectionPageTitle.vue.js";
|
|
4
|
-
import _sfc_main$2 from "../../../../../components/Feed/Feed.
|
|
4
|
+
import _sfc_main$2 from "../../../../../components/Feed/Feed.vue.js";
|
|
5
5
|
import { actions } from "../../store/payments.store.js";
|
|
6
6
|
/* empty css */
|
|
7
7
|
const _hoisted_1 = { class: "pd-thin" };
|
|
@@ -5,8 +5,8 @@ const vueI18n = require("vue-i18n");
|
|
|
5
5
|
const Web3 = require("web3");
|
|
6
6
|
const wallet_store = require("../../store/wallet.store.cjs");
|
|
7
7
|
const wallet = require("../../localization/wallet.json.cjs");
|
|
8
|
-
const Popup = require("../../../../../components/Popup/Popup.
|
|
9
|
-
const Button = require("../../../../../components/Button/Button.
|
|
8
|
+
const Popup = require("../../../../../components/Popup/Popup.vue.cjs");
|
|
9
|
+
const Button = require("../../../../../components/Button/Button.vue.cjs");
|
|
10
10
|
require("vue-router");
|
|
11
11
|
;/* empty css */
|
|
12
12
|
;/* empty css */
|
|
@@ -3,8 +3,8 @@ import { useI18n } from "vue-i18n";
|
|
|
3
3
|
import Web3 from "web3";
|
|
4
4
|
import { state, actions } from "../../store/wallet.store.js";
|
|
5
5
|
import text from "../../localization/wallet.json.js";
|
|
6
|
-
import _sfc_main$3 from "../../../../../components/Popup/Popup.
|
|
7
|
-
import _sfc_main$1 from "../../../../../components/Button/Button.
|
|
6
|
+
import _sfc_main$3 from "../../../../../components/Popup/Popup.vue.js";
|
|
7
|
+
import _sfc_main$1 from "../../../../../components/Button/Button.vue.js";
|
|
8
8
|
import "vue-router";
|
|
9
9
|
/* empty css */
|
|
10
10
|
/* empty css */
|
package/package.json
CHANGED
|
@@ -1,105 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
Переиименовать все в менеджеры - storeMaganer, wsManager, moduleManager и сделать одинаковый экспорт и имена ws.manager.js, store.manager.js, module.manager.js, i18n.manager.js
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
При переходе на роут, который требует загрузки нового модуля:
|
|
5
|
-
1. После клика на ссылку UI полностью блокируется
|
|
6
|
-
2. Начинается загрузка модуля (2-3 секунды)
|
|
7
|
-
3. Лоадер показывается только ПОСЛЕ загрузки модуля на мгновение
|
|
8
|
-
4. Затем происходит переход на новый роут
|
|
3
|
+
ну и в целом в store.js все сделать как это менеджер сторов названия
|
|
9
4
|
|
|
10
|
-
|
|
5
|
+
import store from './views/classes/store.js';
|
|
6
|
+
import websockets from './views/classes/globals.websocket.js';
|
|
7
|
+
import { i18nManager } from '@martyrs/src/modules/globals/views/classes/globals.i18n.js';
|
|
8
|
+
import { moduleRegistry } from './views/classes/module-registry.js';
|
|
11
9
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
- **Файл:** `globals.app.js:89-119`
|
|
16
|
-
- Модули загружаются динамически в `router.beforeEach` guard
|
|
17
|
-
- Модули регистрируют роуты через `router.addRoute()` после загрузки
|
|
18
|
-
- После загрузки возвращается `to.fullPath` для повторной навигации
|
|
19
|
-
|
|
20
|
-
### Условие показа лоадера
|
|
21
|
-
- **Файл:** `Client.vue:16`
|
|
22
|
-
- Условие: `v-if="!page || globals.state.loading"`
|
|
23
|
-
- `page` - ref на текущий компонент страницы
|
|
24
|
-
- `globals.state.loading` - глобальный флаг загрузки
|
|
25
|
-
|
|
26
|
-
## Корень проблемы
|
|
27
|
-
Vue Router `beforeEach` guard блокирует все обновления DOM до своего завершения:
|
|
28
|
-
- Guards выполняются синхронно и блокируют навигацию
|
|
29
|
-
- Vue не может обновить DOM пока `beforeEach` не завершится
|
|
30
|
-
- Даже установка `globals.state.loading = true` не приводит к рендерингу
|
|
31
|
-
|
|
32
|
-
**Подтверждение из документации Vue Router:**
|
|
33
|
-
> "Guards may be resolved asynchronously, and the navigation is considered pending before all hooks have been resolved"
|
|
34
|
-
|
|
35
|
-
**GitHub issue vuejs/vue #9200:**
|
|
36
|
-
> "Vue.nextTick doesn't seem to cover browser re-render"
|
|
37
|
-
|
|
38
|
-
## Что пробовали и не сработало
|
|
39
|
-
|
|
40
|
-
### 1. nextTick после установки loading флага
|
|
41
|
-
```javascript
|
|
42
|
-
store.globals.state.loading = true;
|
|
43
|
-
await nextTick();
|
|
44
|
-
```
|
|
45
|
-
**Результат:** Не работает, т.к. nextTick работает с микротасками, которые выполняются ДО отрисовки браузером
|
|
46
|
-
|
|
47
|
-
### 2. requestAnimationFrame
|
|
48
|
-
```javascript
|
|
49
|
-
store.globals.state.loading = true;
|
|
50
|
-
await new Promise(resolve => requestAnimationFrame(resolve));
|
|
51
|
-
```
|
|
52
|
-
**Результат:** Не работает, beforeEach все равно блокирует рендеринг
|
|
53
|
-
|
|
54
|
-
### 3. setTimeout с return false
|
|
55
|
-
```javascript
|
|
56
|
-
setTimeout(async () => {
|
|
57
|
-
// загрузка модулей
|
|
58
|
-
router.push(to.fullPath);
|
|
59
|
-
}, 0);
|
|
60
|
-
return false;
|
|
61
|
-
```
|
|
62
|
-
**Результат:** Приводит к 404, т.к. роуты еще не зарегистрированы
|
|
63
|
-
|
|
64
|
-
### 4. Watch на route.path в Client.vue
|
|
65
|
-
```javascript
|
|
66
|
-
watch(() => route.path, () => {
|
|
67
|
-
page.value = null;
|
|
68
|
-
});
|
|
69
|
-
```
|
|
70
|
-
**Результат:** Не работает, т.к. route.path меняется только ПОСЛЕ завершения beforeEach
|
|
71
|
-
|
|
72
|
-
### 5. Свой beforeEach в Client.vue
|
|
73
|
-
```javascript
|
|
74
|
-
router.beforeEach((to, from) => {
|
|
75
|
-
page.value = null;
|
|
76
|
-
});
|
|
77
|
-
```
|
|
78
|
-
**Результат:** Не работает, все beforeEach выполняются синхронно и блокируют рендеринг
|
|
79
|
-
|
|
80
|
-
### 6. Создание DOM элемента напрямую
|
|
81
|
-
```javascript
|
|
82
|
-
const loader = document.createElement('div');
|
|
83
|
-
document.body.appendChild(loader);
|
|
84
|
-
```
|
|
85
|
-
**Результат:** Работает, но это хак, обходящий Vue реактивность
|
|
86
|
-
|
|
87
|
-
## Ограничения
|
|
88
|
-
1. **Нельзя загружать модули после навигации** - модули регистрируют роуты, без них будет 404
|
|
89
|
-
2. **Нельзя загружать модули вне beforeEach** - нужно гарантировать загрузку ДО навигации
|
|
90
|
-
3. **return to.fullPath необходим** - для повторной навигации с новыми роутами
|
|
91
|
-
|
|
92
|
-
## Возможные решения
|
|
93
|
-
|
|
94
|
-
### 1. Использовать HTML лоадер (не Vue компонент)
|
|
95
|
-
Добавить лоадер прямо в index.html, показывать/скрывать через классы
|
|
96
|
-
|
|
97
|
-
### 2. Изменить архитектуру загрузки
|
|
98
|
-
- Предзагружать все возможные роуты
|
|
99
|
-
- Использовать другой подход к динамической регистрации
|
|
100
|
-
|
|
101
|
-
### 3. Использовать Web Workers
|
|
102
|
-
Загружать модули в воркере, но это потребует полного рефакторинга
|
|
103
|
-
|
|
104
|
-
## Вывод
|
|
105
|
-
Проблема фундаментальная: Vue Router beforeEach блокирует рендеринг, а мы обязаны загружать модули именно там из-за динамической регистрации роутов. Единственное рабочее решение - создавать лоадер в обход Vue (прямой DOM манипуляцией).
|
|
10
|
+
сюда же потом пойдет
|
|
11
|
+
-нотификейшен менеджер
|
|
12
|
+
-алерт менеджер
|
|
@@ -39,108 +39,8 @@ const props = defineProps({
|
|
|
39
39
|
const router = useRouter()
|
|
40
40
|
const route = useRoute()
|
|
41
41
|
|
|
42
|
-
// Localization
|
|
43
|
-
const text = {
|
|
44
|
-
locale: 'en',
|
|
45
|
-
messages: {
|
|
46
|
-
en: {
|
|
47
|
-
linkAppStore: 'https://play.google.com/store/apps/details?id=com.threestepsrental.app',
|
|
48
|
-
linkGooglePlay: 'https://play.google.com/store/apps/details?id=com.threestepsrental.app',
|
|
49
|
-
// Contact
|
|
50
|
-
description: "3SR – Premium Video Gear Rentals for Filmmakers and Content Creators",
|
|
51
|
-
contact: 'Contact',
|
|
52
|
-
phone: 'Phone / WhatsApp',
|
|
53
|
-
email: 'Email',
|
|
54
|
-
hours: 'Hours',
|
|
55
|
-
hours_text: 'Mon–Sun, 10:00–19:00',
|
|
56
|
-
app: 'Get Our App',
|
|
57
|
-
|
|
58
|
-
// Subscribe
|
|
59
|
-
subscribe: 'Subscribe',
|
|
60
|
-
subscribe_text: 'Get updates on new equipment and special offers',
|
|
61
|
-
email_placeholder: 'Enter your email',
|
|
62
|
-
follow: 'Follow Us',
|
|
63
|
-
|
|
64
|
-
// Footer
|
|
65
|
-
year: '2025 ',
|
|
66
|
-
heart: "❤",
|
|
67
|
-
copyright: 'Three Steps Studio Ltd. All Rights Reserved.',
|
|
68
|
-
ozdao: 'Builded in OZ DAO',
|
|
69
|
-
|
|
70
|
-
// Contact info
|
|
71
|
-
phoneNumber: '+44 77 7878 4893',
|
|
72
|
-
emailAddress: "info{'@'}3stepsprod.com",
|
|
73
|
-
|
|
74
|
-
// Navigation columns
|
|
75
|
-
navigationColumns: [
|
|
76
|
-
{
|
|
77
|
-
sections: [
|
|
78
|
-
{
|
|
79
|
-
title: 'Equipment',
|
|
80
|
-
items: [
|
|
81
|
-
{ name: 'Cameras', url: 'products/categories/cameras' },
|
|
82
|
-
{ name: 'Lighting', url: 'products/categories/lighting-kits' },
|
|
83
|
-
{ name: 'Stabilizers', url: 'products/categories/stabilization-motion' },
|
|
84
|
-
{ name: 'Accessories', url: 'products/categories/accessories' }
|
|
85
|
-
]
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
title: 'Services',
|
|
89
|
-
items: [
|
|
90
|
-
{ name: 'Kits & Packages', url: 'products/categories/kits-packages' },
|
|
91
|
-
{ name: 'Studio Hire', url: 'products/categories/studio-hire' },
|
|
92
|
-
{ name: 'Delivery', url: 'products/categories/delivery' },
|
|
93
|
-
{ name: 'Production Help', url: 'products/categories/production-help' }
|
|
94
|
-
]
|
|
95
|
-
}
|
|
96
|
-
]
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
sections: [
|
|
100
|
-
{
|
|
101
|
-
title: 'Company',
|
|
102
|
-
items: [
|
|
103
|
-
{ name: 'About Us', url: 'pages/about' },
|
|
104
|
-
{ name: 'Contact', url: 'pages/contact' },
|
|
105
|
-
{ name: 'FAQ', url: 'pages/faq' },
|
|
106
|
-
{ name: 'Blog', url: '/community' }
|
|
107
|
-
]
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
title: 'Legal',
|
|
111
|
-
items: [
|
|
112
|
-
{ name: 'Privacy Policy', url: 'pages/privacy-policy' },
|
|
113
|
-
{ name: 'Cookie Policy', url: 'pages/cookie-policy' },
|
|
114
|
-
{ name: 'Terms of Use', url: 'pages/terms-of-use' },
|
|
115
|
-
{ name: 'EULA', url: 'pages/eula' }
|
|
116
|
-
]
|
|
117
|
-
}
|
|
118
|
-
]
|
|
119
|
-
}
|
|
120
|
-
],
|
|
121
|
-
|
|
122
|
-
// Social links
|
|
123
|
-
socialLinks: [
|
|
124
|
-
{
|
|
125
|
-
name: 'IconInstagram',
|
|
126
|
-
url: 'https://www.instagram.com/3stepsprod'
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
name: 'IconYoutube',
|
|
130
|
-
url: 'https://www.youtube.com/@threestepsproduction'
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
name: 'IconWhatsapp',
|
|
134
|
-
url: 'https://api.whatsapp.com/send/?phone=447778784893&text&type=phone_number&app_absent=0'
|
|
135
|
-
}
|
|
136
|
-
]
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
42
|
const { t, te, tm } = useI18n({
|
|
142
|
-
useScope: 'global'
|
|
143
|
-
messages: text.messages
|
|
43
|
+
useScope: 'global'
|
|
144
44
|
})
|
|
145
45
|
|
|
146
46
|
// Component mapping for social icons
|
|
@@ -178,61 +78,61 @@ const iconComponents = {
|
|
|
178
78
|
|
|
179
79
|
<!-- Contact Block -->
|
|
180
80
|
<div class="col w-max-15r">
|
|
181
|
-
<p class="p-semi t-medium mn-b-semi">{{ t('description') }}</p>
|
|
81
|
+
<p class="p-semi t-medium mn-b-semi">{{ t('footer.description') }}</p>
|
|
182
82
|
|
|
183
83
|
<div class="mn-b-semi flex flex-column gap-small">
|
|
184
84
|
<a
|
|
185
|
-
:href="`tel:${t('phoneNumber').replace(/\s/g, '')}`"
|
|
85
|
+
:href="`tel:${t('footer.phoneNumber').replace(/\s/g, '')}`"
|
|
186
86
|
class="flex mn-b-micro gap-micro flex-v-center transition-opacity hover-opacity-70"
|
|
187
87
|
:class="theme === 'light' ? 't-black' : 't-white'"
|
|
188
88
|
>
|
|
189
89
|
<IconPhone class="i-regular" :fill="theme === 'light' ? 'rgb(var(--black))' : 'rgb(var(--white))'" />
|
|
190
|
-
<span class="t-small">{{ t('phoneNumber') }}</span>
|
|
90
|
+
<span class="t-small">{{ t('footer.phoneNumber') }}</span>
|
|
191
91
|
</a>
|
|
192
92
|
|
|
193
93
|
<a
|
|
194
|
-
:href="`mailto:${t('emailAddress')}`"
|
|
94
|
+
:href="`mailto:${t('footer.emailAddress')}`"
|
|
195
95
|
class="flex mn-b-micro gap-micro flex-v-center transition-opacity hover-opacity-70"
|
|
196
96
|
:class="theme === 'light' ? 't-black' : 't-white'"
|
|
197
97
|
>
|
|
198
98
|
<IconEmail class="i-regular" :fill="theme === 'light' ? 'rgb(var(--black))' : 'rgb(var(--white))'" />
|
|
199
|
-
<span class="t-small">{{ t('emailAddress') }}</span>
|
|
99
|
+
<span class="t-small">{{ t('footer.emailAddress') }}</span>
|
|
200
100
|
</a>
|
|
201
101
|
|
|
202
102
|
<div class="flex mn-b-micro gap-micro flex-v-center">
|
|
203
103
|
<IconTime class="i-regular" :fill="theme === 'light' ? 'rgb(var(--black))' : 'rgb(var(--white))'" />
|
|
204
|
-
<span class="t-small">{{ t('hours_text') }}</span>
|
|
104
|
+
<span class="t-small">{{ t('footer.hours_text') }}</span>
|
|
205
105
|
</div>
|
|
206
106
|
</div>
|
|
207
107
|
|
|
208
|
-
<h4 class="h5 t-medium mn-b-regular">{{ t('app') }}</h4>
|
|
108
|
+
<h4 class="h5 t-medium mn-b-regular">{{ t('footer.app') }}</h4>
|
|
209
109
|
<div class="w-100 flex-nowrap flex gap-thin">
|
|
210
110
|
<a
|
|
211
|
-
v-if="te('linkAppStore') || te('label')"
|
|
212
|
-
:href="te('linkAppStore') ? t('linkAppStore') : null"
|
|
213
|
-
:target="te('linkAppStore') ? '_blank' : null"
|
|
111
|
+
v-if="te('footer.linkAppStore') || te('footer.label')"
|
|
112
|
+
:href="te('footer.linkAppStore') ? t('footer.linkAppStore') : null"
|
|
113
|
+
:target="te('footer.linkAppStore') ? '_blank' : null"
|
|
214
114
|
class="pos-relative w-100 h-100"
|
|
215
115
|
>
|
|
216
116
|
<span
|
|
217
|
-
v-if="te('label')"
|
|
117
|
+
v-if="te('footer.label')"
|
|
218
118
|
class="z-index-2 radius-medium bg-main t-medium uppercase pd-thin pos-absolute pos-r-10-negative pos-t-10-negative"
|
|
219
119
|
>
|
|
220
|
-
{{ t('label') }}
|
|
120
|
+
{{ t('footer.label') }}
|
|
221
121
|
</span>
|
|
222
122
|
<LabelAppStore class="w-100 h-max" alt="Download on App Store"/>
|
|
223
123
|
</a>
|
|
224
124
|
|
|
225
125
|
<a
|
|
226
|
-
v-if="te('linkGooglePlay') || te('label')"
|
|
227
|
-
:href="te('linkGooglePlay') ? t('linkGooglePlay') : null"
|
|
228
|
-
:target="te('linkGooglePlay') ? '_blank' : null"
|
|
126
|
+
v-if="te('footer.linkGooglePlay') || te('footer.label')"
|
|
127
|
+
:href="te('footer.linkGooglePlay') ? t('footer.linkGooglePlay') : null"
|
|
128
|
+
:target="te('footer.linkGooglePlay') ? '_blank' : null"
|
|
229
129
|
class="pos-relative w-100 h-100"
|
|
230
130
|
>
|
|
231
131
|
<span
|
|
232
|
-
v-if="te('label')"
|
|
132
|
+
v-if="te('footer.label')"
|
|
233
133
|
class="z-index-2 pd-thin radius-medium bg-main t-medium uppercase pos-absolute pos-r-10-negative pos-t-10-negative"
|
|
234
134
|
>
|
|
235
|
-
{{ t('label') }}
|
|
135
|
+
{{ t('footer.label') }}
|
|
236
136
|
</span>
|
|
237
137
|
<LabelGooglePlay class="w-100 h-max" alt="Download on Google Play"/>
|
|
238
138
|
</a>
|
|
@@ -241,7 +141,7 @@ const iconComponents = {
|
|
|
241
141
|
|
|
242
142
|
<!-- Navigation Columns -->
|
|
243
143
|
<div class="cols-2 gap-big">
|
|
244
|
-
<div v-for="(column, colIndex) in tm('navigationColumns')" :key="colIndex" class="flex flex-column gap-medium">
|
|
144
|
+
<div v-for="(column, colIndex) in tm('footer.navigationColumns')" :key="colIndex" class="flex flex-column gap-medium">
|
|
245
145
|
<div v-for="(section, sectionIndex) in column.sections" :key="sectionIndex" class="">
|
|
246
146
|
<h4 class="h5 t-medium mn-b-regular">{{ section.title }}</h4>
|
|
247
147
|
<nav>
|
|
@@ -263,8 +163,8 @@ const iconComponents = {
|
|
|
263
163
|
|
|
264
164
|
<!-- Subscribe Block -->
|
|
265
165
|
<div class="col">
|
|
266
|
-
<h4 class="h5 t-medium mn-b-regular">{{ t('subscribe') }}</h4>
|
|
267
|
-
<p class="t-small mn-b-small t-transp">{{ t('subscribe_text') }}</p>
|
|
166
|
+
<h4 class="h5 t-medium mn-b-regular">{{ t('footer.subscribe') }}</h4>
|
|
167
|
+
<p class="t-small mn-b-small t-transp">{{ t('footer.subscribe_text') }}</p>
|
|
268
168
|
|
|
269
169
|
<FieldSubscribeNewsletter
|
|
270
170
|
:action="''"
|
|
@@ -273,11 +173,11 @@ const iconComponents = {
|
|
|
273
173
|
class="d-inline-flex mn-b-medium bg-light t-black w-100"
|
|
274
174
|
/>
|
|
275
175
|
|
|
276
|
-
<h4 class="h5 t-medium mn-b-regular">{{ t('follow') }}</h4>
|
|
176
|
+
<h4 class="h5 t-medium mn-b-regular">{{ t('footer.follow') }}</h4>
|
|
277
177
|
<!-- Social Links -->
|
|
278
178
|
<div class="flex gap-thin">
|
|
279
179
|
<a
|
|
280
|
-
v-for="social in tm('socialLinks')"
|
|
180
|
+
v-for="social in tm('footer.socialLinks')"
|
|
281
181
|
:key="social.name"
|
|
282
182
|
:href="social.url"
|
|
283
183
|
target="_blank"
|
|
@@ -321,14 +221,14 @@ const iconComponents = {
|
|
|
321
221
|
>
|
|
322
222
|
<!-- Copyright -->
|
|
323
223
|
<p class="t-small t-medium uppercase">
|
|
324
|
-
{{ t('year') }}
|
|
325
|
-
<span class="t-main copyleft">{{ t('heart') }}</span>
|
|
326
|
-
{{ t('copyright') }}
|
|
224
|
+
{{ t('footer.year') }}
|
|
225
|
+
<span class="t-main copyleft">{{ t('footer.heart') }}</span>
|
|
226
|
+
{{ t('footer.copyright') }}
|
|
327
227
|
</p>
|
|
328
228
|
|
|
329
229
|
<a href="https://ozdao.dev" target="_blank" rel="noopener" class="flex-nowrap flex-v-center flex t-medium gap-thin br-1px br-light pd-thin radius-thin">
|
|
330
230
|
<Logotype class="h-1r w-auto"/>
|
|
331
|
-
<span>{{ t('ozdao') }}</span>
|
|
231
|
+
<span>{{ t('footer.ozdao') }}</span>
|
|
332
232
|
</a>
|
|
333
233
|
</div>
|
|
334
234
|
</footer>
|
|
@@ -3,7 +3,7 @@ import Notifications from '../components/pages/Notifications.vue';
|
|
|
3
3
|
import NotificationPreferences from '../components/sections/NotificationPreferences.vue';
|
|
4
4
|
|
|
5
5
|
const nofitications = {
|
|
6
|
-
path: 'notifications',
|
|
6
|
+
path: '/notifications',
|
|
7
7
|
component: NotificationsLayout,
|
|
8
8
|
children: [
|
|
9
9
|
{
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Button.vue2.cjs","sources":["../../../../../src/components/Button/Button.vue"],"sourcesContent":["<script setup>\nimport { ref } from 'vue'\n\nimport Loader from '@martyrs/src/components/Loader/Loader.vue'\n\nimport IconCheckmark from '@martyrs/src/modules/icons/navigation/IconCheckmark.vue';\nimport IconCross from '@martyrs/src/modules/icons/navigation/IconCross.vue';\n\nconst props = defineProps({\n submit: {\n type: Function,\n default: async () => { console.log('Button click.') }\n },\n text: {\n type: Object,\n default: () => ({\n success: null,\n error: null\n })\n },\n counter: {\n type: Object\n },\n callback: {\n type: Function,\n default: async () => { console.log('Button callback.') }\n },\n callbackDelay: {\n type: Number,\n default: 750\n },\n showSucces: {\n type: Boolean,\n default: true\n },\n showLoader: {\n type: Boolean,\n default: true\n },\n validation: {\n type: Boolean,\n default: false\n },\n})\n\nconst emits = defineEmits(['error'])\n\nconst button = ref(null)\nconst error = ref(null)\nconst loading = ref(false)\nconst finished = ref(false)\n\nasync function Submit() {\n console.log('click')\n \n button.value.style['pointer-events'] = 'none'\n error.value = null\n loading.value = true\n\n // Функция для сброса состояния кнопки\n const resetButton = () => {\n if (button.value) {\n button.value.style.pointerEvents = 'auto'\n loading.value = false\n finished.value = false\n error.value = null\n }\n }\n\n try {\n await props.submit()\n\n button.value.classList.replace('bg-main', 'bg-second')\n loading.value = false\n\n // Используем функцию сброса состояния кнопки здесь\n if (props.showSucces) { \n finished.value = true\n setTimeout(() => {\n resetButton()\n button.value.classList.replace('bg-second', 'bg-main')\n }, 500)\n } else {\n resetButton()\n button.value.classList.replace('bg-second', 'bg-main')\n }\n\n // Если есть callback, мы также установим таймер для его вызова\n if (props.callback) setTimeout(() => props.callback(), props.callbackDelay)\n\n } catch (err) {\n emits('error', err)\n // Если возникла ошибка, мы изменяем стили и устанавливаем сообщение об ошибке\n button.value.classList.replace('bg-main', 'bg-fourth-nano')\n loading.value = false\n error.value = true\n \n // После задержки снова сбрасываем состояние кнопки\n setTimeout(() => {\n resetButton()\n // Так как класс кнопки был изменен, вернем его в исходное состояние\n button.value.classList.replace('bg-fourth-nano', 'bg-main')\n }, 1330)\n }\n}\n</script>\n\n<template>\n <button \n @click.stop=\"Submit\"\n :disabled=\"validation\"\n ref=\"button\"\n\t\tclass=\"button\"\n :class=\"{ 'button--disabled': loading || validation }\"\n >\n <Transition name=\"content\" mode=\"out-in\">\n <!-- Default slot content -->\n <span v-if=\"!loading && !error && !finished || !showLoader\" class=\"button-content\">\n <slot></slot>\n </span>\n <!-- Loading state -->\n <Loader v-else-if=\"loading && !error && showLoader\" class=\"icon button-content pos-relative pos-t-0 pos-l-0 loading\"/>\n <!-- Success state -->\n <span v-else-if=\"finished && showSucces\" class=\"button-content t-semi t-center w-100 loading t-black\">\n <template v-if=\"text.success\">\n {{ text.success }}\n </template>\n <IconCheckmark v-else class=\"icon\" />\n </span>\n <!-- Error state -->\n <span v-else-if=\"error\" class=\"button-content t-center w-100 error\">\n <template v-if=\"text.error\">\n {{ text.error }}\n </template>\n <IconCross v-else class=\"icon\" />\n </span>\n </Transition>\n \n <!-- Counter -->\n <div v-if=\"counter\" class=\"button-counter flex flex-center\">\n <span>{{ counter }}</span>\n </div>\n </button>\n</template>\n\n<style lang=\"scss\">\nbutton[disabled] {\n opacity: 0.75 !important;\n pointer-events: none !important;\n cursor: default !important;\n color: rgba(var(--dark), 0.33) !important;\n background: rgba(var(--light), 1) !important;\n}\n\na.button {\n text-box: trim-both cap alphabetic;\n}\n\n.button {\n display: flex;\n padding: var(--small);\n border-radius: var(--small);\n text-box: trim-both cap alphabetic;\n transform: scale(1);\n opacity: 1;\n align-items: center;\n justify-content: center;\n color: black;\n text-align: center;\n text-transform: uppercase;\n font-size: 1rem;\n letter-spacing: 5%;\n transition: all 0.33s ease;\n\n &:hover {\n cursor: pointer;\n opacity: 0.9;\n }\n\n &:active {\n transform: scale(0.95);\n }\n\n &-small {\n padding: 0.75rem;\n border-radius: 0.5rem;\n height: fit-content;\n }\n\n .button-counter {\n position: absolute;\n right: -8px;\n bottom: -8px;\n background: yellow;\n height: 16px;\n border-radius: 16px;\n width: 16px;\n font-weight: 500;\n text-align: center;\n line-height: 16px;\n font-size: 10px;\n }\n}\n\n.button-content {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n}\n\n.icon {\n width: 1rem;\n height: 1rem;\n}\n\n/* Vue Transitions */\n.content-enter-active,\n.content-leave-active {\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.content-enter-from {\n opacity: 0;\n transform: translateY(8px) scale(0.95);\n}\n\n.content-leave-to {\n opacity: 0;\n transform: translateY(-8px) scale(0.95);\n}\n\n.content-enter-to,\n.content-leave-from {\n opacity: 1;\n transform: translateY(0) scale(1);\n}\n</style>"],"names":["ref"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,UAAM,QAAQ;AAqCd,UAAM,QAAQ;AAEd,UAAM,SAASA,IAAAA,IAAI,IAAI;AACvB,UAAM,QAAQA,IAAAA,IAAI,IAAI;AACtB,UAAM,UAAUA,IAAAA,IAAI,KAAK;AACzB,UAAM,WAAWA,IAAAA,IAAI,KAAK;AAE1B,mBAAe,SAAS;AACtB,cAAQ,IAAI,OAAO;AAEnB,aAAO,MAAM,MAAM,gBAAgB,IAAI;AACvC,YAAM,QAAQ;AACd,cAAQ,QAAQ;AAGhB,YAAM,cAAc,MAAM;AACxB,YAAI,OAAO,OAAO;AAChB,iBAAO,MAAM,MAAM,gBAAgB;AACnC,kBAAQ,QAAQ;AAChB,mBAAS,QAAQ;AACjB,gBAAM,QAAQ;AAAA,QAChB;AAAA,MACF;AAEA,UAAI;AACF,cAAM,MAAM,OAAM;AAElB,eAAO,MAAM,UAAU,QAAQ,WAAW,WAAW;AACrD,gBAAQ,QAAQ;AAGhB,YAAI,MAAM,YAAY;AACpB,mBAAS,QAAQ;AACjB,qBAAW,MAAM;AACf,wBAAW;AACX,mBAAO,MAAM,UAAU,QAAQ,aAAa,SAAS;AAAA,UACvD,GAAG,GAAG;AAAA,QACR,OAAO;AACL,sBAAW;AACX,iBAAO,MAAM,UAAU,QAAQ,aAAa,SAAS;AAAA,QACvD;AAGA,YAAI,MAAM,SAAU,YAAW,MAAM,MAAM,SAAQ,GAAI,MAAM,aAAa;AAAA,MAE5E,SAAS,KAAK;AACZ,cAAM,SAAS,GAAG;AAElB,eAAO,MAAM,UAAU,QAAQ,WAAW,gBAAgB;AAC1D,gBAAQ,QAAQ;AAChB,cAAM,QAAQ;AAGd,mBAAW,MAAM;AACf,sBAAW;AAEX,iBAAO,MAAM,UAAU,QAAQ,kBAAkB,SAAS;AAAA,QAC5D,GAAG,IAAI;AAAA,MACT;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Feed.vue2.cjs","sources":["../../../../../src/components/Feed/Feed.vue"],"sourcesContent":["<template>\n <div v-if=\"search || date || (sort && !sort.hideButton)\" style=\"transform: scale(1);\" class=\"mn-b-thin pos-relative z-index-2 pos-relative flex-nowrap flex gap-thin\">\n\n <BlockSearch \n v-if=\"search\"\n :placeholder=\"search.placeholder || 'Search...'\"\n :class=\"search.class || 'bg-light'\"\n @search=\"updateSearch\"\n :autofocus=\"search.autofocus\"\n />\n\n <FiltersBar\n v-if=\"filter\"\n v-model=\"filter.selected\"\n :filters=\"filterConfig\"\n :class=\"filter.class || 'mobile-only'\"\n />\n\n <Dropdown \n v-if=\"date\"\n :label=\"{\n component: ButtonDate,\n props: { date: date }\n }\" \n :class=\"date.class || 'bg-light'\"\n class=\"flex-child flex-child-shrink-0 pd-r-small pd-l-small pd-thin bg-light radius-medium\"\n :align=\"search ? 'right' : 'left'\"\n >\n\n <Calendar\n v-model:date=\"date\"\n :locale=\"$i18n.locale\"\n :allowRange=\"true\"\n class=\"radius-medium w-100 o-hidden bg-light\"\n />\n </Dropdown> \n\n <Dropdown \n v-if=\"sort && !sort.hideButton\"\n :label=\"{\n component: ButtonSort,\n props: { order: sort.order },\n class: 'w-1r'\n }\" \n :class=\"sort.class || 'bg-light'\"\n class=\"radius-medium aspect-1x1 h-100\"\n :align=\"search ? 'right' : 'left'\"\n >\n\n <BlockSorting\n v-model:param=\"sort.param\"\n v-model:order=\"sort.order\"\n :options=\"sort.options\"\n class=\"h-100 pd-small radius-medium t-white bg-black\"\n />\n </Dropdown> \n\n <!-- Actions -->\n <template\n v-if=\"actions.length\"\n >\n <template v-for=\"action in actions\" :key=\"action.key\">\n <div \n :class=\"action.class || 'bg-light'\"\n class=\"flex-center flex pd-thin bg-light radius-medium aspect-1x1 h-100\"\n >\n <component\n :is=\"action.component\"\n @click=\"action.handler\"\n class=\"w-1r h-auto\"\n >\n </component>\n\n </div>\n </template>\n </template>\n </div>\n\n <TransitionGroup \n v-if=\"isLoading && !keepSlotVisible\"\n tag=\"ul\" \n name=\"scaleTransition\" \n class=\"pos-relative z-index-1\"\n :class=\"$attrs.class\"\n >\n <Skeleton\n v-if=\"isLoading && !skeleton?.hide\"\n v-for=\"i in currentLimit\" \n :structure=\"skeleton.structure\"\n :horizontal=\"skeleton.horizontal\"\n :loading=\"skeleton.apply_to_slot\"\n :key=\"'skeleton-' + i\"\n :class=\"replaceClasses('radius-medium bg-light pd-thin flex-child-default o-hidden d-block', skeleton.class)\"\n />\n <Loader v-if=\"isLoading && skeleton?.hide\"/>\n </TransitionGroup>\n\n <TransitionGroup \n tag=\"ul\" \n v-else-if=\"itemsList.length < 1\"\n name=\"feed\"\n >\n <EmptyState\n v-if=\"!isLoading && itemsList.length < 1\"\n :title=\"states.empty.title\"\n :description=\"states.empty.description\"\n :action=\"states.empty.action\"\n :callback=\"states.empty.callback\"\n :class=\"replaceClasses('pd-medium bg-light radius-medium', states.empty.class)\"\n />\n </TransitionGroup>\n\n <TransitionGroup \n v-else-if=\"!keepSlotVisible || !isLoading\"\n tag=\"ul\" \n name=\"feed\"\n :class=\"$attrs.class\"\n >\n <slot\n :items=\"itemsList\"\n >\n </slot>\n </TransitionGroup>\n\n <!-- Slot visible with overlay loader -->\n <div v-else class=\"pos-relative\">\n <TransitionGroup \n tag=\"ul\" \n name=\"feed\"\n :class=\"$attrs.class\"\n >\n <slot\n :items=\"itemsList\"\n >\n </slot>\n </TransitionGroup>\n \n <!-- Overlay loader -->\n <div \n v-if=\"isLoading && keepSlotVisible\"\n class=\"pos-absolute pos-t-0 pos-l-0 w-100 h-100 flex-center bg-white-transp-90 z-index-10\"\n >\n <Loader />\n </div>\n </div>\n\n <button\n v-if=\"showLoadMore && hasMoreItems && itemsList.length > 0 && !isLoadingExtra\"\n @click=\"loadMoreItems\"\n class=\"col-w-100 mn-t-thin w-100 t-black bg-main button\"\n >\n Load More\n </button>\n\n <div v-else key=\"sentinel\" ref=\"sentinel\" class=\"sentinel\"></div> \n\n <div\n v-if=\"isLoadingExtra\"\n class=\"col-w-100 w-100 pos-relative\"\n >\n <Loader/>\n </div>\n \n\n</template>\n\n<script setup>\nimport { ref, computed, onMounted, onUnmounted, watch } from 'vue';\nimport { useGlobalMixins } from '@martyrs/src/modules/globals/views/mixins/mixins.js';\n\nimport SkeletonEvent from '@martyrs/src/modules/icons/skeletons/SkeletonEvent.vue'\n\nimport Loader from '@martyrs/src/components/Loader/Loader.vue';\nimport Skeleton from '@martyrs/src/components/Skeleton/Skeleton.vue';\nimport EmptyState from '@martyrs/src/components/EmptyState/EmptyState.vue';\nimport Dropdown from \"@martyrs/src/components/Dropdown/Dropdown.vue\";\nimport Calendar from '@martyrs/src/components/Calendar/Calendar.vue'\nimport BottomSheet from '@martyrs/src/components/BottomSheet/BottomSheet.vue';\n\nimport BlockSearch from '@martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue'\nimport BlockSorting from '@martyrs/src/modules/globals/views/components/blocks/BlockSorting.vue'\n\nimport FiltersBar from '@martyrs/src/modules/globals/views/components/sections/Filters.vue'\n\nimport ButtonSort from '@martyrs/src/modules/globals/views/components/elements/ButtonSort.vue'\nimport ButtonDate from '@martyrs/src/modules/globals/views/components/elements/ButtonDate.vue'\n\nimport IconFilter from '@martyrs/src/modules/icons/navigation/IconFilter.vue'\nimport IconEvents from '@martyrs/src/modules/icons/entities/IconEvents.vue'\n\nconst { replaceClasses } = useGlobalMixins();\n\nconst search = defineModel('search')\nconst sort = defineModel('sort')\nconst filter = defineModel('filter')\nconst date = defineModel('date')\nconst items = defineModel('items')\n\n// Внутреннее хранилище для случая, когда v-model:items не передан\nconst internalItems = ref([])\n\n// Элегантное решение через computed\nconst itemsList = computed({\n get: () => items.value ?? internalItems.value,\n set: (val) => {\n if (items.value !== undefined) {\n items.value = val\n } else {\n internalItems.value = val\n }\n }\n})\n\nconst filterConfig = computed(() => {\n if (!filter.value?.options) return []\n \n return filter.value.options.map(opt => ({\n key: opt.value,\n title: opt.title,\n type: 'options',\n options: opt.options || [],\n defaultValue: null\n }))\n})\n\n// Пропсы\nconst props = defineProps({\n showLoadMore: {\n type: Boolean,\n default: true\n },\n LoadMore: {\n type: Boolean,\n default: true\n },\n search: {\n type: [Boolean, Object],\n default: false\n },\n states: {\n type: Object,\n default: () => ({\n empty: {\n title: 'Nothing found',\n description: 'Sorry, nothing found',\n },\n }),\n },\n actions: {\n type: Array,\n default: () => []\n },\n skeleton: {\n type: Object,\n default: () => ({\n hide: false,\n horizontal: false,\n structure: [\n { block: 'text', size: 'medium' },\n { block: 'text', size: 'large' },\n { block: 'button', size: 'small' }\n ]\n }),\n \n },\n store: {\n type: Object,\n default: () => ({\n read: Function,\n state: Object,\n }),\n },\n external: {\n type: Boolean,\n default: false\n },\n options: {\n type: Object,\n default: () => ({\n category: null,\n limit: 10, \n skip: 0 ,\n owner: null,\n creator: null,\n customer: null,\n user: null,\n status: null,\n period: null,\n contain: null,\n }),\n },\n keepSlotVisible: {\n type: Boolean,\n default: false\n },\n});\n \nconst hasMoreItems = ref(false);\n\nlet isLoading = ref(true);\nlet isLoadingExtra = ref(false);\nlet sentinel = ref(null)\n\nlet currentSkip = ref(props.options.skip ? props.options.skip : 0);\nlet currentLimit = ref(props.options.limit ? props.options.limit : 10);\n\nlet currentSearch = ref('');\nlet isSearching = ref(false);\n\nlet requestId = 0;\n\nfunction debounce(fn, delay) {\n let timeoutId = null;\n return (...args) => {\n clearTimeout(timeoutId);\n timeoutId = setTimeout(() => fn(...args), delay);\n };\n}\n\nconst debouncedSearch = debounce((value) => {\n isSearching.value = true;\n currentSearch.value = value;\n currentSkip.value = 0;\n currentLimit.value = 10;\n fetchItems();\n}, 500);\n\nfunction updateSearch(search) {\n debouncedSearch(search);\n}\n\nconst removeNullValues = (obj) => {\n return Object.fromEntries(\n Object.entries(obj).filter(([_, value]) => value != null)\n );\n};\n\nconst loadMoreItems = async () => {\n if (!hasMoreItems.value || isLoadingExtra.value) {\n return;\n }\n \n isLoadingExtra.value = true;\n \n const currentRequestId = ++requestId;\n\n currentSkip.value += currentLimit.value;\n \n try {\n const allParams = {\n skip: currentSkip.value,\n limit: currentLimit.value,\n search: currentSearch.value,\n dateStart: date.value?.start,\n dateEnd: date.value?.end,\n sortParam: sort.value?.param,\n sortOrder: sort.value?.order,\n ...props.options\n };\n\n const params = removeNullValues(allParams);\n\n const data = await props.store.read(params);\n\n if (currentRequestId !== requestId) {\n return;\n }\n\n if (data.length === 0) {\n hasMoreItems.value = false;\n } else if (data.length < currentLimit.value) {\n hasMoreItems.value = false;\n } else {\n hasMoreItems.value = true;\n }\n\n // Элегантное обновление через computed setter\n itemsList.value = [...itemsList.value, ...data];\n \n } catch (error) {\n console.error('Load more error:', error);\n } finally {\n if (currentRequestId === requestId) {\n isLoadingExtra.value = false;\n }\n }\n};\n\nconst fetchItems = async () => {\n isLoading.value = true;\n \n const currentRequestId = ++requestId;\n \n if (isSearching.value) {\n itemsList.value = [];\n isSearching.value = false;\n }\n \n try {\n const allParams = {\n skip: currentSkip.value,\n limit: currentLimit.value,\n search: currentSearch.value,\n dateStart: date.value?.start,\n dateEnd: date.value?.end,\n sortParam: sort.value?.param,\n sortOrder: sort.value?.order,\n ...props.options\n };\n\n const params = removeNullValues(allParams);\n\n const data = await props.store.read(params);\n\n if (currentRequestId !== requestId) {\n return;\n }\n\n if (data.length === 0) {\n hasMoreItems.value = false;\n } else if (data.length < currentLimit.value) {\n hasMoreItems.value = false;\n } else {\n hasMoreItems.value = true;\n }\n\n // Элегантное обновление через computed setter\n itemsList.value = data;\n \n } catch (error) {\n console.error('Fetch error:', error);\n } finally {\n if (currentRequestId === requestId) {\n isLoading.value = false;\n }\n }\n};\n\nwatch(\n [() => props.external, () => date.value, () => ({...sort.value}), () => ({...props.options})],\n ([newExternal, newDate, newSort, newOptions], [oldExternal, oldDate, oldSort, oldOptions]) => {\n if (\n newExternal !== oldExternal ||\n newDate !== oldDate ||\n newSort?.order !== oldSort?.order ||\n newSort?.param !== oldSort?.param ||\n JSON.stringify(newOptions) !== JSON.stringify(oldOptions)\n ) {\n currentSkip.value = 0;\n fetchItems();\n }\n },\n { deep: true }\n);\n\nlet observer = null\n\nonMounted(async () => {\n await fetchItems()\n\n if (typeof window !== 'undefined' && !props.showLoadMore && props.LoadMore) {\n observer = new IntersectionObserver(entries => {\n if (entries.some(entry => entry.isIntersecting)) {\n loadMoreItems()\n }\n })\n\n if (sentinel.value) observer.observe(sentinel.value)\n }\n});\n\nonUnmounted(() => {\n if (observer) {\n observer.disconnect();\n }\n});\n</script>\n\n<style>\n.feed-move,\n.feed-enter-active,\n.feed-leave-active {\n transition: all 0.5s ease;\n}\n\n.feed-enter-from,\n.feed-leave-to {\n opacity: 0;\n transform: translateY(30px);\n}\n\n.feed-leave-active {\n position: absolute;\n}\n</style>"],"names":["useGlobalMixins","_useModel","ref","computed","search","watch","onMounted","onUnmounted"],"mappings":"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"}
|