groldsf_obsidian_check_plugin/src/ui/ErrorDisplay.ts

67 lines
2.5 KiB
TypeScript
Raw Normal View History

import { ValidationError } from "./validation/types";
/**
* Отвечает за создание, стилизацию и обновление
* элемента для отображения ошибок валидации настроек.
*/
export class ErrorDisplay {
private errorElement: HTMLElement;
/**
* Создает и стилизует элемент для отображения ошибок внутри контейнера.
* @param container - Родительский HTML-элемент.
*/
constructor(container: HTMLElement) {
this.errorElement = container.createDiv({ cls: 'checkbox-sync-settings-error' });
this.applyStyles();
}
/**
* Применяет стили к элементу ошибок.
*/
private applyStyles(): void {
// Используем стандартные CSS переменные Obsidian для цвета ошибки
this.errorElement.style.color = 'var(--text-error)';
this.errorElement.style.marginTop = '10px';
this.errorElement.style.marginBottom = '10px';
this.errorElement.style.minHeight = '1.5em'; // Резервируем место
this.errorElement.style.whiteSpace = 'pre-wrap'; // Для переноса длинных ошибок
this.errorElement.style.userSelect = 'text'; // Позволяет выделять текст ошибки
}
/**
* Отображает список ошибок валидации.
* @param errors - Массив объектов ValidationError.
*/
public displayErrors(errors: ValidationError[]): void {
if (errors && errors.length > 0) {
const errorMessage = errors
.map(e => `${e.field ? `[${e.field}]: ` : ''}${e.message}`)
.join('\n');
this.errorElement.setText(errorMessage); // Используем setText для безопасности
} else {
this.clear(); // Если массив пуст или null/undefined, очищаем
}
}
/**
* Отображает одно общее сообщение об ошибке.
* @param message - Строка с сообщением.
*/
public displayMessage(message: string): void {
if (message) {
// Добавляем значок ошибки для консистентности
this.errorElement.setText(`${message}`);
} else {
this.clear();
}
}
/**
* Очищает элемент отображения ошибок.
*/
public clear(): void {
this.errorElement.setText('');
}
}