mirror of
https://github.com/linsa-io/linsa.git
synced 2026-01-12 12:20:23 +01:00
* feat: keyboard nav * fix: link update * feat: reusable learning state * chore: use new learning state * feat: add to my profile * . * . * feat: on enter open the link * fix: lint * fix: use eslint v8 instead of v9 * fix: add to my profile * chore: update personal link schema * chore: update personal page schema * fix: update detail wrapper * fix: update page section * removing option for learning status * removing option for learning status for topic * feat: add createdAt and updatedAt for personal Page * chore: update page section component * chore: remove chevron from sub menu * fix: sidebar * chore: add focus and disable toast * feat: la editor add execption for no command class * fix: la editor style and fix page detail * fix: title * fix: topic learning state * chore: add showSearch for learning state * fix: bunch stuff * chore: link list and item handle learning state * chore: set expand to false * feat: personal link for topic detail * chore: hook use topic data * chore: go to list * fix: link and topic * feat(utils): new keyboard utils * feat(store): add linkOpenPopoverForIdAtom for link * chore: using memo for use topic data * fix: remove duplicate component * chore: performance for topic detail lint item * refactor: remove LinkOptions component * chore: improve performance for list * feat: added LinkRoute copmonent * chore: link manage * feat: bottom bar * fix: link * fix: page wrapper * fix: import thing * chore: added a displayname * refactor: page detail * refactor: page detail * fix: add topic to personal link form link * fix: only show page count if more than zero * fix: sidebar topic section --------- Co-authored-by: Nikita <github@nikiv.dev> Co-authored-by: marshennikovaolga <marshennikova@gmail.com>
30 lines
977 B
TypeScript
30 lines
977 B
TypeScript
import { useMemo } from "react"
|
|
import { useCoState } from "@/lib/providers/jazz-provider"
|
|
import { PublicGlobalGroup } from "@/lib/schema/master/public-group"
|
|
import { ID } from "jazz-tools"
|
|
import { Link } from "@/lib/schema"
|
|
|
|
const GLOBAL_GROUP_ID = process.env.NEXT_PUBLIC_JAZZ_GLOBAL_GROUP as ID<PublicGlobalGroup>
|
|
|
|
export function useTopicData(topicName: string) {
|
|
const group = useCoState(PublicGlobalGroup, GLOBAL_GROUP_ID, {
|
|
root: { topics: [] }
|
|
})
|
|
|
|
// const topic = useCoState(Topic, "co_zS3TH4Lkj5MK9GEehinxhjjNTxB" as ID<Topic>, {})
|
|
const topic = useMemo(
|
|
() => group?.root.topics.find(topic => topic?.name === topicName),
|
|
[group?.root.topics, topicName]
|
|
)
|
|
|
|
const allLinks = useMemo(() => {
|
|
if (!topic?.latestGlobalGuide?.sections) return []
|
|
|
|
return topic.latestGlobalGuide.sections.flatMap(
|
|
section => section?.links?.filter((link): link is Link => !!link?.url) ?? []
|
|
)
|
|
}, [topic?.latestGlobalGuide?.sections])
|
|
|
|
return { topic, allLinks }
|
|
}
|