|
1 | | -import { ComponentInt, ChildInt, ChildrenInt, PropInt } from "./Interfaces"; |
2 | | -import cloneDeep from "./cloneDeep"; |
| 1 | +import { |
| 2 | + ComponentInt, ComponentsInt, ChildInt, ChildrenInt, PropInt, |
| 3 | +} from './Interfaces'; |
| 4 | +import cloneDeep from './cloneDeep'; |
3 | 5 |
|
4 | | -const componentRender = (component: ComponentInt, data: any) => { |
| 6 | +const componentRender = (component: ComponentInt, components: ComponentsInt) => { |
5 | 7 | const { |
6 | 8 | // stateful, |
7 | 9 | // id, |
8 | 10 | // position, |
9 | 11 | childrenArray, |
10 | 12 | title, |
11 | | - props |
| 13 | + props, |
12 | 14 | }: { |
13 | | - childrenArray: ChildrenInt; |
14 | | - title: string; |
15 | | - props: PropInt[]; |
| 15 | + childrenArray: ChildrenInt; |
| 16 | + title: string; |
| 17 | + props: PropInt[]; |
16 | 18 | } = component; |
17 | 19 |
|
18 | 20 | function typeSwitcher(type: string) { |
19 | 21 | switch (type) { |
20 | | - case "string": |
21 | | - return "string"; |
22 | | - case "number": |
23 | | - return "number"; |
24 | | - case "object": |
25 | | - return "object"; |
26 | | - case "array": |
27 | | - return "any[]"; |
28 | | - case "bool": |
29 | | - return "boolean"; |
30 | | - case "function": |
31 | | - return "() => any"; |
| 22 | + case 'string': |
| 23 | + return 'string'; |
| 24 | + case 'number': |
| 25 | + return 'number'; |
| 26 | + case 'object': |
| 27 | + return 'object'; |
| 28 | + case 'array': |
| 29 | + return 'any[]'; |
| 30 | + case 'bool': |
| 31 | + return 'boolean'; |
| 32 | + case 'function': |
| 33 | + return '() => any'; |
32 | 34 | // case 'symbol': |
33 | 35 | // return 'string'; |
34 | | - case "node": |
35 | | - return "string"; |
36 | | - case "element": |
37 | | - return "string"; |
38 | | - case "tuple": |
39 | | - return "[any]"; |
40 | | - case "enum": |
41 | | - return "{}"; |
42 | | - case "any": |
43 | | - return "any"; |
| 36 | + case 'node': |
| 37 | + return 'string'; |
| 38 | + case 'element': |
| 39 | + return 'string'; |
| 40 | + case 'tuple': |
| 41 | + return '[any]'; |
| 42 | + case 'enum': |
| 43 | + return '{}'; |
| 44 | + case 'any': |
| 45 | + return 'any'; |
44 | 46 | default: |
45 | | - return "any"; |
| 47 | + return 'any'; |
46 | 48 | } |
47 | 49 | } |
48 | 50 |
|
49 | 51 | function propDrillTextGenerator(child: ChildInt) { |
50 | | - if (child.childType === "COMP") { |
51 | | - return data |
| 52 | + if (child.childType === 'COMP') { |
| 53 | + return components |
52 | 54 | .find((c: any) => c.id === child.childComponentId) |
53 | 55 | .props.map((prop: PropInt) => `${prop.key}={${prop.value}}`) |
54 | | - .join(" "); |
| 56 | + .join(' '); |
55 | 57 | } |
56 | | - return ""; |
| 58 | + if (child.childType === 'HTML') { |
| 59 | + const keys: string[] = Object.keys(child.HTMLInfo); |
| 60 | + return keys.map(key => `${key}={${child.HTMLInfo[key]}}`).join(' '); |
| 61 | + } |
| 62 | + return ''; |
57 | 63 | } |
58 | 64 |
|
59 | 65 | function componentNameGenerator(child: ChildInt) { |
60 | | - if (child.childType === "HTML") { |
| 66 | + if (child.childType === 'HTML') { |
61 | 67 | switch (child.componentName) { |
62 | | - case "Image": |
63 | | - return "img"; |
64 | | - case "Form": |
65 | | - return "form"; |
66 | | - case "Button": |
67 | | - return "button"; |
68 | | - case "Link": |
| 68 | + case 'Image': |
| 69 | + return 'img'; |
| 70 | + case 'Form': |
| 71 | + return 'form'; |
| 72 | + case 'Button': |
| 73 | + return 'button'; |
| 74 | + case 'Link': |
69 | 75 | return 'a href=""'; |
70 | | - case "List": |
71 | | - return "ul"; |
72 | | - case "Paragraph": |
73 | | - return "p"; |
| 76 | + case 'List': |
| 77 | + return 'ul'; |
| 78 | + case 'Paragraph': |
| 79 | + return 'p'; |
74 | 80 | default: |
75 | | - return "div"; |
| 81 | + return 'div'; |
76 | 82 | } |
77 | 83 | } else { |
78 | 84 | return child.componentName; |
@@ -120,38 +126,30 @@ const componentRender = (component: ComponentInt, data: any) => { |
120 | 126 | return ` |
121 | 127 | import React from 'react'; |
122 | 128 | ${childrenArray |
123 | | - .filter(child => child.childType !== "HTML") |
124 | | - .map( |
125 | | - child => |
126 | | - `import ${child.componentName} from './${child.componentName}.tsx'` |
127 | | - ) |
128 | | - .reduce((acc: Array<string>, child) => { |
129 | | - if (!acc.includes(child)) { |
130 | | - acc.push(child); |
131 | | - return acc; |
132 | | - } |
| 129 | + .filter(child => child.childType !== 'HTML') |
| 130 | + .map(child => `import ${child.componentName} from './${child.componentName}.tsx'`) |
| 131 | + .reduce((acc: Array<string>, child) => { |
| 132 | + if (!acc.includes(child)) { |
| 133 | + acc.push(child); |
133 | 134 | return acc; |
134 | | - }, []) |
135 | | - .join("\n")} |
| 135 | + } |
| 136 | + return acc; |
| 137 | + }, []) |
| 138 | + .join('\n')} |
136 | 139 | |
137 | 140 | type Props = { |
138 | | - ${props.map(prop => `${prop.key}: ${typeSwitcher(prop.type)}`).join("\n")} |
| 141 | + ${props.map(prop => `${prop.key}: ${typeSwitcher(prop.type)}`).join('\n')} |
139 | 142 | } |
140 | 143 |
|
141 | 144 | const ${title} = (props: Props) => { |
142 | | - const {${props.map(el => el.key).join(",\n")}} = props |
| 145 | + const {${props.map(el => el.key).join(',\n')}} = props |
143 | 146 | |
144 | 147 | return ( |
145 | 148 | <div> |
146 | 149 | ${cloneDeep(childrenArray) |
147 | | - .sort((a, b) => a.childSort - b.childSort) |
148 | | - .map( |
149 | | - child => |
150 | | - `<${componentNameGenerator(child)} ${propDrillTextGenerator( |
151 | | - child |
152 | | - )}/>` |
153 | | - ) |
154 | | - .join("\n")} |
| 150 | + .sort((a, b) => a.childSort - b.childSort) |
| 151 | + .map(child => `<${componentNameGenerator(child)} ${propDrillTextGenerator(child)}/>`) |
| 152 | + .join('\n')} |
155 | 153 | </div> |
156 | 154 | ); |
157 | 155 | } |
|
0 commit comments