import photoIcon from "@assets/images/photo-icon.svg"; import { Card, CardContent, TextField, Typography } from "@material-ui/core"; import CardTitle from "@saleor/components/CardTitle"; import { StaffErrorFragment } from "@saleor/fragments/types/StaffErrorFragment"; import { commonMessages } from "@saleor/intl"; import { makeStyles } from "@saleor/macaw-ui"; import { getFormErrors } from "@saleor/utils/errors"; import getStaffErrorMessage from "@saleor/utils/errors/staff"; import React from "react"; import SVG from "react-inlinesvg"; import { FormattedMessage, useIntl } from "react-intl"; import { getUserInitials, maybe } from "../../../misc"; import { StaffMemberDetails_user } from "../../types/StaffMemberDetails"; const useStyles = makeStyles( theme => ({ avatar: { "& svg": { fill: "#fff" }, "&:hover $avatarHover": { opacity: 1 }, alignItems: "center", borderRadius: "100%", display: "grid", height: 120, justifyContent: "center", overflow: "hidden", position: "relative", width: 120 }, avatarActionText: { "&:hover": { textDecoration: "underline" }, color: "#fff", cursor: "pointer", fontSize: 12 }, avatarDefault: { "& div": { color: "#fff", fontSize: 35, fontWeight: "bold", lineHeight: "120px" }, background: theme.palette.primary.main, height: 120, textAlign: "center", width: 120 }, avatarHover: { background: "#00000080", borderRadius: "100%", fontSize: 12, fontWeight: 500, height: 120, opacity: 0, padding: theme.spacing(2.5, 0), position: "absolute", textAlign: "center", textTransform: "uppercase", transition: "opacity 0.5s", width: 120 }, avatarImage: { pointerEvents: "none", width: "100%" }, fileField: { display: "none" }, prop: { marginBottom: theme.spacing(2) }, propGrid: { display: "grid", gridColumnGap: theme.spacing(2), gridRowGap: theme.spacing(1), gridTemplateColumns: "1fr 1fr", [theme.breakpoints.down("xs")]: { gridTemplateColumns: "1fr" } }, root: { display: "grid", gridColumnGap: theme.spacing(4), gridTemplateColumns: "120px 1fr" } }), { name: "StaffProperties" } ); interface StaffPropertiesProps { canEditAvatar: boolean; className?: string; data: { email: string; firstName: string; lastName: string; }; errors: StaffErrorFragment[]; disabled: boolean; staffMember: StaffMemberDetails_user; onChange: (event: React.ChangeEvent) => void; onImageDelete: () => void; onImageUpload: (file: File) => void; } const StaffProperties: React.FC = props => { const { canEditAvatar, className, data, errors, staffMember, onChange, onImageDelete, onImageUpload } = props; const classes = useStyles(props); const intl = useIntl(); const imgInputAnchor = React.createRef(); const clickImgInput = () => imgInputAnchor.current.click(); const formErrors = getFormErrors(["id"], errors || []); return (
{maybe(() => staffMember.avatar.url) ? ( staffMember.avatar.url)} /> ) : (
{getUserInitials(data)}
)} {canEditAvatar && (
onImageUpload(event.target.files[0])} type="file" ref={imgInputAnchor} />
)}
{!!formErrors.id && ( {getStaffErrorMessage(formErrors.id, intl)} )}
); }; StaffProperties.displayName = "StaffProperties"; export default StaffProperties;