Mesma lógica do submenu "Produtos" já existente: "Grupos" agora expande seu próprio submenu com "Subgrupos" (AppShell ganha suporte a um segundo nível de accordion aninhado). Nova tela lista todos os subgrupos de todos os grupos, com coluna Grupo e criação via dropdown de grupo explícito — complementa (não substitui) o painel já existente dentro da tela de um grupo específico. listProductSubgroups passa a resolver group_name via JOIN. Suíte: 95/95. pnpm turbo run typecheck build: 28/28 (core-web, reseller-web e subscriber-web confirmados sem regressão no AppShell compartilhado). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
168 lines
11 KiB
TypeScript
168 lines
11 KiB
TypeScript
import { BrowserRouter, Route, Routes } from "react-router-dom";
|
|
import { AuthProvider } from "./lib/auth/AuthContext.js";
|
|
import { AuthenticatedLayout } from "./routes/AuthenticatedLayout.js";
|
|
import { DashboardPage } from "./routes/DashboardPage.js";
|
|
import { LoginPage } from "./routes/LoginPage.js";
|
|
import { ProtectedRoute } from "./routes/ProtectedRoute.js";
|
|
import { CompaniesListPage } from "./routes/companies/CompaniesListPage.js";
|
|
import { CompanyFormPage } from "./routes/companies/CompanyFormPage.js";
|
|
import { ProductsListPage } from "./routes/products/ProductsListPage.js";
|
|
import { ProductFormPage } from "./routes/products/ProductFormPage.js";
|
|
import { ProductTypesListPage } from "./routes/products/catalogs/ProductTypesListPage.js";
|
|
import { ProductGroupsListPage } from "./routes/products/catalogs/ProductGroupsListPage.js";
|
|
import { SubgroupsListPage } from "./routes/products/catalogs/SubgroupsListPage.js";
|
|
import { BrandsListPage } from "./routes/products/catalogs/BrandsListPage.js";
|
|
import { UnitsListPage } from "./routes/products/catalogs/UnitsListPage.js";
|
|
import { ResellersListPage } from "./routes/resellers/ResellersListPage.js";
|
|
import { ResellerFormPage } from "./routes/resellers/ResellerFormPage.js";
|
|
import { LeadsListPage } from "./routes/crm/LeadsListPage.js";
|
|
import { LeadFormPage } from "./routes/crm/LeadFormPage.js";
|
|
import { ConvertLeadPage } from "./routes/crm/ConvertLeadPage.js";
|
|
import { OpportunitiesListPage } from "./routes/crm/OpportunitiesListPage.js";
|
|
import { OpportunityFormPage } from "./routes/crm/OpportunityFormPage.js";
|
|
import { QuotesListPage } from "./routes/quotes/QuotesListPage.js";
|
|
import { QuoteFormPage } from "./routes/quotes/QuoteFormPage.js";
|
|
import { QuoteDetailPage } from "./routes/quotes/QuoteDetailPage.js";
|
|
import { ClientRegistrationsListPage } from "./routes/client-registrations/ClientRegistrationsListPage.js";
|
|
import { ClientRegistrationFormPage } from "./routes/client-registrations/ClientRegistrationFormPage.js";
|
|
import { ClientRegistrationDetailPage } from "./routes/client-registrations/ClientRegistrationDetailPage.js";
|
|
import { ContractsListPage } from "./routes/contracts/ContractsListPage.js";
|
|
import { ContractFormPage } from "./routes/contracts/ContractFormPage.js";
|
|
import { ContractDetailPage } from "./routes/contracts/ContractDetailPage.js";
|
|
import { WarehousesListPage } from "./routes/inventory/WarehousesListPage.js";
|
|
import { WarehouseFormPage } from "./routes/inventory/WarehouseFormPage.js";
|
|
import { AssetsListPage } from "./routes/inventory/AssetsListPage.js";
|
|
import { AssetFormPage } from "./routes/inventory/AssetFormPage.js";
|
|
import { AssetDetailPage } from "./routes/inventory/AssetDetailPage.js";
|
|
import { MovementsListPage } from "./routes/inventory/MovementsListPage.js";
|
|
import { ReservationsListPage } from "./routes/inventory/ReservationsListPage.js";
|
|
import { SubscriptionsListPage } from "./routes/billing/SubscriptionsListPage.js";
|
|
import { SubscriptionFormPage } from "./routes/billing/SubscriptionFormPage.js";
|
|
import { BillingRunsListPage } from "./routes/billing/BillingRunsListPage.js";
|
|
import { BillingRunFormPage } from "./routes/billing/BillingRunFormPage.js";
|
|
import { BillingRunDetailPage } from "./routes/billing/BillingRunDetailPage.js";
|
|
import { InvoicesListPage } from "./routes/billing/InvoicesListPage.js";
|
|
import { NcmListPage } from "./routes/fiscal/NcmListPage.js";
|
|
import { CfopListPage } from "./routes/fiscal/CfopListPage.js";
|
|
import { MunicipalitiesListPage } from "./routes/fiscal/MunicipalitiesListPage.js";
|
|
import { OperationNaturesListPage } from "./routes/fiscal/OperationNaturesListPage.js";
|
|
import { TicketsListPage } from "./routes/support/TicketsListPage.js";
|
|
import { TicketFormPage } from "./routes/support/TicketFormPage.js";
|
|
import { TicketDetailPage } from "./routes/support/TicketDetailPage.js";
|
|
import { TemplatesListPage } from "./routes/documents/TemplatesListPage.js";
|
|
import { TemplateFormPage } from "./routes/documents/TemplateFormPage.js";
|
|
import { TemplateDetailPage } from "./routes/documents/TemplateDetailPage.js";
|
|
import { GenerationsListPage } from "./routes/documents/GenerationsListPage.js";
|
|
import { GenerationFormPage } from "./routes/documents/GenerationFormPage.js";
|
|
import { DevicesListPage } from "./routes/hr-timeclock/DevicesListPage.js";
|
|
import { DeviceFormPage } from "./routes/hr-timeclock/DeviceFormPage.js";
|
|
import { AfdImportPage } from "./routes/hr-timeclock/AfdImportPage.js";
|
|
import { AfdRecordsListPage } from "./routes/hr-timeclock/AfdRecordsListPage.js";
|
|
import { ForgotPasswordPage } from "./routes/ForgotPasswordPage.js";
|
|
import { ResetPasswordPage } from "./routes/ResetPasswordPage.js";
|
|
import { EnvelopesListPage } from "./routes/signatures/EnvelopesListPage.js";
|
|
import { EnvelopeFormPage } from "./routes/signatures/EnvelopeFormPage.js";
|
|
import { EnvelopeDetailPage } from "./routes/signatures/EnvelopeDetailPage.js";
|
|
import { PublicSignaturePage } from "./routes/PublicSignaturePage.js";
|
|
import { PublicVerifyPage } from "./routes/PublicVerifyPage.js";
|
|
|
|
export function App() {
|
|
return (
|
|
<BrowserRouter>
|
|
<AuthProvider>
|
|
<Routes>
|
|
<Route path="/login" element={<LoginPage />} />
|
|
<Route path="/forgot-password" element={<ForgotPasswordPage />} />
|
|
<Route path="/reset-password" element={<ResetPasswordPage />} />
|
|
<Route path="/assinar/:token" element={<PublicSignaturePage />} />
|
|
<Route path="/verificar/:verificationId" element={<PublicVerifyPage />} />
|
|
<Route element={<ProtectedRoute />}>
|
|
<Route element={<AuthenticatedLayout />}>
|
|
<Route path="/" element={<DashboardPage />} />
|
|
|
|
<Route path="/companies" element={<CompaniesListPage />} />
|
|
<Route path="/companies/new" element={<CompanyFormPage />} />
|
|
<Route path="/companies/:id/edit" element={<CompanyFormPage />} />
|
|
|
|
<Route path="/products" element={<ProductsListPage />} />
|
|
<Route path="/products/new" element={<ProductFormPage />} />
|
|
<Route path="/products/:id/edit" element={<ProductFormPage />} />
|
|
<Route path="/products/types" element={<ProductTypesListPage />} />
|
|
<Route path="/products/groups" element={<ProductGroupsListPage />} />
|
|
<Route path="/products/subgroups" element={<SubgroupsListPage />} />
|
|
<Route path="/products/brands" element={<BrandsListPage />} />
|
|
<Route path="/products/units" element={<UnitsListPage />} />
|
|
|
|
<Route path="/resellers" element={<ResellersListPage />} />
|
|
<Route path="/resellers/new" element={<ResellerFormPage />} />
|
|
<Route path="/resellers/:id/edit" element={<ResellerFormPage />} />
|
|
|
|
<Route path="/leads" element={<LeadsListPage />} />
|
|
<Route path="/leads/new" element={<LeadFormPage />} />
|
|
<Route path="/leads/:id/edit" element={<LeadFormPage />} />
|
|
<Route path="/leads/:id/convert" element={<ConvertLeadPage />} />
|
|
|
|
<Route path="/opportunities" element={<OpportunitiesListPage />} />
|
|
<Route path="/opportunities/new" element={<OpportunityFormPage />} />
|
|
<Route path="/opportunities/:id/edit" element={<OpportunityFormPage />} />
|
|
|
|
<Route path="/quotes" element={<QuotesListPage />} />
|
|
<Route path="/quotes/new" element={<QuoteFormPage />} />
|
|
<Route path="/quotes/:id" element={<QuoteDetailPage />} />
|
|
|
|
<Route path="/client-registrations" element={<ClientRegistrationsListPage />} />
|
|
<Route path="/client-registrations/new" element={<ClientRegistrationFormPage />} />
|
|
<Route path="/client-registrations/:id" element={<ClientRegistrationDetailPage />} />
|
|
|
|
<Route path="/contracts" element={<ContractsListPage />} />
|
|
<Route path="/contracts/new" element={<ContractFormPage />} />
|
|
<Route path="/contracts/:id" element={<ContractDetailPage />} />
|
|
|
|
<Route path="/inventory/assets" element={<AssetsListPage />} />
|
|
<Route path="/inventory/assets/new" element={<AssetFormPage />} />
|
|
<Route path="/inventory/assets/:id" element={<AssetDetailPage />} />
|
|
<Route path="/inventory/warehouses" element={<WarehousesListPage />} />
|
|
<Route path="/inventory/warehouses/new" element={<WarehouseFormPage />} />
|
|
<Route path="/inventory/warehouses/:id/edit" element={<WarehouseFormPage />} />
|
|
<Route path="/inventory/movements" element={<MovementsListPage />} />
|
|
<Route path="/inventory/reservations" element={<ReservationsListPage />} />
|
|
|
|
<Route path="/billing/subscriptions" element={<SubscriptionsListPage />} />
|
|
<Route path="/billing/subscriptions/new" element={<SubscriptionFormPage />} />
|
|
<Route path="/billing/runs" element={<BillingRunsListPage />} />
|
|
<Route path="/billing/runs/new" element={<BillingRunFormPage />} />
|
|
<Route path="/billing/runs/:id" element={<BillingRunDetailPage />} />
|
|
<Route path="/billing/invoices" element={<InvoicesListPage />} />
|
|
|
|
<Route path="/fiscal/ncm" element={<NcmListPage />} />
|
|
<Route path="/fiscal/cfop" element={<CfopListPage />} />
|
|
<Route path="/fiscal/municipalities" element={<MunicipalitiesListPage />} />
|
|
<Route path="/fiscal/operation-natures" element={<OperationNaturesListPage />} />
|
|
|
|
<Route path="/support/tickets" element={<TicketsListPage />} />
|
|
<Route path="/support/tickets/new" element={<TicketFormPage />} />
|
|
<Route path="/support/tickets/:id" element={<TicketDetailPage />} />
|
|
|
|
<Route path="/documents/templates" element={<TemplatesListPage />} />
|
|
<Route path="/documents/templates/new" element={<TemplateFormPage />} />
|
|
<Route path="/documents/templates/:id" element={<TemplateDetailPage />} />
|
|
<Route path="/documents/generations" element={<GenerationsListPage />} />
|
|
<Route path="/documents/generations/new" element={<GenerationFormPage />} />
|
|
|
|
<Route path="/signatures" element={<EnvelopesListPage />} />
|
|
<Route path="/signatures/new" element={<EnvelopeFormPage />} />
|
|
<Route path="/signatures/:id" element={<EnvelopeDetailPage />} />
|
|
|
|
<Route path="/hr-timeclock/devices" element={<DevicesListPage />} />
|
|
<Route path="/hr-timeclock/devices/new" element={<DeviceFormPage />} />
|
|
<Route path="/hr-timeclock/devices/:id/edit" element={<DeviceFormPage />} />
|
|
<Route path="/hr-timeclock/afd-imports" element={<AfdImportPage />} />
|
|
<Route path="/hr-timeclock/afd-records" element={<AfdRecordsListPage />} />
|
|
</Route>
|
|
</Route>
|
|
</Routes>
|
|
</AuthProvider>
|
|
</BrowserRouter>
|
|
);
|
|
}
|