Skip to content

Commit 6fc147a

Browse files
Merge pull request #3513 from ita-social-projects/bugfix/#7982-add-close-and-message-checkbox
[Bugfix] #7984, #7985, #7979, #7886, #7982 Added close button, message push-up, checkbox checked when friend accepted invite
2 parents 74b6ade + c04cbd2 commit 6fc147a

File tree

7 files changed

+99
-62
lines changed

7 files changed

+99
-62
lines changed

src/app/main/component/errors/mat-snack-bar/mat-snack-bar.component.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export class MatSnackBarComponent {
2020
classname: SnackbarClassName.attention,
2121
key: 'snack-bar.attention.exit-confirm-restore-password'
2222
},
23+
2324
successRestorePassword: { classname: SnackbarClassName.success, key: 'snack-bar.success.restore-password' },
2425
successRestorePasswordUbs: { classname: SnackbarClassName.successUbs, key: 'snack-bar.success.restore-password' },
2526
exitConfirmUnblockAccount: {
@@ -68,6 +69,7 @@ export class MatSnackBarComponent {
6869
updatedNotification: { classname: SnackbarClassName.success, key: 'snack-bar.success.update-notification' },
6970
deletedNotification: { classname: SnackbarClassName.success, key: 'snack-bar.success.delete-notification' },
7071
joinedEvent: { classname: SnackbarClassName.success, key: 'snack-bar.success.joined-event' },
72+
successInviteFriend: { classname: SnackbarClassName.success, key: 'snack-bar.success.habit-invite-success' },
7173
errorJoinEvent: { classname: SnackbarClassName.error, key: 'snack-bar.success.error-joined-event' },
7274
tooLongInput: { classname: SnackbarClassName.error, key: 'user.habit.to-do.too-long-input' },
7375
ratedEvent: { classname: SnackbarClassName.success, key: 'snack-bar.success.rating-send' },
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,62 @@
1-
<div class="friends-images">
2-
<form name="searchForm" class="searchField">
3-
<img [src]="searchIcon" alt="search-friend" />
4-
<input
5-
class="search"
6-
type="text"
7-
#search
8-
[placeholder]="'search.search-popup.placeholder' | translate"
9-
(input)="onInput($event)"
10-
maxlength="30"
11-
/>
12-
</form>
13-
<section class="popup-section">
14-
<mat-checkbox
15-
*ngIf="!inputValue"
16-
class="all-friends"
17-
[checked]="allAdd"
18-
[indeterminate]="someAdd()"
19-
(change)="setAll($event.checked)"
20-
[class.disabled]="setAllFriendsDisable()"
21-
>
22-
{{ 'user.habit.invite.all' | translate }}
23-
</mat-checkbox>
1+
<div class="dialog-container">
2+
<button (click)="onClose()" class="close-btn" aria-label="Close">
3+
<img [src]="closeButton" alt="Close dialog" />
4+
</button>
5+
<div class="friends-images">
6+
<form name="searchForm" class="searchField">
7+
<img [src]="searchIcon" alt="search-friend" />
8+
<input
9+
class="search"
10+
type="text"
11+
#search
12+
[placeholder]="'search.search-popup.placeholder' | translate"
13+
(input)="onInput($event)"
14+
maxlength="30"
15+
/>
16+
</form>
17+
<section class="popup-section">
18+
<mat-checkbox
19+
*ngIf="!inputValue"
20+
class="all-friends"
21+
[checked]="allAdd"
22+
[indeterminate]="someAdd()"
23+
(change)="setAll($event.checked)"
24+
[class.disabled]="areAllFriendsDisabled()"
25+
>
26+
{{ 'user.habit.invite.all' | translate }}
27+
</mat-checkbox>
2428

25-
<ul>
26-
<li *ngFor="let friend of inputFriends" [class.disabled]="setFriendDisable(friend.id)">
27-
<mat-checkbox
28-
[checked]="selectedFriends.includes(friend.id)"
29-
(change)="onFriendCheckboxChange(friend.id, $event.checked)"
30-
[disabled]="setFriendDisable(friend.id)"
31-
>
32-
<div class="friend">
33-
<app-user-profile-image
34-
[imgPath]="friend.profilePicturePath"
35-
[firstName]="friend.name"
36-
class="friend-img"
37-
[additionalImgClass]="'friend-user-profile'"
38-
>
39-
</app-user-profile-image>
40-
<div class="friend-details">
41-
<p class="friend-name">{{ friend.name }}</p>
42-
<p class="friend-email">{{ friend.email }}</p>
29+
<ul>
30+
<li *ngFor="let friend of inputFriends" [class.disabled]="isFriendDisabled(friend.id)">
31+
<mat-checkbox
32+
[checked]="friend.added"
33+
(change)="onFriendCheckboxChange(friend.id, $event.checked)"
34+
[disabled]="isFriendDisabled(friend.id)"
35+
>
36+
<div class="friend">
37+
<app-user-profile-image
38+
[imgPath]="friend.profilePicturePath"
39+
[firstName]="friend.name"
40+
class="friend-img"
41+
[additionalImgClass]="'friend-user-profile'"
42+
>
43+
</app-user-profile-image>
44+
<div class="friend-details">
45+
<p class="friend-name">{{ friend.name }}</p>
46+
<p class="friend-email">{{ friend.email }}</p>
47+
</div>
4348
</div>
44-
</div>
45-
</mat-checkbox>
46-
</li>
47-
</ul>
48-
</section>
49-
<mat-dialog-actions class="invite-popup-footer">
50-
<button class="btn btn-outline-success" mat-dialog-close>
51-
{{ 'user.habit.invite.btn.cancel' | translate }}
52-
</button>
53-
<button class="btn btn-success" [mat-dialog-close]="true" (click)="inviteFriends($event)" [disabled]="!isAnyFriendSelected">
54-
{{ 'user.habit.invite.btn.invite' | translate }}
55-
</button>
56-
</mat-dialog-actions>
49+
</mat-checkbox>
50+
</li>
51+
</ul>
52+
</section>
53+
<mat-dialog-actions class="invite-popup-footer">
54+
<button class="btn btn-outline-success" mat-dialog-close>
55+
{{ 'user.habit.invite.btn.cancel' | translate }}
56+
</button>
57+
<button class="btn btn-success" [mat-dialog-close]="true" (click)="inviteFriends($event)" [disabled]="!isAnyFriendSelected">
58+
{{ 'user.habit.invite.btn.invite' | translate }}
59+
</button>
60+
</mat-dialog-actions>
61+
</div>
5762
</div>

src/app/main/component/user/components/habit/add-new-habit/habit-invite-friends/habit-invite-friends-pop-up/habit-invite-friends-pop-up.component.scss

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,21 @@
1+
.dialog-container {
2+
position: relative;
3+
4+
.close-btn {
5+
position: absolute;
6+
top: -20px;
7+
right: -15px;
8+
background-color: transparent;
9+
outline: none;
10+
border: none;
11+
12+
img {
13+
width: 12px;
14+
height: 12px;
15+
}
16+
}
17+
}
18+
119
.friends-images {
220
width: 380px;
321
display: flex;

src/app/main/component/user/components/habit/add-new-habit/habit-invite-friends/habit-invite-friends-pop-up/habit-invite-friends-pop-up.component.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ export class HabitInviteFriendsPopUpComponent implements OnInit, OnDestroy {
2424
allAdd = false;
2525
searchIcon = searchIcon;
2626
habitId: number;
27+
closeButton = './assets/img/profile/icons/cancel.svg';
2728

2829
constructor(
2930
private readonly userFriendsService: UserFriendsService,
@@ -53,14 +54,17 @@ export class HabitInviteFriendsPopUpComponent implements OnInit, OnDestroy {
5354
.getFriendsWithInvitations(this.habitId, 0, 10)
5455
.pipe(takeUntil(this.destroyed$))
5556
.subscribe((data: FriendArrayModel) => {
56-
this.friends = data.page;
57+
this.friends = data.page.map((friend: FriendModel) => ({
58+
...friend,
59+
added: friend.hasAcceptedInvitation ?? false
60+
}));
5761
this.inputFriends = [...this.friends];
5862
});
5963
}
6064

6165
onFriendCheckboxChange(friendId: number, isChecked: boolean) {
6266
const friend = this.friends.find((f) => f.id === friendId);
63-
if (friend && !friend.hasInvitation) {
67+
if (friend && !friend.hasAcceptedInvitation && !friend.hasInvitation) {
6468
friend.added = isChecked;
6569
this.toggleFriendSelection(friendId, isChecked);
6670
this.updateAllAdd();
@@ -82,6 +86,7 @@ export class HabitInviteFriendsPopUpComponent implements OnInit, OnDestroy {
8286
if (this.habitId && this.selectedFriends.length) {
8387
this.userFriendsService.inviteFriendsToHabit(this.habitId, this.selectedFriends).subscribe({
8488
next: () => {
89+
this.snackBar.openSnackBar('successInviteFriend');
8590
this.dialogRef.close();
8691
},
8792
error: (error) => {
@@ -91,12 +96,12 @@ export class HabitInviteFriendsPopUpComponent implements OnInit, OnDestroy {
9196
}
9297
}
9398

94-
setFriendDisable(friendId: number): boolean {
99+
isFriendDisabled(friendId: number): boolean {
95100
const friend = this.friends.find((f) => f.id === friendId);
96-
return friend ? friend.hasInvitation : false;
101+
return friend ? friend.hasAcceptedInvitation || friend.hasInvitation : false;
97102
}
98103

99-
setAllFriendsDisable(): boolean {
104+
areAllFriendsDisabled(): boolean {
100105
return this.friends.every((friend) => friend.hasInvitation);
101106
}
102107

@@ -133,6 +138,10 @@ export class HabitInviteFriendsPopUpComponent implements OnInit, OnDestroy {
133138
this.inputFriends = input ? this.filterFriendsByInput(input) : [...this.friends];
134139
}
135140

141+
onClose(): void {
142+
this.dialogRef.close();
143+
}
144+
136145
ngOnDestroy() {
137146
this.destroyed$.next(true);
138147
this.destroyed$.complete();

src/app/main/component/user/models/friend.model.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ export interface FriendModel {
1414
chatId?: number;
1515
isOnline?: boolean;
1616
friendsChatDto?: { chatId?: number };
17-
hasInvitation?:boolean;
17+
hasInvitation?: boolean;
18+
hasAcceptedInvitation?: boolean;
1819
}
1920

2021
export type FriendStatus = 'FRIEND' | 'REQUEST' | 'REJECTED' | null;

src/assets/i18n/en.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,8 @@
540540
"habit-added-success": "Habit invitation was accepted",
541541
"habit-decline-success": "Habit invitation was declined",
542542
"friend-added-success": "Friend invitation accepted",
543-
"friend-declined-success": "Friend invitation declined"
543+
"friend-declined-success": "Friend invitation declined",
544+
"habit-invite-success": "Invite request sent"
544545
}
545546
},
546547
"user": {

src/assets/i18n/ua.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,8 @@
549549
"habit-added-success": "Запрошення прийнято",
550550
"habit-decline-success": "Запрошення відхилено",
551551
"friend-added-success": "Запит на дружбу прийнято",
552-
"friend-declined-success": "Запит на дружбу відхилено"
552+
"friend-declined-success": "Запит на дружбу відхилено",
553+
"habit-invite-success": "Запит на запрошення надіслано"
553554
}
554555
},
555556
"user": {

0 commit comments

Comments
 (0)