about summary refs log tree commit diff
path: root/src/lib/hooks/useHomeTabs.ts
blob: 69183e6270316b723fb50f5e241d736304d8f3fd (plain) (blame)
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
import {useEffect, useState} from 'react'
import {useStores} from 'state/index'
import isEqual from 'lodash.isequal'
import {FeedSourceModel} from 'state/models/content/feed-source'

export function useHomeTabs(uris: string[]): string[] {
  const store = useStores()
  const [tabs, setTabs] = useState<string[]>(['Following'])
  const [lastUris, setLastUris] = useState<string[]>([])

  useEffect(() => {
    if (isEqual(uris, lastUris)) {
      // no changes
      return
    }

    async function fetchFeedInfo() {
      const models = uris
        .slice(0, 25)
        .map(uri => new FeedSourceModel(store, uri))
      await Promise.all(models.map(m => m.setup()))
      setTabs(['Following'].concat(models.map(f => f.displayName)))
      setLastUris(uris)
    }
    fetchFeedInfo()
  }, [store, uris, lastUris, setLastUris, setTabs])

  return tabs
}