groldsf_obsidian_check_plugin/src/ui/ErrorDisplay.ts

67 lines
No EOL
2.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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('');
}
}