1
1
"use client" ;
2
2
3
3
import { ShortAddress } from "@/components/short-address" ;
4
+ import { Button } from "@/components/ui/button" ;
4
5
import { Card , CardContent } from "@/components/ui/card" ;
5
6
import {
6
7
Select ,
@@ -18,63 +19,96 @@ import {
18
19
TableRow ,
19
20
} from "@/components/ui/table/table" ;
20
21
import { TableHeadCell } from "@/components/ui/table/table-head-cell" ;
21
- import type { ClientId } from "@/server/db/schema" ;
22
+ import { DEFAULT_CLIENT_ID_DOMAIN } from "@/lib/constants/ecommerce" ;
23
+ import type { EcommerceClient } from "@/server/db/schema" ;
22
24
import { format } from "date-fns" ;
23
25
import { CreditCard , Filter } from "lucide-react" ;
26
+ import { Edit , Trash2 } from "lucide-react" ;
24
27
import { useState } from "react" ;
28
+ import { DeleteEcommerceClient } from "./delete-client" ;
29
+ import { EditEcommerceClient } from "./edit-client" ;
25
30
26
- interface ClientIdsTableProps {
27
- clientIds : ClientId [ ] ;
31
+ interface EcommerceClientsTableProps {
32
+ ecommerceClients : EcommerceClient [ ] ;
28
33
}
29
34
30
- const ClientIdTableColumns = ( ) => (
35
+ const EcommerceClientTableColumns = ( ) => (
31
36
< TableRow className = "hover:bg-transparent border-none" >
32
37
< TableHeadCell > Created Date</ TableHeadCell >
33
38
< TableHeadCell > Label</ TableHeadCell >
34
39
< TableHeadCell > Domain</ TableHeadCell >
35
- < TableHeadCell > Client ID</ TableHeadCell >
40
+ < TableHeadCell > RN Client ID</ TableHeadCell >
36
41
< TableHeadCell > Fee Address</ TableHeadCell >
37
42
< TableHeadCell > Fee Percentage</ TableHeadCell >
43
+ < TableHeadCell className = "text-right" > Actions</ TableHeadCell >
38
44
</ TableRow >
39
45
) ;
40
46
41
- const ClientIdRow = ( { clientId } : { clientId : ClientId } ) => {
47
+ const EcommerceClientRow = ( {
48
+ ecommerceClient,
49
+ } : { ecommerceClient : EcommerceClient } ) => {
50
+ const canShowActions = ecommerceClient . domain !== DEFAULT_CLIENT_ID_DOMAIN ;
51
+
42
52
return (
43
53
< TableRow className = "hover:bg-zinc-50/50" >
44
54
< TableCell >
45
- { clientId . createdAt
46
- ? format ( new Date ( clientId . createdAt ) , "do MMM yyyy" )
55
+ { ecommerceClient . createdAt
56
+ ? format ( new Date ( ecommerceClient . createdAt ) , "do MMM yyyy" )
47
57
: "N/A" }
48
58
</ TableCell >
49
- < TableCell className = "font-medium" > { clientId . label } </ TableCell >
50
- < TableCell > { clientId . domain } </ TableCell >
59
+ < TableCell className = "font-medium" > { ecommerceClient . label } </ TableCell >
60
+ < TableCell > { ecommerceClient . domain } </ TableCell >
51
61
< TableCell >
52
- < ShortAddress address = { clientId . clientId } />
62
+ < ShortAddress address = { ecommerceClient . rnClientId } />
53
63
</ TableCell >
54
64
< TableCell >
55
- { clientId . feeAddress ? (
56
- < ShortAddress address = { clientId . feeAddress } />
65
+ { ecommerceClient . feeAddress ? (
66
+ < ShortAddress address = { ecommerceClient . feeAddress } />
57
67
) : (
58
68
< span className = "text-zinc-500" > -</ span >
59
69
) }
60
70
</ TableCell >
61
71
< TableCell >
62
- { clientId . feePercentage ? (
63
- < span > { clientId . feePercentage } %</ span >
72
+ { ecommerceClient . feePercentage ? (
73
+ < span > { ecommerceClient . feePercentage } %</ span >
64
74
) : (
65
75
< span className = "text-zinc-500" > -</ span >
66
76
) }
67
77
</ TableCell >
78
+ < TableCell >
79
+ < div className = "flex items-center gap-1" >
80
+ { canShowActions && (
81
+ < >
82
+ < EditEcommerceClient ecommerceClient = { ecommerceClient } >
83
+ < Button variant = "ghost" size = "sm" className = "h-8 w-8 p-0" >
84
+ < Edit className = "h-4 w-4" />
85
+ </ Button >
86
+ </ EditEcommerceClient >
87
+ < DeleteEcommerceClient ecommerceClient = { ecommerceClient } >
88
+ < Button
89
+ variant = "ghost"
90
+ size = "sm"
91
+ className = "h-8 w-8 p-0 hover:bg-red-50"
92
+ >
93
+ < Trash2 className = "h-4 w-4 text-red-500" />
94
+ </ Button >
95
+ </ DeleteEcommerceClient >
96
+ </ >
97
+ ) }
98
+ </ div >
99
+ </ TableCell >
68
100
</ TableRow >
69
101
) ;
70
102
} ;
71
103
72
- export function ClientIdsTable ( { clientIds } : ClientIdsTableProps ) {
104
+ export function EcommerceClientsTable ( {
105
+ ecommerceClients,
106
+ } : EcommerceClientsTableProps ) {
73
107
const [ activeClient , setActiveClient ] = useState < string | null > ( null ) ;
74
108
75
- const filteredClientIds = activeClient
76
- ? clientIds . filter ( ( { clientId } ) => clientId === activeClient )
77
- : clientIds ;
109
+ const filteredEcommerceClients = activeClient
110
+ ? ecommerceClients . filter ( ( { id } ) => id === activeClient )
111
+ : ecommerceClients ;
78
112
79
113
return (
80
114
< div className = "space-y-6 w-full" >
@@ -96,8 +130,8 @@ export function ClientIdsTable({ clientIds }: ClientIdsTableProps) {
96
130
</ SelectTrigger >
97
131
< SelectContent >
98
132
< SelectItem value = "all" > All Clients</ SelectItem >
99
- { clientIds . map ( ( { clientId , label } ) => (
100
- < SelectItem key = { clientId } value = { clientId } >
133
+ { ecommerceClients . map ( ( { id , label } ) => (
134
+ < SelectItem key = { id } value = { id } >
101
135
{ label }
102
136
</ SelectItem >
103
137
) ) }
@@ -109,12 +143,12 @@ export function ClientIdsTable({ clientIds }: ClientIdsTableProps) {
109
143
< CardContent className = "p-0" >
110
144
< Table >
111
145
< TableHeader >
112
- < ClientIdTableColumns />
146
+ < EcommerceClientTableColumns />
113
147
</ TableHeader >
114
148
< TableBody >
115
- { filteredClientIds . length === 0 ? (
149
+ { filteredEcommerceClients . length === 0 ? (
116
150
< TableRow >
117
- < TableCell colSpan = { 6 } className = "p-0" >
151
+ < TableCell colSpan = { 7 } className = "p-0" >
118
152
< EmptyState
119
153
icon = { < CreditCard className = "h-6 w-6 text-zinc-600" /> }
120
154
title = "No client IDs"
@@ -127,8 +161,11 @@ export function ClientIdsTable({ clientIds }: ClientIdsTableProps) {
127
161
</ TableCell >
128
162
</ TableRow >
129
163
) : (
130
- filteredClientIds . map ( ( clientId ) => (
131
- < ClientIdRow key = { clientId . id } clientId = { clientId } />
164
+ filteredEcommerceClients . map ( ( ecommerceClient ) => (
165
+ < EcommerceClientRow
166
+ key = { ecommerceClient . id }
167
+ ecommerceClient = { ecommerceClient }
168
+ />
132
169
) )
133
170
) }
134
171
</ TableBody >
0 commit comments