@@ -20,23 +20,49 @@ import {
2020} from '~/shared/utils'
2121import { checkAuthAndRedirect } from '../lib/kratos_checks.server'
2222import { 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+ }
2442
2543export const loader = async ( { request } : LoaderFunctionArgs ) => {
2644 const cookies = request . headers . get ( 'cookie' )
2745 await checkAuthAndRedirect ( request . url , cookies )
2846
2947 const assets = await loadAssets ( request )
30- const { isOperator } = await whoAmI ( request )
48+ const { id , isOperator } = await whoAmI ( request )
3149 let tenants
50+ let tenantWAPrefix
3251 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 ( )
3460 }
35- return json ( { assets, tenants } )
61+ return json ( { assets, tenants, tenantWAPrefix } )
3662}
3763
3864export default function CreateWalletAddressPage ( ) {
39- const { assets, tenants } = useLoaderData < typeof loader > ( )
65+ const { assets, tenants, tenantWAPrefix } = useLoaderData < typeof loader > ( )
4066 const response = useActionData < typeof action > ( )
4167 const { state } = useNavigation ( )
4268 const isSubmitting = state === 'submitting'
@@ -52,6 +78,12 @@ export default function CreateWalletAddressPage() {
5278 } ) )
5379 }
5480
81+ const currentTenant =
82+ tenants && tenantId ? findTenant ( tenants , tenantId . value ) : null
83+ const waPrefix = currentTenant
84+ ? findWASetting ( currentTenant . node . settings )
85+ : tenantWAPrefix
86+
5587 return (
5688 < div className = 'pt-4 flex flex-col space-y-4' >
5789 < div className = 'flex flex-col rounded-md bg-offwhite px-6' >
@@ -75,9 +107,14 @@ export default function CreateWalletAddressPage() {
75107 </ div >
76108 < div className = 'md:col-span-2 bg-white rounded-md shadow-md' >
77109 < div className = 'w-full p-4 space-y-3' >
110+ < Input
111+ name = 'waPrefix'
112+ value = { waPrefix ?? getOpenPaymentsUrl ( ) }
113+ type = { 'hidden' }
114+ />
78115 < Input
79116 required
80- addOn = { getOpenPaymentsUrl ( ) }
117+ addOn = { waPrefix ?? getOpenPaymentsUrl ( ) }
81118 name = 'name'
82119 label = 'Wallet address name'
83120 placeholder = 'jdoe'
@@ -158,7 +195,7 @@ export async function action({ request }: ActionFunctionArgs) {
158195 return json ( { errors } , { status : 400 } )
159196 }
160197
161- const baseUrl = removeTrailingAndLeadingSlash ( getOpenPaymentsUrl ( ) )
198+ const baseUrl = removeTrailingAndLeadingSlash ( result . data . waPrefix )
162199 const path = removeTrailingAndLeadingSlash ( result . data . name )
163200
164201 const response = await createWalletAddress ( request , {
0 commit comments