Lightcord/LightcordApi/src/modules/PluginUtilities.ts

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 => {
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>
}