/*
Парус 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);
};