diff --git a/assets/cat-bonus.png b/assets/cat-bonus.png
new file mode 100644
index 0000000..678d877
Binary files /dev/null and b/assets/cat-bonus.png differ
diff --git a/assets/cat-hiburan.png b/assets/cat-hiburan.png
new file mode 100644
index 0000000..81360a1
Binary files /dev/null and b/assets/cat-hiburan.png differ
diff --git a/assets/cat-kesehatan.png b/assets/cat-kesehatan.png
new file mode 100644
index 0000000..bf3f24d
Binary files /dev/null and b/assets/cat-kesehatan.png differ
diff --git a/assets/cat-lain-expense.png b/assets/cat-lain-expense.png
new file mode 100644
index 0000000..e9de194
Binary files /dev/null and b/assets/cat-lain-expense.png differ
diff --git a/assets/cat-lain-income.png b/assets/cat-lain-income.png
new file mode 100644
index 0000000..72eb0a8
Binary files /dev/null and b/assets/cat-lain-income.png differ
diff --git a/assets/cat-tagihan.png b/assets/cat-tagihan.png
new file mode 100644
index 0000000..46da9cc
Binary files /dev/null and b/assets/cat-tagihan.png differ
diff --git a/src/screens/AddTransactionScreen.tsx b/src/screens/AddTransactionScreen.tsx
index 13e5b0e..b354ea7 100644
--- a/src/screens/AddTransactionScreen.tsx
+++ b/src/screens/AddTransactionScreen.tsx
@@ -187,7 +187,7 @@ export function AddTransactionScreen() {
{categories.map((c) => {
const selected = c.id === selectedCategoryId;
- const icon3d = getCategoryIcon3d(c.name);
+ const icon3d = getCategoryIcon3d(c.name, type);
return (
0 ? compare.current / dayOfMonth : 0;
const projection = Math.round(compare.current + perDay * remainingDays);
- const topIcon3d = topCategory ? getCategoryIcon3d(topCategory.categoryName) : null;
+ const topIcon3d = topCategory
+ ? getCategoryIcon3d(topCategory.categoryName, 'expense')
+ : null;
// Saldo cukup berapa hari (rata-rata pengeluaran harian bulan ini)
const avgDailyExpense = dayOfMonth > 0 ? monthExpense / dayOfMonth : 0;
@@ -646,7 +648,7 @@ export function DashboardScreen() {
) : (
recent.map((t) => {
- const icon3d = getCategoryIcon3d(t.categoryName);
+ const icon3d = getCategoryIcon3d(t.categoryName, t.type);
return (
{categories.map((c) => {
const selected = c.id === selectedCategoryId;
- const icon3d = getCategoryIcon3d(c.name);
+ const icon3d = getCategoryIcon3d(c.name, type);
return (
}
renderItem={({ item }) => {
- const icon3d = getCategoryIcon3d(item.categoryName);
+ const icon3d = getCategoryIcon3d(item.categoryName, item.type);
return (
diff --git a/src/screens/RecurringFormScreen.tsx b/src/screens/RecurringFormScreen.tsx
index da75434..0511b9f 100644
--- a/src/screens/RecurringFormScreen.tsx
+++ b/src/screens/RecurringFormScreen.tsx
@@ -165,7 +165,7 @@ export function RecurringFormScreen() {
{categories.map((c) => {
const selected = c.id === selectedCategoryId;
- const icon3d = getCategoryIcon3d(c.name);
+ const icon3d = getCategoryIcon3d(c.name, type);
return (
icon 3D.
+ * Key: `${type}:${name}` (karena ada kategori "Lainnya" di income & expense).
* Kategori yang belum punya versi 3D otomatis fallback ke emoji.
*/
export const CATEGORY_3D: Record = {
- Makanan: require('../../assets/cat-makanan.png'),
- Transportasi: require('../../assets/cat-transportasi.png'),
- Belanja: require('../../assets/cat-belanja.png'),
- Gaji: require('../../assets/cat-gaji.png'),
+ 'expense:Makanan': require('../../assets/cat-makanan.png'),
+ 'expense:Transportasi': require('../../assets/cat-transportasi.png'),
+ 'expense:Belanja': require('../../assets/cat-belanja.png'),
+ 'expense:Tagihan': require('../../assets/cat-tagihan.png'),
+ 'expense:Kesehatan': require('../../assets/cat-kesehatan.png'),
+ 'expense:Hiburan': require('../../assets/cat-hiburan.png'),
+ 'expense:Lainnya': require('../../assets/cat-lain-expense.png'),
+ 'income:Gaji': require('../../assets/cat-gaji.png'),
+ 'income:Bonus / THR': require('../../assets/cat-bonus.png'),
+ 'income:Lainnya': require('../../assets/cat-lain-income.png'),
};
-export function getCategoryIcon3d(categoryName: string | null): any | null {
+export function getCategoryIcon3d(
+ categoryName: string | null,
+ type?: string
+): any | null {
if (!categoryName) return null;
- return CATEGORY_3D[categoryName] ?? null;
+ const key = type ? `${type}:${categoryName}` : categoryName;
+ return CATEGORY_3D[key] ?? null;
}