/*
Парус 8 - Панели мониторинга - Заголовок
Компонент: Выбор даты
*/
//---------------------
//Подключение библиотек
//---------------------
import React, { useRef } from "react"; //Классы React
import PropTypes from "prop-types"; //Контроль свойств компонента
import dayjs from "dayjs"; //Работа с датами
import { TextField, Typography, Stack } from "@mui/material"; //Интерфейсные элементы
import { P8P_TYPOGRAPHY_VARIANT } from "../../theme/p8p_typography"; //Варианты шрифтов
import { P8P_TEXT_FIELD_VARIANT } from "../../theme/variants/p8p_text_field_variants"; //Варианты полей ввода
import { P8P_TYPOGRAPHY_MAX_LINES } from "../../theme/styles/typography"; //Стили шрифтов
import { formatDateRF, formatDateTimeRF } from "../../core/utils"; //Общие вспомогательные функции приложения
import { P8P_COMPONENT_SIZE } from "../../theme/constants"; //Общие константы стилей
import { P8PHeaderButtonBase } from "./components/p8p_header_button_base"; //Базовая кнопка заголовка
//---------
//Константы
//---------
//Типы даты
const P8P_HEADER_DATE_PICKER_TYPE = {
DATE: "date",
DATETIME: "datetime-local",
MONTH: "month",
WEEK: "week",
TIME: "time"
};
//Форматирование значения даты
const P8P_HEADER_DATE_PICKER_CONVERTER = {
[P8P_HEADER_DATE_PICKER_TYPE.DATE]: date => formatDateRF(date),
[P8P_HEADER_DATE_PICKER_TYPE.DATETIME]: date => formatDateTimeRF(date),
[P8P_HEADER_DATE_PICKER_TYPE.MONTH]: date => dayjs(date).locale("ru").format("MMMM YYYY"),
[P8P_HEADER_DATE_PICKER_TYPE.WEEK]: date => {
//Определяем неделю и год
const [year, week] = date.split("-W");
//Строковый формат
return `${week} неделя ${year}`;
},
[P8P_HEADER_DATE_PICKER_TYPE.TIME]: date => date
};
//-----------
//Тело модуля
//-----------
//Выбор даты
const P8PHeaderDatePicker = ({ value, placeholder, type = "date", width, onSelect, onClear }) => {
//Ссылка на поле ввода
const inputRef = useRef(null);
//При нажатии на кнопку выбора
const handleButtonClick = () => inputRef.current.showPicker();
//При смене значения
const onChange = e => onSelect && onSelect(e.target.value);
//Собственное представление кнопки
const buttonContent = (
{value ? P8P_HEADER_DATE_PICKER_CONVERTER[type](value) : placeholder}
);
//Генерация содержимого
return (
);
};
//Контроль свойств - Выбор даты
P8PHeaderDatePicker.propTypes = {
value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
placeholder: PropTypes.string.isRequired,
type: PropTypes.oneOf(Object.values(P8P_HEADER_DATE_PICKER_TYPE)),
width: PropTypes.string,
onSelect: PropTypes.func,
onClear: PropTypes.func
};
//----------------
//Интерфейс модуля
//----------------
export { P8PHeaderDatePicker, P8P_HEADER_DATE_PICKER_TYPE };