import React from "react";
import { FabricButton } from "@gland/react/button";
import { Modal } from "@gland/react/modal";
import { TextInput } from "@gland/react/input";
import { ChoiceGroup } from "@gland/react/radio";
import { ToolAttr } from "../utils";
import { toolClasses as classes } from "../style";
import { CodeMirror } from "@gland/react/common/CodeMirror";
function reducer(state, action) {
let newState = state;
let type = action?.type;
let payload = action?.payload;
if (type === "OpenModal") {
let catalog = payload.data?.catalog || lastCatalog;
return Object.assign({}, state, {
open: true,
loading: false,
key: payload.key,
data: {
catalog,
align: payload.data?.align || "center",
value: payload.data?.value || "",
width: payload.data?.width || 640,
height: payload.data?.height || 360,
},
href: payload.key && catalog === "0" ? payload.data?.value || "" : "",
html: payload.key && catalog === "1" ? payload.data?.value || getDefaultHtml() : getDefaultHtml(),
});
} else if (type === "StateChange") {
return Object.assign({}, state, payload);
} else if (type == "CloseModal") {
return Object.assign({}, state, {
open: false,
loading: false,
});
}
return newState;
}
function initer(props) {
return {
open: false,
loading: false,
key: "",
data: {
catalog: "0",
align: "center",
value: "",
width: 640,
height: 360,
},
href: "",
html: "",
};
}
let lastCatalog = "0";
const codeOptions = {
mode: "htmlmixed",
theme: "material",
lineNumbers: true,
};
export function IframeEditModal(props: { attr: ToolAttr }) {
const [state, dispatch] = React.useReducer(reducer, props, initer);
const attr = props.attr;
const lang = attr.lang;
React.useEffect(() => {
const attr = props.attr;
function OpenEdit(options) {
dispatch({
type: "OpenModal",
payload: options,
});
}
attr.event.on(attr.editEvent.openEditIframe, OpenEdit);
return () => {
attr.event.off(attr.editEvent.openEditIframe, OpenEdit);
};
}, []);
const modalAttr = React.useRef({} as { input }).current;
return (