1+ import { toast } from 'react-toastify' ;
12import React , { useState , useEffect } from 'react' ;
23import './graph-comp-details.css' ;
34import ParentModal from './ParentModal' ;
5+ import { readTextFile , createFile } from '../../toolbarActions/toolbarFunctions' ;
6+ import { actionType as T } from '../../reducer' ;
47
5- const ModalComp = ( { closeModal, superState } ) => {
8+ const ModalComp = ( { closeModal, superState, dispatcher } ) => {
69 const [ data , setData ] = useState ( { } ) ;
710 const [ errorMessage , setErrorMessage ] = useState ( '' ) ;
11+ const [ element , setElement ] = useState ( null ) ;
12+ const [ editSourceClicked , setEditSourceClicked ] = useState ( false ) ;
13+ const [ createSourceClicked , setCreateSourceClicked ] = useState ( false ) ;
14+ const [ createHelpClicked , setCreateHelpClicked ] = useState ( false ) ;
815 const { modalPayload, ModelOpen } = superState ;
916 const {
10- cb, title, submitText, Children, defaultStyle, defaultLabel, labelAllowed,
17+ cb, title, submitText, Children, defaultStyle, defaultLabel, labelAllowed, type ,
1118 } = modalPayload ;
1219
1320 useEffect ( ( ) => {
@@ -29,15 +36,117 @@ const ModalComp = ({ closeModal, superState }) => {
2936 } else setErrorMessage ( message . err ) ;
3037 } ;
3138
39+ useEffect ( ( ) => {
40+ if ( createSourceClicked ) {
41+ createFile ( superState , dispatcher ) ;
42+ }
43+ if ( editSourceClicked && element === null ) {
44+ toast . error ( 'Respective file is not present in same directory' ) ;
45+ } else if ( element !== null ) {
46+ readTextFile ( superState , dispatcher , element . fileObj , element . fileHandle ) ;
47+ }
48+ setEditSourceClicked ( false ) ;
49+ setCreateSourceClicked ( false ) ;
50+ } , [ createSourceClicked , editSourceClicked ] ) ;
51+
52+ useEffect ( ( ) => {
53+ if ( createHelpClicked ) {
54+ createFile ( superState , dispatcher ) ;
55+ }
56+ setCreateHelpClicked ( false ) ;
57+ } , [ createHelpClicked ] ) ;
58+
59+ const openFile = ( ) => {
60+ setElement ( null ) ;
61+ if ( superState . fileState !== undefined && data . label !== '' ) {
62+ const fname = data . label . split ( ':' ) [ 1 ] ;
63+ superState . fileState . forEach ( ( ele ) => {
64+ if ( ele . key . split ( '/' ) [ 1 ] === fname || ele . key . split ( '/' ) [ 2 ] === fname ) {
65+ setElement ( ele ) ;
66+ }
67+ } ) ;
68+ }
69+ if ( submitText === 'Edit Node' ) {
70+ setEditSourceClicked ( true ) ;
71+ } else if ( submitText === 'Create Node' ) {
72+ setCreateSourceClicked ( true ) ;
73+ }
74+ } ;
75+
76+ const openDoc = ( ) => {
77+ setElement ( null ) ;
78+ if ( superState . fileState !== undefined && data . label !== '' ) {
79+ const docname1 = data . label . split ( ':' ) [ 1 ] . split ( '.' ) [ 0 ] . concat ( '.md' ) ;
80+ const docname2 = data . label . split ( ':' ) [ 1 ] . split ( '.' ) [ 0 ] . concat ( '.txt' ) ;
81+ superState . fileState . forEach ( ( ele ) => {
82+ if ( ele . key . split ( '/' ) [ 1 ] === docname1 || ele . key . split ( '/' ) [ 1 ] === docname2 ) {
83+ setElement ( ele ) ;
84+ }
85+ } ) ;
86+ }
87+ setCreateHelpClicked ( true ) ;
88+ } ;
89+
90+ const openMarkDownDoc = async ( ) => {
91+ dispatcher ( { type : T . SET_MARKDOWN_MODAL , payload : true } ) ;
92+ setElement ( null ) ;
93+ if ( superState . fileState !== undefined && data . label !== '' ) {
94+ const docname1 = data . label . split ( ':' ) [ 1 ] . split ( '.' ) [ 0 ] . concat ( '.md' ) ;
95+ const matchingElement = superState . fileState . find ( ( ele ) => ele . key . split ( '/' ) [ 1 ] === docname1 ) ;
96+ if ( matchingElement ) {
97+ const fr = new FileReader ( ) ;
98+ fr . onload = ( x ) => {
99+ // eslint-disable-next-line max-len
100+ dispatcher ( { type : T . SET_INPUT_FILE , payload : { content : x . target . result , fname : matchingElement . key . split ( '/' ) [ 1 ] } } ) ;
101+ } ;
102+ if ( matchingElement . fileHandle ) {
103+ fr . readAsText ( await matchingElement . fileHandle . getFile ( ) ) ;
104+ } else if ( matchingElement . fileObj ) {
105+ fr . readAsText ( matchingElement . fileObj ) ;
106+ }
107+ setElement ( matchingElement ) ;
108+ }
109+ }
110+ } ;
111+
32112 return (
33113 < ParentModal closeModal = { closeModal } ModelOpen = { ModelOpen } title = { title } >
34114 < form onSubmit = { submit } >
35115 < div className = "modal-content-body" >
36- < Children data = { data } setData = { setData } labelAllowed = { labelAllowed } />
116+ < Children data = { data } setData = { setData } labelAllowed = { labelAllowed } state = { superState } />
37117 { errorMessage ? < div className = "err" > { errorMessage } </ div > : < > </ > }
38118 </ div >
39119 < div className = "modal-footer" >
40120 < button type = "submit" className = "btn btn-primary" > { submitText } </ button >
121+ { type === 'Node' ? (
122+ < >
123+ < button
124+ className = "btn btn-primary"
125+ type = "button"
126+ onClick = { openFile }
127+ >
128+ { submitText === 'Edit Node' ? 'Edit Source' : 'Create Source' }
129+ </ button >
130+ { title === 'Edit Node'
131+ ? (
132+ < button
133+ className = "btn btn-primary"
134+ type = "button"
135+ onClick = { openMarkDownDoc }
136+ >
137+ Help
138+ </ button >
139+ ) : (
140+ < button
141+ className = "btn btn-primary"
142+ type = "button"
143+ onClick = { openDoc }
144+ >
145+ Create Help
146+ </ button >
147+ ) }
148+ </ >
149+ ) : '' }
41150 </ div >
42151 </ form >
43152 </ ParentModal >
0 commit comments