|
|
|
@ -1,6 +1,7 @@
|
|
|
|
import {
|
|
|
|
import {
|
|
|
|
Fragment,
|
|
|
|
Fragment,
|
|
|
|
FunctionComponent,
|
|
|
|
FunctionComponent,
|
|
|
|
|
|
|
|
ReactNode,
|
|
|
|
useCallback,
|
|
|
|
useCallback,
|
|
|
|
useMemo,
|
|
|
|
useMemo,
|
|
|
|
useState
|
|
|
|
useState
|
|
|
|
@ -13,6 +14,7 @@ import { ScrollView } from "./ScrollView";
|
|
|
|
import Modal from "./Modal";
|
|
|
|
import Modal from "./Modal";
|
|
|
|
import Tabs from "./Tabs";
|
|
|
|
import Tabs from "./Tabs";
|
|
|
|
import Tab from "./Tab";
|
|
|
|
import Tab from "./Tab";
|
|
|
|
|
|
|
|
import ResourceList from "./ResourceList";
|
|
|
|
|
|
|
|
|
|
|
|
export interface ITab {
|
|
|
|
export interface ITab {
|
|
|
|
value: string;
|
|
|
|
value: string;
|
|
|
|
@ -23,12 +25,15 @@ export interface ITab {
|
|
|
|
export interface IFormModalProps {
|
|
|
|
export interface IFormModalProps {
|
|
|
|
title: string;
|
|
|
|
title: string;
|
|
|
|
tabs: ITab[];
|
|
|
|
tabs: ITab[];
|
|
|
|
|
|
|
|
items: string[];
|
|
|
|
onHide: () => void;
|
|
|
|
onHide: () => void;
|
|
|
|
getFinalValues: (values: any, selectedNode?: any) => any;
|
|
|
|
getFinalValues: (values: any, selectedNode?: any) => any;
|
|
|
|
getInitialValues: (selectedNode?: any) => any;
|
|
|
|
getInitialValues: (selectedNode?: any) => any;
|
|
|
|
|
|
|
|
getText: (item: string) => ReactNode;
|
|
|
|
validationSchema: any;
|
|
|
|
validationSchema: any;
|
|
|
|
onCreate: (finalValues: any, values: any, formik: any) => void;
|
|
|
|
onCreate: (finalValues: any, values: any, formik: any) => void;
|
|
|
|
selectedNode?: any;
|
|
|
|
selectedNode?: any;
|
|
|
|
|
|
|
|
resourceType: string;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const StyledScrollView = styled(ScrollView)`
|
|
|
|
const StyledScrollView = styled(ScrollView)`
|
|
|
|
@ -40,6 +45,16 @@ const StyledScrollView = styled(ScrollView)`
|
|
|
|
flex: 1 1 auto;
|
|
|
|
flex: 1 1 auto;
|
|
|
|
`;
|
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const Container = styled("div")`
|
|
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
|
|
flex-direction: row;
|
|
|
|
|
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const FormContainer = styled("div")`
|
|
|
|
|
|
|
|
display: flex;
|
|
|
|
|
|
|
|
flex-direction: column;
|
|
|
|
|
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
|
|
const Actions = styled("div")`
|
|
|
|
const Actions = styled("div")`
|
|
|
|
display: flex;
|
|
|
|
display: flex;
|
|
|
|
padding-top: 0.75rem;
|
|
|
|
padding-top: 0.75rem;
|
|
|
|
@ -58,12 +73,15 @@ const FormModal = (props: IFormModalProps) => {
|
|
|
|
const {
|
|
|
|
const {
|
|
|
|
title,
|
|
|
|
title,
|
|
|
|
tabs,
|
|
|
|
tabs,
|
|
|
|
|
|
|
|
items,
|
|
|
|
|
|
|
|
validationSchema,
|
|
|
|
getInitialValues,
|
|
|
|
getInitialValues,
|
|
|
|
getFinalValues,
|
|
|
|
getFinalValues,
|
|
|
|
validationSchema,
|
|
|
|
getText,
|
|
|
|
onHide,
|
|
|
|
onHide,
|
|
|
|
onCreate,
|
|
|
|
onCreate,
|
|
|
|
selectedNode
|
|
|
|
selectedNode,
|
|
|
|
|
|
|
|
resourceType
|
|
|
|
} = props;
|
|
|
|
} = props;
|
|
|
|
|
|
|
|
|
|
|
|
const [openTab, setOpenTab] = useState(() => tabs[0].value);
|
|
|
|
const [openTab, setOpenTab] = useState(() => tabs[0].value);
|
|
|
|
@ -89,32 +107,52 @@ const FormModal = (props: IFormModalProps) => {
|
|
|
|
);
|
|
|
|
);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const handleNew = () => null;
|
|
|
|
|
|
|
|
const handleRemove = () => null;
|
|
|
|
|
|
|
|
const handleEdit = () => null;
|
|
|
|
|
|
|
|
const selectedItem = undefined as any;
|
|
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
return (
|
|
|
|
<Modal onHide={onHide} title={title}>
|
|
|
|
<Modal onHide={onHide} title={title}>
|
|
|
|
<Formik
|
|
|
|
<Container>
|
|
|
|
initialValues={initialValues}
|
|
|
|
{items.length > 0 && (
|
|
|
|
enableReinitialize={true}
|
|
|
|
<ResourceList
|
|
|
|
onSubmit={handleCreate}
|
|
|
|
items={items}
|
|
|
|
validationSchema={validationSchema}
|
|
|
|
newActionText={`New ${resourceType}`}
|
|
|
|
>
|
|
|
|
getText={getText}
|
|
|
|
{(formik) => (
|
|
|
|
onNew={handleNew}
|
|
|
|
<>
|
|
|
|
onRemove={handleRemove}
|
|
|
|
<Tabs value={openTab} onChange={setOpenTab}>
|
|
|
|
onEdit={handleEdit}
|
|
|
|
{tabs.map((tab) => (
|
|
|
|
selectedItem={selectedItem?.key}
|
|
|
|
<Tab key={tab.value} value={tab.value} title={tab.title} />
|
|
|
|
/>
|
|
|
|
))}
|
|
|
|
|
|
|
|
</Tabs>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<StyledScrollView height="500px">
|
|
|
|
|
|
|
|
{tabs.map(renderTab)}
|
|
|
|
|
|
|
|
</StyledScrollView>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<Actions>
|
|
|
|
|
|
|
|
<Button onClick={reportErrorsAndSubmit(formik)}>Save</Button>
|
|
|
|
|
|
|
|
</Actions>
|
|
|
|
|
|
|
|
</>
|
|
|
|
|
|
|
|
)}
|
|
|
|
)}
|
|
|
|
</Formik>
|
|
|
|
<FormContainer>
|
|
|
|
|
|
|
|
<Formik
|
|
|
|
|
|
|
|
initialValues={initialValues}
|
|
|
|
|
|
|
|
enableReinitialize={true}
|
|
|
|
|
|
|
|
onSubmit={handleCreate}
|
|
|
|
|
|
|
|
validationSchema={validationSchema}
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
{(formik) => (
|
|
|
|
|
|
|
|
<>
|
|
|
|
|
|
|
|
<Tabs value={openTab} onChange={setOpenTab}>
|
|
|
|
|
|
|
|
{tabs.map((tab) => (
|
|
|
|
|
|
|
|
<Tab key={tab.value} value={tab.value} title={tab.title} />
|
|
|
|
|
|
|
|
))}
|
|
|
|
|
|
|
|
</Tabs>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<StyledScrollView height="500px">
|
|
|
|
|
|
|
|
{tabs.map(renderTab)}
|
|
|
|
|
|
|
|
</StyledScrollView>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<Actions>
|
|
|
|
|
|
|
|
<Button onClick={reportErrorsAndSubmit(formik)}>Save</Button>
|
|
|
|
|
|
|
|
</Actions>
|
|
|
|
|
|
|
|
</>
|
|
|
|
|
|
|
|
)}
|
|
|
|
|
|
|
|
</Formik>
|
|
|
|
|
|
|
|
</FormContainer>
|
|
|
|
|
|
|
|
</Container>
|
|
|
|
</Modal>
|
|
|
|
</Modal>
|
|
|
|
);
|
|
|
|
);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|