-
Notifications
You must be signed in to change notification settings - Fork 19
Expand file tree
/
Copy pathdashboard.transactions.$transactionId.tsx
More file actions
81 lines (71 loc) · 2.58 KB
/
dashboard.transactions.$transactionId.tsx
File metadata and controls
81 lines (71 loc) · 2.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import type { LoaderFunction } from '@remix-run/node'
import { redirect } from '@remix-run/node'
import { Outlet, useLoaderData, useSearchParams } from '@remix-run/react'
import { getTransactionById, TransactionWithUser } from '~/models/transaction'
import { TRANSACTION_STATUS } from '~/models/enum'
import { requireUser } from '~/services/auth.server'
import { getFirstCourse } from '~/models/course'
import { requireCourseAuthor } from '~/utils/permissions'
import { TransactionDetails } from '~/components/transaction-details'
import {
PrimaryButtonLink,
SecondaryButtonLink,
TertiaryButtonLink,
} from '~/components/button-link'
import { getWhatsAppLink } from '~/utils/whatsapp'
import { Handle } from '~/utils/types'
import { SingleColumnLayout } from '~/components/single-column-layout'
export const handle: Handle = { name: 'Detail Transaksi' }
export const loader: LoaderFunction = async ({ request, params }) => {
const user = await requireUser(request)
const course = await getFirstCourse()
if (!requireCourseAuthor(user, course)) {
return redirect('/dashboard')
}
const { transactionId } = params
if (!transactionId) {
return redirect('/dashboard/transactions')
}
const transaction = await getTransactionById(transactionId)
if (!transaction) {
return redirect('/dashboard/transactions')
}
return { transaction, user }
}
export default function TransactionDetailsPage() {
const { transaction } = useLoaderData<{ transaction: TransactionWithUser }>()
const [searchParams] = useSearchParams()
return (
<SingleColumnLayout>
<div className="min-h-full">
<TransactionDetails transaction={transaction} user={transaction.user}>
<TertiaryButtonLink
to={`reject?${searchParams.toString()}`}
replace
disabled={
transaction.status === TRANSACTION_STATUS.REJECTED ||
transaction.status === TRANSACTION_STATUS.VERIFIED
}
>
Tolak Transaksi
</TertiaryButtonLink>
<SecondaryButtonLink
to={getWhatsAppLink(transaction.user.phoneNumber)}
external
disabled={!transaction.user.phoneNumber}
>
Kontak WhatsApp
</SecondaryButtonLink>
<PrimaryButtonLink
to={`verify?${searchParams.toString()}`}
replace
disabled={transaction.status === TRANSACTION_STATUS.VERIFIED}
>
Verifikasi Transaksi
</PrimaryButtonLink>
</TransactionDetails>
</div>
<Outlet />
</SingleColumnLayout>
)
}