All checks were successful
Build and deploy updated apps / Build & deploy (push) Successful in 1m51s
54 lines
1.6 KiB
TypeScript
54 lines
1.6 KiB
TypeScript
export function useContentPrefix() {
|
|
const config = useAppConfig()
|
|
|
|
const locales: string[] = config.content.matrix.locale.list.map(l => l.code)
|
|
const variants: string[] = config.content.matrix.variant.list.map(v => v.code)
|
|
|
|
type Prefix = [string, string, string]
|
|
let prefixes: Prefix[] = []
|
|
|
|
if (locales.length>1 && variants.length>1) {
|
|
prefixes = locales.flatMap(l => variants.map(v => [`/${l}/${v}`, l, v] as Prefix))
|
|
} else if (locales.length>1 && variants.length===1) {
|
|
prefixes = locales.map(l => [`/${l}`, l, variants[0]!])
|
|
} else if (locales.length===1 && variants.length>1) {
|
|
prefixes = variants.map(v => [`/${v}`, locales[0]!, v])
|
|
} else if (locales.length===1 && variants.length===1) {
|
|
prefixes = [['', locales[0]!, variants[0]!]]
|
|
} else {
|
|
console.warn('Missing locales and variants in AppConfig')
|
|
}
|
|
|
|
const terminators = new Set(['/', '#', '?'])
|
|
|
|
function getLocaleVariant(path: string): [string, string] | undefined {
|
|
for (const [p, l, v] of prefixes) {
|
|
if (path.startsWith(p) && (path.length===p.length || terminators.has(path[p.length]))) {
|
|
return [l, v]
|
|
}
|
|
}
|
|
|
|
return undefined
|
|
}
|
|
|
|
function buildPrefix(locale: string, variant: string): string {
|
|
let segments: string[] = []
|
|
|
|
if (locales.length > 1) {
|
|
segments.push(locale)
|
|
}
|
|
|
|
if (variants.length > 1) {
|
|
segments.push(variant)
|
|
}
|
|
|
|
return (segments.length ? '/' : '') + segments.join('/')
|
|
}
|
|
|
|
return {
|
|
prefixes: prefixes.map(p => p[0]),
|
|
getLocaleVariant: getLocaleVariant,
|
|
buildPrefix: buildPrefix
|
|
}
|
|
}
|