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,137 @@ 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+
112+ const createLibrary = ( ) => {
113+ const fileName = data . label . split ( ':' ) [ 1 ] ;
114+ if ( fileName === undefined || fileName === '' ) {
115+ toast . error ( 'Enter File Name' ) ;
116+ return ;
117+ }
118+ superState . curGraphInstance . library ( fileName ) ;
119+ } ;
120+
32121 return (
33122 < ParentModal closeModal = { closeModal } ModelOpen = { ModelOpen } title = { title } >
34123 < form onSubmit = { submit } >
35124 < div className = "modal-content-body" >
36- < Children data = { data } setData = { setData } labelAllowed = { labelAllowed } />
125+ < Children data = { data } setData = { setData } labelAllowed = { labelAllowed } state = { superState } />
37126 { errorMessage ? < div className = "err" > { errorMessage } </ div > : < > </ > }
38127 </ div >
39128 < div className = "modal-footer" >
40129 < button type = "submit" className = "btn btn-primary" > { submitText } </ button >
130+ { type === 'Node' ? (
131+ < >
132+ < button
133+ className = "btn btn-primary"
134+ type = "button"
135+ onClick = { openFile }
136+ >
137+ { submitText === 'Edit Node' ? 'Edit Source' : 'Create Source' }
138+ </ button >
139+ { title === 'Edit Node'
140+ ? (
141+ < button
142+ className = "btn btn-primary"
143+ type = "button"
144+ onClick = { openMarkDownDoc }
145+ >
146+ Help
147+ </ button >
148+ ) : (
149+ < button
150+ className = "btn btn-primary"
151+ type = "button"
152+ onClick = { openDoc }
153+ >
154+ Create Help
155+ </ button >
156+ ) }
157+ { title === 'Edit Node'
158+ ? ''
159+ : (
160+ < button
161+ className = "btn btn-primary"
162+ type = "button"
163+ onClick = { createLibrary }
164+ >
165+ Create Library
166+ </ button >
167+ ) }
168+ </ >
169+ ) : '' }
41170 </ div >
42171 </ form >
43172 </ ParentModal >
0 commit comments