Files
shadcn-ui/apps/www/hooks/use-project.ts
shadcn 05145e66d3 feat: refactor registry (#6071)
* feat(www): add login blocks

* chore(www): restructure for blocks

* chore: build registry

* chore: clean up chunks

* fix(www): chart categories

* feat(www): big registry refactor

* feat(www): update blocks

* feat: complex blocks

* fix: update schema

* feat: sync new-york and default

* fix: lint

* feat: move charts

* fix(www): code

* fix: src path

* chore: rebuild registry

* fix: screenshot

* fix: set new-york as default
2024-12-14 14:52:55 +04:00

50 lines
1.1 KiB
TypeScript

"use client"
import * as React from "react"
import { useAtom } from "jotai"
import { atomWithStorage } from "jotai/utils"
type Project = {
blocks: string[]
}
const projectAtom = atomWithStorage<Project>("project", {
blocks: [],
})
export function useProject() {
const [isAdded, setIsAdded] = React.useState(false)
const [project, setProject] = useAtom(projectAtom)
const addBlock = React.useCallback((block: string) => {
setProject((prev) => {
if (prev.blocks.includes(block)) {
return prev
}
return { ...prev, blocks: [...prev.blocks, block] }
})
setIsAdded(true)
setTimeout(() => {
setIsAdded(false)
}, 2000)
}, [])
const removeBlock = React.useCallback((block: string) => {
setProject((prev) => ({
...prev,
blocks: prev.blocks.filter((b) => b !== block),
}))
}, [])
const hasBlock = React.useCallback((block: string) => {
return project.blocks.includes(block)
}, [])
const resetProject = React.useCallback(() => {
setProject({ blocks: [] })
}, [])
return { project, addBlock, removeBlock, resetProject, hasBlock, isAdded }
}