|
|
@@ -1,36 +1,51 @@
|
|
|
-import React, { useState } from "react";
|
|
|
+import React, { useEffect, useState } from "react";
|
|
|
import { IProjectData, ITaskData } from "../api/task";
|
|
|
import ProjectList, { TView } from "./ProjectList";
|
|
|
import ProjectTask from "./ProjectTask";
|
|
|
import { Button, Card, Modal, Tree } from "antd";
|
|
|
import { ArrowLeftOutlined } from "@ant-design/icons";
|
|
|
import { Key } from "antd/es/table/interface";
|
|
|
+import { useIntl } from "react-intl";
|
|
|
|
|
|
interface IModal {
|
|
|
tiger?: React.ReactNode;
|
|
|
studioName?: string;
|
|
|
- onSelect?: (data: IProjectData) => void;
|
|
|
- onData?: (data: ITaskData[]) => void;
|
|
|
+ open?: boolean;
|
|
|
+ onClose?: () => void;
|
|
|
+ onSelect?: (data: IProjectData | undefined) => void;
|
|
|
+ onOk?: (data: ITaskData[] | undefined) => void;
|
|
|
}
|
|
|
export const WorkflowModal = ({
|
|
|
tiger,
|
|
|
studioName,
|
|
|
+ open,
|
|
|
onSelect,
|
|
|
- onData,
|
|
|
+ onOk,
|
|
|
+ onClose,
|
|
|
}: IModal) => {
|
|
|
- const [open, setOpen] = useState(false);
|
|
|
+ const [openModal, setOpenModal] = useState(open);
|
|
|
const [data, setData] = useState<ITaskData[]>();
|
|
|
+
|
|
|
+ useEffect(() => setOpenModal(open), [open]);
|
|
|
+
|
|
|
const showModal = () => {
|
|
|
- setOpen(true);
|
|
|
+ setOpenModal(true);
|
|
|
};
|
|
|
|
|
|
const handleOk = () => {
|
|
|
- onData && data && onData(data);
|
|
|
- setOpen(false);
|
|
|
+ if (onOk) {
|
|
|
+ onOk(data);
|
|
|
+ } else {
|
|
|
+ setOpenModal(false);
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
const handleCancel = () => {
|
|
|
- setOpen(false);
|
|
|
+ if (onClose) {
|
|
|
+ onClose();
|
|
|
+ } else {
|
|
|
+ setOpenModal(false);
|
|
|
+ }
|
|
|
};
|
|
|
return (
|
|
|
<>
|
|
|
@@ -40,11 +55,15 @@ export const WorkflowModal = ({
|
|
|
width={1200}
|
|
|
style={{ top: 10 }}
|
|
|
title={""}
|
|
|
- open={open}
|
|
|
+ open={openModal}
|
|
|
onOk={handleOk}
|
|
|
onCancel={handleCancel}
|
|
|
>
|
|
|
- <Workflow studioName={studioName} onData={(data) => setData(data)} />
|
|
|
+ <Workflow
|
|
|
+ studioName={studioName}
|
|
|
+ onData={(data) => setData(data)}
|
|
|
+ onSelect={onSelect}
|
|
|
+ />
|
|
|
</Modal>
|
|
|
</>
|
|
|
);
|
|
|
@@ -52,13 +71,20 @@ export const WorkflowModal = ({
|
|
|
|
|
|
interface IWidget {
|
|
|
studioName?: string;
|
|
|
- onSelect?: (data: IProjectData) => void;
|
|
|
- onData?: (data: ITaskData[]) => void;
|
|
|
+ onSelect?: (data: IProjectData | undefined) => void;
|
|
|
+ onData?: (data: ITaskData[] | undefined) => void;
|
|
|
}
|
|
|
|
|
|
const Workflow = ({ studioName, onSelect, onData }: IWidget) => {
|
|
|
+ const intl = useIntl();
|
|
|
+
|
|
|
const [project, setProject] = useState<IProjectData>();
|
|
|
const [view, setView] = useState<TView>("studio");
|
|
|
+
|
|
|
+ const selectWorkflow = (selected: IProjectData | undefined) => {
|
|
|
+ onSelect && onSelect(selected);
|
|
|
+ setProject(selected);
|
|
|
+ };
|
|
|
return (
|
|
|
<div style={{ display: "flex" }}>
|
|
|
<div style={{ minWidth: 200, flex: 1 }}>
|
|
|
@@ -66,15 +92,23 @@ const Workflow = ({ studioName, onSelect, onData }: IWidget) => {
|
|
|
multiple={false}
|
|
|
defaultSelectedKeys={["studio"]}
|
|
|
treeData={[
|
|
|
- { title: "my", key: "studio" },
|
|
|
- { title: "shared", key: "shared" },
|
|
|
- { title: "community", key: "community" },
|
|
|
- { title: "authors", key: "authors" },
|
|
|
+ {
|
|
|
+ title: intl.formatMessage({ id: "labels.this-studio" }),
|
|
|
+ key: "studio",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: intl.formatMessage({ id: "labels.shared" }),
|
|
|
+ key: "shared",
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: intl.formatMessage({ id: "labels.community" }),
|
|
|
+ key: "community",
|
|
|
+ },
|
|
|
]}
|
|
|
onSelect={(selectedKeys: Key[]) => {
|
|
|
console.debug("selectedKeys", selectedKeys);
|
|
|
if (selectedKeys.length > 0) {
|
|
|
- setProject(undefined);
|
|
|
+ selectWorkflow(undefined);
|
|
|
setView(selectedKeys[0].toString() as TView);
|
|
|
}
|
|
|
}}
|
|
|
@@ -89,7 +123,9 @@ const Workflow = ({ studioName, onSelect, onData }: IWidget) => {
|
|
|
<Button
|
|
|
type="link"
|
|
|
icon={<ArrowLeftOutlined />}
|
|
|
- onClick={() => setProject(undefined)}
|
|
|
+ onClick={() => {
|
|
|
+ selectWorkflow(undefined);
|
|
|
+ }}
|
|
|
/>
|
|
|
{project.title}
|
|
|
</>
|
|
|
@@ -116,7 +152,7 @@ const Workflow = ({ studioName, onSelect, onData }: IWidget) => {
|
|
|
view={view}
|
|
|
type="workflow"
|
|
|
readonly
|
|
|
- onSelect={(data: IProjectData) => setProject(data)}
|
|
|
+ onSelect={(data: IProjectData) => selectWorkflow(data)}
|
|
|
/>
|
|
|
</div>
|
|
|
</div>
|