Compare commits

..

No commits in common. "ai-dev" and "master" have entirely different histories.

14 changed files with 172 additions and 41 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 871 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 199 KiB

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

View File

@ -3,9 +3,10 @@ import { mdiLogout, mdiClose } from '@mdi/js'
import BaseIcon from './BaseIcon' import BaseIcon from './BaseIcon'
import AsideMenuList from './AsideMenuList' import AsideMenuList from './AsideMenuList'
import { MenuAsideItem } from '../interfaces' import { MenuAsideItem } from '../interfaces'
import { useAppSelector , useAppDispatch } from '../stores/hooks' import { useAppSelector } from '../stores/hooks'
import Link from 'next/link'; import Link from 'next/link';
import { useAppDispatch } from '../stores/hooks';
import { createAsyncThunk } from '@reduxjs/toolkit'; import { createAsyncThunk } from '@reduxjs/toolkit';
import axios from 'axios'; import axios from 'axios';
@ -57,7 +58,7 @@ export default function AsideMenuLayer({ menu, className = '', ...props }: Props
return ( return (
<aside <aside
id='asideMenu' 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 lg:relative lg:translate-x-0 translate-x-0`} className={`${className} zzz lg:py-2 lg:pl-2 w-60 fixed flex z-40 top-0 h-screen transition-position overflow-hidden`}
> >
<div <div
className={`flex-1 flex flex-col overflow-hidden dark:bg-dark-900 ${asideStyle} ${corners}`} className={`flex-1 flex flex-col overflow-hidden dark:bg-dark-900 ${asideStyle} ${corners}`}

View File

@ -11,7 +11,7 @@ type Props = {
}; };
const BaseButtons = ({ const BaseButtons = ({
type = 'justify-start md:justify-end', type = 'justify-end',
mb = '-mb-3', mb = '-mb-3',
classAddon = 'mr-3 last:mr-0 mb-3', classAddon = 'mr-3 last:mr-0 mb-3',
noWrap = false, noWrap = false,

View File

@ -1,5 +1,6 @@
import React, {useEffect, useRef, useState } from 'react' import React, {useEffect, useRef} from 'react'
import Link from 'next/link' import Link from 'next/link'
import { useState } from 'react'
import { mdiChevronUp, mdiChevronDown } from '@mdi/js' import { mdiChevronUp, mdiChevronDown } from '@mdi/js'
import BaseDivider from './BaseDivider' import BaseDivider from './BaseDivider'
import BaseIcon from './BaseIcon' import BaseIcon from './BaseIcon'

View File

@ -4,11 +4,12 @@
} }
thead { thead {
@apply hidden md:table-header-group; @apply hidden lg:table-header-group;
} }
tr { tr {
@apply max-w-full block relative border-b-4 border-gray-100 md:table-row md:border-b-0 dark:border-slate-800; @apply max-w-full block relative border-b-4 border-gray-100
lg:table-row lg:border-b-0 dark:border-slate-800;
} }
tr:last-child { tr:last-child {
@ -16,11 +17,11 @@
} }
td:not(:first-child) { td:not(:first-child) {
@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; @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;
} }
th { th {
@apply md:text-left md:p-3 border-b; @apply lg:text-left lg:p-3 border-b;
} }
th.sortable { th.sortable {
@ -30,37 +31,39 @@
th.sortable:hover:after { th.sortable:hover:after {
transition: all 1s; transition: all 1s;
position: absolute; position: absolute;
content: "↕"; content: "↕";
margin-left: 1rem; margin-left: 1rem;
} }
th.sortable.asc:hover:after { th.sortable.asc:hover:after {
content: "↑"; content: "↑";
} }
th.sortable.desc:hover:after { th.sortable.desc:hover:after {
content: "↓"; content: "↓";
} }
td { td {
@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; @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;
} }
td:last-child { td:last-child {
@apply border-b-0; @apply border-b-0;
} }
tbody tr.odd { tbody tr, tbody tr:nth-child(odd) {
@apply md:hover:bg-pavitra-300/70; @apply lg:hover:bg-pavitra-300/70;
} }
tbody tr.even { tbody tr:nth-child(even) {
@apply md:bg-pavitra-300 dark:bg-pavitra-300/70; @apply lg:bg-pavitra-300 dark:bg-pavitra-300/70;
} }
td:before { td:before {
content: attr(data-label); content: attr(data-label);
@apply font-semibold pr-3 text-left md:hidden; @apply font-semibold pr-3 text-left lg:hidden;
} }
tbody tr td { tbody tr td {
@ -69,6 +72,7 @@
.datagrid--table, .MuiDataGrid-root { .datagrid--table, .MuiDataGrid-root {
@apply rounded border-none !important; @apply rounded border-none !important;
} }
.datagrid--header { .datagrid--header {
@ -94,6 +98,7 @@
@apply even:bg-gray-100 dark:even:bg-[#1B1D22] dark:odd:bg-dark-900 !important; @apply even:bg-gray-100 dark:even:bg-[#1B1D22] dark:odd:bg-dark-900 !important;
} }
.datagrid--table .MuiTablePagination-root { .datagrid--table .MuiTablePagination-root {
@apply dark:text-white; @apply dark:text-white;
} }

View File

@ -1,4 +1,5 @@
import React, { ReactNode, useEffect , useState } from 'react' import React, { ReactNode, useEffect } from 'react'
import { useState } from 'react'
import jwt from 'jsonwebtoken'; import jwt from 'jsonwebtoken';
import { mdiForwardburger, mdiBackburger, mdiMenu } from '@mdi/js' import { mdiForwardburger, mdiBackburger, mdiMenu } from '@mdi/js'
import menuAside from '../menuAside' import menuAside from '../menuAside'

View File

@ -7,35 +7,158 @@ const menuAside: MenuAsideItem[] = [
icon: icon.mdiViewDashboardOutline, icon: icon.mdiViewDashboardOutline,
label: 'Dashboard', label: 'Dashboard',
}, },
{ {
href: '/mind_maps/mind_maps-list', href: '/users/users-list',
label: 'Mind maps', label: 'Users',
icon: icon.mdiSitemap, // eslint-disable-next-line @typescript-eslint/ban-ts-comment
permissions: 'READ_MIND_MAPS' // @ts-ignore
icon: icon.mdiAccountGroup ?? icon.mdiTable,
permissions: 'READ_USERS'
}, },
{ {
href: '/source_items/source_items-list', href: '/roles/roles-list',
label: 'Sources', label: 'Roles',
icon: icon.mdiLinkVariant, // eslint-disable-next-line @typescript-eslint/ban-ts-comment
permissions: 'READ_SOURCE_ITEMS' // @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: '/projects/projects-list', href: '/projects/projects-list',
label: 'Projects', label: 'Projects',
icon: icon.mdiBriefcaseOutline, // 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,
permissions: 'READ_PROJECTS' permissions: 'READ_PROJECTS'
}, },
{ {
href: '/users/users-list', href: '/mind_maps/mind_maps-list',
label: 'Users', label: 'Mind maps',
icon: icon.mdiAccountGroup, // eslint-disable-next-line @typescript-eslint/ban-ts-comment
permissions: 'READ_USERS' // @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: '/profile', href: '/profile',
label: 'Profile', label: 'Profile',
icon: icon.mdiAccountCircle, icon: icon.mdiAccountCircle,
}, },
{ {
href: '/api-docs', href: '/api-docs',
target: '_blank', target: '_blank',

View File

@ -1,8 +1,9 @@
import React, { ReactElement, useEffect, useState } from 'react'; import React, { ReactElement, useEffect, useState } from 'react';
import Head from 'next/head'; import Head from 'next/head';
import 'react-datepicker/dist/react-datepicker.css'; import 'react-datepicker/dist/react-datepicker.css';
import { useAppDispatch , useAppSelector } from '../stores/hooks'; import { useAppDispatch } from '../stores/hooks';
import { useAppSelector } from '../stores/hooks';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import LayoutAuthenticated from '../layouts/Authenticated'; import LayoutAuthenticated from '../layouts/Authenticated';