sPbs^B~ohA(HM2soy*uJ#%^lRb}QDQ}+x>Bk*Pd36j
z!0er6&yN8T^v*{z-o(1-T9}K_Ggr%%l65@G0ofQ52NQ)rgD8?Q8Al*O!S_3CHm0eW
z%$s4M=Lh>n1WrekOR@-X!6_ruayy#HsJDmm$c*;?;77+U=y1)qwVQ2CSRHhO
zvQ#W4K4dI0LI?69xXFvo0U8}~M>XP9Ha_$81O5MtXixt|?sXF3y51{fkM
z;#x-X2BxI(Vh=v38K`|_Ux8|Fq-^5z`1;jYRhuMhu(?gyKftALN`^ocO(Kpy&gh)>
zs`vJVYlR6+nS{Au&LrpLBm;K$95#yMy*4`;XI$wRR20n4Pbl*plV5fQM=S!S_Ea6&
zD!M3}RX!)m^GM%v=x~&o;7WT)tb$2?=vQRu>A~ORC7lf#et4C_3j6%83
zm>KA5r9=ueISWGM;mL}`ru4u!7-cdSN;Yg~tRkf$$BBvMEc`HV_Wks&Z}n$d^+mWtunQA`8VOtiyEiD+@VMQj=@U9YdpPldL7vjII?ydajR9_Ylb
zJ?f`Lth*
zl(d_B2uijt3mK^Mi2Tz20pFN|qg{*UOpd%o>RRQUrowMmu!3j8n~
zu~-l@?aHL8?WYx}-3UWGGiwS&c!zn(EJwm)$sIxYDG6`d6=7p`zTD4`-W(W(zPKd^+$N-a1DulbIO)!DtG1^5+`6~Ly9yY;N|rCZ)1qB0Tx#x8K~1#=_^1&%6&QDxj#})1xqcPY
z68*T{>sCrI2b6<^UXKS_h?DNvlNU&0n};$zD0AwLzrxiu(h9vx{A_;DczoXe-oH5RHe+jMJhZI7#uB(A2*P*S5QxB(
zwPZC`Q(wEeNsf@1B$BTPCONRo4k(?J@&$VrQ_Ge#ob=keS6N{$Qs$YD>`pj_n9i=607C*eJX(&oH*8~x-
zHi7@SNnx4rm)mJu=C!3>Nj{oU6n?h{cNC&(Ea&x_klWNk{ctw0;qCExesRha9*(`D
zZCC_`ChZRPG=FT62g(=U-=^*o-(0S2QFz37dIs#zW#kG=VhZ;v%~K9HTr`ZA3mR9?
zM$cCm>(z2sk_xgwQz1E-
zxoG}PM_>?$>`!L+TVN35pWcb|WM-xL|C!?d_HD>&W)Uy~dBXexT#sahN`VKFc2F^}
hH?jcAMDy<@0S5%4`YZZV|LvQLT!nJtOfdds{tLddmF55d
delta 4602
zcmZ8lXEfa3+MN--MJE^rL$v6L-un=uMxsZF9-Tq*3&!XoMkk_6^pX&D^cp1?BBMo%
z7KDU}dXxWK?tS0$VXw9K+UxA+d^v0F=Z9_zyfzC=G-ML?K?R)$76vQ>kc~ap1J_lY
zqgSl;#~L4@QLu&_%wpxvwno>;ffC{{5AD%{4mbe!n;1G5}wu10G8G%TA-+_(1h-Q|TUIgu@%v2w$cFqXf(Y60I-FqW(iS
z1caJqpOtp(HCrAy$V|vvQrY1ejpVo8@R#DxvXm79ico2CyK&b9sn6bK1^8ix&4^Y4
zZRgu!Jt4x&Xd;Tnm-UL&98jwCq#TkrO^}
zGQ{XX?Djr$swpATI>6a&H($6z*Ic9mR__{3d7wQ=jN#EZPY`AP-^?
zhy{f1g0TXLW;idL80AyWT0rcljV(QnY=yzI-s75FzC{qi+)FJGWRR&FB3Dl$AYlc02INjHgy%*_=Bf|6DLnvD;Q*rzse2p*0`cXObd5@
zods2-$7>^sO=Xu0(r?HKVuckAQ+TRs{SoT!D&&BOVC6DDb)E-dUo)3k3G?Z*U9(K=
zV2DLr6Mk8QU#+>uXVhbcPRaPgvg6))@EF1WrjNvV|T1(+ZVH(
z!aU5|c3Al?Kxl6hCuM=kcR6Xf}bR3{3iz)jiv|3b;bCumj9z*eR^#wb@nf!sJY!B0KoU$M%
z95D%m?IhsEe7m-N?5@7a0>#ZTBBeC9o)O@+@cjYGl09Mg#v783!()1<=puslI*KYv
zay|1Y`H)iH=Qkn-9oT}0C#-~^ZAkBf9aDWnVqd{?$C()v`BQ0|k3~?VcW-Lb6pg>X
z9ukBib=Rh(3(70LTGfPHpHZ^g)QX?pIC=5BA&J!8Ft@n@mN!r%^vk2Pbh$-!MhNJ#
zBtelFr&G-oL4+NG6$%rj?V{Y^GOuSZhvj?DlBruE4qXhmggWmy&jAamKBa`ZIR;!}
z-S6j!d_YGn$ozG$hYq*YVWimI9)4YPU*~PvMFQ7B@w`VlNpkPK1`-@Q`QXc3wnl|j
zrPJ!2{`r>T-VU9YbS<$S947sNAJs_nmIlk~&`z8!T_mSO@z*L!OeP7s@zr@8_S*d%
z3{Mg|74ILAiQ{;}`URvS_q*34{IHyMUc!x%T8e``SG}j#(LW$u4GknvVzTx=yM!eW
z2vmWdr(y?^6%BjDXi!10%gFUta@5B7~P9g>At9QUEg#^pJC
z%_r@m4VMY3VJdvDYcoQyI$)XNPpcgnHKMqjP=Odok_ZfG!x6sr#m4pqHxo8~dL$O{
z%rp)~R#;?~4R&|R@b$NvYP&D>*qi4rh&|FRr_|Qu6C(AI4pH+M)|lbvKG7XaC+p!%
z?JdF^)`Uf$Spyy|ohxsw40V`pw3sWAJ`HbT#(z)2q}3jgWMrJrLHx*76|nRgxJ@sC
z%{`8vhPhM@`3+IBqlF&EZ?*cHGeQ+zNS)VTLTLh`HPVW)Ci&E81)kns|jbg*%&!nEB
zl^%?LOwN^@On$_EYdSGJrf}oqT!)|Y>z$w+e$x*8mY~jxkv32fz@VJR*8sIikOKgO
ze``-t{cv0GMwIUE3pvrt@}s?tSxk$KlW4)!!R}cWfmv^b(Kp$V^!w#4*-B?Gn?iDg
zFIb*s-E>`ZI=F59row4Ew1JT;P7OQpu7ee!I&Xj5N^^=YO~d9C(Y|YdcG+_3f{{k<
zM$KT23b(Llnz_Y`FhV2gx7O2?F93Nn?JlXi=0ggh6lQOS!Z`FVAY{KfvQKRZ9zk0D
z{2(kRETISCrhS;8QS6axVK%@DqQ;A}r2
zv?sIXOF6!(nDoWamWe{Zie`VmL9L
z7&9qd$Nakzxf<04qjITxENZQ4B?h13-ghxw(<}ms!EMSD$j*SfaNW-(@k4J`TUgKi
ztkvGXE(@edQeT!SHiINM0Ey4^dm^``yOulzcZ?@dz*f?#!*$wWU;klm3iDn65l^q)SaETbqzV;_=w0cF4SY
zbmFn1T+7cT)vAZ9J@nfro>Uq=7Bxmxr$(pY*7tix1M{tAJjAAbcYqUve9OK1o)z2D
zneaN*P#U4lDnfgUK)t)@pSH`RqqqHEN-8H>;|tfuUx?~$w)alt+$<=o_YH-M8t-dL
zyHHFe*rg%65_IakU0%P{k)SzDQpXz{az+GiJPF&pbK)wkt4ScuSe=rw`uR9E_=d>&
zE7Yv#i$9n##o0QB2c+6SHzKEgurAFF^xJc6Gt6ouLx;462qgHii_{)Cj_r%D-Y%A<
z&q6L0m!IUQw?28!@};hzr2<2?OVYkrTZTiGaLN;{of{TA*ZA2;^ISgmkz4_oq^FX`
ze-t$X&i_`fC(UoH>pFP$8ax}S2j)yV~~GnR3I0aBa6h2#i|EUl5$6fLdPG_6rsMN)$!)kq^RM-X4P)5E=zIjo;(tj1Kk)ZKsu
z`V?QKY6>AA|85TBIlz6zm{mZnZGZLwzs*gpJTESU;e}Wj)b)7(NFve_7WHJq#h&dB
zd-5;CdS3$$`$7r8aVz_2b2AEy)nxxIURi$X%A`M3xXaLS>cJHtxl}$=xPv|0Hfvj#
z2=fV7ULWfSCq2hOJj3xPI5q0aZIf)rOQ|9@{=wlN((!O+03)hq>hkqOz5=3E(kdp>
z{f24biw|vKp&jpW8i~-+)j)vM50i|&%dd4Sd2%0;dwV}-@QTA@pbCaDcA?qjf*!)f
z4LmSmN0SsM(UDTvoK1SK*gC?Vu4ng^=_8O2#4Bpv+iJeM*JOkjDNFwrN#k>?&OQy9
z%)zP`9I?j;44W69r3@%#zWin~NOqf!lQ~uneh4LDChxusQ!ALUrrEAcSEG_)iMAx4
z9Q`e9h9yu#y`>#iw6Bh2T&6n)-SLtpU2cqt`66?`$6TkBF%JQ}QT5SD*|!h8^rAFw
zvEiFa)Cx;!PQLp!U8-dm#@7Vu!Nx2c1x-mF`6#U4*^kqTb#n!a}#H~xVSe|gDYP+VMW
zB+;Au1EK7BqR@&+YfC}i!w-Ljf7Gv&3Zb~76-Gp((u?$sU-zp%3IRF4-7_}9mQ+mW
z_)|t-)5WXQ(<3`|YFp`tkIPsilUyVtJ}?%%i%~NOOp@aq3UMNxC0=_dfDWMPE>$Y!
z@mTuI=bgfT7}JL75Z-87H`eMvhz)!{jlrD0h#tXaENMBc0mcbZHFV&XNm0
zH!|SuR?m>X^^M5MPmmVcGVMtu%AaEri?_S!*?93w$);Mb2Q6Ugh+z4mqi|dnfYQ~_
zXEA=i_w@4&oki&MD;^#ue^jp4M+6M}ld60#%t5*qh9e?KIn
znyD==hVbu62B!7iA+JN_8Y80xqDW?vO}gn13k3SerfLCwP=1OEPapXoF)l{DB&Lhi
z7fvf(${=l_ZXmGIpR$5-C7rAbvx|!fw+uPP|8<3be@F+fY)K4@UL4CmRtH_5$lGhF`9kUDacrer!Sb^-Z^RQB
z0P(*$+@&`)DgRFJVe7wa++HCJ(rwqNUro-T_7kGgvpYVA`T}PkLYpO<=FM#VE}M+(
zx46O>k?kztt%bYja{@kAe|c%?^&nCE_eppA`p>$*CRah0NT>zc8w`Cnh9$=o
zMNdpUYMsVAzSadt1j3%AR#4o6KHE{Xa31H2;f-<+pBv8XW%6i$4veyy*DD^~{*HBx
zcq)1T7k3=O_%xVU>fJI01W;adO*M6Nv8;ZU5
zeTAO1ybXG`mz_F7q89@A6vubvM$yU*lUfg08$RBQa4)w>k=x43I-i%MR9z;D?2XT>c@@o#_Lr0nWYudjND95LYgSrME>BN$
zkxJ{-@LC^6$i7(`fErR$zVJJIFKj@PZq_F$F%YFURp4&6g-EWJxJfokt3SU!Ibr0>
zsJi(*wQRM#{4f<9bCg`tH7SaiFtWNuMei1$5KtuxY4qI#X5DD`Q>o9=^o9HeSTDjC
zIOTf0mIC%$(;bdmo05uxzW=D&TioffA8)Sm+pR9LYhipSEmBR2gcxqUPpYbSG`aH1
zGOh`bbULoh+a0#p`JSeHcO@&;3o}3lpP_%GnHl{}r$DKup38y1thj;R45|0zYil^?
zm{KskvQ^qHuqicYQ-}%q$||xV!i^ehd6OGQ$uS~K{F^#mNvU#~`x@SK#ucRN7$#l2
zKT!P%;uh3X?R45+z0lekox3u>u+-Y<>@qeEGVpCU!D=0r
zly96;__0CuGaSPfFp+V6?Geeg6k{)OB02B08R7^}FnWc4Ny65EVOJ&uTcfX_D&T&!
z3YR2!8|}}9{_l+mCATT~6m8F~LSjbvPeVXIfU%=Hd8i5KIMCDFx52V#a-Li4|J$Cx
zAP~c!D)IM#LC`-qNQM6T=ZAOYp}G10`^LXbqcs1~KG3vW(7y@bH1s&n9dH|(7^VWA
hLu
Date: Wed, 21 May 2025 16:18:50 +0700
Subject: [PATCH 08/10] set desc true on disbursement table list
---
.../disbursement/history-transaction/HistoryTransaction.tsx | 2 +-
.../history-transaction/hooks/TransactionContext.tsx | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/pages/disbursement/history-transaction/HistoryTransaction.tsx b/src/pages/disbursement/history-transaction/HistoryTransaction.tsx
index 61b9d2d..792a69f 100644
--- a/src/pages/disbursement/history-transaction/HistoryTransaction.tsx
+++ b/src/pages/disbursement/history-transaction/HistoryTransaction.tsx
@@ -23,7 +23,7 @@ const HistoryTransactionDisbursement = () => {
- History Disbursement
+ Disbursement
diff --git a/src/pages/disbursement/history-transaction/hooks/TransactionContext.tsx b/src/pages/disbursement/history-transaction/hooks/TransactionContext.tsx
index 50829d6..861dcea 100644
--- a/src/pages/disbursement/history-transaction/hooks/TransactionContext.tsx
+++ b/src/pages/disbursement/history-transaction/hooks/TransactionContext.tsx
@@ -285,7 +285,7 @@ const TransactionProvider = ({ children }: { children: React.ReactNode }) => {
pagination={{ size: 10 }}
toolbar={
}
layout={{ card: true }}
- sorting={[{ id: 'execution_date', desc: false }]}
+ sorting={[{ id: 'execution_date', desc: true }]}
serverSide={true}
onFetchData={({ pageIndex, pageSize, sorting, columnFilters }) =>
getTransactionLists(pageIndex, pageSize, sorting, columnFilters)
From a0fe50164f3e5650f7e60b6e0490ce7f0a567be2 Mon Sep 17 00:00:00 2001
From: wayanrivan
Date: Wed, 21 May 2025 16:42:37 +0700
Subject: [PATCH 09/10] update
---
.../dashboards/home/DashboardHomePage.tsx | 2 +-
.../home/blocks/ShowDetailWalletDialog.tsx | 490 ++++++++----------
2 files changed, 222 insertions(+), 270 deletions(-)
diff --git a/src/pages/dashboards/home/DashboardHomePage.tsx b/src/pages/dashboards/home/DashboardHomePage.tsx
index 71ba39a..369149c 100644
--- a/src/pages/dashboards/home/DashboardHomePage.tsx
+++ b/src/pages/dashboards/home/DashboardHomePage.tsx
@@ -269,7 +269,7 @@ const DashboardHomePage = () => {
{bankaccount?.data && bankaccount?.data.length > 0
- && getAuth()?.statusbalance=='Y'
+ // && getAuth()?.statusbalance=='Y'
? (
bankaccount?.data.map((bankaccountdatas: { id_balance:string,amount: string, credit_limit: string, monthly_limit: string; wallet: string; }, index: number) => (
void;
@@ -58,107 +41,23 @@ const getDefaultDateRange = () => {
};
};
-const columns = [
- {
- accessorKey: 'transaction_code',
- header: ({ column }: any) => ,
- enableSorting: false,
- meta: { headerClassName: 'min-w-[120px]' },
- },
- {
- accessorKey: 'msisdn_reff',
- header: ({ column }: any) => ,
- enableSorting: false,
- meta: { headerClassName: 'min-w-[120px]' },
- },
- {
- accessorKey: 'transaction_type.name',
- header: ({ column }: any) => ,
- enableSorting: false,
- meta: { headerClassName: 'min-w-[180px]' },
- },
- {
- accessorKey: 'type',
- header: ({ column }: any) => ,
- enableSorting: false,
- meta: { headerClassName: 'min-w-[80px]' },
- },
- {
- accessorKey: 'amount',
- header: ({ column }: any) => ,
- enableSorting: false,
- cell: (info: any) => info.getValue()?.toFixed(2),
- meta: { headerClassName: 'min-w-[100px]' },
- },
- {
- accessorKey: 'pre_amount',
- header: ({ column }: any) => ,
- enableSorting: false,
- cell: (info: any) => info.getValue()?.toFixed(2),
- meta: { headerClassName: 'min-w-[100px]' },
- },
- {
- accessorKey: 'post_amount',
- header: ({ column }: any) => ,
- enableSorting: false,
- cell: (info: any) => info.getValue()?.toFixed(2),
- meta: { headerClassName: 'min-w-[100px]' },
- },
- {
- accessorKey: 'category',
- header: ({ column }: any) => ,
- enableSorting: false,
- meta: { headerClassName: 'min-w-[80px]' },
- },
- {
- accessorKey: 'date',
- header: ({ column }: any) => ,
- enableSorting: false,
- cell: (info: any) => {
- const val = info.getValue();
- if (!val) return '-';
- return new Date(val).toLocaleString('id-ID', {
- day: '2-digit',
- month: 'short',
- year: 'numeric',
- hour: '2-digit',
- minute: '2-digit',
- });
- },
- meta: { headerClassName: 'min-w-[150px]' },
- },
- {
- accessorKey: 'purpose',
- header: ({ column }: any) => ,
- enableSorting: false,
- cell: (info: any) => info.getValue() || '-',
- meta: { headerClassName: 'min-w-[200px]' },
- },
- {
- accessorKey: 'notes',
- header: ({ column }: any) => ,
- enableSorting: false,
- cell: (info: any) => info.getValue() || '-',
- meta: { headerClassName: 'min-w-[200px]' },
- },
-];
-
const ShowDetailWalletDialog: React.FC = ({
open,
onClose,
idbalance,
}) => {
const { GetData } = useCallApi();
- const [data, setData] = useState([]);
- const [isLoading, setIsLoading] = useState(false);
+
const [dateRange, setDateRange] = useState(getDefaultDateRange());
const [selectedTransferType, setSelectedTransferType] = useState(null);
+ const [transferType, setTransferType] = useState([]);
const [selectedCategory, setSelectedCategory] = useState(null);
const [searchValue, setSearchValue] = useState('');
- const [transferType, setTransferType] = useState([]);
const [category, setCategory] = useState([]);
+ const [transaction, setTransaction] = useState([]);
+ const [filters, setFilters] = useState({});
- const fetchTransferType = async () => {
+ const fetchTransferType = useCallback(async () => {
try {
const response = await GetData(`${apiConfig.service_transaction}/transactiontype/list`, {
limit: 100,
@@ -171,71 +70,18 @@ const ShowDetailWalletDialog: React.FC = ({
} catch (error) {
console.error('Error fetching transfer types', error);
}
- };
+ }, [GetData]);
- const getDetailList = useCallback(
- async (
- limit: number,
- page: number,
- with_deleted: boolean,
- order_field: string,
- order_direction: string,
- filter: any
- ): Promise => {
- if (!idbalance) return [];
- try {
- const response = await GetData(
- `${apiConfig.service_wallet}/dashboard/balance/list-balance-detail/${idbalance}`,
- {
- limit,
- page,
- with_deleted,
- order_field,
- order_direction,
- filter: JSON.stringify(filter),
- }
- );
- return response?.data?.list || [];
- } catch (error) {
- console.error('Error fetching wallet detail:', error);
- return [];
- }
- },
- [GetData, idbalance]
- );
+ useEffect(() => {
+ fetchTransferType();
+ }, [fetchTransferType]);
- const fetchData = useCallback(
- async (params: {
- pageIndex: number;
- pageSize: number;
- sorting: Array<{ id: string; desc: boolean }>;
- columnFilters: any[];
- }): Promise<{ data: WalletTransaction[] }> => {
- // setIsLoading(true);
- const order_field = params.sorting.length ? params.sorting[0].id : 'date';
- const order_direction = params.sorting.length && params.sorting[0].desc ? 'DESC' : 'ASC';
- const result = await getDetailList(
- params.pageSize,
- params.pageIndex + 1,
- false,
- order_field,
- order_direction,
- params.columnFilters
- );
- setData(result);
- setIsLoading(false);
- return { data: result };
- },
- [getDetailList]
- );
-
- // Ambil unique category dari data transaksi setelah data di-fetch
useEffect(() => {
const uniqueCategories = Array.from(
- new Set(data.map((tx) => tx.category).filter((cat) => !!cat))
+ new Set(transaction.map((tx) => tx.category).filter((cat) => !!cat))
);
setCategory(uniqueCategories);
- }, [data]);
+ }, [transaction]);
const handleTransferTypeChange = (value: string) => {
setSelectedTransferType(value === 'all' ? null : value);
@@ -250,30 +96,136 @@ const ShowDetailWalletDialog: React.FC = ({
setSelectedTransferType(null);
setSelectedCategory(null);
setSearchValue('');
+ setFilters({});
};
- useEffect(() => {
- fetchTransferType();
- }, []);
+ const handleApplyFilters = () => {
+ const appliedFilters: any = {};
- useEffect(() => {
- if (!open) return;
+ if (dateRange.from) appliedFilters.date_from = dateRange.from+" 00:00:00";
+ if (dateRange.to) appliedFilters.date_to = dateRange.to+" 23:59:59";
+ if (selectedTransferType) appliedFilters.transaction_type_id = selectedTransferType;
+ if (selectedCategory) appliedFilters.category = selectedCategory;
+ if (searchValue) appliedFilters.transaction_code = searchValue;
- const filters = [];
+ setFilters(appliedFilters);
+ };
- if (dateRange.from) filters.push({ id: 'date', value: { gte: dateRange.from } });
- if (dateRange.to) filters.push({ id: 'date', value: { lte: dateRange.to } });
- if (selectedTransferType) filters.push({ id: 'transaction_type.id', value: selectedTransferType });
- if (selectedCategory) filters.push({ id: 'category', value: selectedCategory });
- if (searchValue) filters.push({ id: 'transaction_code', value: searchValue });
- fetchData({
- pageIndex: 0,
- pageSize: 10,
- sorting: [{ id: 'date', desc: true }],
- columnFilters: filters,
- });
- }, [dateRange, selectedTransferType, selectedCategory, searchValue, open]);
+ const columns = [
+ {
+ accessorKey: 'transaction_code',
+ header: ({ column }: any) => ,
+ enableSorting: false,
+ meta: { headerClassName: 'min-w-[120px]' },
+ },
+ {
+ accessorKey: 'msisdn_reff',
+ header: ({ column }: any) => ,
+ enableSorting: false,
+ meta: { headerClassName: 'min-w-[120px]' },
+ },
+ {
+ accessorKey: 'transaction_type.name',
+ header: ({ column }: any) => ,
+ enableSorting: false,
+ meta: { headerClassName: 'min-w-[180px]' },
+ },
+ {
+ accessorKey: 'type',
+ header: ({ column }: any) => ,
+ enableSorting: false,
+ meta: { headerClassName: 'min-w-[80px]' },
+ },
+ {
+ accessorKey: 'amount',
+ header: ({ column }: any) => ,
+ enableSorting: false,
+ cell: (info: any) => info.getValue()?.toFixed(2),
+ meta: { headerClassName: 'min-w-[100px]' },
+ },
+ {
+ accessorKey: 'pre_amount',
+ header: ({ column }: any) => ,
+ enableSorting: false,
+ cell: (info: any) => info.getValue()?.toFixed(2),
+ meta: { headerClassName: 'min-w-[100px]' },
+ },
+ {
+ accessorKey: 'post_amount',
+ header: ({ column }: any) => ,
+ enableSorting: false,
+ cell: (info: any) => info.getValue()?.toFixed(2),
+ meta: { headerClassName: 'min-w-[100px]' },
+ },
+ {
+ accessorKey: 'category',
+ header: ({ column }: any) => ,
+ enableSorting: false,
+ meta: { headerClassName: 'min-w-[80px]' },
+ },
+ {
+ accessorKey: 'date',
+ header: ({ column }: any) => ,
+ enableSorting: false,
+ cell: (info: any) => {
+ const val = info.getValue();
+ if (!val) return '-';
+ return new Date(val).toLocaleString('id-ID', {
+ day: '2-digit',
+ month: 'short',
+ year: 'numeric',
+ hour: '2-digit',
+ minute: '2-digit',
+ });
+ },
+ meta: { headerClassName: 'min-w-[150px]' },
+ },
+ {
+ accessorKey: 'purpose',
+ header: ({ column }: any) => ,
+ enableSorting: false,
+ cell: (info: any) => info.getValue() || '-',
+ meta: { headerClassName: 'min-w-[200px]' },
+ },
+ {
+ accessorKey: 'notes',
+ header: ({ column }: any) => ,
+ enableSorting: false,
+ cell: (info: any) => info.getValue() || '-',
+ meta: { headerClassName: 'min-w-[200px]' },
+ },
+ ];
+
+ const getTransactionLists = useCallback(
+ async (page: number, limit: number, sorting: any, _columnFilters: any) => {
+ // console.log(idbalance);
+ try {
+ const response = await GetData(`${apiConfig.service_wallet}/dashboard/balance/list-balance-detail/${idbalance}`, {
+ limit,
+ page: page + 1,
+ with_deleted: false,
+ order_field: "created_at",
+ order_direction: 'DESC',
+ filter: filters
+ });
+
+ // console.log(filters);
+
+ if (!response || !response.data) {
+ console.warn('No data received:', response);
+ return { data: [], totalCount: 0 };
+ }
+
+ setTransaction(response.data.list);
+ return { data: response.data.list, totalCount: response.data.total_count };
+ } catch (error) {
+ console.error('Error fetching transaction', error);
+ return { data: [], totalCount: 0 };
+ }
+ },
+ [GetData, idbalance, filters]
+ );
return (