Skip to content

Commit f4f7136

Browse files
anaisbergSimonClo
authored andcommitted
♻️ extract grid component
1 parent 64a2829 commit f4f7136

File tree

2 files changed

+79
-52
lines changed

2 files changed

+79
-52
lines changed

src/frontend/apps/impress/src/features/docs/doc-editor/components/custom-blocks/DatabaseBlock.tsx

Lines changed: 4 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,16 @@
22
import { insertOrUpdateBlock } from '@blocknote/core';
33
import { createReactBlockSpec } from '@blocknote/react';
44
import { Button } from '@openfun/cunningham-react';
5-
import { ColDef } from 'ag-grid-community';
6-
import { AgGridReact } from 'ag-grid-react';
75
import { TFunction } from 'i18next';
8-
import React, { useRef, useState } from 'react';
6+
import React from 'react';
97

10-
import { Box, Icon } from '@/components';
8+
import { Box, Icon, Text } from '@/components';
119

1210
import { DocsBlockNoteEditor } from '../../types';
1311
import { DatabaseSourceSelector } from '../DatabaseSourceSelector';
1412
import { DatabaseTableDisplay } from '../DatabaseTableDisplay';
1513

16-
import { AddButtonComponent } from './DatabaseBlock/AddColumnButton';
14+
import { DatabaseGrid } from './DatabaseBlock/DatabaseGrid';
1715

1816
export const DatabaseBlock = createReactBlockSpec(
1917
{
@@ -32,45 +30,6 @@ export const DatabaseBlock = createReactBlockSpec(
3230
},
3331
{
3432
render: ({ block, editor }) => {
35-
const [addColumnToggleOpen, setAddColumnToggleOpen] = useState(false);
36-
37-
const gridRef = useRef(null);
38-
39-
const rowData = [
40-
{ make: 'Tesla', model: 'Model Y', price: 64950, electric: true },
41-
{ make: 'Ford', model: 'F-Series', price: 33850, electric: false },
42-
{ make: 'Toyota', model: 'Corolla', price: 29600, electric: false },
43-
];
44-
45-
// Column Definitions: Defines the columns to be displayed.
46-
const colDefs: ColDef[] = [
47-
{ field: 'make', sort: 'desc' },
48-
{
49-
field: 'model',
50-
filter: true,
51-
},
52-
{ field: 'price', filter: true },
53-
{ field: 'electric' },
54-
{
55-
headerComponentParams: {
56-
innerHeaderComponent: () =>
57-
AddButtonComponent({
58-
isOpen: addColumnToggleOpen,
59-
setIsOpen: setAddColumnToggleOpen,
60-
}),
61-
},
62-
unSortIcon: false,
63-
editable: false,
64-
sortable: false,
65-
spanRows: true,
66-
},
67-
];
68-
69-
const defaultColDef = {
70-
flex: 1,
71-
editable: true,
72-
unSortIcon: true,
73-
};
7433
return (
7534
<Box
7635
$padding="1rem"
@@ -89,14 +48,7 @@ export const DatabaseBlock = createReactBlockSpec(
8948
tableId={block.props.tableId}
9049
/>
9150
<Box style={{ height: '100%', width: '100%' }}>
92-
<AgGridReact
93-
ref={gridRef}
94-
rowData={rowData}
95-
columnDefs={colDefs}
96-
defaultColDef={defaultColDef}
97-
domLayout="autoHeight"
98-
enableCellSpan={true}
99-
/>
51+
<DatabaseGrid />
10052
</Box>
10153
</Box>
10254
) : (
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import { ColDef } from 'ag-grid-community';
2+
import { AgGridReact } from 'ag-grid-react';
3+
import { useRef, useState } from 'react';
4+
5+
import { Box } from '@/components';
6+
7+
import { AddButtonComponent } from './AddColumnButton';
8+
9+
export const DatabaseGrid = () => {
10+
const gridRef = useRef(null);
11+
const [addColumnToggleOpen, setAddColumnToggleOpen] = useState(false);
12+
13+
const [rowData, setRowData] = useState([
14+
{ make: 'Tesla', model: 'Model Y', price: 64950, electric: true },
15+
{ make: 'Ford', model: 'F-Series', price: 33850, electric: false },
16+
{ make: 'Toyota', model: 'Corolla', price: 29600, electric: false },
17+
]);
18+
19+
// Column Definitions: Defines the columns to be displayed.
20+
const [colDefs, setColDefs] = useState<ColDef[]>([
21+
{ field: 'make', sort: 'desc' },
22+
{
23+
field: 'model',
24+
},
25+
{ field: 'price' },
26+
{ field: 'electric' },
27+
{
28+
headerComponentParams: {
29+
innerHeaderComponent: () =>
30+
AddButtonComponent({
31+
addColumn,
32+
isOpen: addColumnToggleOpen,
33+
setIsOpen: setAddColumnToggleOpen,
34+
}),
35+
},
36+
unSortIcon: false,
37+
editable: false,
38+
sortable: false,
39+
spanRows: true,
40+
filter: false,
41+
},
42+
]);
43+
44+
const defaultColDef = {
45+
flex: 1,
46+
filter: true,
47+
editable: true,
48+
unSortIcon: true,
49+
};
50+
51+
const addColumn = (columnName: string) => {
52+
const newColDef: ColDef = {
53+
field: columnName,
54+
};
55+
const addColumn = colDefs.pop();
56+
setColDefs((prev) => [...prev, newColDef]);
57+
if (addColumn !== undefined) {
58+
setColDefs((prev) => [...prev, addColumn]);
59+
}
60+
setAddColumnToggleOpen(false);
61+
};
62+
63+
return (
64+
<Box style={{ height: '100%', width: '100%' }}>
65+
<AgGridReact
66+
ref={gridRef}
67+
rowData={rowData}
68+
columnDefs={colDefs}
69+
defaultColDef={defaultColDef}
70+
domLayout="autoHeight"
71+
enableCellSpan={true}
72+
/>
73+
</Box>
74+
);
75+
};

0 commit comments

Comments
 (0)