пофикшен персист
This commit is contained in:
@@ -77,6 +77,32 @@ const EMPTY_TEXTS: Record<ListView, string> = {
|
||||
'own:executed': 'Вы ещё ничего не выполнили.',
|
||||
};
|
||||
|
||||
// Цвет пункта в выпадающем списке фильтра — то же сопоставление статус→цвет,
|
||||
// что в StatusBadge (VARIANT), только цвет текста, а не бейдж целиком: внутри
|
||||
// нативного <option> нельзя отрендерить компонент, а background-color на нём
|
||||
// браузеры показывают ненадёжно (в отличие от color). Если сопоставление там
|
||||
// поменяется — поправить и здесь, второй раз найти дублирование негде.
|
||||
function statusOptionClassName(status: string): string {
|
||||
switch (status) {
|
||||
case REQUEST_STATUS.onApproval:
|
||||
case REQUEST_STATUS.onExecution:
|
||||
return styles.optionOnApproval;
|
||||
case REQUEST_STATUS.approved:
|
||||
case REQUEST_STATUS.executed:
|
||||
return styles.optionApproved;
|
||||
case REQUEST_STATUS.rejected:
|
||||
return styles.optionRejected;
|
||||
case REQUEST_STATUS.returned:
|
||||
return styles.optionReturned;
|
||||
case REQUEST_STATUS.execution:
|
||||
return styles.optionExecution;
|
||||
case REQUEST_STATUS.closed:
|
||||
return styles.optionClosed;
|
||||
default:
|
||||
return styles.optionDraft;
|
||||
}
|
||||
}
|
||||
|
||||
// Колонки: «Автор» нужен там, где заявка чужая; «Статус» — где он не следует из
|
||||
// самого раздела. В истории решений важно и то, и другое: заявка чужая, а её
|
||||
// текущий статус мог уйти дальше вашего решения.
|
||||
@@ -331,14 +357,17 @@ export const RequestsTableView: React.FC<IRequestsTableViewProps> = ({
|
||||
</h2>
|
||||
{view === 'own:created' && onStatusFilterChange && (
|
||||
<select
|
||||
className={styles.statusFilter}
|
||||
// Цвет самого <select> (закрытое состояние) — тем же классом, что и
|
||||
// у выбранного <option>: statusFilter задаёт нейтральные border/фон,
|
||||
// а конкретный statusOptionClassName(statusFilter) перекрывает color.
|
||||
className={`${styles.statusFilter} ${statusFilter ? statusOptionClassName(statusFilter) : ''}`}
|
||||
value={statusFilter}
|
||||
onChange={(e) => onStatusFilterChange(e.target.value)}
|
||||
aria-label="Фильтр по статусу"
|
||||
>
|
||||
<option value="">Все статусы</option>
|
||||
{REQUEST_STATUS_CHOICES.map((s) => (
|
||||
<option key={s} value={s}>
|
||||
<option key={s} value={s} className={statusOptionClassName(s)}>
|
||||
{s}
|
||||
</option>
|
||||
))}
|
||||
|
||||
Reference in New Issue
Block a user