Compare commits

...

3 Commits

Author SHA1 Message Date
Flatlogic Bot
7f6ac081a9 Autosave: 20260312-110155 2026-03-12 11:01:56 +00:00
Flatlogic Bot
adcbb26cbf Auto commit: 2026-03-12T07:37:03.246Z 2026-03-12 07:37:03 +00:00
Flatlogic Bot
bfdf88c0b0 Auto commit: 2026-03-11T16:01:47.479Z 2026-03-11 16:01:47 +00:00
14 changed files with 41 additions and 172 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 871 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 KiB

1
braces.txt Normal file
View File

@ -0,0 +1 @@
{{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}}

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -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}`}

View File

@ -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,

View File

@ -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'

View File

@ -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;
}
}
}

View File

@ -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'

View File

@ -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',
@ -168,4 +45,4 @@ const menuAside: MenuAsideItem[] = [
},
]
export default menuAside
export default menuAside

View File

@ -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';