@@ -2,7 +2,6 @@ import { Badge } from 'react-bootstrap'
2
2
import { Form , Input , SubmitButton , CopyButton } from './form'
3
3
import { useMutation , useQuery } from '@apollo/client'
4
4
import { customDomainSchema } from '@/lib/validate'
5
- import ActionTooltip from './action-tooltip'
6
5
import { useToast } from '@/components/toast'
7
6
import { NORMAL_POLL_INTERVAL , SSR } from '@/lib/constants'
8
7
import { GET_CUSTOM_DOMAIN , SET_CUSTOM_DOMAIN } from '@/fragments/domains'
@@ -97,24 +96,27 @@ const DomainLabel = ({ customDomain, polling }) => {
97
96
< div className = 'd-flex align-items-center gap-2' >
98
97
< span > custom domain</ span >
99
98
{ domain && (
100
- < ActionTooltip overlayText = { lastVerifiedAt ? new Date ( lastVerifiedAt ) . toLocaleString ( ) : '' } >
101
- < div className = 'd-flex align-items-center gap-2' >
102
- { status !== 'HOLD'
103
- ? (
104
- < >
105
- { getStatusBadge ( verification ?. dns ?. state ) }
106
- { getSSLStatusBadge ( verification ?. ssl ?. state ) }
107
- </ >
108
- )
109
- : ( < Badge bg = 'secondary' > HOLD</ Badge > ) }
110
- { status === 'HOLD' && (
111
- < SubmitButton variant = 'link' className = 'p-0' >
112
- < RefreshLine className = { styles . refresh } style = { { width : '1rem' , height : '1rem' } } />
113
- </ SubmitButton >
114
- ) }
115
- { polling && < Moon className = 'spin fill-grey' style = { { width : '1rem' , height : '1rem' } } /> }
116
- </ div >
117
- </ ActionTooltip >
99
+ < div className = 'd-flex align-items-center gap-2' >
100
+ { status !== 'HOLD'
101
+ ? (
102
+ < >
103
+ { getStatusBadge ( verification ?. dns ?. state ) }
104
+ { getSSLStatusBadge ( verification ?. ssl ?. state ) }
105
+ </ >
106
+ )
107
+ : ( < Badge bg = 'secondary' > HOLD</ Badge > ) }
108
+ { status === 'HOLD' && (
109
+ < SubmitButton variant = 'link' className = 'p-0' >
110
+ < RefreshLine className = { styles . refresh } style = { { width : '1rem' , height : '1rem' } } />
111
+ </ SubmitButton >
112
+ ) }
113
+ { polling && < Moon className = 'spin fill-grey' style = { { width : '1rem' , height : '1rem' } } /> }
114
+ </ div >
115
+ ) }
116
+ { lastVerifiedAt && status !== 'ACTIVE' && (
117
+ < span className = 'text-muted' >
118
+ < small > last verified { new Date ( lastVerifiedAt ) . toLocaleString ( ) } </ small >
119
+ </ span >
118
120
) }
119
121
</ div >
120
122
)
@@ -123,40 +125,42 @@ const DomainLabel = ({ customDomain, polling }) => {
123
125
const DomainGuidelines = ( { customDomain } ) => {
124
126
const { domain, verification } = customDomain || { }
125
127
126
- const dnsRecord = ( host , value ) => (
127
- < div className = 'd-flex align-items-center gap-2' >
128
- < span className = { `${ styles . record } ` } >
129
- < small className = 'fw-bold text-muted d-flex align-items-center gap-1 position-relative' >
130
- host
131
- < CopyButton
132
- value = { host }
133
- append = {
134
- < ClipboardLine
135
- className = { `${ styles . clipboard } ` }
136
- style = { { width : '1rem' , height : '1rem' } }
137
- />
138
- }
139
- />
140
- </ small >
141
- < pre > { host } </ pre >
142
- </ span >
143
- < span className = { `${ styles . record } ` } >
144
- < small className = 'fw-bold text-muted d-flex align-items-center gap-1 position-relative' >
145
- value
146
- < CopyButton
147
- value = { value }
148
- append = {
149
- < ClipboardLine
150
- className = { `${ styles . clipboard } ` }
151
- style = { { width : '1rem' , height : '1rem' } }
152
- />
153
- }
154
- />
155
- </ small >
156
- < pre > { value } </ pre >
157
- </ span >
158
- </ div >
159
- )
128
+ const dnsRecord = ( { host, value } ) => {
129
+ return (
130
+ < div className = 'd-flex align-items-center gap-2' >
131
+ < span className = { `${ styles . record } ` } >
132
+ < small className = 'fw-bold text-muted d-flex align-items-center gap-1 position-relative' >
133
+ host
134
+ < CopyButton
135
+ value = { host }
136
+ append = {
137
+ < ClipboardLine
138
+ className = { `${ styles . clipboard } ` }
139
+ style = { { width : '1rem' , height : '1rem' } }
140
+ />
141
+ }
142
+ />
143
+ </ small >
144
+ < pre > { host } </ pre >
145
+ </ span >
146
+ < span className = { `${ styles . record } ` } >
147
+ < small className = 'fw-bold text-muted d-flex align-items-center gap-1 position-relative' >
148
+ value
149
+ < CopyButton
150
+ value = { value }
151
+ append = {
152
+ < ClipboardLine
153
+ className = { `${ styles . clipboard } ` }
154
+ style = { { width : '1rem' , height : '1rem' } }
155
+ />
156
+ }
157
+ />
158
+ </ small >
159
+ < pre > { value } </ pre >
160
+ </ span >
161
+ </ div >
162
+ )
163
+ }
160
164
161
165
return (
162
166
< div className = 'd-flex' >
@@ -165,18 +169,18 @@ const DomainGuidelines = ({ customDomain }) => {
165
169
< h5 > Step 1: Verify your domain</ h5 >
166
170
< p > Add the following DNS records to verify ownership of your domain:</ p >
167
171
< h6 > CNAME</ h6 >
168
- { dnsRecord ( domain || 'www' , verification ?. dns ?. cname ) }
172
+ { dnsRecord ( { host : domain || 'www' , value : verification ?. dns ?. cname } ) }
169
173
< hr />
170
174
< h6 > TXT</ h6 >
171
- { dnsRecord ( `_snverify.${ domain } ` , verification ?. dns ?. txt ) }
175
+ { dnsRecord ( { host : `_snverify.${ domain } ` , value : verification ?. dns ?. txt } ) }
172
176
</ div >
173
177
) }
174
178
{ verification ?. ssl ?. state === 'PENDING' && (
175
179
< div className = '' >
176
180
< h5 > Step 2: Prepare your domain for SSL</ h5 >
177
181
< p > We issued an SSL certificate for your domain. To validate it, add the following CNAME record:</ p >
178
182
< h6 > CNAME</ h6 >
179
- { dnsRecord ( verification ?. ssl ?. cname || 'waiting for SSL certificate' , verification ?. ssl ?. value || 'waiting for SSL certificate' ) }
183
+ { dnsRecord ( { host : verification ?. ssl ?. cname || 'waiting for SSL certificate' , value : verification ?. ssl ?. value || 'waiting for SSL certificate' } ) }
180
184
</ div >
181
185
) }
182
186
</ div >
@@ -220,7 +224,7 @@ export default function CustomDomainForm ({ sub }) {
220
224
toaster . success ( 'domain removed successfully' )
221
225
}
222
226
} catch ( error ) {
223
- toaster . danger ( 'failed to update domain' , { error } )
227
+ toaster . danger ( error . message )
224
228
}
225
229
}
226
230
@@ -234,6 +238,7 @@ export default function CustomDomainForm ({ sub }) {
234
238
>
235
239
< div className = 'd-flex align-items-center gap-2' >
236
240
< Input
241
+ groupClassName = 'w-100'
237
242
label = { < DomainLabel customDomain = { data ?. customDomain } polling = { polling } /> }
238
243
name = 'domain'
239
244
placeholder = 'www.example.com'
0 commit comments