@@ -12,7 +12,8 @@ import {
1212import type { Folder } from "@cap/web-domain" ;
1313import { faFolderPlus } from "@fortawesome/free-solid-svg-icons" ;
1414import { FontAwesomeIcon } from "@fortawesome/react-fontawesome" ;
15- import { RiveFile , useRiveFile } from "@rive-app/react-canvas" ;
15+ import type { RiveFile } from "@rive-app/react-canvas" ;
16+ import { useRiveFile } from "@rive-app/react-canvas" ;
1617import clsx from "clsx" ;
1718import { Option } from "effect" ;
1819import { useRouter } from "next/navigation" ;
@@ -23,7 +24,7 @@ import { withRpc } from "@/lib/Rpcs";
2324import { useDashboardContext } from "../../../Contexts" ;
2425import {
2526 BlueFolder ,
26- FolderHandle ,
27+ type FolderHandle ,
2728 NormalFolder ,
2829 RedFolder ,
2930 YellowFolder ,
@@ -101,14 +102,6 @@ export const SubfolderDialog: React.FC<Props> = ({
101102 normal : React . createRef < FolderHandle > ( ) ,
102103 } ) ;
103104
104- useEffect ( ( ) => {
105- FolderOptions . forEach ( ( option ) => {
106- if ( ! folderRefs . current [ option . value ] ) {
107- folderRefs . current [ option . value ] = React . createRef ( ) ;
108- }
109- } ) ;
110- } , [ ] ) ;
111-
112105 const createSubfolder = useEffectMutation ( {
113106 mutationFn : ( data : { name : string ; color : Folder . FolderColor } ) =>
114107 withRpc ( ( r ) =>
@@ -147,59 +140,43 @@ export const SubfolderDialog: React.FC<Props> = ({
147140 placeholder = "Subfolder name"
148141 />
149142 < div className = "flex flex-wrap gap-2 mt-3" >
150- { FolderOptions . map (
151- (
152- option : {
153- value : "blue" | "red" | "yellow" | "normal" ;
154- label : string ;
155- component : (
156- rivefile : RiveFile | undefined ,
157- ) => React . JSX . Element ;
158- } ,
159- idx : number ,
160- ) => {
161- return (
162- < div
163- className = { clsx (
164- "flex flex-col flex-1 gap-1 items-center p-2 rounded-xl border transition-colors duration-200 cursor-pointer" ,
165- selectedColor === option . value
166- ? "border-gray-12 bg-gray-3 hover:bg-gray-3 hover:border-gray-12"
167- : "border-gray-4 hover:bg-gray-3 hover:border-gray-5 bg-transparent" ,
168- ) }
169- key = { `rive-instance-${ idx . toString ( ) } ` }
170- onClick = { ( ) => {
171- if ( selectedColor === option . value ) {
172- setSelectedColor ( null ) ;
173- return ;
174- }
175- setSelectedColor ( option . value ) ;
176- } }
177- onMouseEnter = { ( ) => {
178- const folderRef =
179- folderRefs . current [ option . value ] ?. current ;
180- if ( ! folderRef ) return ;
181- folderRef . stop ( ) ;
182- folderRef . play ( "folder-open" ) ;
183- } }
184- onMouseLeave = { ( ) => {
185- const folderRef =
186- folderRefs . current [ option . value ] ?. current ;
187- if ( ! folderRef ) return ;
188- folderRef . stop ( ) ;
189- folderRef . play ( "folder-close" ) ;
190- } }
191- >
192- { React . cloneElement (
193- option . component ( riveFile as RiveFile ) ,
194- {
195- ref : folderRefs . current [ option . value ] ,
196- } ,
197- ) }
198- < p className = "text-xs text-gray-10" > { option . label } </ p >
199- </ div >
200- ) ;
201- } ,
202- ) }
143+ { FolderOptions . map ( ( option ) => {
144+ return (
145+ < div
146+ className = { clsx (
147+ "flex flex-col flex-1 gap-1 items-center p-2 rounded-xl border transition-colors duration-200 cursor-pointer" ,
148+ selectedColor === option . value
149+ ? "border-gray-12 bg-gray-3 hover:bg-gray-3 hover:border-gray-12"
150+ : "border-gray-4 hover:bg-gray-3 hover:border-gray-5 bg-transparent" ,
151+ ) }
152+ key = { `rive-${ option . value } ` }
153+ onClick = { ( ) => {
154+ if ( selectedColor === option . value ) {
155+ setSelectedColor ( null ) ;
156+ return ;
157+ }
158+ setSelectedColor ( option . value ) ;
159+ } }
160+ onMouseEnter = { ( ) => {
161+ const folderRef = folderRefs . current [ option . value ] ?. current ;
162+ if ( ! folderRef ) return ;
163+ folderRef . stop ( ) ;
164+ folderRef . play ( "folder-open" ) ;
165+ } }
166+ onMouseLeave = { ( ) => {
167+ const folderRef = folderRefs . current [ option . value ] ?. current ;
168+ if ( ! folderRef ) return ;
169+ folderRef . stop ( ) ;
170+ folderRef . play ( "folder-close" ) ;
171+ } }
172+ >
173+ { React . cloneElement ( option . component ( riveFile as RiveFile ) , {
174+ ref : folderRefs . current [ option . value ] ,
175+ } ) }
176+ < p className = "text-xs text-gray-10" > { option . label } </ p >
177+ </ div >
178+ ) ;
179+ } ) }
203180 </ div >
204181 </ div >
205182 < DialogFooter >
0 commit comments