46 lines
1.7 KiB
TypeScript
46 lines
1.7 KiB
TypeScript
|
import components from "../components/components"
|
||
|
import Utils from "./Utils"
|
||
|
import { ComponentProps } from "react"
|
||
|
import uuid from "./uuid"
|
||
|
import TextInput from "../components/inputs/TextInput"
|
||
|
|
||
|
export default new class PluginUtilities {
|
||
|
constructor(){}
|
||
|
|
||
|
renderSettings(settings:SettingItem[]){
|
||
|
let items = this.renderSettingsToReact(settings)
|
||
|
let elem = React.createElement("div", {key: uuid()}, items)
|
||
|
return Utils.ReactToHTMLElement(elem)
|
||
|
}
|
||
|
|
||
|
renderSettingsToReact(settings:SettingItem[]){
|
||
|
let items = []
|
||
|
settings.forEach(item => {
|
||
|
console.log(item)
|
||
|
if(typeof item !== "object")return items.push(item)
|
||
|
if(item.props && "children" in item.props){
|
||
|
if(!Array.isArray(item.props.children))item.props.children = [item.props.children]
|
||
|
item.props.children = this.renderSettingsToReact(item.props.children)
|
||
|
}
|
||
|
if(!item.props)item.props = {}
|
||
|
item.props.key = uuid()
|
||
|
let component = Utils.getNestedProps(components, item.component)
|
||
|
if(!component){
|
||
|
let warning = new TextInput({
|
||
|
value: `Warning: No component was found for: "${item.component}". Please correct your code.`,
|
||
|
disabled: true,
|
||
|
error: `Warning: No component was found for: "${item.component}". Please correct your code.`
|
||
|
}).render()
|
||
|
items.push(warning)
|
||
|
return
|
||
|
}
|
||
|
items.push(React.createElement(component, Object.create(item.props)))
|
||
|
})
|
||
|
return items
|
||
|
}
|
||
|
}
|
||
|
|
||
|
type SettingItem = {
|
||
|
component: string,
|
||
|
props: ComponentProps<any>
|
||
|
}
|