5
5
import type { ReactNode } from 'react' ;
6
6
import { useCallback , useMemo , useState } from 'react' ;
7
7
import { useLogger } from '../../hooks/logger.jsx' ;
8
+ import { usePubSub } from '../../hooks/pubsub.jsx' ;
8
9
import type {
9
10
GridItemBoundary ,
10
11
GridItemContent ,
@@ -21,6 +22,7 @@ export const Grid: React.FC<GridProps> = (props: GridProps): ReactNode => {
21
22
const { boundary, contentItems } = props ;
22
23
23
24
const logger = useLogger ( 'renderer:cmp:grid' ) ;
25
+ const { publish } = usePubSub ( ) ;
24
26
25
27
const [ focusedItemId , setFocusedItemId ] = useState < string > ( ( ) => {
26
28
const focusedItem = contentItems . find ( ( contentItem ) => {
@@ -41,17 +43,25 @@ export const Grid: React.FC<GridProps> = (props: GridProps): ReactNode => {
41
43
const onItemClose = useCallback (
42
44
( item : GridItemInfo ) => {
43
45
logger . debug ( 'closed item' , { item } ) ;
44
- // TODO remove from layout
46
+ publish ( 'layout:item:closed' , {
47
+ itemId : item . itemId ,
48
+ } ) ;
45
49
} ,
46
- [ logger ]
50
+ [ logger , publish ]
47
51
) ;
48
52
49
53
const onItemMoveResize = useCallback (
50
54
( item : GridItemInfo ) => {
51
55
logger . debug ( 'moved item' , { item } ) ;
52
- // TODO auto-save layout or require user to save manually?
56
+ publish ( 'layout:item:moved' , {
57
+ itemId : item . itemId ,
58
+ x : item . layout . x ,
59
+ y : item . layout . y ,
60
+ width : item . layout . width ,
61
+ height : item . layout . height ,
62
+ } ) ;
53
63
} ,
54
- [ logger ]
64
+ [ logger , publish ]
55
65
) ;
56
66
57
67
const gridItems = useMemo ( ( ) => {
0 commit comments