Bilibili-Evolved/registry/lib/components/style/custom-navbar/favorites/FavoritesFolderSelect.vue
timongh 185770030d Merge branch 'extend-vue-tsconfig' into update-to-vue3-compat
# Conflicts:
#	registry/lib/components/style/custom-navbar/favorites/FavoritesFolderSelect.vue
#	registry/lib/components/style/custom-navbar/feeds/tabs/next-page.ts
#	registry/lib/components/style/home-redesign/fresh/VideoList.vue
#	registry/lib/components/style/home-redesign/fresh/layouts/blackboard/Blackboard.vue
#	registry/lib/components/style/home-redesign/fresh/layouts/categories/Categories.vue
#	registry/lib/components/style/home-redesign/fresh/layouts/categories/categories.ts
#	registry/lib/components/style/home-redesign/fresh/layouts/categories/content/Default.vue
#	registry/lib/components/style/home-redesign/fresh/layouts/categories/content/RankList.vue
#	registry/lib/components/style/home-redesign/mixin.ts
#	registry/lib/components/utils/black-list/BlackListSettings.vue
#	registry/lib/components/utils/dev-client/Action.vue
#	registry/lib/components/utils/keymap/settings/KeymapSettingsRow.vue
#	registry/lib/components/video/download/inputs/EpisodesPicker.vue
#	registry/lib/components/video/download/inputs/episode-item.ts
#	src/components/SwitchOptions.vue
#	src/components/feeds/VideoCard.vue
#	src/components/settings-panel/ComponentDetail.vue
#	src/components/settings-panel/ComponentOption.vue
#	src/components/settings-panel/ComponentSettings.vue
#	src/components/settings-panel/sub-pages/manage-panel/ManagePanel.vue
#	src/components/settings-panel/sub-pages/online-registry/RegistryItem.vue
#	src/core/toast/ToastCard.vue
#	src/ui/ImagePicker.vue
#	src/ui/TabControl.vue
2023-02-03 22:20:15 +08:00

81 lines
2.1 KiB
Vue

<template>
<VDropdown
class="favorites-folder-select"
round
:items="folders"
:key-mapper="f => f.id"
:value="folder"
@change="change($event)"
>
<template #item="{ item }">
{{ item.name }}
</template>
</VDropdown>
</template>
<script lang="ts">
import type { PropType } from 'vue'
import { getJsonWithCredentials } from '@/core/ajax'
import { getComponentSettings } from '@/core/settings'
import { getUID } from '@/core/utils'
import { VDropdown } from '@/ui'
import type { FavoritesFolder } from './favorites-folder'
import { notSelectedFolder } from './favorites-folder'
const navbarOptions = getComponentSettings('customNavbar').options
export default Vue.extend({
components: {
VDropdown,
},
model: {
prop: 'folder',
event: 'change',
},
props: {
folder: {
type: Object as PropType<FavoritesFolder>,
required: true,
},
},
data() {
return {
folders: [] as FavoritesFolder[],
}
},
async created() {
const uid = getUID()
if (!uid) {
return
}
const url = `https://api.bilibili.com/medialist/gateway/base/created?pn=1&ps=100&up_mid=${uid}&is_space=0`
const json = await getJsonWithCredentials(url)
if (json.code !== 0) {
throw new Error(`获取收藏夹列表失败: ${json.message}`)
}
this.folders = lodash.get(json, 'data.list', []).map(
(item: { id: number; title: string; media_count: number }) =>
({
id: item.id,
name: item.title,
count: item.media_count,
} as FavoritesFolder),
)
if (this.folders.length > 0 && this.folder.id === notSelectedFolder.id) {
const { lastFavoriteFolder } = navbarOptions
const folder = this.folders.find((f: FavoritesFolder) => f.id === lastFavoriteFolder)
if (folder) {
this.$emit('change', folder)
} else {
this.$emit('change', this.folders[0])
}
}
},
methods: {
change(folder: FavoritesFolder) {
navbarOptions.lastFavoriteFolder = folder.id
this.$emit('change', folder)
},
},
})
</script>