Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7f6ac081a9 | ||
|
|
adcbb26cbf | ||
|
|
bfdf88c0b0 |
BIN
assets/pasted-20260312-073441-30f2a796.png
Normal file
BIN
assets/pasted-20260312-073441-30f2a796.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 192 KiB |
BIN
assets/pasted-20260312-073732-d128edec.png
Normal file
BIN
assets/pasted-20260312-073732-d128edec.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 871 KiB |
BIN
assets/pasted-20260312-104316-86469047.png
Normal file
BIN
assets/pasted-20260312-104316-86469047.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 198 KiB |
BIN
assets/pasted-20260312-104711-befd245e.png
Normal file
BIN
assets/pasted-20260312-104711-befd245e.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 199 KiB |
1
braces.txt
Normal file
1
braces.txt
Normal file
@ -0,0 +1 @@
|
||||
{{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}}
|
||||
BIN
frontend/public/assets/vm-shot-2026-03-12T07-37-15-920Z.jpg
Normal file
BIN
frontend/public/assets/vm-shot-2026-03-12T07-37-15-920Z.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 198 KiB |
BIN
frontend/public/assets/vm-shot-2026-03-12T07-41-41-901Z.jpg
Normal file
BIN
frontend/public/assets/vm-shot-2026-03-12T07-41-41-901Z.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
@ -3,10 +3,9 @@ import { mdiLogout, mdiClose } from '@mdi/js'
|
||||
import BaseIcon from './BaseIcon'
|
||||
import AsideMenuList from './AsideMenuList'
|
||||
import { MenuAsideItem } from '../interfaces'
|
||||
import { useAppSelector } from '../stores/hooks'
|
||||
import { useAppSelector , useAppDispatch } from '../stores/hooks'
|
||||
import Link from 'next/link';
|
||||
|
||||
import { useAppDispatch } from '../stores/hooks';
|
||||
import { createAsyncThunk } from '@reduxjs/toolkit';
|
||||
import axios from 'axios';
|
||||
|
||||
@ -58,7 +57,7 @@ export default function AsideMenuLayer({ menu, className = '', ...props }: Props
|
||||
return (
|
||||
<aside
|
||||
id='asideMenu'
|
||||
className={`${className} zzz lg:py-2 lg:pl-2 w-60 fixed flex z-40 top-0 h-screen transition-position overflow-hidden`}
|
||||
className={`${className} zzz lg:py-2 lg:pl-2 w-60 fixed flex z-40 top-0 h-screen transition-position overflow-hidden lg:relative lg:translate-x-0 translate-x-0`}
|
||||
>
|
||||
<div
|
||||
className={`flex-1 flex flex-col overflow-hidden dark:bg-dark-900 ${asideStyle} ${corners}`}
|
||||
|
||||
@ -11,7 +11,7 @@ type Props = {
|
||||
};
|
||||
|
||||
const BaseButtons = ({
|
||||
type = 'justify-end',
|
||||
type = 'justify-start md:justify-end',
|
||||
mb = '-mb-3',
|
||||
classAddon = 'mr-3 last:mr-0 mb-3',
|
||||
noWrap = false,
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
import React, {useEffect, useRef} from 'react'
|
||||
import React, {useEffect, useRef, useState } from 'react'
|
||||
import Link from 'next/link'
|
||||
import { useState } from 'react'
|
||||
import { mdiChevronUp, mdiChevronDown } from '@mdi/js'
|
||||
import BaseDivider from './BaseDivider'
|
||||
import BaseIcon from './BaseIcon'
|
||||
|
||||
@ -4,12 +4,11 @@
|
||||
}
|
||||
|
||||
thead {
|
||||
@apply hidden lg:table-header-group;
|
||||
@apply hidden md:table-header-group;
|
||||
}
|
||||
|
||||
tr {
|
||||
@apply max-w-full block relative border-b-4 border-gray-100
|
||||
lg:table-row lg:border-b-0 dark:border-slate-800;
|
||||
@apply max-w-full block relative border-b-4 border-gray-100 md:table-row md:border-b-0 dark:border-slate-800;
|
||||
}
|
||||
|
||||
tr:last-child {
|
||||
@ -17,11 +16,11 @@
|
||||
}
|
||||
|
||||
td:not(:first-child) {
|
||||
@apply lg:border-l lg:border-t-0 lg:border-r-0 lg:border-b-0 lg:border-gray-100 lg:dark:border-slate-700;
|
||||
@apply md:border-l md:border-t-0 md:border-r-0 md:border-b-0 md:border-gray-100 md:dark:border-slate-700;
|
||||
}
|
||||
|
||||
th {
|
||||
@apply lg:text-left lg:p-3 border-b;
|
||||
@apply md:text-left md:p-3 border-b;
|
||||
}
|
||||
|
||||
th.sortable {
|
||||
@ -31,80 +30,76 @@
|
||||
th.sortable:hover:after {
|
||||
transition: all 1s;
|
||||
position: absolute;
|
||||
|
||||
content: "↕";
|
||||
|
||||
margin-left: 1rem;
|
||||
}
|
||||
|
||||
th.sortable.asc:hover:after {
|
||||
content: "↑";
|
||||
}
|
||||
|
||||
th.sortable.desc:hover:after {
|
||||
content: "↓";
|
||||
}
|
||||
|
||||
td {
|
||||
@apply flex justify-between text-right py-3 px-4 align-top border-b border-gray-100
|
||||
lg:table-cell lg:text-left lg:p-3 lg:align-middle lg:border-b-0 dark:border-slate-800 dark:text-white;
|
||||
@apply flex justify-between text-right py-3 px-4 align-top border-b border-gray-100 md:table-cell md:text-left md:p-3 md:align-middle md:border-b-0 dark:border-slate-800 dark:text-white;
|
||||
}
|
||||
|
||||
td:last-child {
|
||||
@apply border-b-0;
|
||||
}
|
||||
|
||||
tbody tr, tbody tr:nth-child(odd) {
|
||||
@apply lg:hover:bg-pavitra-300/70;
|
||||
tbody tr.odd {
|
||||
@apply md:hover:bg-pavitra-300/70;
|
||||
}
|
||||
|
||||
tbody tr:nth-child(even) {
|
||||
@apply lg:bg-pavitra-300 dark:bg-pavitra-300/70;
|
||||
tbody tr.even {
|
||||
@apply md:bg-pavitra-300 dark:bg-pavitra-300/70;
|
||||
}
|
||||
|
||||
td:before {
|
||||
content: attr(data-label);
|
||||
@apply font-semibold pr-3 text-left lg:hidden;
|
||||
@apply font-semibold pr-3 text-left md:hidden;
|
||||
}
|
||||
|
||||
tbody tr td {
|
||||
@apply text-sm font-normal text-pavitra-900 dark:text-white;
|
||||
@apply text-sm font-normal text-pavitra-900 dark:text-white;
|
||||
}
|
||||
|
||||
.datagrid--table, .MuiDataGrid-root {
|
||||
@apply rounded border-none !important;
|
||||
|
||||
}
|
||||
|
||||
.datagrid--header {
|
||||
@apply uppercase !important;
|
||||
@apply uppercase !important;
|
||||
}
|
||||
|
||||
.datagrid--header,
|
||||
.datagrid--header .MuiIconButton-root,
|
||||
.datagrid--cell,
|
||||
.datagrid--cell .MuiIconButton-root {
|
||||
@apply dark:text-white;
|
||||
@apply dark:text-white;
|
||||
}
|
||||
|
||||
.datagrid--cell .MuiDataGrid-booleanCell {
|
||||
@apply dark:text-white !important;
|
||||
@apply dark:text-white !important;
|
||||
}
|
||||
|
||||
.datagrid--cell .MuiIconButton-root:hover {
|
||||
@apply dark:text-white dark:bg-dark-700;
|
||||
@apply dark:text-white dark:bg-dark-700;
|
||||
}
|
||||
|
||||
.datagrid--row {
|
||||
@apply even:bg-gray-100 dark:even:bg-[#1B1D22] dark:odd:bg-dark-900 !important;
|
||||
}
|
||||
|
||||
|
||||
.datagrid--table .MuiTablePagination-root {
|
||||
@apply dark:text-white;
|
||||
@apply dark:text-white;
|
||||
}
|
||||
|
||||
.datagrid--table .MuiTablePagination-root .MuiButtonBase-root:disabled {
|
||||
@apply dark:text-dark-700;
|
||||
@apply dark:text-dark-700;
|
||||
}
|
||||
|
||||
.datagrid--table .MuiTablePagination-root .MuiButtonBase-root:hover {
|
||||
@ -112,6 +107,6 @@
|
||||
}
|
||||
|
||||
.MuiButton-colorInherit {
|
||||
@apply text-blue-600 dark:text-dark-700 !important;
|
||||
@apply text-blue-600 dark:text-dark-700 !important;
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,4 @@
|
||||
import React, { ReactNode, useEffect } from 'react'
|
||||
import { useState } from 'react'
|
||||
import React, { ReactNode, useEffect , useState } from 'react'
|
||||
import jwt from 'jsonwebtoken';
|
||||
import { mdiForwardburger, mdiBackburger, mdiMenu } from '@mdi/js'
|
||||
import menuAside from '../menuAside'
|
||||
|
||||
@ -7,158 +7,35 @@ const menuAside: MenuAsideItem[] = [
|
||||
icon: icon.mdiViewDashboardOutline,
|
||||
label: 'Dashboard',
|
||||
},
|
||||
|
||||
{
|
||||
href: '/users/users-list',
|
||||
label: 'Users',
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
icon: icon.mdiAccountGroup ?? icon.mdiTable,
|
||||
permissions: 'READ_USERS'
|
||||
href: '/mind_maps/mind_maps-list',
|
||||
label: 'Mind maps',
|
||||
icon: icon.mdiSitemap,
|
||||
permissions: 'READ_MIND_MAPS'
|
||||
},
|
||||
{
|
||||
href: '/roles/roles-list',
|
||||
label: 'Roles',
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
icon: icon.mdiShieldAccountVariantOutline ?? icon.mdiTable,
|
||||
permissions: 'READ_ROLES'
|
||||
},
|
||||
{
|
||||
href: '/permissions/permissions-list',
|
||||
label: 'Permissions',
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
icon: icon.mdiShieldAccountOutline ?? icon.mdiTable,
|
||||
permissions: 'READ_PERMISSIONS'
|
||||
},
|
||||
{
|
||||
href: '/organizations/organizations-list',
|
||||
label: 'Organizations',
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
icon: icon.mdiTable ?? icon.mdiTable,
|
||||
permissions: 'READ_ORGANIZATIONS'
|
||||
},
|
||||
{
|
||||
href: '/workspaces/workspaces-list',
|
||||
label: 'Workspaces',
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
icon: 'mdiDomain' in icon ? icon['mdiDomain' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
|
||||
permissions: 'READ_WORKSPACES'
|
||||
},
|
||||
{
|
||||
href: '/workspace_memberships/workspace_memberships-list',
|
||||
label: 'Workspace memberships',
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
icon: 'mdiAccountMultiple' in icon ? icon['mdiAccountMultiple' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
|
||||
permissions: 'READ_WORKSPACE_MEMBERSHIPS'
|
||||
href: '/source_items/source_items-list',
|
||||
label: 'Sources',
|
||||
icon: icon.mdiLinkVariant,
|
||||
permissions: 'READ_SOURCE_ITEMS'
|
||||
},
|
||||
{
|
||||
href: '/projects/projects-list',
|
||||
label: 'Projects',
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
icon: 'mdiBriefcaseOutline' in icon ? icon['mdiBriefcaseOutline' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
|
||||
icon: icon.mdiBriefcaseOutline,
|
||||
permissions: 'READ_PROJECTS'
|
||||
},
|
||||
{
|
||||
href: '/mind_maps/mind_maps-list',
|
||||
label: 'Mind maps',
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
icon: 'mdiSitemap' in icon ? icon['mdiSitemap' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
|
||||
permissions: 'READ_MIND_MAPS'
|
||||
},
|
||||
{
|
||||
href: '/map_nodes/map_nodes-list',
|
||||
label: 'Map nodes',
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
icon: 'mdiVectorCircle' in icon ? icon['mdiVectorCircle' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
|
||||
permissions: 'READ_MAP_NODES'
|
||||
},
|
||||
{
|
||||
href: '/map_edges/map_edges-list',
|
||||
label: 'Map edges',
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
icon: 'mdiVectorLine' in icon ? icon['mdiVectorLine' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
|
||||
permissions: 'READ_MAP_EDGES'
|
||||
},
|
||||
{
|
||||
href: '/source_items/source_items-list',
|
||||
label: 'Source items',
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
icon: 'mdiLinkVariant' in icon ? icon['mdiLinkVariant' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
|
||||
permissions: 'READ_SOURCE_ITEMS'
|
||||
},
|
||||
{
|
||||
href: '/node_evidence_items/node_evidence_items-list',
|
||||
label: 'Node evidence items',
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
icon: 'mdiBookOpenVariant' in icon ? icon['mdiBookOpenVariant' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
|
||||
permissions: 'READ_NODE_EVIDENCE_ITEMS'
|
||||
},
|
||||
{
|
||||
href: '/ai_runs/ai_runs-list',
|
||||
label: 'Ai runs',
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
icon: 'mdiRobot' in icon ? icon['mdiRobot' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
|
||||
permissions: 'READ_AI_RUNS'
|
||||
},
|
||||
{
|
||||
href: '/business_plan_versions/business_plan_versions-list',
|
||||
label: 'Business plan versions',
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
icon: 'mdiFileDocumentEditOutline' in icon ? icon['mdiFileDocumentEditOutline' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
|
||||
permissions: 'READ_BUSINESS_PLAN_VERSIONS'
|
||||
},
|
||||
{
|
||||
href: '/pitch_decks/pitch_decks-list',
|
||||
label: 'Pitch decks',
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
icon: 'mdiPresentation' in icon ? icon['mdiPresentation' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
|
||||
permissions: 'READ_PITCH_DECKS'
|
||||
},
|
||||
{
|
||||
href: '/deal_packages/deal_packages-list',
|
||||
label: 'Deal packages',
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
icon: 'mdiHandshakeOutline' in icon ? icon['mdiHandshakeOutline' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
|
||||
permissions: 'READ_DEAL_PACKAGES'
|
||||
},
|
||||
{
|
||||
href: '/partner_targets/partner_targets-list',
|
||||
label: 'Partner targets',
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
icon: 'mdiAccountSearchOutline' in icon ? icon['mdiAccountSearchOutline' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
|
||||
permissions: 'READ_PARTNER_TARGETS'
|
||||
},
|
||||
{
|
||||
href: '/tasks/tasks-list',
|
||||
label: 'Tasks',
|
||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore
|
||||
icon: 'mdiCheckboxMarkedCircleOutline' in icon ? icon['mdiCheckboxMarkedCircleOutline' as keyof typeof icon] : icon.mdiTable ?? icon.mdiTable,
|
||||
permissions: 'READ_TASKS'
|
||||
href: '/users/users-list',
|
||||
label: 'Users',
|
||||
icon: icon.mdiAccountGroup,
|
||||
permissions: 'READ_USERS'
|
||||
},
|
||||
{
|
||||
href: '/profile',
|
||||
label: 'Profile',
|
||||
icon: icon.mdiAccountCircle,
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
href: '/api-docs',
|
||||
target: '_blank',
|
||||
|
||||
@ -1,9 +1,8 @@
|
||||
import React, { ReactElement, useEffect, useState } from 'react';
|
||||
import Head from 'next/head';
|
||||
import 'react-datepicker/dist/react-datepicker.css';
|
||||
import { useAppDispatch } from '../stores/hooks';
|
||||
import { useAppDispatch , useAppSelector } from '../stores/hooks';
|
||||
|
||||
import { useAppSelector } from '../stores/hooks';
|
||||
|
||||
import { useRouter } from 'next/router';
|
||||
import LayoutAuthenticated from '../layouts/Authenticated';
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user