Skip to content

Commit 611be1c

Browse files
committed
fix include detail in start mining rights toast
1 parent 9292f57 commit 611be1c

2 files changed

Lines changed: 87 additions & 7 deletions

File tree

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import { describe, expect, it } from 'vitest';
2+
3+
import { createStartMiningToastPayload } from '@/utils/extras';
4+
5+
describe('createStartMiningToastPayload', () => {
6+
const translations: Record<string, string> = {
7+
'mining.contacts_got_rights_title': 'Vos contacts ont des droits',
8+
'mining.contacts_got_rights_detail':
9+
"Vous avez besoin du consentement ou d'un intérêt légitime pour les contacter.",
10+
'mining.learn_more_about_rights':
11+
'En savoir plus sur les droits de vos contacts',
12+
};
13+
14+
const t = (key: string) => translations[key] ?? key;
15+
16+
it('creates a has-links toast payload with message and link', () => {
17+
const payload = createStartMiningToastPayload({
18+
t,
19+
dataPrivacyUrl: 'https://leadminer.io/privacy',
20+
});
21+
22+
expect(payload).toEqual({
23+
severity: 'info',
24+
group: 'has-links',
25+
summary: 'Vos contacts ont des droits',
26+
detail: {
27+
message:
28+
"Vous avez besoin du consentement ou d'un intérêt légitime pour les contacter.",
29+
link: {
30+
text: 'En savoir plus sur les droits de vos contacts',
31+
url: 'https://leadminer.io/privacy',
32+
},
33+
},
34+
life: 8000,
35+
});
36+
});
37+
38+
it('always keeps a detail message even when privacy url is missing', () => {
39+
const payload = createStartMiningToastPayload({
40+
t,
41+
dataPrivacyUrl: undefined,
42+
});
43+
44+
expect(payload.group).toBe('has-links');
45+
expect(payload.detail).toEqual({
46+
message:
47+
"Vous avez besoin du consentement ou d'un intérêt légitime pour les contacter.",
48+
});
49+
});
50+
});

frontend/src/utils/extras.ts

Lines changed: 37 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,51 @@ type ToastLike = {
88
add: (payload: {
99
severity: string;
1010
summary: string;
11-
detail: string;
11+
detail: string | { message: string; link?: { text: string; url: string } };
12+
group?: string;
1213
life: number;
1314
}) => void;
1415
};
1516

17+
type StartMiningToastInput = {
18+
t: (key: string) => string;
19+
dataPrivacyUrl?: string;
20+
};
21+
22+
export function createStartMiningToastPayload({
23+
t,
24+
dataPrivacyUrl,
25+
}: StartMiningToastInput) {
26+
return {
27+
severity: 'info' as const,
28+
group: 'has-links' as const,
29+
summary: t('mining.contacts_got_rights_title'),
30+
detail: {
31+
message: t('mining.contacts_got_rights_detail'),
32+
...(dataPrivacyUrl
33+
? {
34+
link: {
35+
text: t('mining.learn_more_about_rights'),
36+
url: dataPrivacyUrl,
37+
},
38+
}
39+
: {}),
40+
},
41+
life: 8000,
42+
};
43+
}
44+
1645
export function startMiningNotification(
1746
toast: ToastLike,
1847
t: (key: string) => string,
48+
dataPrivacyUrl?: string,
1949
) {
20-
toast.add({
21-
severity: 'info',
22-
summary: t('mining.contacts_got_rights_title'),
23-
detail: t('mining.contacts_got_rights_detail'),
24-
life: 8000,
25-
});
50+
toast.add(
51+
createStartMiningToastPayload({
52+
t,
53+
dataPrivacyUrl,
54+
}),
55+
);
2656
}
2757

2858
export function getLocationUrl(location: NormalizedLocation) {

0 commit comments

Comments
 (0)