frontend/app/Master/CommonMaster.tsx (54 lines of code) (raw):
import React from "react";
import { TextField } from "@material-ui/core";
import ChipInput from "../Form/ChipInput";
interface CommonMasterFields {
title: string;
description: string;
tags: string[];
}
interface CommonMasterProps {
prefix: string;
fields: CommonMasterFields;
onChange: (event: any, property: string) => void;
isDirty: boolean;
disabled?: boolean;
}
const CommonMaster: React.FC<CommonMasterProps> = (props) => {
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 (
<>
<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}
/>
<TextField
label={titleDescription}
multiline
rows={4}
variant="outlined"
value={description || ""}
onChange={(event) =>
props.onChange(event, `${prefixLowerCase}_description`)
}
disabled={props.disabled}
/>
<ChipInput
label={"Tags"}
value={tags}
onChange={(event) => props.onChange(event, "tags")}
disabled={props.disabled}
/>
</>
);
};
export default CommonMaster;