-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathuseAlternativeStore.ts
More file actions
50 lines (41 loc) · 1.66 KB
/
useAlternativeStore.ts
File metadata and controls
50 lines (41 loc) · 1.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import { useMemo } from 'react'
import { useExtendI18n } from 'twake-i18n'
import { useQueryAll } from 'cozy-client'
import { IOCozyFile } from 'cozy-client/types/types'
import flag from 'cozy-flags'
import { generateI18nConfig } from '@/ducks/AlternativeStore/helpers'
import { transformData } from '@/ducks/AlternativeStore/transformData'
import {
AlternativeShortcut,
AlternativeStoreConfig
} from '@/ducks/AlternativeStore/types'
import { buildFileByPathsQuery, buildFilesByDirIdsQuery } from '@/ducks/queries'
export const useAlternativeStore = (): {
alternativeApps: AlternativeShortcut[]
installedAlternativeApps: AlternativeShortcut[]
} => {
const config = flag<AlternativeStoreConfig | null>('store.alternative-source')
const categoriesPath = Object.values(config?.categories ?? {})
const paths = [...categoriesPath, config?.store]
const foldersQuery = buildFileByPathsQuery(paths)
const foldersResult = useQueryAll(
foldersQuery.definition,
foldersQuery.options
) as { data?: IOCozyFile[] }
const folderIds = foldersResult.data?.map(folder => folder._id)
const shortcutsQuery = buildFilesByDirIdsQuery(folderIds)
const { data, fetchStatus } = useQueryAll(
shortcutsQuery.definition,
shortcutsQuery.options
) as { data?: IOCozyFile[]; fetchStatus: string }
const i18nConfig = generateI18nConfig(config?.categories)
useExtendI18n(i18nConfig)
const alternativeApps = useMemo(() => {
if (fetchStatus !== 'loaded' || !config || !data) return []
return transformData(data, config)
}, [data, fetchStatus, config])
return {
alternativeApps,
installedAlternativeApps: alternativeApps.filter(app => app.installed)
}
}