mirror of
https://github.com/oxynote/oxynote.git
synced 2026-10-17 10:59:20 +02:00
59 lines
1.6 KiB
TypeScript
59 lines
1.6 KiB
TypeScript
const CAPABILITIES_QUERY_KEYS = {
|
|
capabilities: ["capabilities"] as const,
|
|
}
|
|
|
|
export default function () {
|
|
const { $coreAPIClient } = useNuxtApp()
|
|
|
|
const fetchCapabilities = useQuery<Capabilities>({
|
|
key: CAPABILITIES_QUERY_KEYS.capabilities,
|
|
query: async () => {
|
|
return await $coreAPIClient<Capabilities>(`/api/capabilities`, {
|
|
method: "GET",
|
|
})
|
|
},
|
|
refetchOnMount: false,
|
|
refetchOnWindowFocus: false,
|
|
refetchOnReconnect: false,
|
|
staleTime: Infinity,
|
|
})
|
|
|
|
function enabled(pick: (capabilities: Capabilities) => boolean) {
|
|
return computed(() => {
|
|
const capabilities = fetchCapabilities.data.value
|
|
|
|
return capabilities ? pick(capabilities) : true
|
|
})
|
|
}
|
|
|
|
const isGithubEnabled = enabled((c) => c.github)
|
|
const isSlackEnabled = enabled((c) => c.slack)
|
|
// github and slack are the only connectable apps, so both being off
|
|
// leaves nothing for the apps settings section to show
|
|
const isAnyAppEnabled = enabled((c) => c.github || c.slack)
|
|
const isChangeDetectionEnabled = enabled((c) => c.changeDetection)
|
|
|
|
const assistantStatus = computed(
|
|
() => fetchCapabilities.data.value?.aiAssistant.status ?? null,
|
|
)
|
|
const assistantModel = computed(
|
|
() => fetchCapabilities.data.value?.aiAssistant.model ?? "",
|
|
)
|
|
const isAssistantEnabled = enabled(
|
|
(c) =>
|
|
c.aiAssistant.status === AssistantStatus.Active ||
|
|
c.aiAssistant.status === AssistantStatus.ActiveButWeak,
|
|
)
|
|
|
|
return {
|
|
fetchCapabilities,
|
|
isGithubEnabled,
|
|
isSlackEnabled,
|
|
isAnyAppEnabled,
|
|
isChangeDetectionEnabled,
|
|
isAssistantEnabled,
|
|
assistantStatus,
|
|
assistantModel,
|
|
}
|
|
}
|