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 type { GridItemMetadata } from './grid-item.jsx' ;
8
+ import type {
9
+ GridItemBoundary ,
10
+ GridItemContent ,
11
+ GridItemInfo ,
12
+ } from '../../types/grid.types.js' ;
9
13
import { GridItem } from './grid-item.jsx' ;
10
14
11
- export interface GridContentItem {
12
- layout : GridItemMetadata ;
13
- content : ReactNode ;
14
- }
15
-
16
15
export interface GridProps {
17
- /**
18
- * The dimension for the grid.
19
- */
20
- boundary : {
21
- /**
22
- * The max height of the grid in pixels.
23
- */
24
- height : number ;
25
- /**
26
- * The max width of the grid in pixels.
27
- */
28
- width : number ;
29
- } ;
30
- contentItems : Array < GridContentItem > ;
16
+ boundary : GridItemBoundary ;
17
+ contentItems : Array < GridItemContent > ;
31
18
}
32
19
33
20
export const Grid : React . FC < GridProps > = ( props : GridProps ) : ReactNode => {
@@ -39,32 +26,32 @@ export const Grid: React.FC<GridProps> = (props: GridProps): ReactNode => {
39
26
40
27
const focusedContentItemId = useMemo ( ( ) => {
41
28
const focusedItem = contentItems . find ( ( contentItem ) => {
42
- return contentItem . layout . isFocused ;
29
+ return contentItem . isFocused ;
43
30
} ) ;
44
- return focusedItem ?. layout ?. itemId ?? '' ;
31
+ return focusedItem ?. itemId ?? '' ;
45
32
} , [ contentItems ] ) ;
46
33
47
34
const [ focusedItemId , setFocusedItemId ] =
48
35
useState < string > ( focusedContentItemId ) ;
49
36
50
- const onItemFocus = useCallback ( ( itemMeta : GridItemMetadata ) => {
51
- const { itemId } = itemMeta ;
37
+ const onItemFocus = useCallback ( ( item : GridItemInfo ) => {
38
+ const { itemId } = item ;
52
39
setFocusedItemId ( itemId ) ;
53
40
// TODO when an item is resized then save layout, including the focused item
54
41
} , [ ] ) ;
55
42
56
43
const onItemClose = useCallback (
57
- ( itemMeta : GridItemMetadata ) => {
58
- const { itemId } = itemMeta ;
44
+ ( item : GridItemInfo ) => {
45
+ const { itemId } = item ;
59
46
// TODO when an item is closed then remove it from layout and save layout
60
47
logger . debug ( `closed item ${ itemId } ` ) ;
61
48
} ,
62
49
[ logger ]
63
50
) ;
64
51
65
52
const onItemMoveResize = useCallback (
66
- ( itemMeta : GridItemMetadata ) => {
67
- const { itemId } = itemMeta ;
53
+ ( item : GridItemInfo ) => {
54
+ const { itemId } = item ;
68
55
// TODO when an item is dragged then save layout
69
56
logger . debug ( `moved item ${ itemId } ` ) ;
70
57
} ,
@@ -75,10 +62,10 @@ export const Grid: React.FC<GridProps> = (props: GridProps): ReactNode => {
75
62
return contentItems . map ( ( contentItem ) => {
76
63
return (
77
64
< GridItem
78
- key = { contentItem . layout . itemId }
79
- itemId = { contentItem . layout . itemId }
80
- itemTitle = { contentItem . layout . itemTitle }
81
- isFocused = { contentItem . layout . itemId === focusedItemId }
65
+ key = { contentItem . itemId }
66
+ itemId = { contentItem . itemId }
67
+ itemTitle = { contentItem . itemTitle }
68
+ isFocused = { contentItem . itemId === focusedItemId }
82
69
onFocus = { onItemFocus }
83
70
onClose = { onItemClose }
84
71
onMoveResize = { onItemMoveResize }
0 commit comments