import { AppBar, Autocomplete, Box, Chip, CircularProgress, Dialog, Divider, Grid, IconButton, Paper, TextField, Toolbar, Typography, colors } from "@mui/material" import { useBoilers, useCities, useRegions, useServers, useServersInfo } from "../hooks/swrHooks" import { Fragment, useEffect, useState } from "react" import { IBoiler, ICity, IRegion } from "../interfaces/fuel" import { DataGrid, GridColDef } from "@mui/x-data-grid" import ServerData from "../components/ServerData" import { IServer, IServersInfo } from "../interfaces/servers" import { Close, Cloud, CloudOff, Storage } from "@mui/icons-material" import { BarChart } from "@mui/x-charts" import FullFeaturedCrudGrid from "../components/TableEditable" export default function Servers() { const [open, setOpen] = useState(false) const [options, setOptions] = useState([]) const [search, setSearch] = useState(null) const [debouncedSearch, setDebouncedSearch] = useState("") const [selectedOption, setSelectedOption] = useState(null) const { regions, isLoading } = useRegions(10, 1, debouncedSearch) useEffect(() => { const handler = setTimeout(() => { setDebouncedSearch(search) }, 500) return () => { clearTimeout(handler) } }, [search]) useEffect(() => { if (regions) { setOptions([...regions]) } }, [regions]) const handleInputChange = (value: string) => { setSearch(value) } const handleOptionChange = (value: IRegion | null) => { setSelectedOption(value) } const [citiesOpen, setCitiesOpen] = useState(false) const [citiesPage, setCitiesPage] = useState(1) const [citiesSearch, setCitiesSearch] = useState('') const [debouncedCitySearch, setDebouncedCitySearch] = useState('') const { cities, isLoading: citiesLoading } = useCities(10, citiesPage, debouncedCitySearch) const [citiesOptions, setCitiesOptions] = useState([]) const [selectedCityOption, setSelectedCityOption] = useState(null) const handleCityInputChange = (value: string) => { setCitiesSearch(value) } const handleCityOptionChange = (value: ICity | null) => { setSelectedCityOption(value) } useEffect(() => { if (cities) { setCitiesOptions([...cities]) } }, [cities]) useEffect(() => { const handler = setTimeout(() => { setDebouncedCitySearch(citiesSearch) }, 500) return () => { clearTimeout(handler) } }, [citiesSearch]) useEffect(() => { setCitiesPage(1) setCitiesSearch("") }, []) const { servers, isLoading: serversLoading } = useServers(selectedOption?.id, 0, 10) const serversColumns: GridColDef[] = [ //{ field: 'id', headerName: 'ID', type: "number" }, { field: 'name', headerName: 'Название', type: "string", editable: true }, ] const [serverDataOpen, setServerDataOpen] = useState(false) const [currentServerData, setCurrentServerData] = useState(null) const { serversInfo } = useServersInfo(selectedOption?.id) return ( { setServerDataOpen(false) }} aria-labelledby="modal-modal-title" aria-describedby="modal-modal-description"> { setServerDataOpen(false) }} aria-label="close" > {currentServerData && } Servers by region { setOpen(true) }} onClose={() => { setOpen(false) }} onInputChange={(_, value) => handleInputChange(value)} onChange={(_, value) => handleOptionChange(value)} filterOptions={(x) => x} isOptionEqualToValue={(option: IRegion, value: IRegion) => option.name === value.name} getOptionLabel={(option: IRegion) => option.name ? option.name : ""} options={options} loading={isLoading} value={selectedOption} renderInput={(params) => ( {isLoading ? : null} {params.InputProps.endAdornment} ) }} /> )} /> ) }