44 * SPDX-License-Identifier: AGPL-3.0-only
55 */
66
7- import React , { useState } from 'react'
8- import { Modal } from 'react-bootstrap'
7+ import ISO from 'iso-639-1'
8+ import React , { useCallback } from 'react'
9+ import { Modal , Row } from 'react-bootstrap'
10+ import { useTranslation } from 'react-i18next'
11+ import { useSelector } from 'react-redux'
12+ import { ApplicationState } from '../../../../redux'
13+ import { setDocumentContent } from '../../../../redux/document-content/methods'
914import { CommonModal } from '../../../common/modals/common-modal'
10- import { TextDirection , YAMLMetaData } from '../../yaml-metadata/yaml-metadata'
15+ import { supportedDocumentTypes , YAMLMetaData } from '../../yaml-metadata/yaml-metadata'
1116import { BooleanMetadataInput } from './boolean-metadata-input'
12- import { InputLabel } from './input-label'
1317import { DatalistMetadataInput } from './datalist-metadata-input'
14- import { TextDirectionMetadataInput } from './text-direction-metadata- input'
18+ import { InputLabel } from './input-label '
1519import { StringMetadataInput } from './string-metadata-input'
1620import { StringMetadataTextarea } from './string-metadata-textarea'
1721import { TagsMetadataInput } from './tags-metadata-input'
22+ import { TextDirectionMetadataInput } from './text-direction-metadata-input'
1823
1924export interface MetadataEditorProps {
2025 show : boolean ,
@@ -32,7 +37,10 @@ export interface SelectMetadataOptions<T> {
3237}
3338
3439export const MetadataEditor : React . FC < MetadataEditorProps > = ( { show, onHide } ) => {
35- const [ yamlMetadata , setYamlMetadata ] = useState < Omit < YAMLMetaData , 'opengraph' > > ( {
40+ const { t } = useTranslation ( ) ;
41+ const yamlMetadata = useSelector ( ( state : ApplicationState ) => state . documentContent . metadata ) ;
42+ const documentContent = useSelector ( ( state : ApplicationState ) => state . documentContent . content ) ;
43+ /*const [yamlMetadata, setYamlMetadata] = useState<Omit<YAMLMetaData, 'opengraph'>>({
3644 title: "Test Title",
3745 description: "Test Description\nwith two lines",
3846 tags: ["tag1", "tag2"],
@@ -44,46 +52,62 @@ export const MetadataEditor: React.FC<MetadataEditorProps> = ({ show, onHide })
4452 disqus: "test disqus string",
4553 type: '',
4654 deprecatedTagsSyntax: false
47- } )
55+ })*/
56+
57+ const setMarkdown = useCallback ( ( changes : Partial < YAMLMetaData > ) => {
58+ const newMetadata = Object . assign ( yamlMetadata , changes ) ;
59+
60+ setDocumentContent ( documentContent ) ;
61+ } , [ documentContent ] )
4862
4963 return (
5064 < CommonModal
65+ size = 'xl'
5166 show = { show }
5267 onHide = { onHide }
5368 closeButton = { true }
5469 titleI18nKey = { 'editor.modal.metadataEditor.title' } >
5570 < Modal . Body >
56- < InputLabel id = { 'title' } label = { "title" } >
57- < StringMetadataInput id = { 'title' } content = { yamlMetadata . title } onContentChange = { title => setYamlMetadata ( { ...yamlMetadata , title} ) } />
58- </ InputLabel >
59- < InputLabel id = { 'description' } label = { "description" } >
60- < StringMetadataTextarea id = { 'description' } content = { yamlMetadata . description } onContentChange = { description => setYamlMetadata ( { ...yamlMetadata , description} ) } />
61- </ InputLabel >
62- < InputLabel id = { 'tags' } label = { "tags" } >
63- < TagsMetadataInput id = { 'tags' } content = { yamlMetadata . tags } onContentChange = { tags => setYamlMetadata ( { ...yamlMetadata , tags} ) } />
64- </ InputLabel >
65- < InputLabel id = { 'robots' } label = { "robots" } >
66- < StringMetadataInput id = { 'robots' } content = { yamlMetadata . robots } onContentChange = { robots => setYamlMetadata ( { ...yamlMetadata , robots} ) } />
67- </ InputLabel >
68- < InputLabel id = { 'lang' } label = { "lang" } >
69- < DatalistMetadataInput id = { 'lang' } options = { [ 'aa' , 'ab' , 'af' , 'de-at' ] } content = { yamlMetadata . lang } onContentChange = { lang => setYamlMetadata ( { ...yamlMetadata , lang} ) } />
70- </ InputLabel >
71- < InputLabel id = { 'dir' } label = { "dir" } >
72- < TextDirectionMetadataInput
73- id = { 'dir' }
74- content = { yamlMetadata . dir }
75- onContentChange = { dir => setYamlMetadata ( { ...yamlMetadata , dir } ) }
76- />
77- </ InputLabel >
78- < InputLabel id = { 'breaks' } label = { "breaks" } >
79- < BooleanMetadataInput id = { 'breaks' } label = { "breaks" } content = { yamlMetadata . breaks } onContentChange = { breaks => setYamlMetadata ( { ...yamlMetadata , breaks} ) } />
80- </ InputLabel >
81- < InputLabel id = { 'GA' } label = { "GA" } >
82- < StringMetadataInput id = { 'GA' } content = { yamlMetadata . GA } onContentChange = { GA => setYamlMetadata ( { ...yamlMetadata , GA } ) } />
83- </ InputLabel >
84- < InputLabel id = { 'disqus' } label = { "disqus" } >
85- < StringMetadataInput id = { 'disqus' } content = { yamlMetadata . disqus } onContentChange = { disqus => setYamlMetadata ( { ...yamlMetadata , disqus} ) } />
86- </ InputLabel >
71+ < Row >
72+ < div className = 'col-6' >
73+ < InputLabel id = { 'title' } label = { t ( 'editor.modal.metadataEditor.labels.title' ) } >
74+ < StringMetadataInput id = { 'title' } content = { yamlMetadata . title } onContentChange = { title => setYamlMetadata ( { ...yamlMetadata , title} ) } />
75+ </ InputLabel >
76+ < InputLabel id = { 'type' } label = { t ( 'editor.modal.metadataEditor.labels.type' ) } >
77+ < DatalistMetadataInput id = { 'type' } options = { supportedDocumentTypes } content = { yamlMetadata . type } onContentChange = { type => setYamlMetadata ( { ...yamlMetadata , type} ) } />
78+ </ InputLabel >
79+ < InputLabel id = { 'dir' } label = { t ( 'editor.modal.metadataEditor.labels.dir' ) } >
80+ < TextDirectionMetadataInput
81+ id = { 'dir' }
82+ content = { yamlMetadata . dir }
83+ onContentChange = { dir => setYamlMetadata ( { ...yamlMetadata , dir } ) }
84+ />
85+ </ InputLabel >
86+ < InputLabel id = { 'description' } label = { t ( 'editor.modal.metadataEditor.labels.description' ) } >
87+ < StringMetadataTextarea id = { 'description' } content = { yamlMetadata . description } onContentChange = { description => setYamlMetadata ( { ...yamlMetadata , description} ) } />
88+ </ InputLabel >
89+ < InputLabel id = { 'disqus' } label = { t ( 'editor.modal.metadataEditor.labels.disqus' ) } >
90+ < StringMetadataInput id = { 'disqus' } content = { yamlMetadata . disqus } onContentChange = { disqus => setYamlMetadata ( { ...yamlMetadata , disqus} ) } />
91+ </ InputLabel >
92+ </ div >
93+ < div className = 'col-6' >
94+ < InputLabel id = { 'lang' } label = { t ( 'editor.modal.metadataEditor.labels.lang' ) } >
95+ < DatalistMetadataInput id = { 'lang' } options = { ISO . getAllCodes ( ) } content = { yamlMetadata . lang } onContentChange = { lang => setYamlMetadata ( { ...yamlMetadata , lang} ) } />
96+ </ InputLabel >
97+ < InputLabel id = { 'robots' } label = { t ( 'editor.modal.metadataEditor.labels.robots' ) } >
98+ < StringMetadataInput id = { 'robots' } content = { yamlMetadata . robots } onContentChange = { robots => setYamlMetadata ( { ...yamlMetadata , robots} ) } />
99+ </ InputLabel >
100+ < InputLabel id = { 'breaks' } label = { t ( 'editor.modal.metadataEditor.labels.breaks' ) } >
101+ < BooleanMetadataInput id = { 'breaks' } content = { yamlMetadata . breaks } onContentChange = { breaks => setYamlMetadata ( { ...yamlMetadata , breaks} ) } />
102+ </ InputLabel >
103+ < InputLabel id = { 'tags' } label = { t ( 'editor.modal.metadataEditor.labels.tags' ) } >
104+ < TagsMetadataInput id = { 'tags' } content = { yamlMetadata . tags } onContentChange = { tags => setYamlMetadata ( { ...yamlMetadata , tags} ) } />
105+ </ InputLabel >
106+ < InputLabel id = { 'GA' } label = { t ( 'editor.modal.metadataEditor.labels.GA' ) } >
107+ < StringMetadataInput id = { 'GA' } content = { yamlMetadata . GA } onContentChange = { GA => setYamlMetadata ( { ...yamlMetadata , GA } ) } />
108+ </ InputLabel >
109+ </ div >
110+ </ Row >
87111 </ Modal . Body >
88112 </ CommonModal >
89113 )
0 commit comments