Skip to content
Merged

#2302 #2306

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -293,14 +293,15 @@
</div>
</cos-input>

<!-- here -->
<cos-input *ngIf="hasDemograficsField.age" [placeholder]="'VIEWS.IDEATION_CREATE.DEMOGRAPHICS_DATA_AGE' | translate"
class="dropdown_input">
<div class="dropdown" [cosDropdown]>
<div class="selection">
<div class="selected_item">
<span *ngIf="!ideaFilters.age" translate="COMPONENTS.TOPIC_IDEATION.FILTER_ALL"></span>
<span *ngIf="ideaFilters.age">
{{ideaFilters.age}}
<span *ngIf="ideaFilters.age.length === 0" translate="COMPONENTS.TOPIC_IDEATION.FILTER_ALL"></span>
<span *ngIf="ideaFilters.age.length !== 0">
{{sortedSelectedAges}}
</span>
</div>
<div><svg width="24" height="24" viewBox="0 0 24 24" fill="none"
Expand All @@ -310,11 +311,26 @@
</div>
</div>
<div class="options">
<div class="option" (click)="setAge('')" translate="COMPONENTS.TOPIC_IDEATION.FILTER_ALL">
</div>
<div *ngFor="let number of [].constructor(AGE_LIMIT); let i = index" class="option" (click)="setAge((i + 1))">
{{ i + 1 }}
</div>
<label class="checkbox" (click)="setAge('')">
<span [innerHTML]="'COMPONENTS.TOPIC_IDEATION.FILTER_ALL' | translate | titlecase"></span>
<input
type="checkbox"
name="age"
[checked]="ideaFilters.age.length === 0 || ideaFilters.age.length === AGE_LIMIT"
(change)="setAge('')"
/>
<span class="checkmark"></span>
</label>
<label *ngFor="let number of [].constructor(AGE_LIMIT); let i = index" class="checkbox">
<span>{{ i + 1 }}</span>
<input
type="checkbox"
name="age"
[checked]="ideaFilters.age.includes((i + 1).toString())"
(change)="setAge(i + 1)"
/>
<span class="checkmark"></span>
</label>
</div>
</div>
</cos-input>
Expand Down Expand Up @@ -444,7 +460,7 @@

<a class="filter_option" (click)="mobileIdeaFilters.age = true">
<span class="filter_option_text" translate="VIEWS.IDEATION_CREATE.DEMOGRAPHICS_DATA_AGE"></span>
<span class="bold">{{(ideaFilters.age) ? ideaFilters.age : 'COMPONENTS.TOPIC_IDEATION.FILTER_ALL' | translate}}</span>
<span class="bold">{{ideaFilters.age.length > 0 ? sortedSelectedAges : 'COMPONENTS.TOPIC_IDEATION.FILTER_ALL' | translate}}</span>
</a>

<a class="filter_option" (click)="mobileIdeaFilters.gender = true">
Expand Down Expand Up @@ -617,21 +633,30 @@
</a>

<div class="options_wrapper">
<label class="checkbox" (click)="mobileIdeaFilters.age = 'all';">
<label class="checkbox" (click)="setMobileAges('')">
<span [innerHTML]="'COMPONENTS.TOPIC_IDEATION.FILTER_ALL' | translate | titlecase"></span>
<input type="radio" name="orderBy">
<input
type="checkbox"
name="age"
[checked]="mobileAges.length === 0 || mobileAges.length === AGE_LIMIT"
(change)="setMobileAges('')"
/>
<span class="checkmark"></span>
</label>

<label *ngFor="let number of [].constructor(AGE_LIMIT); let i = index" class="checkbox" (click)="mobileIdeaFilters.age = i + 1;">
<label *ngFor="let number of [].constructor(AGE_LIMIT); let i = index" class="checkbox">
<span>{{ i + 1 }}</span>
<input type="radio" name="age">
<input
type="checkbox"
name="age"
[checked]="mobileAges.includes((i + 1).toString())"
(change)="setMobileAges(i + 1)"
/>
<span class="checkmark"></span>
</label>
</div>

<button class="btn_medium_secondary"
(click)="setAge(mobileIdeaFilters.age);mobileIdeaFilters.age= false;"
(click)="applyAgeFilter();mobileIdeaFilters.age= false;"
translate="COMPONENTS.TOPIC_IDEATION.BTN_APPLY"></button>
</div>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ export class TopicIdeationComponent {
allIdeas$: Idea[] = [];
tabSelected = 'ideas';
ideaFilters = {
age: <number | string>'',
age: <string[]>[],
gender: '',
residence: '',
type: '',
Expand All @@ -72,10 +72,13 @@ export class TopicIdeationComponent {
participants: <User | any>''
}

mobileAges = <string[]>[];


municipalities = municipalities;

ideaTypeFilter$ = new BehaviorSubject('');
ageFilter$ = new BehaviorSubject<number | string>('');
ageFilter$ = new BehaviorSubject<(number | string)[]>([]);
genderFilter$ = new BehaviorSubject('');
residenceFilter$ = new BehaviorSubject('');
orderFilter$ = new BehaviorSubject('');
Expand Down Expand Up @@ -137,7 +140,7 @@ export class TopicIdeationComponent {

if (age || gender || residence) {
this.TopicIdeaService.setParam('demographics', JSON.stringify({
...(age && { age: age.toString() }),
...(age && Array.isArray(age) && age.length && { age: age.map(String) }),
...(gender && { gender }),
...(residence && { residence })
}));
Expand Down Expand Up @@ -205,16 +208,60 @@ export class TopicIdeationComponent {
};
}

get sortedSelectedAges() {
return this.ideaFilters.age.sort((a, b) => {
const ageA = parseInt(a, 10);
const ageB = parseInt(b, 10);
return ageA - ageB;
}
).join(', ');
}

setType(type: string) {
if (type === 'all' || typeof type !== 'string') type = '';
this.ideaTypeFilter$.next(type);
this.ideaFilters.type = type;
}

setAge(age: number | string) {
if (age === 'all') age = '';
this.ageFilter$.next(age);
this.ideaFilters.age = age;
setAge(_age: number | string, withRequest = true) {
const age = _age.toString();
if (age === 'all' || age === '') {
if (withRequest) {
this.ageFilter$.next([]);
}
this.ideaFilters.age = [];
return;
}

const idx = this.ideaFilters.age.indexOf(age);
if (idx > -1) {
this.ideaFilters.age.splice(idx, 1);
} else {
this.ideaFilters.age.push(age);
}
if (withRequest) {
this.ageFilter$.next([...this.ideaFilters.age]);
}
}

setMobileAges(_age: number | string) {
const age = _age.toString();
if (age === 'all' || age === '') {
this.mobileAges = [];
return;
}

const idx = this.mobileAges.indexOf(age);
if (idx > -1) {
this.mobileAges.splice(idx, 1);
} else {
this.mobileAges.push(age);
}
}

applyAgeFilter() {
this.ageFilter$.next([...this.mobileAges]);
this.ideaFilters.age = [...this.mobileAges];
}

setGender(value: string) {
Expand Down Expand Up @@ -289,6 +336,7 @@ export class TopicIdeationComponent {
this.setResidence('');
this.setParticipant();
this.filtersSet = false;
this.mobileAges = [];
}

saveIdeation() {
Expand Down
2 changes: 2 additions & 0 deletions src/styles.scss
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,8 @@ input {
justify-content: space-between;
background-color: var(--color-background);
border-radius: 16px;
gap: 8px;
text-align: right;

.filter_option_text {
color: var(--color-text);
Expand Down