mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-05-05 06:16:05 +02:00
refactor: resolve lag issues when opening the world dialog in the favorites worlds tab (#1156) (#1168)
* refactor: resolve lag issues when opening the world dialog in the favorite world tab (#1156) * fix
This commit is contained in:
+24
-300
@@ -16,7 +16,7 @@ mixin favoritesTab
|
||||
size='small'
|
||||
icon='el-icon-refresh'
|
||||
circle)
|
||||
el-tabs(type='card' v-loading='API.isFavoriteLoading' style='height: 100%' @tab-click='onFavTabClick')
|
||||
el-tabs(type='card' v-loading='API.isFavoriteLoading' style='height: 100%')
|
||||
el-tab-pane(:label='$t("view.favorite.friends.header")' lazy)
|
||||
div(style='display: flex; align-items: center; justify-content: space-between')
|
||||
div
|
||||
@@ -132,302 +132,28 @@ mixin favoritesTab
|
||||
style='padding-top: 25px; width: 100%; display: flex; align-items: center; justify-content: center; color: rgb(144, 147, 153)')
|
||||
span No Data
|
||||
el-tab-pane(:label='$t("view.favorite.worlds.header")' lazy)
|
||||
div(style='display: flex; align-items: center; justify-content: space-between')
|
||||
div
|
||||
el-button(size='small' @click='showWorldExportDialog') {{ $t('view.favorite.export') }}
|
||||
el-button(size='small' @click='showWorldImportDialog' style='margin-left: 5px') {{ $t('view.favorite.import') }}
|
||||
div(style='display: flex; align-items: center; font-size: 13px; margin-right: 10px')
|
||||
span.name(style='margin-right: 5px; line-height: 10px') {{ $t('view.favorite.sort_by') }}
|
||||
el-radio-group(
|
||||
v-model='sortFavorites'
|
||||
@change='saveSortFavoritesOption'
|
||||
style='margin-right: 12px')
|
||||
el-radio(:label='false') {{ $t('view.settings.appearance.appearance.sort_favorite_by_name') }}
|
||||
el-radio(:label='true') {{ $t('view.settings.appearance.appearance.sort_favorite_by_date') }}
|
||||
el-input(
|
||||
v-model='worldFavoriteSearch'
|
||||
@input='searchWorldFavorites'
|
||||
clearable
|
||||
size='mini'
|
||||
:placeholder='$t("view.favorite.worlds.search")'
|
||||
style='width: 200px')
|
||||
.x-friend-list(style='margin-top: 10px')
|
||||
div(
|
||||
style='display: inline-block; width: 300px; margin-right: 15px'
|
||||
v-for='favorite in worldFavoriteSearchResults'
|
||||
:key='favorite.id'
|
||||
@click='showWorldDialog(favorite.id)')
|
||||
.x-friend-item
|
||||
template(v-if='favorite.name')
|
||||
.avatar
|
||||
img(v-lazy='favorite.thumbnailImageUrl')
|
||||
.detail
|
||||
span.name(v-text='favorite.name')
|
||||
span.extra(v-if='favorite.occupants') {{ favorite.authorName }} ({{ favorite.occupants }})
|
||||
span.extra(v-else v-text='favorite.authorName')
|
||||
template(v-else)
|
||||
.avatar
|
||||
.detail
|
||||
span(v-text='favorite.id')
|
||||
span(style='display: block; margin-top: 20px') {{ $t('view.favorite.worlds.vrchat_favorites') }}
|
||||
el-collapse(style='border: 0')
|
||||
el-collapse-item(v-for='group in API.favoriteWorldGroups' :key='group.name')
|
||||
template(slot='title')
|
||||
div(style='display: flex; align-items: center')
|
||||
span(
|
||||
v-text='group.displayName'
|
||||
style='font-weight: bold; font-size: 14px; margin-left: 10px')
|
||||
el-tag(
|
||||
style='margin: 1px 0 0 5px'
|
||||
size='mini'
|
||||
:type='userFavoriteWorldsStatusForFavTab(group.visibility)'
|
||||
effect='plain') {{ group.visibility.charAt(0).toUpperCase() + group.visibility.slice(1) }}
|
||||
span(style='color: #909399; font-size: 12px; margin-left: 10px') {{ group.count }}/{{ group.capacity }}
|
||||
el-dropdown(trigger='click' @click.native.stop size='mini' style='margin-left: 10px')
|
||||
el-tooltip(
|
||||
placement='top'
|
||||
:content='$t("view.favorite.visibility_tooltip")'
|
||||
:disabled='hideTooltips')
|
||||
el-button(type='default' icon='el-icon-view' size='mini' circle)
|
||||
el-dropdown-menu(#default='dropdown')
|
||||
el-dropdown-item(
|
||||
v-if='group.visibility !== visibility'
|
||||
v-for='visibility in worldGroupVisibilityOptions'
|
||||
:key='visibility'
|
||||
style='display: block; margin: 10px 0'
|
||||
v-text='visibility.charAt(0).toUpperCase() + visibility.slice(1)'
|
||||
@click.native='changeWorldGroupVisibility(group.name, visibility)')
|
||||
el-tooltip(
|
||||
placement='top'
|
||||
:content='$t("view.favorite.rename_tooltip")'
|
||||
:disabled='hideTooltips')
|
||||
el-button(
|
||||
@click.stop='changeFavoriteGroupName(group)'
|
||||
size='mini'
|
||||
icon='el-icon-edit'
|
||||
circle
|
||||
style='margin-left: 5px')
|
||||
el-tooltip(
|
||||
placement='right'
|
||||
:content='$t("view.favorite.clear_tooltip")'
|
||||
:disabled='hideTooltips')
|
||||
el-button(
|
||||
@click.stop='clearFavoriteGroup(group)'
|
||||
size='mini'
|
||||
icon='el-icon-delete'
|
||||
circle
|
||||
style='margin-left: 5px')
|
||||
.x-friend-list(v-if='group.count' style='margin-top: 10px')
|
||||
div(
|
||||
style='display: inline-block; width: 300px; margin-right: 15px'
|
||||
v-for='favorite in groupedByGroupKeyFavoriteWorlds[group.key]'
|
||||
:key='favorite.id'
|
||||
@click='showWorldDialog(favorite.id)')
|
||||
.x-friend-item
|
||||
template(v-if='favorite.ref')
|
||||
.avatar
|
||||
img(v-lazy='favorite.ref.thumbnailImageUrl')
|
||||
.detail
|
||||
span.name(v-text='favorite.ref.name')
|
||||
span.extra(v-if='favorite.ref.occupants') {{ favorite.ref.authorName }} ({{ favorite.ref.occupants }})
|
||||
span.extra(v-else v-text='favorite.ref.authorName')
|
||||
template(v-if='editFavoritesMode')
|
||||
el-dropdown(
|
||||
trigger='click'
|
||||
@click.native.stop
|
||||
size='mini'
|
||||
style='margin-left: 5px')
|
||||
el-tooltip(
|
||||
placement='left'
|
||||
:content='$t("view.favorite.move_tooltip")'
|
||||
:disabled='hideTooltips')
|
||||
el-button(type='default' icon='el-icon-back' size='mini' circle)
|
||||
el-dropdown-menu(#default='dropdown')
|
||||
template(
|
||||
v-if='groupAPI.name !== group.name'
|
||||
v-for='groupAPI in API.favoriteWorldGroups')
|
||||
el-dropdown-item(
|
||||
:key='groupAPI.name'
|
||||
style='display: block; margin: 10px 0'
|
||||
@click.native='moveFavorite(favorite.ref, groupAPI, "world")'
|
||||
:disabled='groupAPI.count >= groupAPI.capacity') {{ groupAPI.displayName }} ({{ groupAPI.count }} / {{ groupAPI.capacity }})
|
||||
el-button(type='text' size='mini' @click.stop style='margin-left: 5px')
|
||||
el-checkbox(v-model='favorite.$selected')
|
||||
template(v-else)
|
||||
el-tooltip(
|
||||
v-if='favorite.deleted'
|
||||
placement='left'
|
||||
:content='$t("view.favorite.unavailable_tooltip")')
|
||||
i.el-icon-warning(style='color: #f56c6c; margin-left: 5px')
|
||||
el-tooltip(
|
||||
v-if='favorite.ref.releaseStatus === "private"'
|
||||
placement='left'
|
||||
:content='$t("view.favorite.private")')
|
||||
i.el-icon-warning(style='color: #e6a23c; margin-left: 5px')
|
||||
el-tooltip(
|
||||
placement='left'
|
||||
:content='$t("view.favorite.self_invite_tooltip")'
|
||||
:disabled='hideTooltips')
|
||||
el-button(
|
||||
@click.stop='newInstanceSelfInvite(favorite.id)'
|
||||
size='mini'
|
||||
icon='el-icon-message'
|
||||
circle
|
||||
style='margin-left: 5px')
|
||||
el-tooltip(
|
||||
placement='right'
|
||||
:content='$t("view.favorite.unfavorite_tooltip")'
|
||||
:disabled='hideTooltips')
|
||||
el-button(
|
||||
v-if='shiftHeld'
|
||||
@click.stop='deleteFavorite(favorite.id)'
|
||||
size='mini'
|
||||
icon='el-icon-close'
|
||||
circle
|
||||
style='color: #f56c6c; margin-left: 5px')
|
||||
el-button(
|
||||
v-else
|
||||
@click.stop='showFavoriteDialog("world", favorite.id)'
|
||||
type='default'
|
||||
icon='el-icon-star-on'
|
||||
size='mini'
|
||||
circle
|
||||
style='margin-left: 5px')
|
||||
template(v-else)
|
||||
.avatar
|
||||
.detail
|
||||
span(v-text='favorite.name || favorite.id')
|
||||
el-tooltip(
|
||||
v-if='favorite.deleted'
|
||||
placement='left'
|
||||
:content='$t("view.favorite.unavailable_tooltip")')
|
||||
i.el-icon-warning(style='color: #f56c6c; margin-left: 5px')
|
||||
el-button(
|
||||
type='text'
|
||||
icon='el-icon-close'
|
||||
size='mini'
|
||||
@click.stop='deleteFavorite(favorite.id)'
|
||||
style='margin-left: 5px')
|
||||
div(
|
||||
v-else
|
||||
style='padding-top: 25px; width: 100%; display: flex; align-items: center; justify-content: center; color: rgb(144, 147, 153)')
|
||||
span No Data
|
||||
span(style='display: block; margin-top: 20px') {{ $t('view.favorite.worlds.local_favorites') }}
|
||||
br
|
||||
el-button(size='small' @click='promptNewLocalWorldFavoriteGroup') {{ $t('view.favorite.worlds.new_group') }}
|
||||
el-button(
|
||||
v-if='!refreshingLocalFavorites'
|
||||
size='small'
|
||||
@click='refreshLocalWorldFavorites'
|
||||
style='margin-left: 5px') {{ $t('view.favorite.worlds.refresh') }}
|
||||
el-button(v-else size='small' @click='refreshingLocalFavorites = false' style='margin-left: 5px')
|
||||
i.el-icon-loading(style='margin-right: 5px')
|
||||
span {{ $t('view.favorite.worlds.cancel_refresh') }}
|
||||
el-collapse-item(
|
||||
v-for='group in localWorldFavoriteGroups'
|
||||
v-if='localWorldFavorites[group]'
|
||||
:key='group')
|
||||
template(slot='title')
|
||||
span(v-text='group' style='font-weight: bold; font-size: 14px; margin-left: 10px')
|
||||
span(style='color: #909399; font-size: 12px; margin-left: 10px') {{ getLocalWorldFavoriteGroupLength(group) }}
|
||||
el-tooltip(
|
||||
placement='top'
|
||||
:content='$t("view.favorite.rename_tooltip")'
|
||||
:disabled='hideTooltips')
|
||||
el-button(
|
||||
@click.stop='promptLocalWorldFavoriteGroupRename(group)'
|
||||
size='mini'
|
||||
icon='el-icon-edit'
|
||||
circle
|
||||
style='margin-left: 10px')
|
||||
el-tooltip(
|
||||
placement='right'
|
||||
:content='$t("view.favorite.delete_tooltip")'
|
||||
:disabled='hideTooltips')
|
||||
el-button(
|
||||
@click.stop='promptLocalWorldFavoriteGroupDelete(group)'
|
||||
size='mini'
|
||||
icon='el-icon-delete'
|
||||
circle
|
||||
style='margin-left: 5px')
|
||||
.x-friend-list(
|
||||
style='margin-top: 10px'
|
||||
v-if='localFavoriteShowDelayedContent[0] && localWorldFavorites[group].length')
|
||||
div(
|
||||
style='display: inline-block; width: 300px; margin-right: 15px'
|
||||
v-for='favorite in localWorldFavorites[group]'
|
||||
:key='favorite.id'
|
||||
@click='showWorldDialog(favorite.id)')
|
||||
.x-friend-item
|
||||
template(v-if='favorite.name')
|
||||
.avatar
|
||||
img(v-lazy='favorite.thumbnailImageUrl')
|
||||
.detail
|
||||
span.name(v-text='favorite.name')
|
||||
span.extra(v-if='favorite.occupants') {{ favorite.authorName }} ({{ favorite.occupants }})
|
||||
span.extra(v-else v-text='favorite.authorName')
|
||||
template(v-if='editFavoritesMode')
|
||||
el-dropdown(
|
||||
trigger='click'
|
||||
@click.native.stop
|
||||
size='mini'
|
||||
style='margin-left: 5px')
|
||||
el-tooltip(
|
||||
placement='left'
|
||||
:content='$t("view.favorite.copy_tooltip")'
|
||||
:disabled='hideTooltips')
|
||||
el-button(type='default' icon='el-icon-back' size='mini' circle)
|
||||
el-dropdown-menu(#default='dropdown')
|
||||
template(v-for='groupAPI in API.favoriteWorldGroups')
|
||||
el-dropdown-item(
|
||||
:key='groupAPI.name'
|
||||
style='display: block; margin: 10px 0'
|
||||
@click.native='addFavoriteWorld(favorite, groupAPI, true)'
|
||||
:disabled='groupAPI.count >= groupAPI.capacity') {{ groupAPI.displayName }} ({{ groupAPI.count }} / {{ groupAPI.capacity }})
|
||||
template(v-else)
|
||||
el-tooltip(
|
||||
placement='left'
|
||||
:content='$t("view.favorite.self_invite_tooltip")'
|
||||
:disabled='hideTooltips')
|
||||
el-button(
|
||||
@click.stop='newInstanceSelfInvite(favorite.id)'
|
||||
size='mini'
|
||||
icon='el-icon-message'
|
||||
circle
|
||||
style='margin-left: 5px')
|
||||
el-tooltip(
|
||||
placement='right'
|
||||
:content='$t("view.favorite.unfavorite_tooltip")'
|
||||
:disabled='hideTooltips')
|
||||
el-button(
|
||||
v-if='shiftHeld'
|
||||
@click.stop='removeLocalWorldFavorite(favorite.id, group)'
|
||||
size='mini'
|
||||
icon='el-icon-close'
|
||||
circle
|
||||
style='color: #f56c6c; margin-left: 5px')
|
||||
el-button(
|
||||
v-else
|
||||
@click.stop='showFavoriteDialog("world", favorite.id)'
|
||||
type='default'
|
||||
icon='el-icon-star-on'
|
||||
size='mini'
|
||||
circle
|
||||
style='margin-left: 5px')
|
||||
template(v-else)
|
||||
.avatar
|
||||
.detail
|
||||
span(v-text='favorite.id')
|
||||
el-button(
|
||||
type='text'
|
||||
icon='el-icon-close'
|
||||
size='mini'
|
||||
@click.stop='removeLocalWorldFavorite(favorite.id, group)'
|
||||
style='margin-left: 5px')
|
||||
div(
|
||||
v-else
|
||||
style='padding-top: 25px; width: 100%; display: flex; align-items: center; justify-content: center; color: rgb(144, 147, 153)')
|
||||
span No Data
|
||||
favorites-world-tab(
|
||||
@show-world-export-dialog='showWorldExportDialog'
|
||||
@show-world-import-dialog='showWorldImportDialog'
|
||||
@save-sort-favorites-option='saveSortFavoritesOption'
|
||||
@show-world-dialog='showWorldDialog'
|
||||
@change-favorite-group-name='changeFavoriteGroupName'
|
||||
@clear-favorite-group='clearFavoriteGroup'
|
||||
@new-instance-self-invite='newInstanceSelfInvite'
|
||||
@show-favorite-dialog='showFavoriteDialog'
|
||||
@refresh-local-world-favorite='refreshLocalWorldFavorites'
|
||||
@delete-local-world-favorite-group='deleteLocalWorldFavoriteGroup'
|
||||
@search-world-favorites='searchWorldFavorites'
|
||||
@remove-local-world-favorite='removeLocalWorldFavorite'
|
||||
:sort-favorites.sync='sortFavorites'
|
||||
:world-favorite-search-results='worldFavoriteSearchResults'
|
||||
:hide-tooltips='hideTooltips'
|
||||
:favorite-worlds='favoriteWorlds'
|
||||
:edit-favorites-mode='editFavoritesMode'
|
||||
:shift-held='shiftHeld'
|
||||
:refresh-local-world-favorites='refreshLocalWorldFavorites'
|
||||
:local-world-favorite-groups='localWorldFavoriteGroups'
|
||||
:local-world-favorites='localWorldFavorites')
|
||||
el-tab-pane(:label='$t("view.favorite.avatars.header")' lazy)
|
||||
div(style='display: flex; align-items: center; justify-content: space-between')
|
||||
div
|
||||
@@ -681,9 +407,7 @@ mixin favoritesTab
|
||||
icon='el-icon-delete'
|
||||
circle
|
||||
style='margin-left: 5px')
|
||||
.x-friend-list(
|
||||
style='margin-top: 10px'
|
||||
v-if='localFavoriteShowDelayedContent[1] && localAvatarFavorites[group].length')
|
||||
.x-friend-list(style='margin-top: 10px' v-if='localAvatarFavorites[group].length')
|
||||
div(
|
||||
style='display: inline-block; width: 300px; margin-right: 15px'
|
||||
v-for='favorite in localAvatarFavorites[group]'
|
||||
|
||||
@@ -105,7 +105,7 @@ mixin notificationsTab
|
||||
@click='showFullscreenImageDialog(scope.row.imageUrl)')
|
||||
el-table-column(:label='$t("table.notification.message")' prop='message')
|
||||
template(#default='scope')
|
||||
span.x-link(v-if='scope.row.type === "invite"')
|
||||
span.x-link(v-if='scope.row.type === "invite"' style='display: flex')
|
||||
location(
|
||||
v-if='scope.row.details'
|
||||
:location='scope.row.details.worldId'
|
||||
|
||||
Reference in New Issue
Block a user