This commit is contained in:
Zuev
2026-10-02 04:07:56 +03:00
parent 97bf3cc50a
commit fc5801d683
42 changed files with 1201 additions and 305 deletions

View File

@@ -1,4 +1,5 @@
import { useEffect, useRef, useState } from 'react';
import { CustomSelect } from '../../shared/ui/CustomSelect.jsx';
import { readUrlState, writeUrlState } from '../../../admin/js/url-state.js';
import { trackUxEvent } from '../../../telemetry.js';
@@ -64,6 +65,8 @@ export function UsersTab() {
}, []);
async function loadUsers(nextState) {
stateRef.current = nextState;
setState(nextState);
const currentRequest = requestNumber.current + 1;
requestNumber.current = currentRequest;
setTableLoading(true);
@@ -204,7 +207,7 @@ export function UsersTab() {
</div>
<div className="form-group">
<label htmlFor="new-role">Роль</label>
<select
<CustomSelect
id="new-role"
value={createRole}
onChange={event => setCreateRole(event.target.value)}
@@ -215,7 +218,7 @@ export function UsersTab() {
<option value="EDUCATION_OFFICE">Учебный отдел</option>
<option value="SCHEDULE_VIEWER">Просмотр расписаний</option>
<option value="ADMIN">Администратор</option>
</select>
</CustomSelect>
</div>
<div className="form-group">
<label htmlFor="new-fullname">ФИО пользователя</label>
@@ -276,7 +279,7 @@ export function UsersTab() {
</div>
<div className="form-group">
<label htmlFor="users-role-filter">Роль</label>
<select
<CustomSelect
id="users-role-filter"
value={state.role}
onChange={event => applyState({ role: event.target.value, page: 0 })}
@@ -285,11 +288,11 @@ export function UsersTab() {
{ROLE_FILTER_OPTIONS.map(option => (
<option key={option.value} value={option.value}>{option.label}</option>
))}
</select>
</CustomSelect>
</div>
<div className="form-group">
<label htmlFor="users-sort">Сортировка</label>
<select
<CustomSelect
id="users-sort"
value={state.sort}
onChange={event => applyState({ sort: event.target.value, page: 0 })}
@@ -297,7 +300,7 @@ export function UsersTab() {
{USER_SORT_OPTIONS.map(option => (
<option key={option.value} value={option.value}>{option.label}</option>
))}
</select>
</CustomSelect>
</div>
</div>
<div className="table-wrap">