Skip to content

Commit fe87629

Browse files
committed
add modal for first time member of program login
1 parent abe7ae6 commit fe87629

3 files changed

Lines changed: 145 additions & 1 deletion

File tree

projects/social_platform/src/app/office/office.component.html

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,46 @@ <h3 class="message-modal__title text-body-14">Ваш аккаунт проход
6969
</div>
7070
</app-modal>
7171

72+
<app-modal
73+
[open]="showRegisteredProgramModal()"
74+
(openChange)="showRegisteredProgramModal.set(!showRegisteredProgramModal())"
75+
>
76+
<div class="cancel" style="width: 605px; padding: 0px 24px">
77+
<div class="cancel__top">
78+
<p class="cancel__title text-body-14">Привет!</p>
79+
</div>
80+
81+
<div class="cancel__text-block">
82+
<p class="text-body-12">
83+
Рады знакомству 🙌 <br />
84+
Вы находитесь на платформе procollab – здесь проходит программа, на которую вы ранее
85+
регистрировались через форму заявки
86+
</p>
87+
88+
<p class="text-body-12">
89+
Ваша программа и её закрытая группа (к которой у вас автоматически есть доступ) находится
90+
в одноименной вкладке «программы»
91+
</p>
92+
93+
<p class="text-body-12">
94+
На платформе есть еще много интересного: цифровой профиль, проекты, новостная лента, чаты
95+
и другое – рекомендуем изучить
96+
</p>
97+
98+
<p class="text-body-12">
99+
Поздравляем с регистрацией! Желаем удачи в прохождении программы :)
100+
</p>
101+
</div>
102+
103+
<app-button
104+
customTypographyClass="text-body-12"
105+
size="medium"
106+
(click)="showRegisteredProgramModal.set(false)"
107+
>спасибо, понятно</app-button
108+
>
109+
</div>
110+
</app-modal>
111+
72112
<app-modal [open]="inviteErrorModal">
73113
<div class="message-modal">
74114
<h3 class="message-modal__title text-body-14">Приглашение на текущий проект было удалено</h3>

projects/social_platform/src/app/office/office.component.scss

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,59 @@
134134
}
135135
}
136136

137+
.cancel {
138+
position: relative;
139+
display: flex;
140+
flex-direction: column;
141+
align-items: center;
142+
justify-content: center;
143+
max-height: calc(100vh - 40px);
144+
145+
i {
146+
position: absolute;
147+
top: 0;
148+
right: 0;
149+
cursor: pointer;
150+
}
151+
152+
&__top {
153+
display: flex;
154+
flex-direction: column;
155+
gap: 10px;
156+
align-items: center;
157+
margin-bottom: 10px;
158+
}
159+
160+
&__title {
161+
text-align: center;
162+
}
163+
164+
&__text {
165+
width: 40%;
166+
color: var(--dark-grey);
167+
text-align: center;
168+
169+
&-block {
170+
display: flex;
171+
flex-direction: column;
172+
gap: 12px;
173+
margin: 30px 0;
174+
}
175+
176+
&-list {
177+
margin-left: 20px;
178+
179+
li {
180+
list-style-type: disc;
181+
}
182+
}
183+
}
184+
185+
&__button {
186+
margin-top: 20px;
187+
}
188+
}
189+
137190
.container {
138191
width: 100%;
139192
max-width: 1040px;

projects/social_platform/src/app/office/office.component.ts

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,13 @@ export class OfficeComponent implements OnInit, OnDestroy {
7575
waitVerificationModal = false;
7676
waitVerificationAccepted = false;
7777

78+
showRegisteredProgramModal = signal<boolean>(false);
79+
80+
registeredProgramToShow?: Program | null = null;
81+
private pendingRegisteredModalCheck = false;
82+
7883
inviteErrorModal = false;
84+
7985
protected readonly programs = signal<Program[]>([]);
8086

8187
navItems: {
@@ -107,7 +113,6 @@ export class OfficeComponent implements OnInit, OnDestroy {
107113
this.subscriptions$.push(profileSub$);
108114

109115
this.chatService.connect().subscribe(() => {
110-
// Change users online status
111116
this.chatService.onSetOffline().subscribe(evt => {
112117
this.chatService.setOnlineStatus(evt.userId, false);
113118
});
@@ -133,6 +138,9 @@ export class OfficeComponent implements OnInit, OnDestroy {
133138
(program: Program) => Date.now() < Date.parse(program.datetimeRegistrationEnds)
134139
);
135140
this.programs.set(resultPrograms.slice(0, 3));
141+
142+
console.log(this.programs().find(prog => prog.isUserMember));
143+
this.tryShowRegisteredProgramModal();
136144
},
137145
});
138146

@@ -146,6 +154,8 @@ export class OfficeComponent implements OnInit, OnDestroy {
146154
onAcceptWaitVerification() {
147155
this.waitVerificationAccepted = true;
148156
localStorage.setItem("waitVerificationAccepted", "true");
157+
this.pendingRegisteredModalCheck = true;
158+
this.tryShowRegisteredProgramModal();
149159
}
150160

151161
onRejectInvite(inviteId: number): void {
@@ -187,6 +197,47 @@ export class OfficeComponent implements OnInit, OnDestroy {
187197
);
188198
}
189199

200+
private tryShowRegisteredProgramModal(): void {
201+
if (!this.pendingRegisteredModalCheck) return;
202+
203+
const programs = this.programs();
204+
if (!programs || programs.length === 0) return;
205+
206+
const memberProgram = programs.find(p => p.isUserMember);
207+
if (!memberProgram) {
208+
this.pendingRegisteredModalCheck = false;
209+
return;
210+
}
211+
212+
if (!this.hasSeenRegisteredProgramModal(memberProgram.id)) {
213+
this.registeredProgramToShow = memberProgram;
214+
this.showRegisteredProgramModal.set(true);
215+
this.markSeenRegisteredProgramModal(memberProgram.id);
216+
}
217+
218+
this.pendingRegisteredModalCheck = false;
219+
}
220+
221+
private getRegisteredProgramSeenKey(programId: number): string {
222+
return `program_registered_modal_seen_${programId}`;
223+
}
224+
225+
private hasSeenRegisteredProgramModal(programId: number): boolean {
226+
try {
227+
return !!localStorage.getItem(this.getRegisteredProgramSeenKey(programId));
228+
} catch (e) {
229+
return false;
230+
}
231+
}
232+
233+
private markSeenRegisteredProgramModal(programId: number): void {
234+
try {
235+
localStorage.setItem(this.getRegisteredProgramSeenKey(programId), "1");
236+
} catch (e) {
237+
// ignore storage errors
238+
}
239+
}
240+
190241
private buildNavItems(profile: User) {
191242
this.navItems = [
192243
{ name: "мой профиль", icon: "person", link: `profile/${profile.id}` },

0 commit comments

Comments
 (0)