import styled from "styled-components"; import Loader from "../../UI/loader"; import { useEffect, useState } from "react"; import { changeIp } from '../../../const/types/types' import { NetworkService } from '../../../api/request' import { ModalContainer, ModalTitle, ModalContent, ModalText, ButtonContainer, ErrorMessage } from "../style" import { useIpStore } from "../../../store"; import { MainButton } from "../../UI/buttons/mainButton"; import { useAdminStore } from "../../../store/adminStore"; import { useDevicesStore } from "../../../store"; type Props = { ipData: changeIp onClose: () => void; smoothClose: () => void; } const Information = styled.div` display: flex; flex-direction: column; gap: 15px; ` const Info = styled.div` display: flex; gap: 10px; ` const DataContainer = styled.div` display: flex; gap: 35px; ` const CurrentData = styled.div` display: flex; flex-direction: column; gap: 10px; ` const NewData = styled.div` display: flex; flex-direction: column; gap: 10px; ` export const IpConfirm = ({ ipData, onClose, smoothClose }: Props) => { const [loader, setLoader] = useState(true) const [newIP, setNewIp] = useState(null) const [currentIp, setCurrentIP] = useState({}) const [checkStatus, setcheckStatus] = useState(false) const [message, setMessgae] = useState('') const { ipAddress, setIpAddress } = useIpStore(); const {isAdmin} = useAdminStore() const { devices, addDevice, deleteDevice } = useDevicesStore(); useEffect(() => { if (ipData && isAdmin) { const data = { "connection_id": ipData.connection, "ipv4_updates": { "ipv4.method": "manual", "ipv4.address-data": [ { "address": ipData.newIp, "prefix": ipData.prefix } ], "ipv4.gateway": ipData.newGate, "ipv4.dns-data": ipData.newDns } }; const oldData = { "connection_id": ipData.connection, "ipv4_updates": { "ipv4.method": "manual", "ipv4.address-data": [ { "address": ipData.currentIp, "prefix": ipData.prefix } ], "ipv4.gateway": ipData.currentGate, "ipv4.dns-data": ipData.currentDns } } setCurrentIP(oldData) checkIp(data); } }, [ipData, isAdmin]); const checkIp = async (data: any) => { try { const result = await NetworkService.checkIp(ipAddress, data); setcheckStatus(result.data.available) setMessgae(result.data.message) if (result.data.available) { setNewIp(data) } } catch (err) { console.error('Error:', err); } finally { setLoader(false); } }; const saveIp = async (data: any) => { try { const result = await NetworkService.saveIp(ipAddress, data); if (result.status === 200) { if(ipAddress!=='localhost'){ setIpAddress(ipData.newIp) const updatedDevices = devices.map(device => device.address === ipData.currentIp ? { ...device, address: ipData.newIp } : device ); useDevicesStore.setState({ devices: updatedDevices }); } onClose() } } catch (err) { console.error('Error:', err); } finally { setLoader(false); } }; const cancelIp = async (data: any) => { try { const result = await NetworkService.saveIp(ipAddress, data); if (result.status === 200) { onClose() } } catch (err) { console.error('Error:', err); } finally { setLoader(false); } }; return ( <> {loader && isAdmin ? ( ) : (

Изменение IP-Адреса

{checkStatus ? (

Общие сведения

Интерфейс: {ipData.device}

--{'>'}

{ipData.connection}

Сведения об IP

Текущий ip: {ipData.currentIp}

Текущий шлюз: {ipData.currentGate}

Текущий DNS: {ipData.currentDns}

Новый ip: {ipData.newIp}

Новый шлюз: {ipData.newGate}

Новый DNS: {ipData.newDns}

cancelIp(currentIp)}/> saveIp(newIP)}/>
) : ( <> {isAdmin ? ( <>

Произошла ошибка проверки корректности

{message} ):(

Для изменения сетевых настроек необходимо авторизироваться под администратором

)}
)}
)} ) }