Files
shadcn-ui/deprecated/www/hooks/use-project.ts
shadcn 2bfc1c82ba chore: deprecate www (#8629)
* chore: deprecate www

* chore: updates

* fix
2025-10-29 20:50: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 }
}