UI: доводка выпадашек игроков — без пустых вариантов, фон как у select, быстрее отклик
Из списков убраны варианты-плейсхолдеры («— игрок —» в выборе игрока, «— фракция —» в выборе фракции — disabled+hidden, в закрытом виде текст остаётся). Фон .suggest-list — surface-2, как у input/select; hover строк — --border. Скорость: дебаунс поиска 250→100 мс, в инвайте показанный список дофильтровывается по вводу на клиенте, не дожидаясь ответа сервера; touch-action: manipulation на строках и триггере. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -215,7 +215,11 @@ export function CreateMatchPage() {
|
||||
}
|
||||
style={{ flex: 1 }}
|
||||
>
|
||||
<option value="">— фракция —</option>
|
||||
{/* disabled+hidden: в закрытом select это плейсхолдер, в раскрытом
|
||||
списке варианта «— фракция —» нет. */}
|
||||
<option value="" disabled hidden>
|
||||
— фракция —
|
||||
</option>
|
||||
{(factions ?? []).map((f) => (
|
||||
<option key={f.id} value={f.id}>
|
||||
{f.name_ru}
|
||||
|
||||
@@ -57,8 +57,13 @@ export function GroupPage() {
|
||||
};
|
||||
|
||||
// Подсказки: уже состоящих в группе не предлагаем, показываем до 3.
|
||||
// Дофильтровка по текущему вводу — на клиенте: пока сервер отвечает на новую
|
||||
// букву, показанный список (keepPreviousData) сужается мгновенно.
|
||||
const memberIds = new Set((members ?? []).map((m) => m.user_id));
|
||||
const suggestions = (foundUsers ?? []).filter((u) => !memberIds.has(u.user_id)).slice(0, 3);
|
||||
const needle = newNick.trim().toLowerCase();
|
||||
const suggestions = (foundUsers ?? [])
|
||||
.filter((u) => !memberIds.has(u.user_id) && u.nickname.toLowerCase().includes(needle))
|
||||
.slice(0, 3);
|
||||
const showSuggest =
|
||||
nickFocused && !nickPicked && newNick.trim().length > 0 && suggestions.length > 0;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user