wip fix
This commit is contained in:
parent
7a50709df5
commit
0a31f78dd1
|
|
@ -295,6 +295,7 @@ export const EdSidePropInstance: FC<{ meta: IMeta }> = ({ meta }) => {
|
||||||
{type === "option" && (
|
{type === "option" && (
|
||||||
<EdPropInstanceOptions
|
<EdPropInstanceOptions
|
||||||
mprop={mprop}
|
mprop={mprop}
|
||||||
|
meta={meta}
|
||||||
cprop={cprop}
|
cprop={cprop}
|
||||||
name={name}
|
name={name}
|
||||||
labelClick={labelClick}
|
labelClick={labelClick}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ import { useGlobal, useLocal } from "web-utils";
|
||||||
import { apiProxy } from "../../../../../base/load/api/api-proxy";
|
import { apiProxy } from "../../../../../base/load/api/api-proxy";
|
||||||
import { dbProxy } from "../../../../../base/load/db/db-proxy";
|
import { dbProxy } from "../../../../../base/load/db/db-proxy";
|
||||||
import { FMCompDef, FNCompDef } from "../../../../../utils/types/meta-fn";
|
import { FMCompDef, FNCompDef } from "../../../../../utils/types/meta-fn";
|
||||||
import { EDGlobal } from "../../../logic/ed-global";
|
import { EDGlobal, IMeta } from "../../../logic/ed-global";
|
||||||
import { treeRebuild } from "../../../logic/tree/build";
|
import { treeRebuild } from "../../../logic/tree/build";
|
||||||
import { EdPropLabel } from "./prop-label";
|
import { EdPropLabel } from "./prop-label";
|
||||||
import { ChevronDown } from "../../tree/node/item/indent";
|
import { ChevronDown } from "../../tree/node/item/indent";
|
||||||
|
|
@ -13,14 +13,20 @@ type MetaOption = {
|
||||||
label: string;
|
label: string;
|
||||||
value: any;
|
value: any;
|
||||||
options?: MetaOption[];
|
options?: MetaOption[];
|
||||||
|
reload?: string[];
|
||||||
|
};
|
||||||
|
|
||||||
|
const config = {
|
||||||
|
opt: {} as Record<string, () => void>,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const EdPropInstanceOptions: FC<{
|
export const EdPropInstanceOptions: FC<{
|
||||||
|
meta: IMeta;
|
||||||
name: string;
|
name: string;
|
||||||
mprop: FMCompDef;
|
mprop: FMCompDef;
|
||||||
cprop: FNCompDef;
|
cprop: FNCompDef;
|
||||||
labelClick?: React.MouseEventHandler<HTMLDivElement> | undefined;
|
labelClick?: React.MouseEventHandler<HTMLDivElement> | undefined;
|
||||||
}> = ({ name, mprop, cprop, labelClick }) => {
|
}> = ({ name, mprop, cprop, labelClick, meta }) => {
|
||||||
const prop = mprop.toJSON() as FNCompDef;
|
const prop = mprop.toJSON() as FNCompDef;
|
||||||
const local = useLocal({
|
const local = useLocal({
|
||||||
codeEditing: false,
|
codeEditing: false,
|
||||||
|
|
@ -37,6 +43,13 @@ export const EdPropInstanceOptions: FC<{
|
||||||
|
|
||||||
let metaOptions: MetaOption[] = [];
|
let metaOptions: MetaOption[] = [];
|
||||||
|
|
||||||
|
config.opt[name] = () => {
|
||||||
|
local.metaFn = null;
|
||||||
|
local.loaded = null;
|
||||||
|
local.loading = false;
|
||||||
|
local.render();
|
||||||
|
};
|
||||||
|
|
||||||
if (cprop.meta?.options || cprop.meta?.optionsBuilt) {
|
if (cprop.meta?.options || cprop.meta?.optionsBuilt) {
|
||||||
if (!local.loaded) {
|
if (!local.loaded) {
|
||||||
try {
|
try {
|
||||||
|
|
@ -45,14 +58,24 @@ export const EdPropInstanceOptions: FC<{
|
||||||
if (!p.script.api) p.script.api = apiProxy(p.site.config.api_url);
|
if (!p.script.api) p.script.api = apiProxy(p.site.config.api_url);
|
||||||
}
|
}
|
||||||
|
|
||||||
const args = {
|
const arg = {
|
||||||
...window.exports,
|
...window.exports,
|
||||||
db: p.script.db,
|
db: p.script.db,
|
||||||
api: p.script.api,
|
api: p.script.api,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (meta.item.script?.props) {
|
||||||
|
for (const [k, v] of Object.entries(meta.item.script?.props)) {
|
||||||
|
eval(`arg.${k} = ${v.value}`);
|
||||||
|
}
|
||||||
|
} else if (meta.item.component) {
|
||||||
|
for (const [k, v] of Object.entries(meta.item.component.props)) {
|
||||||
|
eval(`arg.${k} = ${v.valueBuilt}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
eval(`
|
eval(`
|
||||||
${Object.entries(args)
|
${Object.entries(arg)
|
||||||
.map((e) => `const ${e[0]} = args["${e[0]}"]`)
|
.map((e) => `const ${e[0]} = arg["${e[0]}"]`)
|
||||||
.join(";\n")}
|
.join(";\n")}
|
||||||
const resOpt = ${cprop.meta.optionsBuilt || cprop.meta.options};
|
const resOpt = ${cprop.meta.optionsBuilt || cprop.meta.options};
|
||||||
if (typeof resOpt === 'function') local.metaFn = resOpt;
|
if (typeof resOpt === 'function') local.metaFn = resOpt;
|
||||||
|
|
@ -87,7 +110,7 @@ else metaOptions = resOpt;
|
||||||
}
|
}
|
||||||
}, [evalue]);
|
}, [evalue]);
|
||||||
|
|
||||||
const onChange = (val: string) => {
|
const onChange = (val: string, item: MetaOption | undefined) => {
|
||||||
mprop.doc?.transact(() => {
|
mprop.doc?.transact(() => {
|
||||||
mprop.set("value", val);
|
mprop.set("value", val);
|
||||||
mprop.set("valueBuilt", val);
|
mprop.set("valueBuilt", val);
|
||||||
|
|
@ -95,6 +118,16 @@ else metaOptions = resOpt;
|
||||||
|
|
||||||
treeRebuild(p);
|
treeRebuild(p);
|
||||||
p.render();
|
p.render();
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
if (item?.reload) {
|
||||||
|
for (const name of item.reload) {
|
||||||
|
if (config.opt[name]) {
|
||||||
|
config.opt[name]();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
let mode = cprop.meta?.option_mode;
|
let mode = cprop.meta?.option_mode;
|
||||||
|
|
@ -117,7 +150,10 @@ else metaOptions = resOpt;
|
||||||
value={evalue}
|
value={evalue}
|
||||||
className="flex-1 border-l outline-none"
|
className="flex-1 border-l outline-none"
|
||||||
onChange={(ev) => {
|
onChange={(ev) => {
|
||||||
onChange(`"${ev.currentTarget.value}"`);
|
onChange(
|
||||||
|
`"${ev.currentTarget.value}"`,
|
||||||
|
metaOptions.find((e) => e.value === ev.currentTarget.value)
|
||||||
|
);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{Array.isArray(metaOptions) &&
|
{Array.isArray(metaOptions) &&
|
||||||
|
|
@ -145,7 +181,7 @@ else metaOptions = resOpt;
|
||||||
: "bg-blue-700 text-white border-blue-700"
|
: "bg-blue-700 text-white border-blue-700"
|
||||||
)}
|
)}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
onChange(`"${item.value}"`);
|
onChange(`"${item.value}"`, item);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{item.label}
|
{item.label}
|
||||||
|
|
@ -192,7 +228,7 @@ else metaOptions = resOpt;
|
||||||
idx={idx}
|
idx={idx}
|
||||||
val={val}
|
val={val}
|
||||||
onChange={(val) => {
|
onChange={(val) => {
|
||||||
onChange(JSON.stringify(val));
|
onChange(JSON.stringify(val), item);
|
||||||
local.render();
|
local.render();
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|
@ -203,6 +239,7 @@ else metaOptions = resOpt;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<SingleCheckbox
|
<SingleCheckbox
|
||||||
|
key={idx}
|
||||||
item={child}
|
item={child}
|
||||||
idx={idx}
|
idx={idx}
|
||||||
depth={1}
|
depth={1}
|
||||||
|
|
@ -210,7 +247,7 @@ else metaOptions = resOpt;
|
||||||
onChange={(newval) => {
|
onChange={(newval) => {
|
||||||
found.checked = newval;
|
found.checked = newval;
|
||||||
|
|
||||||
onChange(JSON.stringify(val));
|
onChange(JSON.stringify(val), child);
|
||||||
local.render();
|
local.render();
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|
@ -266,7 +303,7 @@ const SingleCheckbox = ({
|
||||||
idx: number;
|
idx: number;
|
||||||
depth?: number;
|
depth?: number;
|
||||||
val: any[];
|
val: any[];
|
||||||
onChange: (val: MetaOption[]) => void;
|
onChange: (val: MetaOption[], item: MetaOption) => void;
|
||||||
}) => {
|
}) => {
|
||||||
const is_check = !!val.find((e) => {
|
const is_check = !!val.find((e) => {
|
||||||
if (!item.options) {
|
if (!item.options) {
|
||||||
|
|
@ -341,7 +378,7 @@ const SingleCheckbox = ({
|
||||||
val.push(item.value);
|
val.push(item.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
onChange(val);
|
onChange(val, item);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{!is_check ? unchecked : checked}
|
{!is_check ? unchecked : checked}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue