From 5b5da0d92dce09a3884f2a4560c5bd05d8a4a45f Mon Sep 17 00:00:00 2001 From: wayanrivan Date: Thu, 8 May 2025 09:19:47 +0700 Subject: [PATCH] update --- .../blocks/RollbackTransaction.tsx | 187 ++++++++++++++++++ .../hooks/TransactionContext.tsx | 19 ++ 2 files changed, 206 insertions(+) create mode 100644 src/pages/transaction/history-transaction/blocks/RollbackTransaction.tsx diff --git a/src/pages/transaction/history-transaction/blocks/RollbackTransaction.tsx b/src/pages/transaction/history-transaction/blocks/RollbackTransaction.tsx new file mode 100644 index 0000000..3985aaa --- /dev/null +++ b/src/pages/transaction/history-transaction/blocks/RollbackTransaction.tsx @@ -0,0 +1,187 @@ +import { useTransactionContext } from '../hooks/useTransactionContext'; +import { useCallApi } from '@/hooks'; +import { apiConfig } from '@/config/api.config'; +import { useCallback, useEffect, useState } from 'react'; +import { + Dialog, + DialogBody, + DialogContent, + DialogHeader, + DialogTitle, + DialogDescription, +} from '@/components/ui/dialog'; +import { Button } from '@/components/ui/button'; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@/components/ui/select'; +import { doSaveLogActivity } from '@/actions/GlobalActions'; +import { toast } from 'sonner'; +import { Input } from '@/components/ui/input'; +import { DefaultTooltip, KeenIcon, useDataGrid } from '@/components'; +import Swal from 'sweetalert2'; // ✅ IMPORT sweetalert2 + +const API_URL = apiConfig.transaction; + +const RollbackTransaction = () => { + const { GetData, PostData } = useCallApi(); + const { reload } = useDataGrid(); + + const { + showRollbackDialog, + setShowRollbackDialog, + selectedTransactionId, + } = useTransactionContext(); + + + const [formField, setFormField] = useState({ + transaction_code: '', + notes: '', + pin: '' + }); + + const [alert, setAlert] = useState({ + show: false, + message: '', + }); + + const doApproval = useCallback( + async (e: React.FormEvent) => { + e.preventDefault(); + + // ✅ TUTUP Dialog sebelum munculkan SweetAlert + setShowRollbackDialog(false); + + // ✅ TAMPILKAN SWEETALERT + const result = await Swal.fire({ + title: 'Are you sure?', + text: "You want to save changes?", + icon: 'warning', + showCancelButton: true, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + confirmButtonText: 'Yes, save it!', + cancelButtonText: 'Cancel' + }); + + if (result.isConfirmed) { + // ✅ Kalau tekan YES, baru tembak API + const response = await PostData(`${API_URL}/transaction/rollback`, { + id_transaction: selectedTransactionId, + notes: formField.notes, + pin: formField.pin, + }); + + // console.log(response?.message?.error?.message,response?.status); + + if (response?.status === false) { + // console.log(response); + toast.error(JSON.stringify(response)); + return; + } + + if (response?.status) { + toast.success('Success Update Approval'); + const createActivity = { + module: 'History Transaction', + description: `Rollback Transaction for transaction => ${selectedTransactionId}`, + action: 'U', + }; + doSaveLogActivity(createActivity); + reload(); + } + } else { + // ✅ Kalau tekan Cancel + console.log('User cancelled'); + } + }, + [formField] + ); + + useEffect(() => { + if (showRollbackDialog) { + setFormField({ + transaction_code: '', + notes: '', + pin: '' + }); + setAlert({ show: false, message: '' }); + } + }, [showRollbackDialog]); + + + return ( + + + + Rollback Transaction + + + +
+
+
+
+ +
+ + setFormField((prev) => ({ + ...prev, + notes: e.target.value, + })) + } + /> +
+
+
+ +
+ + setFormField((prev) => ({ + ...prev, + pin: e.target.value, + })) + } + /> +
+
+ {alert.show && ( +
+ + {alert.message} + +
+ )} +
+ +
+
+ +
+
+
+
+
+
+ ); +}; + +export default RollbackTransaction; diff --git a/src/pages/transaction/history-transaction/hooks/TransactionContext.tsx b/src/pages/transaction/history-transaction/hooks/TransactionContext.tsx index 39bc60f..441cf79 100644 --- a/src/pages/transaction/history-transaction/hooks/TransactionContext.tsx +++ b/src/pages/transaction/history-transaction/hooks/TransactionContext.tsx @@ -8,6 +8,7 @@ import ListToolbar from '../blocks/ListToolbar'; import { useNavigate } from 'react-router'; import DetailTransaction from '../blocks/DetailTransaction'; import ResendTransaction from '../blocks/ResendTransaction'; +import RollbackTransaction from '../blocks/RollbackTransaction'; interface TransactionProps { id: number; @@ -25,6 +26,8 @@ interface ContextProps { ) => Promise<{ data: TransactionProps[]; totalCount: number } | undefined>; showDetailDialog: boolean; setShowDetailDialog: React.Dispatch>; + showRollbackDialog: boolean; + setShowRollbackDialog: React.Dispatch>; selectedTransactionId: number | null; setSelectedTransactionId: React.Dispatch>; } @@ -33,6 +36,8 @@ const initialProps: ContextProps = { getTransactionLists: async () => ({ data: [], totalCount: 0 }), showDetailDialog: false, setShowDetailDialog: () => { }, + showRollbackDialog: false, + setShowRollbackDialog: () => { }, selectedTransactionId: null, setSelectedTransactionId: () => { } }; @@ -42,6 +47,7 @@ const API_URL = apiConfig.transaction; const TransactionProvider = ({ children }: { children: React.ReactNode }) => { const [showDetailDialog, setShowDetailDialog] = useState(false); + const [showRollbackDialog, setShowRollbackDialog] = useState(false); const [selectedTransactionId, setSelectedTransactionId] = useState(null); const [transaction, setTransaction] = useState([]); const { GetData } = useCallApi(); @@ -235,6 +241,16 @@ const TransactionProvider = ({ children }: { children: React.ReactNode }) => { > + ); }, @@ -339,6 +355,8 @@ const TransactionProvider = ({ children }: { children: React.ReactNode }) => { getTransactionLists, showDetailDialog, setShowDetailDialog, + showRollbackDialog, + setShowRollbackDialog, selectedTransactionId, setSelectedTransactionId }} @@ -358,6 +376,7 @@ const TransactionProvider = ({ children }: { children: React.ReactNode }) => { } > + console.log('Retry Transaction closed')}