import Box from "@mui/material/Box"; import Typography from "@mui/material/Typography"; import Toolbar from "@mui/material/Toolbar"; import Paper from "@mui/material/Paper"; import {Fab, FormControl, FormControlLabel, InputAdornment, InputLabel, OutlinedInput, Tabs} from "@mui/material"; import IconButton from "@mui/material/IconButton"; import SearchIcon from "@mui/icons-material/Search"; import * as React from "react"; import {useEffect, useMemo, useState} from "react"; import {Loading} from "../../../components/core/Loading"; import {requests} from "../../../requests"; import {useAlert} from "../../../hooks/useAlert"; import {IngredientInfoModal} from "../../../components/Ingredients/IngredientInfoModal"; import {api} from "../../../lib/clients/api"; import Tab from "@mui/material/Tab"; import {a11yProps} from "../../../components/core/tabProps"; import {CustomTabPanel} from "../../../components/core/TabPanel"; import {IngredientList} from "../../../components/Ingredients/IngredientList"; import {blue} from "@mui/material/colors"; import UpIcon from "@mui/icons-material/KeyboardArrowUp"; import Switch from "@mui/material/Switch"; import {useSelect} from "../../../hooks/useSelect"; export function IngredientsPage() { const [value, setValue] = React.useState(0); const handleChange = (event, newValue) => setValue(newValue); const [loading, setLoading] = useState(true); const [findString, setFindString] = useState(""); const [ingredients, setIngredients] = useState([]); const {getIngredient, selectIngredient} = useSelect(); const {createError} = useAlert(); useEffect(() => { api().get(requests.bar.ingredientList) .then((r) => { setIngredients(r.data) setLoading(false); }) .catch(() => { createError("Ошибка получения списка ингредиентов"); setLoading(false); }) // eslint-disable-next-line react-hooks/exhaustive-deps }, []); const visibleIngredients = useMemo(() => { if (findString.length === 0) { return ingredients; } const reg = new RegExp("(.*?)" + findString + "(.*?)", "i"); return ingredients.filter((ingredient) => ingredient.name.match(reg) !== null); }, [findString, ingredients]); const ingredientsToAdd = visibleIngredients.filter((ingredient) => !ingredient.have); const ingredientsInBar = visibleIngredients.filter((ingredient) => ingredient.have); const changeHandler = (row, value) => { const newState = ingredients.map((ingredient) => { if (ingredient.id === row.id) { return { ...ingredient, have: value } } else { return ingredient; } }) const url = `${requests.bar.ingredient}?id=${row.id}`; const request = value ? api().put(url) : api().delete(url); request .then(() => { setIngredients(newState); }) .catch(() => { createError("Ошибка изменения ингредиента"); }); } const handleOpenModal = (i) => { selectIngredient(i) } return ( {/*Заголовок*/} Ингредиенты бара {/*Поиск*/} Поиск setFindString(e.target.value)} label="With normal TextField" startAdornment={ } /> {/*Рабочее поле ингредиентов*/} window.window.scrollTo(0, 0)} aria-label='Expand' color='inherit'> {/*Загрузчик*/} {/*Модальное окно информации об ингредиенте*/} ) }