@@ -60,14 +60,14 @@ const generateUnformattedCode = (
60
60
referencedHTML . tag === 'ol' ||
61
61
referencedHTML . tag === 'menu' ||
62
62
referencedHTML . tag === 'li' ||
63
- referencedHTML . tag === 'Link ' ||
63
+ referencedHTML . tag === 'LinkTo ' ||
64
64
referencedHTML . tag === 'Switch' ||
65
65
referencedHTML . tag === 'Route'
66
66
) {
67
67
child . children = getEnrichedChildren ( child ) ;
68
68
}
69
- // when we see a Switch, import React Router
70
- if ( referencedHTML . tag === 'Switch' || referencedHTML . tag === 'Link ' ) importReactRouter = true ;
69
+ // when we see a Switch or LinkTo , import React Router
70
+ if ( referencedHTML . tag === 'Switch' || referencedHTML . tag === 'LinkTo ' ) importReactRouter = true ;
71
71
return child ;
72
72
} else if ( child . type === 'Route Link' ) {
73
73
links = true ;
@@ -142,7 +142,9 @@ const generateUnformattedCode = (
142
142
} else if ( childElement . tag === 'input' ) {
143
143
return `${ levelSpacer ( level , 5 ) } <${ childElement . tag } ${ elementTagDetails ( childElement ) } ></${ childElement . tag } >${ levelSpacer ( 2 , ( 3 + level ) ) } ` ;
144
144
} else if ( childElement . tag === 'LinkTo' ) {
145
- return `${ levelSpacer ( level , 5 ) } <Link to="${ activeLink } "${ elementTagDetails ( childElement ) } >${ innerText } </Link>${ levelSpacer ( 2 , ( 3 + level ) ) } ` ;
145
+ return `${ levelSpacer ( level , 5 ) } <Link to="${ activeLink } "${ elementTagDetails ( childElement ) } >${ innerText }
146
+ ${ tabSpacer ( level ) } ${ writeNestedElements ( childElement . children , level + 1 ) }
147
+ ${ tabSpacer ( level - 1 ) } </Link>${ levelSpacer ( 2 , ( 3 + level ) ) } ` ;
146
148
} else if ( nestable ) {
147
149
const routePath = ( childElement . tag === 'Route' ) ? ( ' ' + 'exact path="' + activeLink + '"' ) : '' ;
148
150
return `${ levelSpacer ( level , 5 ) } <${ childElement . tag } ${ elementTagDetails ( childElement ) } ${ routePath } >${ innerText }
@@ -212,14 +214,27 @@ const generateUnformattedCode = (
212
214
const classBased = false ;
213
215
let importReactRouter ;
214
216
217
+ const createState = ( stateProps ) => {
218
+ let state = '{' ;
219
+
220
+ stateProps . forEach ( ( ele ) => {
221
+ state += `${ ele . key } : ${ ( ele . type !== 'string' ) ? `${ ele . value } ` : `"${ ele . value } "` } , ` ;
222
+ } ) ;
223
+
224
+ state = state . substring ( 0 , state . length - 2 ) + '}' ;
225
+
226
+ return state ;
227
+ }
228
+
229
+
215
230
// create final component code. component code differs between classic react, next.js, gatsby.js
216
231
// classic react code
217
232
if ( projectType === 'Classic React' ) {
218
233
return `
219
- ${ stateful && ! classBased ? `import React, {useState} from 'react';` : '' }
234
+ ${ stateful && ! classBased ? `import React, { useState, createContext, useContext } from 'react';` : '' }
220
235
${ importReactRouter ? `import { BrowserRouter as Router, Route, Switch, Link } from 'react-router-dom';` : `` }
221
- ${ classBased ? `import React, {Component} from 'react';` : '' }
222
- ${ ! stateful && ! classBased ? `import React from 'react';` : '' }
236
+ ${ classBased ? `import React, { Component } from 'react';` : '' }
237
+ ${ ! stateful && ! classBased ? `import React, { createContext, useContext } from 'react';` : '' }
223
238
${ importsMapped }
224
239
${
225
240
classBased
@@ -228,10 +243,16 @@ const generateUnformattedCode = (
228
243
}
229
244
${
230
245
stateful && ! classBased
231
- ? `const [value, setValue] = useState<any | undefined>("INITIAL VALUE")${ writeStateProps ( currentComponent . useStateCodes ) } ;
246
+ ? `const [value, setValue] = useState<any | undefined>("INITIAL VALUE"); ${ writeStateProps ( currentComponent . useStateCodes ) }
232
247
`
233
248
: ``
234
249
}
250
+ ${
251
+ isRoot && currentComponent . stateProps . length !== 0
252
+ ? `const ${ currentComponent . name } Context = createContext(${ createState ( currentComponent . stateProps ) } );`
253
+ : ``
254
+
255
+ }
235
256
${
236
257
classBased && stateful
237
258
? `constructor(props) {
@@ -243,15 +264,19 @@ const generateUnformattedCode = (
243
264
${ classBased ? `render(): JSX.Element {` : `` }
244
265
${ ! importReactRouter ?
245
266
`return (
246
- <div className="${ currentComponent . name } " ${ formatStyles ( currentComponent ) } >
247
- ${ writeNestedElements ( enrichedChildren ) }
248
- </div>
249
- );` : `return (
250
- <Router>
267
+ <${ currentComponent . name } Context.Provider value="">
251
268
<div className="${ currentComponent . name } " ${ formatStyles ( currentComponent ) } >
252
269
${ writeNestedElements ( enrichedChildren ) }
253
270
</div>
254
- </Router>
271
+ </${ currentComponent . name } Context.Provider>
272
+ );` : `return (
273
+ <${ currentComponent . name } Context.Provider value="">
274
+ <Router>
275
+ <div className="${ currentComponent . name } " ${ formatStyles ( currentComponent ) } >
276
+ ${ writeNestedElements ( enrichedChildren ) }
277
+ </div>
278
+ </Router>
279
+ </${ currentComponent . name } Context.Provider>
255
280
);` }
256
281
${ `}` }
257
282
export default ${ currentComponent . name } ;
0 commit comments