22/* eslint-disable jsx-a11y/click-events-have-key-events */
33// TODO fix in https://github.com/gravity-ui/page-constructor/issues/965
44
5- import React , { PropsWithChildren , useMemo , useRef , useState } from 'react' ;
5+ import React , { PropsWithChildren , useEffect , useMemo , useRef , useState } from 'react' ;
66
77import { Plus } from '@gravity-ui/icons' ;
88import { Popup , TextInput } from '@gravity-ui/uikit' ;
99
1010import { blockMap } from '../../../constructor-items' ;
1111import { Block , BlockType , ClassNameProps } from '../../../models' ;
1212import { block } from '../../../utils' ;
13- import EditorBlocksData from '../../data' ;
13+ import { EditorBlocksData , getEditorBlocksData } from '../../data' ;
1414
1515import './AddBlock.scss' ;
1616
@@ -25,16 +25,29 @@ const sortedBlockNames = Object.keys(blockMap).sort();
2525const AddBlock = ( { onAdd, className} : PropsWithChildren < AddBlockProps > ) => {
2626 const [ isOpened , setIsOpened ] = useState ( false ) ;
2727 const [ search , setSearch ] = useState ( '' ) ;
28+ const [ editorBlocksData , setEditorBlocksData ] = useState < EditorBlocksData | null > ( null ) ;
29+
2830 const ref = useRef ( null ) ;
29- const blocks = useMemo (
30- ( ) =>
31- sortedBlockNames . filter ( ( blockName ) =>
32- EditorBlocksData [ blockName as BlockType ] . meta . title
33- . toLocaleLowerCase ( )
34- . startsWith ( search . toLocaleLowerCase ( ) ) ,
35- ) ,
36- [ search ] ,
37- ) ;
31+ const blocks = useMemo ( ( ) => {
32+ if ( ! editorBlocksData ) {
33+ return [ ] ;
34+ }
35+
36+ return sortedBlockNames . filter ( ( blockName ) =>
37+ editorBlocksData [ blockName as BlockType ] ?. meta . title
38+ . toLocaleLowerCase ( )
39+ . startsWith ( search . toLocaleLowerCase ( ) ) ,
40+ ) ;
41+ } , [ editorBlocksData , search ] ) ;
42+
43+ useEffect ( ( ) => {
44+ const loadEditorBlocksData = async ( ) => {
45+ const data = await getEditorBlocksData ( ) ;
46+ setEditorBlocksData ( data ) ;
47+ } ;
48+
49+ loadEditorBlocksData ( ) ;
50+ } , [ ] ) ;
3851
3952 return (
4053 < div className = { b ( null , className ) } ref = { ref } >
@@ -68,10 +81,14 @@ const AddBlock = ({onAdd, className}: PropsWithChildren<AddBlockProps>) => {
6881 </ div >
6982 < div className = { b ( 'blocks' ) } >
7083 { blocks . map ( ( blockName ) => {
71- const blockData = EditorBlocksData [ blockName as BlockType ] ;
72- const Preview = blockData ?. preview as React . FC <
73- React . SVGProps < SVGSVGElement >
74- > ;
84+ const blockData = editorBlocksData ?. [ blockName as BlockType ] ;
85+
86+ if ( ! blockData ) {
87+ return null ;
88+ }
89+
90+ const Preview : React . FC < React . SVGProps < SVGSVGElement > > =
91+ blockData . preview ;
7592
7693 return (
7794 < div
0 commit comments