Auto commit: 2026-01-08T12:26:11.799Z

This commit is contained in:
Flatlogic Bot 2026-01-08 12:26:11 +00:00
parent 66ae691b92
commit 4110081df9
3 changed files with 78 additions and 3 deletions

View File

@ -33,12 +33,23 @@ const menuAside: MenuAsideItem[] = [
permissions: 'READ_PERMISSIONS'
},
{
href: '/leads/leads-list',
label: 'Leads',
// 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_LEADS'
permissions: 'READ_LEADS',
menu: [
{
href: '/leads/list',
label: 'Leads List',
permissions: 'READ_LEADS',
},
{
href: '/leads/kanban',
label: 'Kanban',
permissions: 'READ_LEADS',
},
],
},
{
href: '/projects/projects-list',

View File

@ -0,0 +1,64 @@
import { mdiChartTimelineVariant } from '@mdi/js'
import Head from 'next/head'
import React, { ReactElement } from 'react'
import CardBox from '../../components/CardBox'
import LayoutAuthenticated from '../../layouts/Authenticated'
import SectionMain from '../../components/SectionMain'
import SectionTitleLineWithButton from '../../components/SectionTitleLineWithButton'
import { getPageTitle } from '../../config'
import BaseButton from '../../components/BaseButton'
import { useAppSelector } from '../../stores/hooks'
import { hasPermission } from '../../helpers/userPermissions'
import KanbanBoard from '../../components/KanbanBoard/KanbanBoard'
import Link from 'next/link'
import { deleteItem, update } from '../../stores/leads/leadsSlice'
const LeadsKanbanPage = () => {
const { currentUser } = useAppSelector((state) => state.auth)
const hasCreatePermission = currentUser && hasPermission(currentUser, 'CREATE_LEADS')
const columns = [
{ id: 'New', label: 'New' },
{ id: 'Contacted', label: 'Contacted' },
{ id: 'Qualified', label: 'Qualified' },
{ id: 'Proposal', label: 'Proposal' },
{ id: 'Converted', label: 'Converted' },
{ id: 'Lost', label: 'Lost' },
]
return (
<>
<Head>
<title>{getPageTitle('Leads Kanban')}</title>
</Head>
<SectionMain>
<SectionTitleLineWithButton icon={mdiChartTimelineVariant} title="Leads Kanban" main>
{''}
</SectionTitleLineWithButton>
<CardBox className="mb-6" cardBoxClassName="flex flex-wrap">
{hasCreatePermission && <BaseButton className={'mr-3'} href={'/leads/leads-new'} color="info" label="New Item" />}
<div className="md:inline-flex items-center ms-auto">
<Link href={'/leads/list'}>Switch to List</Link>
</div>
</CardBox>
<KanbanBoard
columns={columns}
entityName="leads"
columnFieldName="stage"
showFieldName="name"
deleteThunk={deleteItem}
updateThunk={update}
filtersQuery={'&orderBy=createdAt&orderDirection=asc'}
/>
</SectionMain>
</>
)
}
LeadsKanbanPage.getLayout = function getLayout(page: ReactElement) {
return <LayoutAuthenticated permission={'READ_LEADS'}>{page}</LayoutAuthenticated>
}
export default LeadsKanbanPage

View File

@ -117,7 +117,7 @@ const LeadsTablesPage = () => {
</div>
<div className='md:inline-flex items-center ms-auto'>
<Link href={'/leads/leads-table'}>Switch to Table</Link>
<Link href={'/leads/kanban'}>Switch to Kanban</Link>
</div>
</CardBox>