gitscope
https://dev.kronoz.win/r/marzneshin.git
app/dashboard/src/stores/dashboard.store.ts · v0.1.0
Source
1 4205669 Mardin 2y ago import { create } from 'zustand';
2 4205669 Mardin 2y ago import { subscribeWithSelector } from 'zustand/middleware';
3 5825ea4 Mardin 2y ago import { PageType, Pages } from 'types';
4 5825ea4 Mardin 2y ago import { chakra } from '@chakra-ui/react';
5 5825ea4 Mardin 2y ago import { CubeIcon, HomeIcon, ServerIcon, ServerStackIcon, UsersIcon } from '@heroicons/react/24/outline';
6 5825ea4 Mardin 2y ago import { IconBaseStyle } from 'constants/IconBaseStyle';
7 4205669 Mardin 2y ago
8 5825ea4 Mardin 2y ago const UsersSidebarItemIcon = chakra(UsersIcon, IconBaseStyle);
9 5825ea4 Mardin 2y ago const ServicesSidebarItemIcon = chakra(ServerStackIcon, IconBaseStyle);
10 5825ea4 Mardin 2y ago const NodesSidebarItemIcon = chakra(CubeIcon, IconBaseStyle);
11 5825ea4 Mardin 2y ago const HostSidebarItemIcon = chakra(ServerIcon, IconBaseStyle);
12 5825ea4 Mardin 2y ago const HomeSidebarItemIcon = chakra(HomeIcon, IconBaseStyle);
13 5825ea4 Mardin 2y ago
14 5825ea4 Mardin 2y ago
15 5825ea4 Mardin 2y ago export const pages: Pages = {
16 5825ea4 Mardin 2y ago home: {
17 5825ea4 Mardin 2y ago name: 'home',
18 5825ea4 Mardin 2y ago path: '/',
19 5825ea4 Mardin 2y ago itemIcon: HomeSidebarItemIcon,
20 5825ea4 Mardin 2y ago },
21 5825ea4 Mardin 2y ago users: {
22 5825ea4 Mardin 2y ago name: 'users',
23 5825ea4 Mardin 2y ago path: '/users',
24 5825ea4 Mardin 2y ago itemIcon: UsersSidebarItemIcon,
25 5825ea4 Mardin 2y ago },
26 5825ea4 Mardin 2y ago services: {
27 5825ea4 Mardin 2y ago name: 'services',
28 5825ea4 Mardin 2y ago path: '/services',
29 5825ea4 Mardin 2y ago itemIcon: ServicesSidebarItemIcon,
30 5825ea4 Mardin 2y ago },
31 5825ea4 Mardin 2y ago nodes: {
32 5825ea4 Mardin 2y ago name: 'nodes',
33 5825ea4 Mardin 2y ago path: '/nodes',
34 5825ea4 Mardin 2y ago itemIcon: NodesSidebarItemIcon,
35 5825ea4 Mardin 2y ago },
36 5825ea4 Mardin 2y ago hosts: {
37 5825ea4 Mardin 2y ago name: 'hosts',
38 5825ea4 Mardin 2y ago path: '/hosts',
39 5825ea4 Mardin 2y ago itemIcon: HostSidebarItemIcon,
40 5825ea4 Mardin 2y ago },
41 5825ea4 Mardin 2y ago };
42 4205669 Mardin 2y ago
43 4205669 Mardin 2y ago type DashboardStateType = {
44 4205669 Mardin 2y ago version: string | null;
45 4205669 Mardin 2y ago loading: boolean;
46 5825ea4 Mardin 2y ago activePage: PageType;
47 bedeeff Mardin 2y ago isCollapsed: boolean;
48 bedeeff Mardin 2y ago collapseSidebar: () => void;
49 bedeeff Mardin 2y ago expandSidebar: () => void;
50 5825ea4 Mardin 2y ago activatePage: (pageId: PageType) => void;
51 4205669 Mardin 2y ago };
52 4205669 Mardin 2y ago
53 4205669 Mardin 2y ago export const useDashboard = create(
54 4205669 Mardin 2y ago subscribeWithSelector<DashboardStateType>((set,) => ({
55 4205669 Mardin 2y ago version: null,
56 4205669 Mardin 2y ago loading: true,
57 5825ea4 Mardin 2y ago activePage: pages.home,
58 bedeeff Mardin 2y ago isCollapsed: false,
59 bedeeff Mardin 2y ago expandSidebar: () => {
60 bedeeff Mardin 2y ago set({ isCollapsed: false })
61 bedeeff Mardin 2y ago },
62 bedeeff Mardin 2y ago collapseSidebar: () => {
63 bedeeff Mardin 2y ago set({ isCollapsed: true })
64 bedeeff Mardin 2y ago },
65 5825ea4 Mardin 2y ago activatePage: (page) => {
66 5825ea4 Mardin 2y ago set({ activePage: page });
67 4205669 Mardin 2y ago },
68 4205669 Mardin 2y ago }))
69 4205669 Mardin 2y ago );