feat: support direct links to guild views
This commit is contained in:
2 files changed
+35
-3
No files matched your search
+28
-3
@@ -17,13 +17,37 @@ const { refresh } = useUploads()
|
||||
|
||||
const libraryOpen = ref(false)
|
||||
const selectedGuildId = ref<string | null>(null)
|
||||
const routeToken = decodeURIComponent(window.location.pathname.split('/')[1] ?? '')
|
||||
|
||||
function guildSlug(name: string) {
|
||||
return name
|
||||
.normalize('NFD')
|
||||
.replace(/[\u0300-\u036f]/g, '')
|
||||
.toLowerCase()
|
||||
.replace(/[^a-z0-9]+/g, '-')
|
||||
.replace(/^-|-$/g, '')
|
||||
}
|
||||
|
||||
function updateGuildUrl(guildId: string) {
|
||||
window.history.replaceState(null, '', `/${encodeURIComponent(guildId)}`)
|
||||
}
|
||||
|
||||
watch(
|
||||
() => status.value?.guilds,
|
||||
(guilds) => {
|
||||
if (guilds?.length && !selectedGuildId.value) {
|
||||
selectedGuildId.value = guilds[0].guild_id
|
||||
selectGuild(guilds[0].guild_id)
|
||||
if (!guilds?.length || selectedGuildId.value) return
|
||||
|
||||
const routeGuild = guilds.find(
|
||||
(guild) =>
|
||||
guild.guild_id === routeToken ||
|
||||
guild.guild_name.toLowerCase() === routeToken.toLowerCase() ||
|
||||
guildSlug(guild.guild_name) === routeToken.toLowerCase(),
|
||||
)
|
||||
const guildId = routeGuild?.guild_id ?? guilds[0].guild_id
|
||||
if (guildId) {
|
||||
selectedGuildId.value = guildId
|
||||
updateGuildUrl(guildId)
|
||||
selectGuild(guildId)
|
||||
void refresh()
|
||||
}
|
||||
},
|
||||
@@ -31,6 +55,7 @@ watch(
|
||||
|
||||
async function changeGuild(guildId: string) {
|
||||
selectedGuildId.value = guildId
|
||||
updateGuildUrl(guildId)
|
||||
selectGuild(guildId)
|
||||
await refresh()
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user