Skip to content

Commit e9fbaf7

Browse files
committed
refactor(ui): consolidate Send and Sweep precondition alerts
Signed-off-by: kishore08-07 <kishorebsm8@gmail.com>
1 parent 51a23b4 commit e9fbaf7

6 files changed

Lines changed: 285 additions & 410 deletions
Lines changed: 2 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1,97 +1,10 @@
1-
import { AlertTriangleIcon } from 'lucide-react'
2-
import { Trans, useTranslation } from 'react-i18next'
3-
import { Link } from 'react-router-dom'
41
import type { SweepPreconditionSummary } from '@/components/sweep/preconditions'
5-
import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert'
6-
import { Balance } from '@/components/ui/jam/Balance'
7-
import { JAM_JM_RETRIES_DOCS_URL } from '@/constants/jam'
8-
import { routes } from '@/constants/routes'
9-
import { shortenStringMiddle } from '@/lib/utils'
10-
import { JarBadge } from '../earn/fidelity-bond/FidelityBondDialogParts'
2+
import { PreconditionAlert } from '@/components/ui/jam/PreconditionAlert'
113

124
interface SendCoinjoinPreconditionAlertProps {
135
summary: SweepPreconditionSummary
146
}
157

16-
const RetryLockedUtxoList = ({ summary }: SendCoinjoinPreconditionAlertProps) => {
17-
const { t } = useTranslation()
18-
19-
return (
20-
<>
21-
<Trans
22-
i18nKey="send.coinjoin_precondition.hint_missing_retries"
23-
components={{
24-
'1': (
25-
<a
26-
key="retries-doc-link"
27-
className="font-semibold"
28-
href={JAM_JM_RETRIES_DOCS_URL}
29-
target="_blank"
30-
rel="noopener noreferrer"
31-
/>
32-
),
33-
}}
34-
/>
35-
<div className="mt-3 p-2">
36-
<div className="mb-2 text-xs font-semibold">{t('global.utxos')}</div>
37-
<ul className="list-inside list-[circle] space-y-2">
38-
{summary.retryLockedUtxos.map((utxo) => (
39-
<li key={utxo.utxo} className="space-x-2">
40-
<span className="slashed-zero tabular-nums">
41-
<JarBadge jarIndex={utxo.mixdepth} />
42-
</span>
43-
<span className="font-mono select-all">{shortenStringMiddle(utxo.utxo, 26)}</span>
44-
<Balance valueString={String(utxo.value)} />
45-
</li>
46-
))}
47-
</ul>
48-
</div>
49-
</>
50-
)
51-
}
52-
538
export const SendCoinjoinPreconditionAlert = ({ summary }: SendCoinjoinPreconditionAlertProps) => {
54-
const { t } = useTranslation()
55-
56-
if (summary.isFulfilled) {
57-
return null
58-
}
59-
60-
return (
61-
<Alert variant="warning">
62-
<AlertTriangleIcon />
63-
<AlertTitle>{t('send.coinjoin_precondition.title')}</AlertTitle>
64-
<AlertDescription>
65-
<ul className="list-outside list-disc space-y-2">
66-
{summary.numberOfNonFrozenFidelityBondOutputs === 0 ? null : (
67-
<li>
68-
<Trans
69-
i18nKey="send.coinjoin_precondition.hint_non_frozen_fidelity_bond"
70-
values={{ count: summary.numberOfNonFrozenFidelityBondOutputs }}
71-
components={{
72-
'1': <Link to={routes.walletJarsDetails} className="font-semibold" />,
73-
}}
74-
/>
75-
</li>
76-
)}
77-
{summary.numberOfMissingUtxos === 0 ? null : (
78-
<li>
79-
{t('send.coinjoin_precondition.hint_missing_utxos', {
80-
minConfirmations: summary.options.minConfirmations,
81-
})}
82-
</li>
83-
)}
84-
{summary.numberOfMissingConfirmations === 0 ? null : (
85-
<li>
86-
{t('send.coinjoin_precondition.hint_missing_confirmations', {
87-
minConfirmations: summary.options.minConfirmations,
88-
amountOfMissingConfirmations: summary.numberOfMissingConfirmations,
89-
})}
90-
</li>
91-
)}
92-
{summary.retryLockedUtxos.length === 0 ? null : <li>{<RetryLockedUtxoList summary={summary} />}</li>}
93-
</ul>
94-
</AlertDescription>
95-
</Alert>
96-
)
9+
return <PreconditionAlert summary={summary} i18nPrefix="send.coinjoin_precondition" />
9710
}
Lines changed: 2 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1,97 +1,10 @@
1-
import { AlertTriangleIcon } from 'lucide-react'
2-
import { Trans, useTranslation } from 'react-i18next'
3-
import { Link } from 'react-router-dom'
41
import type { SweepPreconditionSummary } from '@/components/sweep/preconditions'
5-
import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert'
6-
import { Balance } from '@/components/ui/jam/Balance'
7-
import { JAM_JM_RETRIES_DOCS_URL } from '@/constants/jam'
8-
import { routes } from '@/constants/routes'
9-
import { shortenStringMiddle } from '@/lib/utils'
10-
import { JarBadge } from '../earn/fidelity-bond/FidelityBondDialogParts'
2+
import { PreconditionAlert } from '@/components/ui/jam/PreconditionAlert'
113

