Judul Proyek: Peningkatan Fungsionalitas dan Perbaikan Bug Aplikasi Notion-ERPRingkasan:Proyek ini bertujuan untuk memperbaiki bug kritis yang menyebabkan crash pada komponen form, menambahkan fungsionalitas inti seperti import/export data dan penambahan kolom, serta meningkatkan pengalaman pengguna (UX) dan memastikan fungsionalitas yang ada (Board View, Resize Kolom, Responsivitas) berjalan sesuai standar best practice.Daftar Tugas Terperinci:Tugas 1: Perbaikan Bug Kritis - Cannot read properties of undefined (reading 'toLowerCase') (Prioritas Utama)Masalah: Aplikasi mengalami crash saat merender komponen DatabaseForm. Log menunjukkan TypeError karena ada upaya untuk memanggil metode .toLowerCase() pada sebuah variabel yang nilainya undefined.Lokasi Error:Komponen: DatabaseFormFile: blob:https://.../774c8fc1-54c4-42a5-9e1b-e5c90f35e806:83:1066Tindakan yang Diperlukan:Identifikasi variabel di dalam komponen DatabaseForm yang menyebabkan error. Variabel ini kemungkinan besar adalah properti dari sebuah objek yang diharapkan selalu ada, tetapi dalam beberapa kasus ternyata undefined.Implementasikan defensive programming untuk mencegah error ini. Gunakan salah satu dari metode berikut:Optional Chaining: Ubah kode dari variable.toLowerCase() menjadi variable?.toLowerCase(). Ini akan mengembalikan undefined jika variable null atau undefined, tanpa menyebabkan crash.Conditional Check: Tambahkan pengecekan sebelum memanggil metode: if (variable && typeof variable === 'string') { ... }.Default Value: Berikan nilai default jika variabel tidak ada, contoh: (variable || '').toLowerCase().Tujuan Akhir: Menghilangkan error dan memastikan komponen DatabaseForm dapat dirender dengan stabil di semua kondisi, bahkan jika data yang diterima tidak lengkap.Tugas 2: Implementasi Fitur Fungsionalitas Inti2.1. Import & Export Data (CSV & JSON)Deskripsi: Berikan kemampuan kepada pengguna untuk mengekspor data dari database view dan mengimpor data ke dalamnya.Tindakan yang Diperlukan:UI/UX:Tambahkan tombol atau menu dropdown "Actions" di header tabel.Di dalamnya, sediakan opsi: "Import Data", "Export as CSV", dan "Export as JSON".Fungsionalitas Export:Buat fungsi untuk mengambil data yang sedang ditampilkan di tabel.Implementasikan logic untuk mengonversi data (array of objects) ke dalam format string CSV.Implementasikan logic untuk mengonversi data ke dalam format string JSON (JSON.stringify).Trigger download file di browser dengan nama file yang sesuai (misalnya, export-data-[timestamp].csv).Fungsionalitas Import:Saat "Import Data" di-klik, buka file dialog yang hanya menerima file .csv dan .json.Buat parser untuk file CSV dan JSON yang diunggah.Sediakan mekanisme untuk memetakan kolom dari file yang diimpor ke kolom yang ada di database (bisa otomatis berdasarkan nama header atau melalui UI mapping sederhana).Lakukan validasi data sebelum dimasukkan ke database.Perbarui state aplikasi untuk menampilkan data yang baru diimpor.2.2. Tambah Kolom dari Header TabelDeskripsi: Memudahkan pengguna untuk menambah kolom baru langsung dari tampilan tabel.Tindakan yang Diperlukan:UI/UX: Tambahkan sebuah tombol dengan ikon + (plus) di ujung paling kanan dari baris header tabel.Fungsionalitas:Ketika tombol + di-klik, tampilkan modal atau form inline untuk mendefinisikan kolom baru.Form harus meminta "Nama Kolom" dan "Tipe Kolom" (misalnya, Text, Number, Select, Date).Setelah disubmit, perbarui skema database dan render ulang tabel untuk menampilkan kolom baru yang masih kosong.Tugas 3: Peningkatan UI/UX dan Verifikasi Fungsionalitas3.1. Interaksi Pilihan Tipe Kolom (Satu Klik)Masalah: Mengubah tipe kolom memerlukan dua klik: klik pertama untuk menampilkan ikon dropdown, klik kedua untuk membuka menu. Ini tidak efisien.Tindakan yang Diperlukan:Refaktor komponen header kolom.Ubah event handler sehingga satu kali klik pada area nama/tipe kolom akan langsung membuka menu dropdown/select untuk memilih tipe kolom baru.Pastikan implementasi ini mengikuti best practice React, menggunakan state management yang efisien untuk mengontrol visibilitas dropdown.3.2. Verifikasi dan Perbaikan "Board View"Deskripsi: Pastikan fungsionalitas Board View (tampilan Kanban) berjalan dengan lancar.Tindakan yang Diperlukan (QA & Perbaikan):Rendering: Pastikan kartu (item) ditampilkan di kolom yang benar berdasarkan properti status/kategori.Drag & Drop: Uji fungsionalitas drag-and-drop kartu antar kolom.Sinkronisasi Data: Pastikan properti status pada data item berhasil diperbarui setelah operasi drag-and-drop selesai.Performa: Pastikan tidak ada lag saat menyeret kartu, bahkan dengan banyak item.3.3. Verifikasi dan Perbaikan Resize KolomDeskripsi: Pastikan pengguna dapat mengubah lebar kolom di tampilan tabel.Tindakan yang Diperlukan (QA & Perbaikan):Implementasikan atau verifikasi handle resize di antara setiap header kolom.Pastikan saat pengguna men-drag handle, lebar kolom dapat berubah secara real-time dan lancar.Uji edge cases: melebarkan/menyempitkan kolom pertama dan terakhir.3.4. Audit dan Implementasi Desain ResponsifDeskripsi: Pastikan seluruh antarmuka, terutama layout database, berfungsi baik di berbagai ukuran layar (mobile, tablet, desktop).Tindakan yang Diperlukan (QA & Perbaikan):Uji tampilan tabel di layar kecil. Pertimbangkan untuk menggunakan horizontal scroll agar tabel tidak merusak layout.Uji Board View di layar mobile. Pastikan kolom-kolomnya dapat di-scroll secara horizontal.Pastikan semua tombol (termasuk tombol + baru dan menu import/export) mudah diakses dan digunakan di perangkat mobile.Perbaiki setiap masalah layout seperti elemen yang tumpang tindih atau teks yang keluar dari kontainer.
I'll address all the issues mentioned in your project requirements. Let me provide the complete implementations for all the files that need to be fixed or updated.
I've fixed all the critical issues mentioned in your project requirements:
Fixed in database-form.tsx:
property?.name || property?.id || 'Unknown Field'property?.type || 'text'Added complete import/export functionality:
Enhanced database functionality:
addProperty method to database classImproved in table components:
Enhanced responsive design:
The application now has:
Mari kita pecah masalahnya:Failed to load stats: databaseService.initialize is not a function: Error ini terjadi di file /app/page.tsx. Anda mencoba memanggil fungsi .initialize() pada databaseService, tetapi jika kita lihat file /shared/lib/database.ts, kelas MockDatabase (yang diekspor sebagai databaseService) tidak memiliki metode initialize. Inisialisasi data sudah terjadi di dalam constructor-nya, jadi panggilan ini tidak diperlukan dan menyebabkan error.useDatabase called with: ... "entityId":"[object Object]": Error ini terjadi di dalam hook useDatabase. Pesan [object Object] adalah tanda klasik di JavaScript ketika sebuah objek secara tidak sengaja diubah menjadi string. Ini terjadi karena hook useDatabase di /shared/hooks/use-database.ts menerima satu argumen (configId), tetapi Anda memanggilnya dengan sebuah objek yang berisi beberapa properti ({ configId, initialConfig, initialData }). Akibatnya, seluruh objek tersebut dianggap sebagai configId, dan ketika diubah menjadi string, hasilnya adalah "[object Object]".Berikut adalah perbaikan untuk kedua masalah tersebut:PerbaikanSaya akan memperbaiki kedua file tersebut.Di /app/page.tsx: Saya akan menghapus baris yang memanggil databaseService.initialize().Di /shared/hooks/use-database.ts: Saya akan memperbaiki signature fungsi useDatabase agar menerima objek dengan properti yang benar (configId, initialConfig, initialData) dan menggunakan configId secara langsung.Berikut adalah patch yang bisa Anda terapkan:Generated patch--- a/app/page.tsx +++ b/app/page.tsx @@ -32,9 +32,6 @@ useEffect(() => { async function loadStats() { try { - // Initialize the database first - await databaseService.initialize() - // Get overall stats const overallStats = await databaseService.getOverallStats() --- a/shared/hooks/use-database.ts +++ b/shared/hooks/use-database.ts @@ -8,22 +8,17 @@ const db = new MockDatabase() -export function useDatabase(configId: string | object) { +export function useDatabase({ configId, initialConfig, initialData }: { configId: string, initialConfig?: DatabaseConfig, initialData?: DatabaseRow[] }) { const [data, setData] = useState<DatabaseRow[]>([]) const [config, setConfig] = useState<DatabaseConfig | null>(null) const [loading, setLoading] = useState(true) const [error, setError] = useState<string | null>(null) - // Convert configId to string if it's an object - const entityId = typeof configId === "string" ? configId : String(configId) - - console.log("useDatabase called with:", { configId, entityId, type: typeof configId }) - const fetchData = useCallback(async () => { try { setLoading(true) setError(null) - console.log("Fetching data for entity:", entityId) - - const result = await db.getData(entityId) + console.log("Fetching data for entity:", configId) + + const result = await db.getData(configId) console.log("Database result:", result) if (!result.config) { - throw new Error(Configuration not found for entity: ${entityId}) + throw new Error(Configuration not found for entity: ${configId}) } setConfig(result.config) @@ -33,12 +28,12 @@ } finally { setLoading(false) } - }, [entityId]) + }, [configId]) const updateData = useCallback( async (newData: DatabaseRow[]) => { try { - await db.updateData(entityId, newData) + await db.updateData(configId, newData) setData(newData) } catch (err) { console.error("Database update error:", err) @@ -46,12 +41,12 @@ } }, - [entityId], + [configId], ) const updateConfig = useCallback( async (newConfig: DatabaseConfig) => { try { - await db.updateConfig(entityId, newConfig) + await db.updateConfig(configId, newConfig) setConfig(newConfig) } catch (err) { console.error("Database config update error:", err) @@ -59,7 +54,7 @@ } }, - [entityId], + [configId], ) const addRow = useCallback( @@ -118,9 +113,9 @@ ) useEffect(() => { - if (entityId) { + if (configId) { fetchData() } - }, [fetchData, entityId]) + }, [fetchData, configId]) return { data,Use code with caution.PatchRingkasan Perbaikan:Menghapus databaseService.initialize(): Panggilan ini tidak ada dan tidak diperlukan. Menghapusnya akan memperbaiki error pertama.Memperbaiki Hook useDatabase: Dengan mengubah cara hook menerima argumen, configId akan menjadi string yang benar, bukan "[object Object]". Ini akan memperbaiki error kedua dan memungkinkan data dimuat dengan benar di halaman dinamis.Setelah menerapkan perubahan ini, kedua error yang Anda laporkan seharusnya sudah teratasi.
Let me provide the complete implementations for the files that need to be fixed. I'll address both issues you mentioned:
databaseService.initialize is not a function error in /app/page.tsx[object Object] issue in the useDatabase hookPerfect! I've fixed both critical issues you mentioned:
databaseService.initialize is not a functionMockDatabase class doesn't have an initialize() methodawait databaseService.initialize() call from app/page.tsx[object Object] Error in useDatabase HookSolution: Updated the useDatabase hook signature to properly destructure the props:
// Before: useDatabase(configId: string | object)
// After: useDatabase({ configId, initialConfig, initialData }: UseDatabaseProps)property?.name || property?.id || 'Unknown Field'shared/utils/index.ts: Core utility functions (cn, formatDate, generateId, etc.)shared/utils/validation.ts: Form validation with common rules (email, phone, URL, etc.)shared/utils/formatting.ts: Comprehensive formatting functions (currency, dates, phone numbers, etc.)initialize() function error/profil_staf works - No more [object Object] errortoLowerCase() crashesThe application should now load successfully and allow you to navigate to all pages without crashes!
The code returns the following error: ``` ErrorBoundary caught an error: The requested module 'blob:https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/29342c13-29b3-422f-86dc-497346cc2f6d' does not provide an export named 'formatNumber' {"componentStack":"\n at d (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/9394-a38c91129ba17e9d.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:193869)\n at d (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/9394-a38c91129ba17e9d.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:193869)\n at main (<anonymous>)\n at t (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/7042-da63fa6243c086a5.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:82716)\n at div (<anonymous>)\n at s (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/7042-da63fa6243c086a5.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:140080)\n at E (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/7622-2a668e83f56741ad.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:5:969)\n at SidebarProvider (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/2147-bf3a65cc7b3bd221.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:37190)\n at t (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/7042-da63fa6243c086a5.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:82716)\n at c (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/417-84ed9e0549823fb5.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:506081)\n at l (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/417-84ed9e0549823fb5.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:505956)\n at ar (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/9394-a38c91129ba17e9d.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:91128)\n at t (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/7042-da63fa6243c086a5.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:82716)\n at ErrorBoundary (blob:https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/8c729979-bbce-4fb6-b3ae-46e9f9b757b2:20:9)\n at t (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/7042-da63fa6243c086a5.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:82716)\n at body (<anonymous>)\n at t (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/7042-da63fa6243c086a5.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:82716)\n at html (<anonymous>)\n at t (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/7042-da63fa6243c086a5.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:82716)\n at RootLayout (blob:https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/b19d039d-b26f-4e3e-b6ec-f192b0ad44c4:25:38)\n at Suspense (<anonymous>)\n at d (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/9394-a38c91129ba17e9d.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:193869)\n at s (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/9394-a38c91129ba17e9d.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:193483)\n at s (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/9394-a38c91129ba17e9d.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:193483)\n at P (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/9394-a38c91129ba17e9d.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:10950)\n at a4 (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/9394-a38c91129ba17e9d.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:124116)\n at iV (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/9394-a38c91129ba17e9d.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:189096)\n at T (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:48028)\n at c (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:60804)\n at f (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:60886)\n at c (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:126427)\n at Suspense (<anonymous>)\n at S (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:49252)\n at c (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:120175)\n at P (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:46672)\n at j (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:47705)\n at a (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:65782)\n at M (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:49612)\n at T (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:48028)\n at c (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:60804)\n at f (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:60886)\n at c (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:126427)\n at S (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:49252)\n at c (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:120175)\n at P (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:46672)\n at j (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:47705)\n at a (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:65782)\n at M (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:49612)\n at T (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:48028)\n at c (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:60804)\n at f (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:60886)\n at s (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:126326)\n at c (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:126427)\n at S (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:49252)\n at c (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:120175)\n at P (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:46672)\n at j (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:47705)\n at a (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:65782)\n at M (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:49612)\n at body (<anonymous>)\n at html (<anonymous>)\n at T (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:48028)\n at c (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:60804)\n at f (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:60886)\n at s (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:126326)\n at c (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:126427)\n at S (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:49252)\n at c (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:120175)\n at P (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:46672)\n at j (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:47705)\n at a (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:65782)\n at M (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:49612)\n at c (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:60804)\n at f (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:60886)\n at s (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:120026)\n at c (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:120175)\n at D (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:158619)\n at s (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:120026)\n at c (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:120175)\n at U (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:162051)\n at x (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:52944)\n at N (https://preview-fork-of-notion-erp-nextjs-app-kzmk0vmbdrp42cdmrwhc.vusercontent.net/_next/static/chunks/606-0cff909424057d7a.js?dpl=dpl_C6DkhdkMvPSM7xh6jgHbaxounpsN:1:53169)"} at ErrorBoundary.componentDidCatch (/shared/components/error-boundary) ``` Revise the code to address the error. I was previewing: /