/
softailor
/
gridient
Обзор
Документация
Войти
/
softailor
/
gridient
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
frontend/src/modules/ListView/components/ListViewControls/ListViewControls.tsx
103 строки
3 KB
Jenkins
Auto add
18 фев 2026, 10:19
18 фев 2026, 10:19
1e6c4f8
Код
Авторство
О чём код?
import { FC, useMemo } from "react"; import { FileExcelOutlined, FilterOutlined, PlusCircleOutlined, SettingOutlined, } from "@ant-design/icons"; import { Button } from "antd"; import { useNavigate } from "react-router-dom"; import { useAuthorization } from "hooks"; import { Operation, ResourceType } from "models/authorization"; import { useListViewContext } from "../ListViewContext"; import { ViewDropdown } from "./ViewDropdown"; import "./ListViewControls.scss"; export const ListViewControls: FC = () => { const navigate = useNavigate(); const { listId, setVisibleExportModal, visibleFilters, setVisibleFilters, filters, selectedUserFilter, setVisibleSettings, } = useListViewContext(); // Проверяем авторизацию для операций со списком const authContexts = useMemo(() => { if (!listId) { return []; } return [ { resourceType: ResourceType.List, operation: Operation.ListRead, resourceId: listId.toString(), }, { resourceType: ResourceType.List, operation: Operation.ListWrite, resourceId: listId.toString(), }, { resourceType: ResourceType.ListItem, operation: Operation.ItemCreate, additionalData: { listId: Number(listId) }, }, ]; }, [listId]); const { isAllowed } = useAuthorization(authContexts); const isReader = isAllowed(ResourceType.List, Operation.ListRead, listId?.toString()); const isEditor = isAllowed(ResourceType.List, Operation.ListWrite, listId?.toString()) || isAllowed(ResourceType.ListItem, Operation.ItemCreate); const filtersCount = filters.length > 0 ? filters.length : selectedUserFilter?.filterValue.length || 0; return ( <div className="list-view-controls"> <div className="list-view-controls__left"> {isEditor && ( <Button type="primary" onClick={() => navigate("add")} icon={<PlusCircleOutlined />}> Создать </Button> )} {isReader && ( <Button onClick={() => setVisibleExportModal(true)} icon={<FileExcelOutlined />}> Экспорт в Excel </Button> )} </div> <div className="list-view-controls__right"> {isReader && ( <Button icon={<FilterOutlined />} color={visibleFilters ? "primary" : "default"} variant={visibleFilters ? "filled" : "outlined"} onClick={() => setVisibleFilters(!visibleFilters)} > Фильтры {filtersCount ? `(${filtersCount})` : ""} </Button> )} {isEditor && ( <Button onClick={() => setVisibleSettings(true)} icon={<SettingOutlined />}> Настроить поля </Button> )} {isReader && <ViewDropdown />} </div> </div> ); };