124
interface SweepPreconditionAlertProps {
135
summary: SweepPreconditionSummary
146
}
157

16-
const RetryLockedUtxoList = ({ summary }: SweepPreconditionAlertProps) => {
17-
const { t } = useTranslation()
18-
19-
return (
20-
<>
21-
<Trans
22-
i18nKey="scheduler.precondition.hint_missing_retries"
23-
components={{
24-
'1': (
25-
<a
26-
key="retries-doc-link"
27-
className="font-semibold"
28-
href={JAM_JM_RETRIES_DOCS_URL}
29-
target="_blank"
30-
rel="noopener noreferrer"
31-
/>
32-
),
33-
}}
34-
/>
35-
<div className="mt-3 p-2">
36-
<div className="mb-2 text-xs font-semibold">{t('global.utxos')}</div>
37-
<ul className="list-inside list-[circle] space-y-2">
38-
{summary.retryLockedUtxos.map((utxo) => (
39-
<li key={utxo.utxo} className="space-x-2">
40-
<span className="slashed-zero tabular-nums">
41-
<JarBadge jarIndex={utxo.mixdepth} />
42-
</span>
43-
<span className="font-mono select-all">{shortenStringMiddle(utxo.utxo, 26)}</span>
44-
<Balance valueString={String(utxo.value)} />
45-
</li>
46-
))}
47-
</ul>
48-
</div>
49-
</>
50-
)
51-
}
52-
538
export const SweepPreconditionAlert = ({ summary }: SweepPreconditionAlertProps) => {
54-
const { t } = useTranslation()
55-
56-
if (summary.isFulfilled) {
57-
return null
58-
}
59-
60-
return (
61-
<Alert variant="warning">
62-
<AlertTriangleIcon />
63-
<AlertTitle>{t('scheduler.precondition.title')}</AlertTitle>
64-
<AlertDescription>
65-
<ul className="list-outside list-disc space-y-2">
66-
{summary.numberOfNonFrozenFidelityBondOutputs === 0 ? null : (
67-
<li>
68-
<Trans
69-
i18nKey="scheduler.precondition.hint_non_frozen_fidelity_bond"
70-
values={{ count: summary.numberOfNonFrozenFidelityBondOutputs }}
71-
components={{
72-
'1': <Link to={routes.walletJarsDetails} className="font-semibold" />,
73-
}}
74-
/>
75-
</li>
76-
)}
77-
{summary.numberOfMissingUtxos === 0 ? null : (
78-
<li>
79-
{t('scheduler.precondition.hint_missing_utxos', {
80-
minConfirmations: summary.options.minConfirmations,
81-
})}
82-
</li>
83-
)}
84-
{summary.numberOfMissingConfirmations === 0 ? null : (
85-
<li>
86-
{t('scheduler.precondition.hint_missing_confirmations', {
87-
minConfirmations: summary.options.minConfirmations,
88-
amountOfMissingConfirmations: summary.numberOfMissingConfirmations,
89-
})}
90-
</li>
91-
)}
92-
{summary.retryLockedUtxos.length === 0 ? null : <li>{<RetryLockedUtxoList summary={summary} />}</li>}
93-
</ul>
94-
</AlertDescription>
95-
</Alert>
96-
)
9+
return <PreconditionAlert summary={summary} i18nPrefix="scheduler.precondition" />
9710
}
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
import { AlertTriangleIcon } from 'lucide-react'
2+
import { Trans, useTranslation } from 'react-i18next'
3+
import { Link } from 'react-router-dom'
4+
import { JarBadge } from '@/components/earn/fidelity-bond/FidelityBondDialogParts'
5+
import type { SweepPreconditionSummary } from '@/components/sweep/preconditions'
6+
import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert'
7+
import { Balance } from '@/components/ui/jam/Balance'
8+
import { JAM_JM_RETRIES_DOCS_URL } from '@/constants/jam'
9+
import { routes } from '@/constants/routes'
10+
import { shortenStringMiddle } from '@/lib/utils'
11+
12+
export interface PreconditionAlertProps {
13+
summary: SweepPreconditionSummary
14+
i18nPrefix: 'send.coinjoin_precondition' | 'scheduler.precondition'
15+
}
16+
17+
const RetryLockedUtxoList = ({ summary, i18nPrefix }: PreconditionAlertProps) => {
18+
const { t } = useTranslation()
19+
20+
return (
21+
<>
22+
<Trans
23+
i18nKey={`${i18nPrefix}.hint_missing_retries`}
24+
components={{
25+
'1': (
26+
<a
27+
key="retries-doc-link"
28+
className="font-semibold"
29+
href={JAM_JM_RETRIES_DOCS_URL}
30+
target="_blank"
31+
rel="noopener noreferrer"
32+
/>
33+
),
34+
}}
35+
/>
36+
<div className="mt-3 p-2">
37+
<div className="mb-2 text-xs font-semibold">{t('global.utxos')}</div>
38+
<ul className="list-inside list-[circle] space-y-2">
39+
{summary.retryLockedUtxos.map((utxo) => (
40+
<li key={utxo.utxo} className="space-x-2">
41+
<span className="slashed-zero tabular-nums">
42+
<JarBadge jarIndex={utxo.mixdepth} />
43+
</span>
44+
<span className="font-mono select-all">{shortenStringMiddle(utxo.utxo, 26)}</span>
45+
<Balance valueString={String(utxo.value)} />
46+
</li>
47+
))}
48+
</ul>
49+
</div>
50+
</>
51+
)
52+
}
53+
54+
export const PreconditionAlert = ({ summary, i18nPrefix }: PreconditionAlertProps) => {
55+
const { t } = useTranslation()
56+
57+
if (summary.isFulfilled) {
58+
return null
59+
}
60+
61+
return (
62+
<Alert variant="warning">
63+
<AlertTriangleIcon />
64+
<AlertTitle>{t(`${i18nPrefix}.title`)}</AlertTitle>
65+
<AlertDescription>
66+
<ul className="list-outside list-disc space-y-2">
67+
{summary.numberOfNonFrozenFidelityBondOutputs === 0 ? null : (
68+
<li>
69+
<Trans
70+
i18nKey={`${i18nPrefix}.hint_non_frozen_fidelity_bond`}
71+
values={{ count: summary.numberOfNonFrozenFidelityBondOutputs }}
72+
components={{
73+
'1': <Link to={routes.walletJarsDetails} className="font-semibold" />,
74+
}}
75+
/>
76+
</li>
77+
)}
78+
{summary.numberOfMissingUtxos === 0 ? null : (
79+
<li>
80+
{t(`${i18nPrefix}.hint_missing_utxos`, {
81+
minConfirmations: summary.options.minConfirmations,
82+
})}
83+
</li>
84+
)}
85+
{summary.numberOfMissingConfirmations === 0 ? null : (
86+
<li>
87+
{t(`${i18nPrefix}.hint_missing_confirmations`, {
88+
minConfirmations: summary.options.minConfirmations,
89+
amountOfMissingConfirmations: summary.numberOfMissingConfirmations,
90+
})}
91+
</li>
92+
)}
93+
{summary.retryLockedUtxos.length === 0 ? null : (
94+
<li>
95+
<RetryLockedUtxoList summary={summary} i18nPrefix={i18nPrefix} />
96+
</li>
97+
)}
98+
</ul>
99+
</AlertDescription>
100+
</Alert>
101+
)
102+
}

0 commit comments

Comments
 (0)