frontend/app/Master/CopyingMaster.tsx (116 lines of code) (raw):
import React from "react";
import { makeStyles, TextField, Tooltip, IconButton } from "@material-ui/core";
import ChipInput from "../Form/ChipInput";
import FileCopyIcon from "@material-ui/icons/FileCopy";
interface CopyingMasterFields {
title: string;
description: string;
tags: string[];
}
interface CopyingMasterProps {
prefix: string;
fields: CopyingMasterFields;
onChange: (event: any, property: string) => void;
isDirty: boolean;
disabled?: boolean;
onButton: (property: string) => void;
}
const useStyles = makeStyles({
grid_holder: {
display: "grid",
gridTemplateColumns: "auto 40px",
marginBottom: "1em",
},
grid_1: {
gridColumnStart: 1,
gridColumnEnd: 1,
marginTop: "1em",
},
grid_2: {
gridColumnStart: 2,
gridColumnEnd: 2,
marginLeft: "10px",
},
description_button: {
gridColumnStart: 2,
gridColumnEnd: 2,
marginLeft: "10px",
marginTop: "42px",
},
fullWidth: {
width: "100%",
},
});
const CopyingMaster: React.FC<CopyingMasterProps> = (props) => {
const classes = useStyles();
const { prefix } = props;
const { title, description, tags } = props.fields;
const titleLabel = `${prefix} title`;
const titleDescription = `${prefix} description`;
const prefixLowerCase = (prefix || "").toLowerCase();
const isDirty = props.isDirty && !props.disabled;
return (
<>
<div className={classes.grid_holder}>
<div className={classes.grid_1}>
<TextField
label={titleLabel}
value={title || ""}
onChange={(event) =>
props.onChange(event, `${prefixLowerCase}_title`)
}
error={isDirty && !title}
helperText={isDirty && !title ? `${titleLabel} is required` : ""}
required={!props.disabled}
disabled={props.disabled}
className={classes.fullWidth}
/>
</div>
<div className={classes.grid_2}>
<Tooltip title="Copy from Youtube master">
<IconButton onClick={() => props.onButton("title")}>
<FileCopyIcon />
</IconButton>
</Tooltip>
</div>
<div className={classes.grid_1}>
<TextField
label={titleDescription}
multiline
rows={4}
variant="outlined"
value={description || ""}
onChange={(event) =>
props.onChange(event, `${prefixLowerCase}_description`)
}
disabled={props.disabled}
className={classes.fullWidth}
/>
</div>
<div className={classes.description_button}>
<Tooltip title="Copy from Youtube master">
<IconButton onClick={() => props.onButton("description")}>
<FileCopyIcon />
</IconButton>
</Tooltip>
</div>
<div className={classes.grid_1}>
<ChipInput
label={"Tags"}
value={tags}
onChange={(event) => props.onChange(event, "tags")}
disabled={props.disabled}
/>
</div>
<div className={classes.grid_2}>
<Tooltip title="Copy from Youtube master">
<IconButton onClick={() => props.onButton("tags")}>
<FileCopyIcon />
</IconButton>
</Tooltip>
</div>
</div>
</>
);
};
export default CopyingMaster;