|
@@ -5,8 +5,11 @@ import { getSettingsOfUser, updateUserSettingsForCategory } from "./settings.uti
|
|
|
import { useAuth0 } from "@auth0/auth0-react";
|
|
|
import { useTranslation } from "react-i18next";
|
|
|
import { makeStyles } from "@material-ui/styles";
|
|
|
-import { Chip } from "@material-ui/core";
|
|
|
+import { Chip, Dialog, GridListTile, GridList, Button } from "@material-ui/core";
|
|
|
import { Delete, Face } from "@material-ui/icons";
|
|
|
+import { faPlusCircle } from "@fortawesome/free-solid-svg-icons";
|
|
|
+import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
|
|
+import categoryIcons from "../util/CategoryIcons";
|
|
|
|
|
|
const useStyles = makeStyles(theme => ({
|
|
|
chipInput: {
|
|
@@ -19,12 +22,38 @@ const useStyles = makeStyles(theme => ({
|
|
|
chip: {
|
|
|
margin: theme.spacing(0.5),
|
|
|
},
|
|
|
+ chipIcon: {
|
|
|
+ background: "transparent",
|
|
|
+ },
|
|
|
+ iconSelectDialog: {
|
|
|
+ borderRadius: '25px',
|
|
|
+ },
|
|
|
+ iconGrid: {
|
|
|
+ padding: '1rem',
|
|
|
+ },
|
|
|
+ iconListButton: {
|
|
|
+ height: '50px',
|
|
|
+ width: '50px',
|
|
|
+ minWidth: '50px',
|
|
|
+ maxWidth: '50px',
|
|
|
+ // backgroundColor: theme.palette.text.secondary,
|
|
|
+ border: '1px solid '+ theme.palette.text.primary,
|
|
|
+ borderRadius: '25px',
|
|
|
+ },
|
|
|
+ iconListButtonSelected: {
|
|
|
+ backgroundColor: theme.palette.primary.main,
|
|
|
+ },
|
|
|
+ iconInList: {
|
|
|
+ color: theme.palette.text.primary,
|
|
|
+ }
|
|
|
}));
|
|
|
|
|
|
const EditMealCategories = (props) => {
|
|
|
const classes = useStyles();
|
|
|
const { onUpdateSettings, onUpdateCategories } = props;
|
|
|
const [categories, setCategories] = useState([]);
|
|
|
+ const [isIconSelectOpen, setIsIconSelectOpen] = useState(false);
|
|
|
+ const [categoryInIconSelect, setCategoryInIconSelect] = useState(null);
|
|
|
const { user } = useAuth0();
|
|
|
const { t } = useTranslation();
|
|
|
|
|
@@ -53,7 +82,7 @@ const EditMealCategories = (props) => {
|
|
|
}
|
|
|
|
|
|
const addCategory = (categoryToAdd) => {
|
|
|
- categories.push(categoryToAdd);
|
|
|
+ categories.push({ name: categoryToAdd });
|
|
|
updateCategories(categories);
|
|
|
}
|
|
|
|
|
@@ -64,11 +93,37 @@ const EditMealCategories = (props) => {
|
|
|
|
|
|
console.log('categories', categories);
|
|
|
|
|
|
- return (
|
|
|
- <ChipInput label={t('Categories')} color="primary" classes={{ inputRoot: classes.chipInput, input: classes.input }} chipRenderer={(data) => {
|
|
|
- console.log('data', data);
|
|
|
- return <Chip color="primary" label={data.text} onDelete={data.handleDelete} deleteIcon={<Delete />} className={classes.chip} icon={<Face />} />
|
|
|
- }} fullWidth variant="outlined" value={categories} onAdd={addCategory} onDelete={removeCategory} />
|
|
|
+ const openIconSelect = (category) => {
|
|
|
+ console.log('open icon select', category);
|
|
|
+ setIsIconSelectOpen(true);
|
|
|
+ setCategoryInIconSelect(category);
|
|
|
+ }
|
|
|
+
|
|
|
+ return (<>
|
|
|
+ <ChipInput label={t('Categories')} color="primary" classes={{ inputRoot: classes.chipInput, input: classes.input }} chipRenderer={(data) => {
|
|
|
+ const { value: category, value: { name, icon } } = data;
|
|
|
+ return <Chip color="primary"
|
|
|
+ label={name}
|
|
|
+ clickable
|
|
|
+ onClick={openIconSelect(category)}
|
|
|
+ n
|
|
|
+ onDelete={data.handleDelete}
|
|
|
+ deleteIcon={<Delete />}
|
|
|
+ className={classes.chip}
|
|
|
+ avatar={<FontAwesomeIcon icon={icon || faPlusCircle} className={classes.chipIcon} />} />
|
|
|
+ }} fullWidth variant="outlined" value={categories} onAdd={addCategory} onDelete={removeCategory} />
|
|
|
+ <Dialog open={isIconSelectOpen} PaperProps={{className: classes.iconSelectDialog}}>
|
|
|
+ <GridList cellHeight={60} className={classes.iconGrid} cols={5}>
|
|
|
+ {categoryIcons.map((icon) => (
|
|
|
+ <GridListTile key={icon.iconName} cols={1}>
|
|
|
+ <Button className={`${classes.iconListButton} ${categoryInIconSelect && categoryInIconSelect.icon && categoryInIconSelect.icon.iconName === icon.iconName && classes.iconListButtonSelected}`}>
|
|
|
+ <FontAwesomeIcon icon={icon} size="2x" className={classes.iconInList} />
|
|
|
+ </Button>
|
|
|
+ </GridListTile>
|
|
|
+ ))}
|
|
|
+ </GridList>
|
|
|
+ </Dialog>
|
|
|
+ </>
|
|
|
);
|
|
|
}
|
|
|
|