dynamically load gallery

This commit is contained in:
Henry Jameson 2026-06-04 18:27:09 +03:00
commit 3aca1ce6c0
7 changed files with 24 additions and 15 deletions

View file

@ -1,9 +1,9 @@
import { mapState as mapPiniaState } from 'pinia' import { mapState as mapPiniaState } from 'pinia'
import { mapGetters, mapState } from 'vuex' import { mapGetters, mapState } from 'vuex'
import { defineAsyncComponent } from 'vue'
import Attachment from 'src/components/attachment/attachment.vue' import Attachment from 'src/components/attachment/attachment.vue'
import ChatMessageDate from 'src/components/chat_message_date/chat_message_date.vue' import ChatMessageDate from 'src/components/chat_message_date/chat_message_date.vue'
import Gallery from 'src/components/gallery/gallery.vue'
import LinkPreview from 'src/components/link-preview/link-preview.vue' import LinkPreview from 'src/components/link-preview/link-preview.vue'
import Popover from 'src/components/popover/popover.vue' import Popover from 'src/components/popover/popover.vue'
import StatusContent from 'src/components/status_content/status_content.vue' import StatusContent from 'src/components/status_content/status_content.vue'
@ -34,7 +34,9 @@ const ChatMessage = {
Attachment, Attachment,
StatusContent, StatusContent,
UserAvatar, UserAvatar,
Gallery, Gallery: defineAsyncComponent(
() => import( 'src/components/gallery/gallery.vue'),
),
LinkPreview, LinkPreview,
ChatMessageDate, ChatMessageDate,
UserPopover, UserPopover,

View file

@ -1,7 +1,6 @@
import { cloneDeep } from 'lodash' import { cloneDeep } from 'lodash'
import { defineAsyncComponent } from 'vue' import { defineAsyncComponent } from 'vue'
import Gallery from 'src/components/gallery/gallery.vue'
import StatusContent from 'src/components/status_content/status_content.vue' import StatusContent from 'src/components/status_content/status_content.vue'
import { useMergedConfigStore } from 'src/stores/merged_config.js' import { useMergedConfigStore } from 'src/stores/merged_config.js'
@ -24,7 +23,9 @@ const Draft = {
), ),
StatusContent, StatusContent,
Gallery, Gallery: defineAsyncComponent(
() => import( 'src/components/gallery/gallery.vue')
),
}, },
props: { props: {
draft: { draft: {

View file

@ -39,7 +39,7 @@
class="faint" class="faint"
>{{ $t('drafts.empty') }}</p> >{{ $t('drafts.empty') }}</p>
</span> </span>
<gallery <Gallery
v-if="draft.files?.length !== 0" v-if="draft.files?.length !== 0"
class="attachments media-body" class="attachments media-body"
:compact="true" :compact="true"

View file

@ -1,17 +1,15 @@
import { debounce, map, reject, uniqBy } from 'lodash' import { debounce, map, reject, uniqBy } from 'lodash'
import { mapActions, mapState } from 'pinia' import { mapActions, mapState } from 'pinia'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import { defineAsyncComponent } from 'vue'
import Attachment from 'src/components/attachment/attachment.vue' import Attachment from 'src/components/attachment/attachment.vue'
import Checkbox from 'src/components/checkbox/checkbox.vue' import Checkbox from 'src/components/checkbox/checkbox.vue'
import DraftCloser from 'src/components/draft_closer/draft_closer.vue' import DraftCloser from 'src/components/draft_closer/draft_closer.vue'
import EmojiInput from 'src/components/emoji_input/emoji_input.vue' import EmojiInput from 'src/components/emoji_input/emoji_input.vue'
import suggestor from 'src/components/emoji_input/suggestor.js' import suggestor from 'src/components/emoji_input/suggestor.js'
import Gallery from 'src/components/gallery/gallery.vue'
import MediaUpload from 'src/components/media_upload/media_upload.vue' import MediaUpload from 'src/components/media_upload/media_upload.vue'
import PollForm from 'src/components/poll/poll_form.vue'
import Popover from 'src/components/popover/popover.vue' import Popover from 'src/components/popover/popover.vue'
import QuoteForm from 'src/components/quote/quote_form.vue'
import ScopeSelector from 'src/components/scope_selector/scope_selector.vue' import ScopeSelector from 'src/components/scope_selector/scope_selector.vue'
import Select from 'src/components/select/select.vue' import Select from 'src/components/select/select.vue'
import StatusContent from 'src/components/status_content/status_content.vue' import StatusContent from 'src/components/status_content/status_content.vue'
@ -141,14 +139,20 @@ const PostStatusForm = {
components: { components: {
MediaUpload, MediaUpload,
EmojiInput, EmojiInput,
PollForm, PollForm: defineAsyncComponent(
QuoteForm, () => import( 'src/components/poll/poll_form.vue')
),
QuoteForm: defineAsyncComponent(
() => import( 'src/components/quote/quote_form.vue')
),
ScopeSelector, ScopeSelector,
Checkbox, Checkbox,
Select, Select,
Attachment, Attachment,
StatusContent, StatusContent,
Gallery, Gallery: defineAsyncComponent(
() => import( 'src/components/gallery/gallery.vue')
),
DraftCloser, DraftCloser,
Popover, Popover,
}, },

View file

@ -396,7 +396,7 @@
/> />
</button> </button>
</div> </div>
<gallery <Gallery
v-if="newStatus.files && newStatus.files.length > 0" v-if="newStatus.files && newStatus.files.length > 0"
class="attachments" class="attachments"
:grid="true" :grid="true"

View file

@ -1,9 +1,9 @@
import { mapState as mapPiniaState } from 'pinia' import { mapState as mapPiniaState } from 'pinia'
import { mapGetters, mapState } from 'vuex' import { mapGetters, mapState } from 'vuex'
import { defineAsyncComponent } from 'vue'
import StatusBody from 'src/components/status_body/status_body.vue' import StatusBody from 'src/components/status_body/status_body.vue'
import Attachment from '../attachment/attachment.vue' import Attachment from '../attachment/attachment.vue'
import Gallery from '../gallery/gallery.vue'
import LinkPreview from '../link-preview/link-preview.vue' import LinkPreview from '../link-preview/link-preview.vue'
import Poll from '../poll/poll.vue' import Poll from '../poll/poll.vue'
@ -132,7 +132,9 @@ const StatusContent = {
components: { components: {
Attachment, Attachment,
Poll, Poll,
Gallery, Gallery: defineAsyncComponent(
() => import( 'src/components/gallery/gallery.vue')
),
LinkPreview, LinkPreview,
StatusBody, StatusBody,
}, },

View file

@ -34,7 +34,7 @@
/> />
</div> </div>
<gallery <Gallery
v-if="status.attachments.length !== 0" v-if="status.attachments.length !== 0"
class="attachments media-body" class="attachments media-body"
:compact="compact" :compact="compact"