1
1
/* eslint-disable react-hooks/rules-of-hooks */
2
2
import { insertOrUpdateBlock } from '@blocknote/core' ;
3
3
import { createReactBlockSpec } from '@blocknote/react' ;
4
- import { Button } from '@openfun/cunningham-react' ;
4
+ import { Button , Input } from '@openfun/cunningham-react' ;
5
5
import { ColDef } from 'ag-grid-community' ;
6
6
import { AgGridReact } from 'ag-grid-react' ;
7
7
import { TFunction } from 'i18next' ;
8
- import React , { useRef } from 'react' ;
8
+ import React , { useRef , useState } from 'react' ;
9
9
10
- import { Box , Icon , Text } from '@/components' ;
10
+ import { Box , DropButton , Icon , Text } from '@/components' ;
11
11
12
12
import { DocsBlockNoteEditor } from '../../types' ;
13
13
import { DatabaseSourceSelector } from '../DatabaseSourceSelector' ;
@@ -30,6 +30,8 @@ export const DatabaseBlock = createReactBlockSpec(
30
30
} ,
31
31
{
32
32
render : ( { block, editor } ) => {
33
+ const [ addColumnToggleOpen , setAddColumnToggleOpen ] = useState ( false ) ;
34
+
33
35
const gridRef = useRef ( null ) ;
34
36
35
37
const rowData = [
@@ -38,6 +40,52 @@ export const DatabaseBlock = createReactBlockSpec(
38
40
{ make : 'Toyota' , model : 'Corolla' , price : 29600 , electric : false } ,
39
41
] ;
40
42
43
+ const AddButtonComponent = ( {
44
+ isOpen,
45
+ setIsOpen,
46
+ } : {
47
+ isOpen : boolean ;
48
+ setIsOpen : ( open : boolean ) => void ;
49
+ } ) => {
50
+ const onOpenChange = ( isOpen : boolean ) => {
51
+ setIsOpen ( isOpen ) ;
52
+ } ;
53
+
54
+ return (
55
+ < DropButton
56
+ isOpen = { isOpen }
57
+ onOpenChange = { onOpenChange }
58
+ label = "add column"
59
+ button = {
60
+ < Box style = { { padding : '0.25rem' , gap : '16px' } } color = "tertiary" >
61
+ < span className = "material-icons" > add</ span >
62
+ </ Box >
63
+ }
64
+ >
65
+ < Box style = { { padding : '10px' , gap : '10px' } } >
66
+ < Text
67
+ $variation = "600"
68
+ $size = "s"
69
+ $weight = "bold"
70
+ $theme = "greyscale"
71
+ >
72
+ Ajouter une colonne
73
+ </ Text >
74
+ < Input label = "Column label" > </ Input >
75
+ < Button
76
+ size = "small"
77
+ onClick = { ( ) => {
78
+ setIsOpen ( false ) ;
79
+ } }
80
+ style = { { alignSelf : 'end' , width : 'fit-content' } }
81
+ >
82
+ Valider
83
+ </ Button >
84
+ </ Box >
85
+ </ DropButton >
86
+ ) ;
87
+ } ;
88
+
41
89
// Column Definitions: Defines the columns to be displayed.
42
90
const colDefs : ColDef [ ] = [
43
91
{ field : 'make' , sort : 'desc' } ,
@@ -47,6 +95,19 @@ export const DatabaseBlock = createReactBlockSpec(
47
95
} ,
48
96
{ field : 'price' , filter : true } ,
49
97
{ field : 'electric' } ,
98
+ {
99
+ headerComponentParams : {
100
+ innerHeaderComponent : ( ) =>
101
+ AddButtonComponent ( {
102
+ isOpen : addColumnToggleOpen ,
103
+ setIsOpen : setAddColumnToggleOpen ,
104
+ } ) ,
105
+ } ,
106
+ unSortIcon : false ,
107
+ editable : false ,
108
+ sortable : false ,
109
+ spanRows : true ,
110
+ } ,
50
111
] ;
51
112
52
113
const defaultColDef = {
@@ -78,6 +139,7 @@ export const DatabaseBlock = createReactBlockSpec(
78
139
columnDefs = { colDefs }
79
140
defaultColDef = { defaultColDef }
80
141
domLayout = "autoHeight"
142
+ enableCellSpan = { true }
81
143
/>
82
144
</ Box >
83
145
</ Box >
0 commit comments