/* Парус 8 - Панели мониторинга - Редактор панелей Дополнительная разметка и вёрстка клиентских элементов */ //--------------------- //Подключение библиотек //--------------------- import React, { useState } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { InputLabel, Input, IconButton, Icon, Button } from "@mui/material"; //Интерфейсные компоненты import { TEXTS } from "../../../app.text"; //Общие текстовые ресурсы приложения import { P8PAppProgress } from "../../components/p8p_app_progress"; //Индикатор процесса //--------- //Константы //--------- //Стили const STYLES = { INPUT_FILE: { display: "none" }, INPUT_LABEL: { display: "contents" } }; //----------- //Тело модуля //----------- //Компонент "Загрузка из файла" const ImportPanel = ({ id, buttonView, onClick, disabled = false }) => { //Состояние загрузки файла const [loading, setLoading] = useState(false); //При выборе файла const handleChange = event => { //Если файл выбран if (event.target.files[0]) { //Инициализируем считыватель файла const reader = new FileReader(); //Обработчик начала считывания данных reader.onloadstart = () => setLoading(true); //Обработчик считывания данных reader.onload = async e => { //Обрабатываем текст файла onClick(e.target.result); setLoading(false); }; //Обработчик ошибки считывания данных reader.onerror = () => setLoading(false); //Загружаем данные из файла reader.readAsText(event.target.files[0]); } //Очищаем значение event.target.value = null; }; //Генерация содержимого return ( <> {loading ? : null} {buttonView} ); }; //Контроль свойств - Компонент "Загрузка из файла" ImportPanel.propTypes = { id: PropTypes.string.isRequired, buttonView: PropTypes.object.isRequired, onClick: PropTypes.func.isRequired, disabled: PropTypes.bool }; //Генерация действия "Загрузить из файла" меню действий export const toolbarImportRenderer = ({ icon, title, disabled, onClick }) => { //Представление кнопки загрузки let importButtonView = ( {icon} ); //Генерация содержимого return ; }; //Компонент кнопки импорта панели из файла export const ImportPanelButton = ({ id, startIcon, title, onClick }) => { //Представление кнопки загрузки let importButtonView = ( ); //Генерация содержимого return ; }; //Контроль свойств - Компонент кнопки импорта панели из файла ImportPanelButton.propTypes = { id: PropTypes.string.isRequired, startIcon: PropTypes.string, title: PropTypes.string.isRequired, onClick: PropTypes.func.isRequired }; //Выгрузка XML файла export const exportXMLFile = (data, fileName) => { //Переводим в данные для файла const blobData = new Blob([data], { type: "text/plain" }); //Формируем URL const url = URL.createObjectURL(blobData); //Делаем линк и устанавливаем параметры, после добавляем в DOM const a = document.createElement("a"); a.href = url; a.download = `${fileName.replace(/[/\\?%*:|"<>.,;= ]/g, "_")}.xml`; document.body.appendChild(a); //Выполняем открытие ссылки a.click(); //Очищаем от лишних данных document.body.removeChild(a); URL.revokeObjectURL(url); };