Fix type errors
This commit is contained in:
parent
5174998f37
commit
360dcb7ccb
|
@ -21,7 +21,7 @@ const banner = computed(() => get(nodeinfo.value, 'metadata.banner'))
|
||||||
const shortDescription = computed(() => get(nodeinfo.value, 'metadata.shortDescription'))
|
const shortDescription = computed(() => get(nodeinfo.value, 'metadata.shortDescription'))
|
||||||
|
|
||||||
const stats = computed(() => {
|
const stats = computed(() => {
|
||||||
const users = get(nodeinfo.value, 'usage.users.activeMonth', null)
|
const users = get(nodeinfo.value, 'usage.users.activeMonth', 0)
|
||||||
const hours = get(nodeinfo.value, 'metadata.library.music.hours', 0)
|
const hours = get(nodeinfo.value, 'metadata.library.music.hours', 0)
|
||||||
|
|
||||||
if (users === null) {
|
if (users === null) {
|
||||||
|
@ -32,7 +32,7 @@ const stats = computed(() => {
|
||||||
})
|
})
|
||||||
|
|
||||||
const openRegistrations = computed(() => get(nodeinfo.value, 'openRegistrations'))
|
const openRegistrations = computed(() => get(nodeinfo.value, 'openRegistrations'))
|
||||||
const defaultUploadQuota = computed(() => humanSize(get(nodeinfo.value, 'metadata.defaultUploadQuota') * 1000 * 1000))
|
const defaultUploadQuota = computed(() => humanSize(get(nodeinfo.value, 'metadata.defaultUploadQuota', 0) * 1000 * 1000))
|
||||||
|
|
||||||
const headerStyle = computed(() => {
|
const headerStyle = computed(() => {
|
||||||
if (!banner.value) {
|
if (!banner.value) {
|
||||||
|
@ -196,11 +196,11 @@ const headerStyle = computed(() => {
|
||||||
</div>
|
</div>
|
||||||
<div class="column">
|
<div class="column">
|
||||||
<span class="statistics-figure ui text">
|
<span class="statistics-figure ui text">
|
||||||
<span class="ui big text"><strong>{{ parseInt(stats.hours).toLocaleString($store.state.ui.momentLocale) }}</strong></span>
|
<span class="ui big text"><strong>{{ stats.hours.toLocaleString($store.state.ui.momentLocale) }}</strong></span>
|
||||||
<br>
|
<br>
|
||||||
<translate
|
<translate
|
||||||
translate-context="Content/About/*"
|
translate-context="Content/About/*"
|
||||||
:translate-n="parseInt(stats.hours)"
|
:translate-n="stats.hours"
|
||||||
translate-plural="hours of music"
|
translate-plural="hours of music"
|
||||||
>hour of music</translate>
|
>hour of music</translate>
|
||||||
</span>
|
</span>
|
||||||
|
|
|
@ -8,6 +8,7 @@ import { computed } from 'vue'
|
||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
|
|
||||||
import useMarkdown from '~/composables/useMarkdown'
|
import useMarkdown from '~/composables/useMarkdown'
|
||||||
|
import type { NodeInfo } from '~/store/instance'
|
||||||
|
|
||||||
const store = useStore()
|
const store = useStore()
|
||||||
const nodeinfo = computed(() => store.state.instance.nodeinfo)
|
const nodeinfo = computed(() => store.state.instance.nodeinfo)
|
||||||
|
@ -25,9 +26,9 @@ const labels = computed(() => ({
|
||||||
|
|
||||||
const podName = computed(() => get(nodeinfo.value, 'metadata.nodeName') || 'Funkwhale')
|
const podName = computed(() => get(nodeinfo.value, 'metadata.nodeName') || 'Funkwhale')
|
||||||
const banner = computed(() => get(nodeinfo.value, 'metadata.banner'))
|
const banner = computed(() => get(nodeinfo.value, 'metadata.banner'))
|
||||||
const longDescription = useMarkdown(() => get(nodeinfo.value, 'metadata.longDescription'))
|
const longDescription = useMarkdown(() => get(nodeinfo.value, 'metadata.longDescription', ''))
|
||||||
const rules = useMarkdown(() => get(nodeinfo.value, 'metadata.rules'))
|
const rules = useMarkdown(() => get(nodeinfo.value, 'metadata.rules', ''))
|
||||||
const terms = useMarkdown(() => get(nodeinfo.value, 'metadata.terms'))
|
const terms = useMarkdown(() => get(nodeinfo.value, 'metadata.terms', ''))
|
||||||
const contactEmail = computed(() => get(nodeinfo.value, 'metadata.contactEmail'))
|
const contactEmail = computed(() => get(nodeinfo.value, 'metadata.contactEmail'))
|
||||||
const anonymousCanListen = computed(() => get(nodeinfo.value, 'metadata.library.anonymousCanListen'))
|
const anonymousCanListen = computed(() => get(nodeinfo.value, 'metadata.library.anonymousCanListen'))
|
||||||
const allowListEnabled = computed(() => get(nodeinfo.value, 'metadata.allowList.enabled'))
|
const allowListEnabled = computed(() => get(nodeinfo.value, 'metadata.allowList.enabled'))
|
||||||
|
@ -39,17 +40,19 @@ const federationEnabled = computed(() => get(nodeinfo.value, 'metadata.library.f
|
||||||
const onDesktop = computed(() => window.innerWidth > 800)
|
const onDesktop = computed(() => window.innerWidth > 800)
|
||||||
|
|
||||||
const stats = computed(() => {
|
const stats = computed(() => {
|
||||||
|
const info = nodeinfo.value ?? {} as NodeInfo
|
||||||
|
|
||||||
const data = {
|
const data = {
|
||||||
users: get(nodeinfo.value, 'usage.users.activeMonth', null),
|
users: get(info, 'usage.users.activeMonth', null),
|
||||||
hours: get(nodeinfo.value, 'metadata.library.music.hours', null),
|
hours: get(info, 'metadata.library.music.hours', null),
|
||||||
artists: get(nodeinfo.value, 'metadata.library.artists.total', null),
|
artists: get(info, 'metadata.library.artists.total', null),
|
||||||
albums: get(nodeinfo.value, 'metadata.library.albums.total', null),
|
albums: get(info, 'metadata.library.albums.total', null),
|
||||||
tracks: get(nodeinfo.value, 'metadata.library.tracks.total', null),
|
tracks: get(info, 'metadata.library.tracks.total', null),
|
||||||
listenings: get(nodeinfo.value, 'metadata.usage.listenings.total', null)
|
listenings: get(info, 'metadata.usage.listenings.total', null)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.users === null || data.artists === null) {
|
if (data.users === null || data.artists === null) {
|
||||||
return
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
@ -375,11 +378,11 @@ const headerStyle = computed(() => {
|
||||||
class="statistics-statistic"
|
class="statistics-statistic"
|
||||||
>
|
>
|
||||||
<span class="statistics-figure ui text">
|
<span class="statistics-figure ui text">
|
||||||
<span class="ui big text"><strong>{{ parseInt(stats.hours).toLocaleString($store.state.ui.momentLocale) }}</strong></span>
|
<span class="ui big text"><strong>{{ stats.hours.toLocaleString($store.state.ui.momentLocale) }}</strong></span>
|
||||||
<br>
|
<br>
|
||||||
<translate
|
<translate
|
||||||
translate-context="Content/About/*"
|
translate-context="Content/About/*"
|
||||||
:translate-n="parseInt(stats.hours)"
|
:translate-n="stats.hours"
|
||||||
translate-plural="hours of music"
|
translate-plural="hours of music"
|
||||||
>hour of music</translate>
|
>hour of music</translate>
|
||||||
</span>
|
</span>
|
||||||
|
|
|
@ -23,7 +23,7 @@ const nodeinfo = computed(() => store.state.instance.nodeinfo)
|
||||||
const podName = computed(() => get(nodeinfo.value, 'metadata.nodeName') || 'Funkwhale')
|
const podName = computed(() => get(nodeinfo.value, 'metadata.nodeName') || 'Funkwhale')
|
||||||
const banner = computed(() => get(nodeinfo.value, 'metadata.banner'))
|
const banner = computed(() => get(nodeinfo.value, 'metadata.banner'))
|
||||||
const shortDescription = computed(() => get(nodeinfo.value, 'metadata.shortDescription'))
|
const shortDescription = computed(() => get(nodeinfo.value, 'metadata.shortDescription'))
|
||||||
const longDescription = useMarkdown(() => get(nodeinfo.value, 'metadata.longDescription'))
|
const longDescription = useMarkdown(() => get(nodeinfo.value, 'metadata.longDescription', ''))
|
||||||
const rules = computed(() => get(nodeinfo.value, 'metadata.rules'))
|
const rules = computed(() => get(nodeinfo.value, 'metadata.rules'))
|
||||||
const contactEmail = computed(() => get(nodeinfo.value, 'metadata.contactEmail'))
|
const contactEmail = computed(() => get(nodeinfo.value, 'metadata.contactEmail'))
|
||||||
const anonymousCanListen = computed(() => get(nodeinfo.value, 'metadata.library.anonymousCanListen'))
|
const anonymousCanListen = computed(() => get(nodeinfo.value, 'metadata.library.anonymousCanListen'))
|
||||||
|
@ -31,7 +31,7 @@ const openRegistrations = computed(() => get(nodeinfo.value, 'openRegistrations'
|
||||||
const defaultUploadQuota = computed(() => get(nodeinfo.value, 'metadata.defaultUploadQuota'))
|
const defaultUploadQuota = computed(() => get(nodeinfo.value, 'metadata.defaultUploadQuota'))
|
||||||
|
|
||||||
const stats = computed(() => {
|
const stats = computed(() => {
|
||||||
const users = get(nodeinfo.value, 'usage.users.activeMonth', null)
|
const users = get(nodeinfo.value, 'usage.users.activeMonth', 0)
|
||||||
const hours = get(nodeinfo.value, 'metadata.library.music.hours', 0)
|
const hours = get(nodeinfo.value, 'metadata.library.music.hours', 0)
|
||||||
|
|
||||||
if (users === null) {
|
if (users === null) {
|
||||||
|
@ -172,8 +172,8 @@ whenever(() => store.state.auth.authenticated, () => {
|
||||||
<p>
|
<p>
|
||||||
<i class="music icon" /><translate
|
<i class="music icon" /><translate
|
||||||
translate-context="Content/Home/Stat"
|
translate-context="Content/Home/Stat"
|
||||||
:translate-params="{count: parseInt(stats.hours).toLocaleString($store.state.ui.momentLocale)}"
|
:translate-params="{count: stats.hours.toLocaleString($store.state.ui.momentLocale)}"
|
||||||
:translate-n="parseInt(stats.hours)"
|
:translate-n="stats.hours"
|
||||||
translate-plural="%{ count } hours of music"
|
translate-plural="%{ count } hours of music"
|
||||||
>
|
>
|
||||||
%{ count } hour of music
|
%{ count } hour of music
|
||||||
|
|
|
@ -10,10 +10,77 @@ export interface State {
|
||||||
frontSettings: FrontendSettings
|
frontSettings: FrontendSettings
|
||||||
instanceUrl?: string
|
instanceUrl?: string
|
||||||
knownInstances: string[]
|
knownInstances: string[]
|
||||||
nodeinfo: unknown | null
|
nodeinfo: NodeInfo | null
|
||||||
settings: Settings
|
settings: Settings
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type TotalCount = {
|
||||||
|
total: number
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface NodeInfo {
|
||||||
|
version: string;
|
||||||
|
software: {
|
||||||
|
name: string;
|
||||||
|
version: string;
|
||||||
|
}
|
||||||
|
protocols: any[];
|
||||||
|
services?: {
|
||||||
|
inbound?: string[];
|
||||||
|
outbound?: string[];
|
||||||
|
}
|
||||||
|
openRegistrations: boolean;
|
||||||
|
usage: {
|
||||||
|
users: {
|
||||||
|
total: number;
|
||||||
|
activeHalfyear: number;
|
||||||
|
activeMonth: number;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
metadata: {
|
||||||
|
actorId: string
|
||||||
|
'private': boolean
|
||||||
|
shortDescription: string
|
||||||
|
longDescription: string
|
||||||
|
rules: string
|
||||||
|
contactEmail: string
|
||||||
|
terms: string
|
||||||
|
nodeName: string
|
||||||
|
banner: string
|
||||||
|
defaultUploadQuota: number
|
||||||
|
library: {
|
||||||
|
federationEnabled: boolean
|
||||||
|
anonymousCanListen: boolean
|
||||||
|
tracks?: TotalCount
|
||||||
|
artists?: TotalCount
|
||||||
|
albums?: TotalCount
|
||||||
|
music?: { hours: number }
|
||||||
|
}
|
||||||
|
supportedUploadExtensions: string[]
|
||||||
|
allowList: {
|
||||||
|
enabled: boolean
|
||||||
|
domains: string[]
|
||||||
|
}
|
||||||
|
reportTypes: {
|
||||||
|
'type': string
|
||||||
|
label: string
|
||||||
|
anonymous: boolean
|
||||||
|
}[]
|
||||||
|
funkwhaleSupportMessageEnabled: boolean
|
||||||
|
instanceSupportMessage: string
|
||||||
|
endpoints: {
|
||||||
|
knownNodes?: string
|
||||||
|
channels?: string
|
||||||
|
libraries?: string
|
||||||
|
}
|
||||||
|
usage: {
|
||||||
|
favorites: { tracks: TotalCount }
|
||||||
|
listenings: TotalCount
|
||||||
|
downloads: TotalCount
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
interface FrontendSettings {
|
interface FrontendSettings {
|
||||||
defaultServerUrl: string
|
defaultServerUrl: string
|
||||||
additionalStylesheets: string[]
|
additionalStylesheets: string[]
|
||||||
|
|
Loading…
Reference in New Issue