Skip to content

Commit e4f7f5b

Browse files
committed
feat(orga): display unacquired badges
1 parent 7df533b commit e4f7f5b

File tree

11 files changed

+97
-43
lines changed

11 files changed

+97
-43
lines changed

Diff for: orga/app/components/campaign/badges.gjs

+19-1
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,36 @@
11
import PixTooltip from '@1024pix/pix-ui/components/pix-tooltip';
2+
import { t } from 'ember-intl';
3+
4+
const isAcquired = (badge, acquiredBadges = []) => {
5+
let acquired = false;
6+
acquiredBadges.forEach((acquiredBadge) => {
7+
if (acquiredBadge.id === badge.id) {
8+
acquired = true;
9+
}
10+
});
11+
return acquired;
12+
};
213

314
<template>
415
{{#each @badges as |badge|}}
5-
<PixTooltip @id="badge-tooltip-{{badge.id}}" @position="bottom" @isInline={{true}}>
16+
<PixTooltip @id="badge-tooltip-{{badge.id}}">
617
<:triggerElement>
718
<img
819
src={{badge.imageUrl}}
920
alt={{badge.altMessage}}
1021
tabindex="0"
22+
class={{unless (isAcquired badge @acquiredBadges) "badge--unacquired"}}
1123
aria-describedby="badge-tooltip-{{badge.id}}"
1224
/>
1325
</:triggerElement>
1426
<:tooltip>
1527
{{badge.title}}
28+
-
29+
{{if
30+
(isAcquired badge @acquiredBadges)
31+
(t "pages.campaign-results.table.badge-tooltip.acquired")
32+
(t "pages.campaign-results.table.badge-tooltip.unacquired")
33+
}}
1634
</:tooltip>
1735
</PixTooltip>
1836
{{/each}}

Diff for: orga/app/components/campaign/results/assessment-list.gjs

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { t } from 'ember-intl';
44
import getService from '../../../helpers/get-service.js';
55
import TableHeader from '../../table/header';
66
import CampaignParticipationFilters from '../filter/participation-filters';
7-
import CampaignAssessmentRow from '../results/assessment-row';
7+
import CampaignAssessmentRow from './assessment-row';
88
import EvolutionHeader from './evolution-header';
99

1010
<template>
@@ -74,6 +74,7 @@ import EvolutionHeader from './evolution-header';
7474
@participation={{participation}}
7575
@campaignId={{@campaign.id}}
7676
@stages={{@campaign.stages}}
77+
@badges={{@campaign.badges}}
7778
@onClickParticipant={{@onClickParticipant}}
7879
@displayParticipationCount={{@campaign.multipleSendings}}
7980
/>

Diff for: orga/app/components/campaign/results/assessment-row.gjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ import ParticipationEvolutionIcon from './participation-evolution-icon';
4444
{{/if}}
4545
{{#if @hasBadges}}
4646
<td class="participant-list__badges">
47-
<CampaignBadges @badges={{@participation.badges}} />
47+
<CampaignBadges @badges={{@badges}} @acquiredBadges={{@participation.badges}} />
4848
</td>
4949
{{/if}}
5050
</tr>

Diff for: orga/app/models/badge.js

+1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ export default class Badge extends Model {
44
@attr('string') title;
55
@attr('string') imageUrl;
66
@attr('string') altMessage;
7+
@attr('boolean') acquired;
78
}
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
.assessment-results {
22
&__list {
33
padding: 0;
4+
5+
.badge--unacquired {
6+
opacity: .8;
7+
filter: grayscale(1);
8+
}
49
}
510

611
&__charts {
712
margin-bottom: 24px;
813
}
14+
15+
916
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import { render } from '@1024pix/ember-testing-library';
2+
import Badges from 'pix-orga/components/campaign/badges';
3+
import { module, test } from 'qunit';
4+
5+
import setupIntlRenderingTest from '../../../helpers/setup-intl-rendering';
6+
7+
module('Integration | Component | Campaign | Badges', function (hooks) {
8+
setupIntlRenderingTest(hooks);
9+
10+
test('should render badge images for each one', async function (assert) {
11+
// given
12+
const badges = [
13+
{ id: 1, title: 'badge1', imageUrl: 'img1.svg', altMessage: 'alt-img1' },
14+
{ id: 2, title: 'badge2', imageUrl: 'img2.svg', altMessage: 'alt-img2' },
15+
];
16+
const acquiredBadges = [];
17+
// when
18+
const screen = await render(<template><Badges @badges={{badges}} @acquiredBadges={{acquiredBadges}} /></template>);
19+
// then
20+
const badgeImages = screen.getAllByRole('img');
21+
assert.strictEqual(badgeImages.length, 2);
22+
assert.strictEqual(badgeImages[0].getAttribute('src'), 'img1.svg');
23+
assert.strictEqual(badgeImages[0].getAttribute('alt'), 'alt-img1');
24+
25+
assert.strictEqual(badgeImages[1].getAttribute('src'), 'img2.svg');
26+
assert.strictEqual(badgeImages[1].getAttribute('alt'), 'alt-img2');
27+
});
28+
29+
test('should render unacquired in the title', async function (assert) {
30+
// given
31+
const badges = [{ title: 'badge1', imageUrl: 'img1', altMessage: 'alt-img1' }];
32+
const acquiredBadges = [];
33+
34+
// when
35+
const screen = await render(<template><Badges @badges={{badges}} @acquiredBadges={{acquiredBadges}} /></template>);
36+
37+
// then
38+
assert.ok(screen.getByText(/badge1 - Non acquis/i));
39+
});
40+
test('should render acquired in the title', async function (assert) {
41+
// given
42+
const badges = [{ title: 'badge1', imageUrl: 'img1', altMessage: 'alt-img1' }];
43+
const acquiredBadges = [badges[0]];
44+
45+
// when
46+
const screen = await render(<template><Badges @badges={{badges}} @acquiredBadges={{acquiredBadges}} /></template>);
47+
48+
// then
49+
assert.ok(screen.getByText(/badge1 - Acquis/i));
50+
});
51+
});

Diff for: orga/tests/integration/components/campaign/badges-test.js

-37
This file was deleted.

Diff for: orga/tests/integration/components/campaign/results/assessment-list-test.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ module('Integration | Component | Campaign::Results::AssessmentList', function (
6262
id: '1',
6363
name: 'campagne 1',
6464
participationsCount: 1,
65+
badges: [],
6566
});
6667
this.set('campaign', campaign);
6768
});
@@ -149,7 +150,7 @@ module('Integration | Component | Campaign::Results::AssessmentList', function (
149150

150151
test('it should display badge and tooltip', async function (assert) {
151152
// given
152-
const badge = store.createRecord('badge', { id: '1', imageUrl: 'url-badge', title: 'je suis un badge' });
153+
const badge = store.createRecord('badge', { id: 1, imageUrl: 'url-badge', title: 'je suis un badge' });
153154
const campaign = store.createRecord('campaign', {
154155
targetProfileThematicResultCount: 1,
155156
badges: [badge],
@@ -176,7 +177,7 @@ module('Integration | Component | Campaign::Results::AssessmentList', function (
176177
);
177178

178179
// then
179-
assert.ok(screen.getByRole('img', { src: 'url-badge', description: 'je suis un badge' }));
180+
assert.ok(screen.getByRole('img', { src: 'url-badge', description: /je suis un badge/ }));
180181
});
181182

182183
module('campaign has multiple sending enabled', function () {
@@ -469,7 +470,7 @@ module('Integration | Component | Campaign::Results::AssessmentList', function (
469470
badges: [badge],
470471
});
471472

472-
const participations = [{}];
473+
const participations = [];
473474
participations.meta = { rowCount: 1 };
474475

475476
this.set('campaign', campaign);

Diff for: orga/translations/en.json

+4
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,10 @@
634634
},
635635
"result": "Result",
636636
"table": {
637+
"badge-tooltip": {
638+
"acquired": "Acquired",
639+
"unacquired": "Unacquired"
640+
},
637641
"caption": "This table lists the participants who have shared their results. For each participant, it shows their surname, first name and elements of results.",
638642
"column": {
639643
"ariaSharedResultCount": "Number of sent results",

Diff for: orga/translations/fr.json

+4
Original file line numberDiff line numberDiff line change
@@ -640,6 +640,10 @@
640640
},
641641
"result": "Résultat",
642642
"table": {
643+
"badge-tooltip": {
644+
"acquired": "Acquis",
645+
"unacquired": "Non acquis"
646+
},
643647
"caption": "Ce tableau comporte la liste des participants ayant partagé leurs résultats. Il indique pour chaque participant leur nom, prénom et des éléments de résultats.",
644648
"column": {
645649
"ariaSharedResultCount": "Nombre de résultats envoyés",

Diff for: orga/translations/nl.json

+4
Original file line numberDiff line numberDiff line change
@@ -598,6 +598,10 @@
598598
},
599599
"result": "Resultaat",
600600
"table": {
601+
"badge-tooltip": {
602+
"acquired": "Verworven",
603+
"unacquired": "Niet verworven"
604+
},
601605
"caption": "In deze tabel staan de deelnemers die hun resultaten hebben gedeeld. Voor elke deelnemer worden de achternaam, voornaam en resultaten weergegeven.",
602606
"column": {
603607
"ariaSharedResultCount": "Aantal verzonden resultaten",

0 commit comments

Comments
 (0)