Loading...
Loading...
Anders & A-Cube S.r.l. / January 15, 2025 β’ 3 min read
A-Cube Dashboard v2.0 is a production-grade web application for managing invoices, public administration documents, and A-Cube product suite. Built with React 18, Vite, and Material-UI, it delivers exceptional performance through advanced code-splitting and optimization techniques.
ββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Vite Dev Server / Production Build β
β HMR β’ Code Splitting β’ Asset Optimization β
ββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββΌββββββββββββββββββββββββββββββββββ
β React Router v6 (Nested Routes) β
β /dashboard/* β’ /invoices/* β’ /pa-documents/* β
ββββββββ¬βββββββββββββββββββββββββββββββ¬βββββββββββββ
β β
ββββββββΌβββββββββββ βββββββββββΌβββββββββββββ
β Redux Toolkit β β SWR Data Layer β
β - UI State β β - API Cache β
β - Auth State β β - Auto-Refetch β
β - User Prefs β β - Optimistic UI β
βββββββββββββββββββ ββββββββββββββββββββββββ
Build & Development:
State Management:
UI Framework:
Invoice Dashboard:
import { DataGrid, GridColDef } from '@mui/x-data-grid'
import { useInvoices } from '@/hooks/useInvoices'
export default function InvoicesDashboard() {
const { invoices, loading } = useInvoices()
const columns: GridColDef[] = [
{ field: 'number', headerName: 'Invoice #', width: 150 },
{ field: 'client', headerName: 'Client', width: 200 },
{ field: 'amount', headerName:
PDF Generation:
import { PDFDownloadLink, Document, Page, Text, View } from '@react-pdf/renderer'
export function InvoicePDF({ invoice }) {
return (
<Document>
<Page size="A4">
<View style={styles.header}>
<Text>Invoice #{invoice.number}</Text>
<Text>{invoice.date}</Text>
</View>
<View style={styles.items}>
i18next Configuration:
import i18n from 'i18next'
import { initReactI18next } from 'react-i18next'
import LanguageDetector from 'i18next-browser-languagedetector'
import resourcesToBackend from 'i18next-resources-to-backend'
i18n
.use(LanguageDetector)
.use(initReactI18next)
.use(resourcesToBackend((language, namespace) =>
import(`./locales/${language}/${namespace}.json`)
))
.init({
fallbackLng: 'en',
supportedLngs: ['en',
Usage:
import { useTranslation } from 'react-i18next'
export function InvoiceHeader() {
const { t, i18n } = useTranslation('invoices')
return (
<Box>
<Typography variant="h4">{t('title')}</Typography>
<Select value={i18n.language} onChange={handleLanguageChange}>
<MenuItem value="en">English</MenuItem>
<MenuItem value="it"
Route-Based Splitting:
import { lazy, Suspense } from 'react'
import { Routes, Route } from 'react-router-dom'
// Lazy load route components
const Dashboard = lazy(() => import('./pages/Dashboard'))
const Invoices = lazy(() => import('./pages/Invoices'))
const PADocuments = lazy(() => import('./pages/PADocuments'))
const Settings = lazy(() => import('./pages/Settings'))
export function AppRoutes() {
return (
<Suspense
Component-Level Splitting:
// Split heavy components
const RichTextEditor = lazy(() => import('./components/RichTextEditor'))
const DataVisualization = lazy(() => import('./components/Charts'))
const PDFViewer = lazy(() => import('./components/PDFViewer'))
// Load only when needed
function InvoiceEditor() {
const [showEditor, setShowEditor] = useState(false)
return (
<div>
<Button onClick={() => setShowEditor(true)}>
Edit Invoice
SWR Data Fetching:
import useSWR from 'swr'
export function useInvoices(filters) {
const { data, error, mutate } = useSWR(
`/api/invoices?${new URLSearchParams(filters)}`,
fetcher,
{
revalidateOnFocus: true,
dedupingInterval: 60000, // 1 minute
refreshInterval: 300000 // 5 minutes
}
)
return {
invoices: data?.invoices || [],
loading: !data
Virtualization for Large Lists:
import { useVirtualizer } from '@tanstack/react-virtual'
export function VirtualInvoiceList({ invoices }) {
const parentRef = useRef(null)
const virtualizer = useVirtualizer({
count: invoices.length,
getScrollElement: () => parentRef.current,
estimateSize: () => 60,
overscan: 10
})
return (
<div ref={parentRef} style={{ height: '600px', overflow:
.env.dev:
VITE_API_URL=https://api-dev.acubeapi.com
VITE_AUTH_DOMAIN=auth-dev.acubeapi.com
VITE_ENABLE_LOGS=true.env.production:
VITE_API_URL=https://api.acubeapi.com
VITE_AUTH_DOMAIN=auth.acubeapi.com
VITE_ENABLE_LOGS=false
VITE_SENTRY_DSN=https://...{
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"build:dev": "NODE_ENV=dev npm run env-build",
"build:sandbox": "NODE_ENV=sandbox npm run env-build",
"build:prod": "NODE_ENV=production npm run env-build",
"env-build": "vite build --mode $NODE_ENV"
}
}vite.config.ts:
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react-swc'
import { visualizer } from 'rollup-plugin-visualizer'
export default defineConfig({
plugins: [
react(),
visualizer({ open: true, gzipSize: true })
],
build: {
rollupOptions: {
output: {
manualChunks: {
'react-vendor': ['react', 'react-dom', 'react-router-dom'],
'mui-vendor': ['@mui/material', '@mui/x-data-grid'],
'pdf-vendor': ['@react-pdf/renderer'
Before Optimization:
After Optimization (40% reduction):
A-Cube Dashboard v2.0 demonstrates production-grade web application development with exceptional performance through intelligent optimization strategies. The 40% bundle reduction and 65% performance improvement showcase the impact of modern build tools and best practices.
License: Proprietary (A-Cube S.r.l.)