@@ -20,23 +20,49 @@ import {
20
20
} from '~/shared/utils'
21
21
import { checkAuthAndRedirect } from '../lib/kratos_checks.server'
22
22
import { type LoaderFunctionArgs } from '@remix-run/node'
23
- import { whoAmI , loadTenants } from '~/lib/api/tenant.server'
23
+ import type { listTenants } from '~/lib/api/tenant.server'
24
+ import { whoAmI , loadTenants , getTenantInfo } from '~/lib/api/tenant.server'
25
+
26
+ const WALLET_ADDRESS_URL_KEY = 'WALLET_ADDRESS_URL'
27
+
28
+ const findWASetting = (
29
+ tenantSettings : Awaited < ReturnType < typeof getTenantInfo > > [ 'settings' ]
30
+ ) => {
31
+ return tenantSettings . find (
32
+ ( setting ) => setting . key === WALLET_ADDRESS_URL_KEY
33
+ ) ?. value
34
+ }
35
+
36
+ const findTenant = (
37
+ tenants : Awaited < ReturnType < typeof listTenants > > [ 'edges' ] ,
38
+ tenantId : string
39
+ ) => {
40
+ return tenants . find ( ( tenant ) => tenant . node . id === tenantId )
41
+ }
24
42
25
43
export const loader = async ( { request } : LoaderFunctionArgs ) => {
26
44
const cookies = request . headers . get ( 'cookie' )
27
45
await checkAuthAndRedirect ( request . url , cookies )
28
46
29
47
const assets = await loadAssets ( request )
30
- const { isOperator } = await whoAmI ( request )
48
+ const { id , isOperator } = await whoAmI ( request )
31
49
let tenants
50
+ let tenantWAPrefix
32
51
if ( isOperator ) {
33
- tenants = await loadTenants ( request )
52
+ const loadedTenants = await loadTenants ( request )
53
+ tenants = loadedTenants . filter (
54
+ ( tenant ) => findWASetting ( tenant . node . settings ) || tenant . node . id === id
55
+ )
56
+ } else {
57
+ const tenant = await getTenantInfo ( request , { id } )
58
+ const waPrefixSetting = findWASetting ( tenant . settings )
59
+ tenantWAPrefix = waPrefixSetting ?? getOpenPaymentsUrl ( )
34
60
}
35
- return json ( { assets, tenants } )
61
+ return json ( { assets, tenants, tenantWAPrefix } )
36
62
}
37
63
38
64
export default function CreateWalletAddressPage ( ) {
39
- const { assets, tenants } = useLoaderData < typeof loader > ( )
65
+ const { assets, tenants, tenantWAPrefix } = useLoaderData < typeof loader > ( )
40
66
const response = useActionData < typeof action > ( )
41
67
const { state } = useNavigation ( )
42
68
const isSubmitting = state === 'submitting'
@@ -52,6 +78,12 @@ export default function CreateWalletAddressPage() {
52
78
} ) )
53
79
}
54
80
81
+ const currentTenant =
82
+ tenants && tenantId ? findTenant ( tenants , tenantId . value ) : null
83
+ const waPrefix = currentTenant
84
+ ? findWASetting ( currentTenant . node . settings )
85
+ : tenantWAPrefix
86
+
55
87
return (
56
88
< div className = 'pt-4 flex flex-col space-y-4' >
57
89
< div className = 'flex flex-col rounded-md bg-offwhite px-6' >
@@ -75,9 +107,14 @@ export default function CreateWalletAddressPage() {
75
107
</ div >
76
108
< div className = 'md:col-span-2 bg-white rounded-md shadow-md' >
77
109
< div className = 'w-full p-4 space-y-3' >
110
+ < Input
111
+ name = 'waPrefix'
112
+ value = { waPrefix ?? getOpenPaymentsUrl ( ) }
113
+ type = { 'hidden' }
114
+ />
78
115
< Input
79
116
required
80
- addOn = { getOpenPaymentsUrl ( ) }
117
+ addOn = { waPrefix ?? getOpenPaymentsUrl ( ) }
81
118
name = 'name'
82
119
label = 'Wallet address name'
83
120
placeholder = 'jdoe'
@@ -158,7 +195,7 @@ export async function action({ request }: ActionFunctionArgs) {
158
195
return json ( { errors } , { status : 400 } )
159
196
}
160
197
161
- const baseUrl = removeTrailingAndLeadingSlash ( getOpenPaymentsUrl ( ) )
198
+ const baseUrl = removeTrailingAndLeadingSlash ( result . data . waPrefix )
162
199
const path = removeTrailingAndLeadingSlash ( result . data . name )
163
200
164
201
const response = await createWalletAddress ( request , {
0 commit comments