11import { Handle , NodeProps , Position , type Node } from "@xyflow/react" ;
2+ import { FileText } from "lucide-react" ;
23
34import ActiveUser from "../commons/activeUser" ;
45
56import usePageStore from "@/store/usePageStore" ;
67import useUserStore from "@/store/useUserStore" ;
78import Emoji from "../commons/emoji" ;
9+ import { useEffect , useState } from "react" ;
810
9- export type NoteNodeData = { title : string ; id : number ; emoji : string } ;
11+ export type NoteNodeData = { title : string ; id : number ; emoji ? : string } ;
1012export type NoteNodeType = Node < NoteNodeData , "note" > ;
1113
1214export function NoteNode ( { data } : NodeProps < NoteNodeType > ) {
1315 const { setCurrentPage } = usePageStore ( ) ;
1416 const { users } = useUserStore ( ) ;
1517
18+ const [ activeUsers , setActiveUsers ] = useState ( users ) ;
19+
20+ useEffect ( ( ) => {
21+ setActiveUsers ( users ) ;
22+ } , [ users ] ) ;
23+
1624 const handleNodeClick = ( ) => {
1725 const id = data . id ;
1826 if ( id === undefined || id === null ) {
@@ -24,7 +32,7 @@ export function NoteNode({ data }: NodeProps<NoteNodeType>) {
2432
2533 return (
2634 < div
27- className = "rounded-md border-[1px] border-black bg-neutral-100 p-2 "
35+ className = "h-24 w-48 rounded-lg border-[1px] border-[#eaeaea] bg-white p-3 shadow-sm "
2836 onClick = { handleNodeClick }
2937 >
3038 < Handle
@@ -51,16 +59,26 @@ export function NoteNode({ data }: NodeProps<NoteNodeType>) {
5159 position = { Position . Bottom }
5260 isConnectable = { true }
5361 />
54- < div className = "flex gap-1" >
55- < Emoji emoji = { data . emoji } />
56- < div > { data . title } </ div >
62+ < div className = "flex h-full w-full flex-col justify-between" >
63+ < div className = "flex w-full min-w-0 flex-row items-center justify-start gap-1" >
64+ { data . emoji ? (
65+ < Emoji emoji = { data . emoji } />
66+ ) : (
67+ < FileText
68+ className = "h-4 w-4 flex-shrink-0"
69+ strokeWidth = "1.5px"
70+ color = "#91918e"
71+ />
72+ ) }
73+ < div className = "w-full truncate" > { data . title } </ div >
74+ </ div >
75+ < ActiveUser
76+ className = "self-end"
77+ users = { activeUsers . filter (
78+ ( user ) => user . currentPageId === data . id . toString ( ) ,
79+ ) }
80+ />
5781 </ div >
58- < ActiveUser
59- className = "justify-end"
60- users = { users . filter (
61- ( user ) => user . currentPageId === data . id . toString ( ) ,
62- ) }
63- />
6482 </ div >
6583 ) ;
6684}
0 commit comments