From 665625557ddd3b101e253e30d7a9232d5afef8fd Mon Sep 17 00:00:00 2001 From: AlexSserb Date: Sun, 5 Oct 2025 19:54:02 +0400 Subject: [PATCH] feat: navbar buttons depended on selected project --- .../desktop/TopToolPanel/TopToolPanel.tsx | 67 +++++-------------- src/app/deals/page.tsx | 2 - src/app/layout.tsx | 45 +++++++------ .../layout/Navbar/Navbar.module.css | 2 +- src/components/layout/Navbar/Navbar.tsx | 36 ++-------- src/components/layout/Navbar/NavbarLinks.tsx | 40 ----------- .../{ => components}/NavbarClickable.tsx | 2 +- .../layout/Navbar/components/NavbarLinks.tsx | 51 ++++++++++++++ .../components/ProjectSelectContainer.tsx | 40 +++++++++++ .../layout/Navbar/data/linksData.ts | 37 ++++++++++ .../layout/Navbar/hooks/useProjectActions.tsx | 39 +++++++++++ .../layout/Navbar/types/LinkData.ts | 11 +++ .../Clients/components/ClientDataForm.tsx | 2 + .../Clients/components/ClientSelect.tsx | 2 + .../FulfillmentBase/mobile/ProductsTab.tsx | 2 + 15 files changed, 233 insertions(+), 145 deletions(-) delete mode 100644 src/components/layout/Navbar/NavbarLinks.tsx rename src/components/layout/Navbar/{ => components}/NavbarClickable.tsx (92%) create mode 100644 src/components/layout/Navbar/components/NavbarLinks.tsx create mode 100644 src/components/layout/Navbar/components/ProjectSelectContainer.tsx create mode 100644 src/components/layout/Navbar/data/linksData.ts create mode 100644 src/components/layout/Navbar/hooks/useProjectActions.tsx create mode 100644 src/components/layout/Navbar/types/LinkData.ts diff --git a/src/app/deals/components/desktop/TopToolPanel/TopToolPanel.tsx b/src/app/deals/components/desktop/TopToolPanel/TopToolPanel.tsx index bd96bd8..7cce33a 100644 --- a/src/app/deals/components/desktop/TopToolPanel/TopToolPanel.tsx +++ b/src/app/deals/components/desktop/TopToolPanel/TopToolPanel.tsx @@ -1,16 +1,15 @@ "use client"; import { FC } from "react"; -import { IconEdit, IconFilter, IconPlus } from "@tabler/icons-react"; -import { Flex, Group, Indicator } from "@mantine/core"; +import { IconFilter } from "@tabler/icons-react"; +import { Button, Divider, Flex, Group, Indicator } from "@mantine/core"; import { modals } from "@mantine/modals"; +import style from "@/app/deals/components/desktop/ViewSelectButton/ViewSelectButton.module.css"; import ViewSelector from "@/app/deals/components/desktop/ViewSelector/ViewSelector"; import { useDealsContext } from "@/app/deals/contexts/DealsContext"; import { useProjectsContext } from "@/app/deals/contexts/ProjectsContext"; import { DealsFiltersForm } from "@/app/deals/hooks/useDealsFilters"; -import ProjectSelect from "@/components/selects/ProjectSelect/ProjectSelect"; -import ActionIconWithTip from "@/components/ui/ActionIconWithTip/ActionIconWithTip"; -import { useDrawersContext } from "@/drawers/DrawersContext"; +import SmallPageBlock from "@/components/layout/SmallPageBlock/SmallPageBlock"; import useIsMobile from "@/hooks/utils/useIsMobile"; export type View = "board" | "table" | "schedule"; @@ -22,37 +21,11 @@ type Props = { const TopToolPanel: FC = ({ view, setView }) => { const { dealsFiltersForm, isChangedFilters } = useDealsContext(); - const { projects, setSelectedProjectId, selectedProject, projectsCrud } = - useProjectsContext(); - const { openDrawer } = useDrawersContext(); + const { selectedProject } = useProjectsContext(); const isMobile = useIsMobile(); if (isMobile) return; - const onCreateClick = () => { - modals.openContextModal({ - modal: "enterNameModal", - title: "Создание проекта", - withCloseButton: true, - innerProps: { - onChange: projectsCrud.onCreate, - }, - }); - }; - - const onEditClick = () => { - if (!selectedProject) return; - - openDrawer({ - key: "projectEditorDrawer", - props: { - value: selectedProject, - onChange: value => projectsCrud.onUpdate(value.id, value), - onDelete: projectsCrud.onDelete, - }, - }); - }; - const viewFiltersModalMap = { table: "dealsTableFiltersModal", board: "dealsBoardFiltersModal", @@ -75,11 +48,12 @@ const TopToolPanel: FC = ({ view, setView }) => { }; return ( - + + = ({ view, setView }) => { - - - + + + - - - - - - - value && setSelectedProjectId(value.id)} - style={{ width: 250 }} - /> ); diff --git a/src/app/deals/page.tsx b/src/app/deals/page.tsx index 605ec04..681acbd 100644 --- a/src/app/deals/page.tsx +++ b/src/app/deals/page.tsx @@ -7,7 +7,6 @@ import { import { Center, Loader } from "@mantine/core"; import PageBody from "@/app/deals/components/shared/PageBody/PageBody"; import { BoardsContextProvider } from "@/app/deals/contexts/BoardsContext"; -import { ProjectsContextProvider } from "@/app/deals/contexts/ProjectsContext"; import { StatusesContextProvider } from "@/app/deals/contexts/StatusesContext"; import PageContainer from "@/components/layout/PageContainer/PageContainer"; import { @@ -35,7 +34,6 @@ export default async function DealsPage() { const Providers = combineProviders( [HydrationBoundary, { state: dehydrate(queryClient) }], - [ProjectsContextProvider], [BoardsContextProvider], [StatusesContextProvider] ); diff --git a/src/app/layout.tsx b/src/app/layout.tsx index e25a20c..2e0fce3 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -16,6 +16,7 @@ import { theme } from "@/theme"; import "@/app/global.css"; import { ModalsProvider } from "@mantine/modals"; import { Notifications } from "@mantine/notifications"; +import { ProjectsContextProvider } from "@/app/deals/contexts/ProjectsContext"; import AppShellFooterWrapper from "@/components/layout/AppShellWrappers/AppShellFooterWrapper"; import AppShellMainWrapper from "@/components/layout/AppShellWrappers/AppShellMainWrapper"; import AppShellNavbarWrapper from "@/components/layout/AppShellWrappers/AppShellNavbarWrapper"; @@ -68,27 +69,29 @@ export default function RootLayout({ children }: Props) { labels={{ confirm: "Да", cancel: "Нет" }} modals={modals}> - - - - - - {children} - - -