Files
openmonetis/components/sidebar/nav-link.tsx
Felipe Coutinho a7ef1407dc refactor: melhorar a formatação e a legibilidade do código
- Ajusta a formatação da função toggleInstallmentSelection para melhor legibilidade.
- Refatora a busca de grupos de parcelas para uma única linha.
- Remove a importação não utilizada do ícone RiCalculatorLine no nav-link.
- Adiciona o ícone RiCalculatorLine de volta ao widget de análise de parcelas.
2025-11-16 17:08:30 -03:00

151 lines
3.1 KiB
TypeScript

import {
RiArrowLeftRightLine,
RiBankCardLine,
RiBankLine,
RiCalendarEventLine,
RiDashboardLine,
RiFileListLine,
RiFundsLine,
RiGroupLine,
RiPriceTag3Line,
RiSettingsLine,
RiSparklingLine,
type RemixiconComponentType,
} from "@remixicon/react";
export type SidebarSubItem = {
title: string;
url: string;
avatarUrl?: string | null;
isShared?: boolean;
key?: string;
};
export type SidebarItem = {
title: string;
url: string;
icon: RemixiconComponentType;
isActive?: boolean;
items?: SidebarSubItem[];
};
export type SidebarSection = {
title: string;
items: SidebarItem[];
};
export type SidebarNavData = {
navMain: SidebarSection[];
navSecondary: {
title: string;
url: string;
icon: RemixiconComponentType;
}[];
};
export interface PagadorLike {
id: string;
name: string | null;
avatarUrl: string | null;
canEdit?: boolean;
}
export function createSidebarNavData(pagadores: PagadorLike[]): SidebarNavData {
const pagadorItems = pagadores
.map((pagador) => ({
title: pagador.name?.trim().length
? pagador.name.trim()
: "Pagador sem nome",
url: `/pagadores/${pagador.id}`,
key: pagador.canEdit ? pagador.id : `${pagador.id}-shared`,
isShared: !pagador.canEdit,
avatarUrl: pagador.avatarUrl,
}))
.sort((a, b) =>
a.title.localeCompare(b.title, "pt-BR", { sensitivity: "base" })
);
return {
navMain: [
{
title: "Visão Geral",
items: [
{
title: "Dashboard",
url: "/dashboard",
icon: RiDashboardLine,
},
],
},
{
title: "Gestão Financeira",
items: [
{
title: "Lançamentos",
url: "/lancamentos",
icon: RiArrowLeftRightLine,
},
{
title: "Calendário",
url: "/calendario",
icon: RiCalendarEventLine,
},
{
title: "Cartões",
url: "/cartoes",
icon: RiBankCardLine,
},
{
title: "Contas",
url: "/contas",
icon: RiBankLine,
},
{
title: "Orçamentos",
url: "/orcamentos",
icon: RiFundsLine,
},
],
},
{
title: "Organização",
items: [
{
title: "Pagadores",
url: "/pagadores",
icon: RiGroupLine,
items: pagadorItems,
},
{
title: "Categorias",
url: "/categorias",
icon: RiPriceTag3Line,
},
],
},
{
title: "Análise e Anotações",
items: [
{
title: "Anotações",
url: "/anotacoes",
icon: RiFileListLine,
},
{
title: "Insights",
url: "/insights",
icon: RiSparklingLine,
},
],
},
],
navSecondary: [
{
title: "Ajustes",
url: "/ajustes",
icon: RiSettingsLine,
},
],
};
}