@foxford/sdk 8.0.1 → 8.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/api.d.cts +4 -19
- package/api.d.ts +4 -19
- package/api.js.flow +3 -26
- package/entities.cjs +557 -7
- package/entities.d.cts +524 -7
- package/entities.d.ts +524 -7
- package/entities.js +557 -7
- package/entities.js.flow +564 -7
- package/index.cjs +557 -7
- package/index.d.cts +697 -185
- package/index.d.ts +697 -185
- package/index.js +557 -7
- package/index.js.flow +817 -263
- package/package.json +6 -4
- package/plugins/autocomplete-email.d.cts +1 -1
- package/plugins/confirm-phone.d.cts +1 -1
- package/plugins/types-sRHKQ8xU.d.cts +1269 -0
- package/plugins/types-sRHKQ8xU.d.ts +1269 -0
- package/types-3Yq2Uj51.d.cts +33 -0
- package/types-BrKJGAOa.d.ts +33 -0
package/entities.js
CHANGED
|
@@ -46,18 +46,34 @@ var DEFAULT_USER = {
|
|
|
46
46
|
room: null,
|
|
47
47
|
street: null
|
|
48
48
|
},
|
|
49
|
+
admissionFinishesOn: null,
|
|
50
|
+
algoritmika: false,
|
|
49
51
|
avatarUrl: "",
|
|
50
52
|
bonus: {
|
|
51
53
|
giftAmount: 0,
|
|
52
54
|
realMoneyAmount: 0
|
|
53
55
|
},
|
|
54
56
|
bonusAmount: 0,
|
|
57
|
+
bonusesPageVisited: false,
|
|
58
|
+
canChangeSchoolInfo: false,
|
|
55
59
|
cartItemsCount: 0,
|
|
56
60
|
cartTemplateId: null,
|
|
57
61
|
createdAt: null,
|
|
62
|
+
currentInterest: {
|
|
63
|
+
businessUnitAbbrs: [],
|
|
64
|
+
disciplineId: null,
|
|
65
|
+
gradeId: null,
|
|
66
|
+
levelId: null,
|
|
67
|
+
productFormat: null,
|
|
68
|
+
productId: null,
|
|
69
|
+
reason: null
|
|
70
|
+
},
|
|
58
71
|
disciplineIds: [],
|
|
59
72
|
email: "",
|
|
60
73
|
emailConfirmed: false,
|
|
74
|
+
externshipDemoAccessActive: false,
|
|
75
|
+
externshipPaymentRequired: null,
|
|
76
|
+
externshipPromoHeaderOn: false,
|
|
61
77
|
externshipUser: false,
|
|
62
78
|
fakeEmail: false,
|
|
63
79
|
fakeUser: false,
|
|
@@ -76,25 +92,37 @@ var DEFAULT_USER = {
|
|
|
76
92
|
hasActivePurchases: false,
|
|
77
93
|
hasAttemptsSolveExamRehearsals: false,
|
|
78
94
|
hasBookmarks: false,
|
|
95
|
+
hasExamProgressAccess: false,
|
|
79
96
|
hasExternshipAttestationAccess: false,
|
|
80
97
|
hasPurchasedExternshipContracts: false,
|
|
98
|
+
hasYearlyRecapAccess: false,
|
|
81
99
|
id: null,
|
|
82
100
|
isAgent: false,
|
|
101
|
+
isAttestationSchoolManager: null,
|
|
83
102
|
isCoach: false,
|
|
84
103
|
isCustomer: null,
|
|
85
104
|
isElementaryPupil: false,
|
|
86
105
|
isExternshipCoach: false,
|
|
87
106
|
isGraduated: false,
|
|
107
|
+
isMentor: false,
|
|
88
108
|
isMiniGroupTeacher: false,
|
|
89
109
|
isParent: false,
|
|
110
|
+
isXpStreakAvailable: false,
|
|
90
111
|
lastName: "",
|
|
112
|
+
leaderboard: null,
|
|
113
|
+
leaderboardAccessState: "unavailable",
|
|
114
|
+
learningGoalsAccessState: "disabled",
|
|
91
115
|
locale: null,
|
|
116
|
+
messengerSubscriptions: null,
|
|
92
117
|
methodist: false,
|
|
93
118
|
middleName: "",
|
|
119
|
+
needToPromoteRenewalWithCoach: false,
|
|
120
|
+
nextYearCoursesBannerAvailable: false,
|
|
94
121
|
onboardingFinished: false,
|
|
95
122
|
onboardingFinishedAt: null,
|
|
96
123
|
parentPhone: null,
|
|
97
124
|
parentPhoneConfirmed: false,
|
|
125
|
+
passwordSet: null,
|
|
98
126
|
phone: null,
|
|
99
127
|
phoneConfirmed: false,
|
|
100
128
|
privacy: {
|
|
@@ -103,11 +131,13 @@ var DEFAULT_USER = {
|
|
|
103
131
|
profileEnriched: false,
|
|
104
132
|
purchaseAnyExternshipContracts: false,
|
|
105
133
|
recapUuid: null,
|
|
134
|
+
referralCode: null,
|
|
106
135
|
shortName: "",
|
|
107
136
|
skype: null,
|
|
108
137
|
socialNets: [],
|
|
109
138
|
socializationProfile: null,
|
|
110
139
|
tags: null,
|
|
140
|
+
targetActionsOnboardingAvailable: false,
|
|
111
141
|
timezone: null,
|
|
112
142
|
type: null,
|
|
113
143
|
webSocketNotificationsJwt: null
|
|
@@ -119,8 +149,9 @@ var _User = class _User {
|
|
|
119
149
|
this.props = props;
|
|
120
150
|
this.isDefault = isDefault;
|
|
121
151
|
/**
|
|
122
|
-
*
|
|
123
|
-
*
|
|
152
|
+
* Роль словом — по флагам профиля, первый совпавший: репетитор, учитель, родитель.
|
|
153
|
+
*
|
|
154
|
+
* @returns «Репетитор», «Учитель», «Родитель», иначе роль ученика из `getPupilRole()`
|
|
124
155
|
*/
|
|
125
156
|
this.getRole = () => {
|
|
126
157
|
if (this.isCoach) return "\u0420\u0435\u043F\u0435\u0442\u0438\u0442\u043E\u0440";
|
|
@@ -136,206 +167,694 @@ var _User = class _User {
|
|
|
136
167
|
}
|
|
137
168
|
};
|
|
138
169
|
/**
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
* @
|
|
170
|
+
* Фамилия с инициалами имени и отчества — подпись в списках.
|
|
171
|
+
*
|
|
172
|
+
* @returns Строка вида «Пупкин В. И.»; без отчества — «Пупкин В.»
|
|
142
173
|
*/
|
|
143
174
|
this.getInitials = () => {
|
|
144
175
|
var _a, _b;
|
|
145
176
|
return `${this.lastName}${this.firstName ? ` ${(_a = this.firstName[0]) == null ? void 0 : _a.toUpperCase()}.` : ""}${this.middleName !== "" && this.middleName !== null ? ` ${(_b = this.middleName[0]) == null ? void 0 : _b.toUpperCase()}.` : ""}`;
|
|
146
177
|
};
|
|
147
178
|
}
|
|
179
|
+
/**
|
|
180
|
+
* Идентификатор посетителя на бэкенде.
|
|
181
|
+
*
|
|
182
|
+
* @returns Число либо `null` у гостя.
|
|
183
|
+
*/
|
|
148
184
|
get id() {
|
|
149
185
|
return this.props.id;
|
|
150
186
|
}
|
|
187
|
+
/**
|
|
188
|
+
* Почта посетителя.
|
|
189
|
+
*
|
|
190
|
+
* @returns Строка; пустая, если почты нет.
|
|
191
|
+
*/
|
|
151
192
|
get email() {
|
|
152
193
|
return this.props.email;
|
|
153
194
|
}
|
|
195
|
+
/**
|
|
196
|
+
* Имя.
|
|
197
|
+
*
|
|
198
|
+
* @returns Строка; пустая, если не заполнено.
|
|
199
|
+
*/
|
|
154
200
|
get firstName() {
|
|
155
201
|
return this.props.firstName;
|
|
156
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Отчество.
|
|
205
|
+
*
|
|
206
|
+
* @returns Строка; пустая, если не заполнено.
|
|
207
|
+
*/
|
|
157
208
|
get middleName() {
|
|
158
209
|
return this.props.middleName;
|
|
159
210
|
}
|
|
211
|
+
/**
|
|
212
|
+
* Фамилия.
|
|
213
|
+
*
|
|
214
|
+
* @returns Строка; пустая, если не заполнено.
|
|
215
|
+
*/
|
|
160
216
|
get lastName() {
|
|
161
217
|
return this.props.lastName;
|
|
162
218
|
}
|
|
219
|
+
/**
|
|
220
|
+
* Полное имя, каким его собрал бэкенд.
|
|
221
|
+
*
|
|
222
|
+
* @returns Строка; пустая у гостя.
|
|
223
|
+
*/
|
|
163
224
|
get fullName() {
|
|
164
225
|
return this.props.fullName;
|
|
165
226
|
}
|
|
227
|
+
/**
|
|
228
|
+
* Короткое имя для обращения в интерфейсе.
|
|
229
|
+
*
|
|
230
|
+
* @returns Строка; пустая у гостя.
|
|
231
|
+
*/
|
|
166
232
|
get shortName() {
|
|
167
233
|
return this.props.shortName;
|
|
168
234
|
}
|
|
235
|
+
/**
|
|
236
|
+
* Когда заведён профиль.
|
|
237
|
+
*
|
|
238
|
+
* @returns Дата ISO либо `null` у гостя.
|
|
239
|
+
*/
|
|
169
240
|
get createdAt() {
|
|
170
241
|
return this.props.createdAt;
|
|
171
242
|
}
|
|
243
|
+
/**
|
|
244
|
+
* Часовой пояс посетителя.
|
|
245
|
+
*
|
|
246
|
+
* @returns Имя пояса либо `null`, если не задан.
|
|
247
|
+
*/
|
|
172
248
|
get timezone() {
|
|
173
249
|
return this.props.timezone;
|
|
174
250
|
}
|
|
251
|
+
/**
|
|
252
|
+
* Локаль интерфейса.
|
|
253
|
+
*
|
|
254
|
+
* @returns Код локали либо `null`, если не задана.
|
|
255
|
+
*/
|
|
175
256
|
get locale() {
|
|
176
257
|
return this.props.locale;
|
|
177
258
|
}
|
|
259
|
+
/**
|
|
260
|
+
* Класс посетителя: id, порядковый номер, имя и транслит.
|
|
261
|
+
*
|
|
262
|
+
* @returns Объект класса; у гостя поля `null` и пустые строки.
|
|
263
|
+
*/
|
|
178
264
|
get grade() {
|
|
179
265
|
return this.props.grade;
|
|
180
266
|
}
|
|
267
|
+
/**
|
|
268
|
+
* Телефон посетителя.
|
|
269
|
+
*
|
|
270
|
+
* @returns Строка либо `null`, если не указан.
|
|
271
|
+
*/
|
|
181
272
|
get phone() {
|
|
182
273
|
return this.props.phone;
|
|
183
274
|
}
|
|
275
|
+
/**
|
|
276
|
+
* Адрес аватара.
|
|
277
|
+
*
|
|
278
|
+
* @returns Строка; пустая, если аватара нет.
|
|
279
|
+
*/
|
|
184
280
|
get avatarUrl() {
|
|
185
281
|
return this.props.avatarUrl;
|
|
186
282
|
}
|
|
283
|
+
/**
|
|
284
|
+
* Посетитель — родитель.
|
|
285
|
+
*
|
|
286
|
+
* @returns `true`, если роль родительская.
|
|
287
|
+
*/
|
|
187
288
|
get isParent() {
|
|
188
289
|
return this.props.isParent;
|
|
189
290
|
}
|
|
291
|
+
/**
|
|
292
|
+
* Посетитель — выпускник.
|
|
293
|
+
*
|
|
294
|
+
* @returns `true`, если школу закончил.
|
|
295
|
+
*/
|
|
190
296
|
get isGraduated() {
|
|
191
297
|
return this.props.isGraduated;
|
|
192
298
|
}
|
|
299
|
+
/**
|
|
300
|
+
* Класс подтверждён посетителем.
|
|
301
|
+
*
|
|
302
|
+
* @returns `true`, если класс проверен.
|
|
303
|
+
*/
|
|
193
304
|
get gradeChecked() {
|
|
194
305
|
return this.props.gradeChecked;
|
|
195
306
|
}
|
|
307
|
+
/**
|
|
308
|
+
* Тип учётной записи на бэкенде.
|
|
309
|
+
*
|
|
310
|
+
* @returns `pupil`, `agent` либо `null` у гостя.
|
|
311
|
+
*/
|
|
196
312
|
get type() {
|
|
197
313
|
return this.props.type;
|
|
198
314
|
}
|
|
315
|
+
/**
|
|
316
|
+
* Посетитель — репетитор.
|
|
317
|
+
*
|
|
318
|
+
* @returns `true`, если роль репетитора.
|
|
319
|
+
*/
|
|
199
320
|
get isCoach() {
|
|
200
321
|
return this.props.isCoach;
|
|
201
322
|
}
|
|
323
|
+
/**
|
|
324
|
+
* Ведёт мини-группы.
|
|
325
|
+
*
|
|
326
|
+
* @returns `true`, если ведёт.
|
|
327
|
+
*/
|
|
202
328
|
get isMiniGroupTeacher() {
|
|
203
329
|
return this.props.isMiniGroupTeacher;
|
|
204
330
|
}
|
|
331
|
+
/**
|
|
332
|
+
* Репетитор экстерната.
|
|
333
|
+
*
|
|
334
|
+
* @returns `true`, если ведёт экстернат.
|
|
335
|
+
*/
|
|
205
336
|
get isExternshipCoach() {
|
|
206
337
|
return this.props.isExternshipCoach;
|
|
207
338
|
}
|
|
339
|
+
/**
|
|
340
|
+
* Посетитель — учитель.
|
|
341
|
+
*
|
|
342
|
+
* @returns `true`, если роль учителя.
|
|
343
|
+
*/
|
|
208
344
|
get isAgent() {
|
|
209
345
|
return this.props.isAgent;
|
|
210
346
|
}
|
|
347
|
+
/**
|
|
348
|
+
* Посетитель — методист.
|
|
349
|
+
*
|
|
350
|
+
* @returns `true`, если методист.
|
|
351
|
+
*/
|
|
211
352
|
get methodist() {
|
|
212
353
|
return this.props.methodist;
|
|
213
354
|
}
|
|
355
|
+
/**
|
|
356
|
+
* Почтовый адрес: страна, регион, город, улица, дом.
|
|
357
|
+
*
|
|
358
|
+
* @returns Объект адреса либо `null`, если не заполнен.
|
|
359
|
+
*/
|
|
214
360
|
get address() {
|
|
215
361
|
return this.props.address;
|
|
216
362
|
}
|
|
363
|
+
/**
|
|
364
|
+
* Привязанные соцсети.
|
|
365
|
+
*
|
|
366
|
+
* @returns Список провайдеров с идентификаторами; пустой, если привязок нет.
|
|
367
|
+
*/
|
|
217
368
|
get socialNets() {
|
|
218
369
|
return this.props.socialNets;
|
|
219
370
|
}
|
|
371
|
+
/**
|
|
372
|
+
* Логин в Skype.
|
|
373
|
+
*
|
|
374
|
+
* @returns Строка либо `null`.
|
|
375
|
+
*/
|
|
220
376
|
get skype() {
|
|
221
377
|
return this.props.skype;
|
|
222
378
|
}
|
|
379
|
+
/**
|
|
380
|
+
* Настройки интерфейса: показанные подсказки и скрытые баннеры.
|
|
381
|
+
*
|
|
382
|
+
* @returns Объект флагов либо `undefined`, если бэкенд их не прислал.
|
|
383
|
+
*/
|
|
223
384
|
get settings() {
|
|
224
385
|
return this.props.settings;
|
|
225
386
|
}
|
|
387
|
+
/**
|
|
388
|
+
* Бонусный счёт: подарочные и реальные бонусы.
|
|
389
|
+
*
|
|
390
|
+
* @returns Объект с суммами.
|
|
391
|
+
*/
|
|
226
392
|
get bonus() {
|
|
227
393
|
return this.props.bonus;
|
|
228
394
|
}
|
|
395
|
+
/**
|
|
396
|
+
* Сумма бонусов на счёте.
|
|
397
|
+
*
|
|
398
|
+
* @returns Число.
|
|
399
|
+
*/
|
|
229
400
|
get bonusAmount() {
|
|
230
401
|
return this.props.bonusAmount;
|
|
231
402
|
}
|
|
403
|
+
/**
|
|
404
|
+
* Есть действующие покупки.
|
|
405
|
+
*
|
|
406
|
+
* @returns `true`, если есть.
|
|
407
|
+
*/
|
|
232
408
|
get hasActivePurchases() {
|
|
233
409
|
return this.props.hasActivePurchases;
|
|
234
410
|
}
|
|
411
|
+
/**
|
|
412
|
+
* Остались попытки пробных экзаменов.
|
|
413
|
+
*
|
|
414
|
+
* @returns `true`, если остались.
|
|
415
|
+
*/
|
|
235
416
|
get hasAttemptsSolveExamRehearsals() {
|
|
236
417
|
return this.props.hasAttemptsSolveExamRehearsals;
|
|
237
418
|
}
|
|
419
|
+
/**
|
|
420
|
+
* Есть закладки.
|
|
421
|
+
*
|
|
422
|
+
* @returns `true`, если есть.
|
|
423
|
+
*/
|
|
238
424
|
get hasBookmarks() {
|
|
239
425
|
return this.props.hasBookmarks;
|
|
240
426
|
}
|
|
427
|
+
/**
|
|
428
|
+
* Метки посетителя на бэкенде.
|
|
429
|
+
*
|
|
430
|
+
* @returns Список строк либо `null`.
|
|
431
|
+
*/
|
|
241
432
|
get tags() {
|
|
242
433
|
return this.props.tags;
|
|
243
434
|
}
|
|
435
|
+
/**
|
|
436
|
+
* Шаблон корзины.
|
|
437
|
+
*
|
|
438
|
+
* @returns Число либо `null`.
|
|
439
|
+
*/
|
|
244
440
|
get cartTemplateId() {
|
|
245
441
|
return this.props.cartTemplateId;
|
|
246
442
|
}
|
|
443
|
+
/**
|
|
444
|
+
* Сколько позиций в корзине.
|
|
445
|
+
*
|
|
446
|
+
* @returns Число.
|
|
447
|
+
*/
|
|
247
448
|
get cartItemsCount() {
|
|
248
449
|
return this.props.cartItemsCount;
|
|
249
450
|
}
|
|
451
|
+
/**
|
|
452
|
+
* Онбординг пройден.
|
|
453
|
+
*
|
|
454
|
+
* @returns `true`, если пройден.
|
|
455
|
+
*/
|
|
250
456
|
get onboardingFinished() {
|
|
251
457
|
return this.props.onboardingFinished;
|
|
252
458
|
}
|
|
459
|
+
/**
|
|
460
|
+
* Когда пройден онбординг.
|
|
461
|
+
*
|
|
462
|
+
* @returns Дата ISO либо `null`, пока не пройден.
|
|
463
|
+
*/
|
|
253
464
|
get onboardingFinishedAt() {
|
|
254
465
|
return this.props.onboardingFinishedAt;
|
|
255
466
|
}
|
|
467
|
+
/**
|
|
468
|
+
* Почта подтверждена.
|
|
469
|
+
*
|
|
470
|
+
* @returns `true`, если подтверждена.
|
|
471
|
+
*/
|
|
256
472
|
get emailConfirmed() {
|
|
257
473
|
return this.props.emailConfirmed;
|
|
258
474
|
}
|
|
475
|
+
/**
|
|
476
|
+
* Телефон подтверждён.
|
|
477
|
+
*
|
|
478
|
+
* @returns `true`, если подтверждён.
|
|
479
|
+
*/
|
|
259
480
|
get phoneConfirmed() {
|
|
260
481
|
return this.props.phoneConfirmed;
|
|
261
482
|
}
|
|
483
|
+
/**
|
|
484
|
+
* Почта выдумана бэкендом при регистрации без почты.
|
|
485
|
+
*
|
|
486
|
+
* @returns `true`, если почта ненастоящая.
|
|
487
|
+
*/
|
|
262
488
|
get fakeEmail() {
|
|
263
489
|
return this.props.fakeEmail;
|
|
264
490
|
}
|
|
491
|
+
/**
|
|
492
|
+
* Посетитель заведён бэкендом без его участия (например, по заявке).
|
|
493
|
+
*
|
|
494
|
+
* @returns `true`, если учётная запись ненастоящая.
|
|
495
|
+
*/
|
|
265
496
|
get fakeUser() {
|
|
266
497
|
return this.props.fakeUser;
|
|
267
498
|
}
|
|
499
|
+
/**
|
|
500
|
+
* Профиль дополнен данными после регистрации.
|
|
501
|
+
*
|
|
502
|
+
* @returns `true`, если дополнен.
|
|
503
|
+
*/
|
|
268
504
|
get profileEnriched() {
|
|
269
505
|
return this.props.profileEnriched;
|
|
270
506
|
}
|
|
507
|
+
/**
|
|
508
|
+
* Идентификатор итогов года.
|
|
509
|
+
*
|
|
510
|
+
* @returns Строка либо `null`, если итогов нет.
|
|
511
|
+
*/
|
|
271
512
|
get recapUuid() {
|
|
272
513
|
return this.props.recapUuid;
|
|
273
514
|
}
|
|
515
|
+
/**
|
|
516
|
+
* Дисциплины, которые изучает посетитель.
|
|
517
|
+
*
|
|
518
|
+
* @returns Список id; пустой, если не выбраны.
|
|
519
|
+
*/
|
|
274
520
|
get disciplineIds() {
|
|
275
521
|
return this.props.disciplineIds;
|
|
276
522
|
}
|
|
523
|
+
/**
|
|
524
|
+
* Настройки приватности.
|
|
525
|
+
*
|
|
526
|
+
* @returns Объект с флагом публичного профиля.
|
|
527
|
+
*/
|
|
277
528
|
get privacy() {
|
|
278
529
|
return this.props.privacy;
|
|
279
530
|
}
|
|
531
|
+
/**
|
|
532
|
+
* Телефон родителя.
|
|
533
|
+
*
|
|
534
|
+
* @returns Строка либо `null`.
|
|
535
|
+
*/
|
|
280
536
|
get parentPhone() {
|
|
281
537
|
return this.props.parentPhone;
|
|
282
538
|
}
|
|
539
|
+
/**
|
|
540
|
+
* Телефон родителя подтверждён.
|
|
541
|
+
*
|
|
542
|
+
* @returns `true`, если подтверждён.
|
|
543
|
+
*/
|
|
283
544
|
get parentPhoneConfirmed() {
|
|
284
545
|
return this.props.parentPhoneConfirmed;
|
|
285
546
|
}
|
|
547
|
+
/**
|
|
548
|
+
* Посетитель что-то покупал.
|
|
549
|
+
*
|
|
550
|
+
* @returns `true`, `false` либо `null`, если бэкенд не считал.
|
|
551
|
+
*/
|
|
286
552
|
get isCustomer() {
|
|
287
553
|
return this.props.isCustomer;
|
|
288
554
|
}
|
|
555
|
+
/**
|
|
556
|
+
* Доступны многодневные серии занятий.
|
|
557
|
+
*
|
|
558
|
+
* @returns `true`, если доступны.
|
|
559
|
+
*/
|
|
289
560
|
get hasAccessToMultiDaysStreaks() {
|
|
290
561
|
return this.props.hasAccessToMultiDaysStreaks;
|
|
291
562
|
}
|
|
563
|
+
/**
|
|
564
|
+
* Ученик начальной школы.
|
|
565
|
+
*
|
|
566
|
+
* @returns `true`, если начальная школа.
|
|
567
|
+
*/
|
|
292
568
|
get isElementaryPupil() {
|
|
293
569
|
return this.props.isElementaryPupil;
|
|
294
570
|
}
|
|
571
|
+
/**
|
|
572
|
+
* Токен для канала уведомлений по WebSocket.
|
|
573
|
+
*
|
|
574
|
+
* @returns Строка либо `null`, если канала нет.
|
|
575
|
+
*/
|
|
295
576
|
get webSocketNotificationsJwt() {
|
|
296
577
|
return this.props.webSocketNotificationsJwt;
|
|
297
578
|
}
|
|
579
|
+
/**
|
|
580
|
+
* Доступны аттестационные листы.
|
|
581
|
+
*
|
|
582
|
+
* @returns `true`, если доступны.
|
|
583
|
+
*/
|
|
298
584
|
get hasAccessToAttestationSheets() {
|
|
299
585
|
return this.props.hasAccessToAttestationSheets;
|
|
300
586
|
}
|
|
587
|
+
/**
|
|
588
|
+
* Посетитель учится в экстернате.
|
|
589
|
+
*
|
|
590
|
+
* @returns `true`, если экстернат.
|
|
591
|
+
*/
|
|
301
592
|
get externshipUser() {
|
|
302
593
|
return this.props.externshipUser;
|
|
303
594
|
}
|
|
595
|
+
/**
|
|
596
|
+
* Есть оплаченные договоры экстерната.
|
|
597
|
+
*
|
|
598
|
+
* @returns `true`, если есть.
|
|
599
|
+
*/
|
|
304
600
|
get hasPurchasedExternshipContracts() {
|
|
305
601
|
return this.props.hasPurchasedExternshipContracts;
|
|
306
602
|
}
|
|
603
|
+
/**
|
|
604
|
+
* Доступна аттестация экстерната.
|
|
605
|
+
*
|
|
606
|
+
* @returns `true`, если доступна.
|
|
607
|
+
*/
|
|
307
608
|
get hasExternshipAttestationAccess() {
|
|
308
609
|
return this.props.hasExternshipAttestationAccess;
|
|
309
610
|
}
|
|
611
|
+
/**
|
|
612
|
+
* Профиль в разделе социализации.
|
|
613
|
+
*
|
|
614
|
+
* @returns Объект с id и состоянием либо `null`, если профиля нет.
|
|
615
|
+
*/
|
|
310
616
|
get socializationProfile() {
|
|
311
617
|
return this.props.socializationProfile;
|
|
312
618
|
}
|
|
619
|
+
/**
|
|
620
|
+
* Когда заканчивается бесплатный доступ.
|
|
621
|
+
*
|
|
622
|
+
* @returns Дата ISO либо `null`, если доступа нет.
|
|
623
|
+
*/
|
|
313
624
|
get freeAccessFinishesAt() {
|
|
314
625
|
return this.props.freeAccessFinishesAt;
|
|
315
626
|
}
|
|
627
|
+
/**
|
|
628
|
+
* В комнате начальной школы есть непросмотренные новинки.
|
|
629
|
+
*
|
|
630
|
+
* @returns `true`, если есть; `undefined`, если бэкенд не прислал.
|
|
631
|
+
*/
|
|
316
632
|
get hasUnseenRoomFeatures() {
|
|
317
633
|
return this.props.hasUnseenRoomFeatures;
|
|
318
634
|
}
|
|
635
|
+
/**
|
|
636
|
+
* Покупал договоры экстерната.
|
|
637
|
+
*
|
|
638
|
+
* @returns `true`, если покупал.
|
|
639
|
+
*/
|
|
319
640
|
get purchaseAnyExternshipContracts() {
|
|
320
641
|
return this.props.purchaseAnyExternshipContracts;
|
|
321
642
|
}
|
|
643
|
+
/**
|
|
644
|
+
* Связан с экстернатом: ученик, родитель либо репетитор.
|
|
645
|
+
*
|
|
646
|
+
* @returns `true`, если связан; `undefined`, если бэкенд не прислал.
|
|
647
|
+
*/
|
|
322
648
|
get hasExternshipRelation() {
|
|
323
649
|
return this.props.hasExternshipRelation;
|
|
324
650
|
}
|
|
651
|
+
/**
|
|
652
|
+
* Есть действующий договор экстерната.
|
|
653
|
+
*
|
|
654
|
+
* @returns `true`, если есть; `undefined`, если бэкенд не прислал.
|
|
655
|
+
*/
|
|
325
656
|
get hasExternshipActiveContract() {
|
|
326
657
|
return this.props.hasExternshipActiveContract;
|
|
327
658
|
}
|
|
659
|
+
/**
|
|
660
|
+
* Можно продлить договор домашней школы.
|
|
661
|
+
*
|
|
662
|
+
* @returns `true`, если можно; `undefined`, если бэкенд не прислал.
|
|
663
|
+
*/
|
|
328
664
|
get canProlongateContract() {
|
|
329
665
|
return this.props.canProlongateContract;
|
|
330
666
|
}
|
|
667
|
+
/**
|
|
668
|
+
* Окно пролонгации договора: даты, скидка, заголовок следующего года.
|
|
669
|
+
*
|
|
670
|
+
* @returns Объект окна, `null` либо `undefined`, если окна нет.
|
|
671
|
+
*/
|
|
331
672
|
get prolongation() {
|
|
332
673
|
return this.props.prolongation;
|
|
333
674
|
}
|
|
675
|
+
/**
|
|
676
|
+
* Текущий интерес посетителя: класс, дисциплина, уровень, формат и причина. Та же форма, что у `GET /api/user/user_interest`, но из профиля, без похода.
|
|
677
|
+
*
|
|
678
|
+
* @returns Объект интереса либо `null`, если бэкенд не считал.
|
|
679
|
+
*/
|
|
680
|
+
get currentInterest() {
|
|
681
|
+
return this.props.currentInterest;
|
|
682
|
+
}
|
|
683
|
+
/**
|
|
684
|
+
* До какой даты открыт приём в домашнюю школу.
|
|
685
|
+
*
|
|
686
|
+
* @returns Дата либо `null`, если приём не идёт.
|
|
687
|
+
*/
|
|
688
|
+
get admissionFinishesOn() {
|
|
689
|
+
return this.props.admissionFinishesOn;
|
|
690
|
+
}
|
|
691
|
+
/**
|
|
692
|
+
* Посетитель пришёл из Алгоритмики — партнёрский вход с другой площадки.
|
|
693
|
+
*
|
|
694
|
+
* @returns `true`, если из Алгоритмики.
|
|
695
|
+
*/
|
|
696
|
+
get algoritmika() {
|
|
697
|
+
return this.props.algoritmika;
|
|
698
|
+
}
|
|
699
|
+
/**
|
|
700
|
+
* Страница бонусов уже открывалась — подсказки на ней больше не показываются.
|
|
701
|
+
*
|
|
702
|
+
* @returns `true`, если открывалась.
|
|
703
|
+
*/
|
|
704
|
+
get bonusesPageVisited() {
|
|
705
|
+
return this.props.bonusesPageVisited;
|
|
706
|
+
}
|
|
707
|
+
/**
|
|
708
|
+
* Посетителю разрешено менять школу и класс в профиле.
|
|
709
|
+
*
|
|
710
|
+
* @returns `true`, если разрешено.
|
|
711
|
+
*/
|
|
712
|
+
get canChangeSchoolInfo() {
|
|
713
|
+
return this.props.canChangeSchoolInfo;
|
|
714
|
+
}
|
|
715
|
+
/**
|
|
716
|
+
* Идёт демо-доступ к экстернату.
|
|
717
|
+
*
|
|
718
|
+
* @returns `true`, пока демо активно.
|
|
719
|
+
*/
|
|
720
|
+
get externshipDemoAccessActive() {
|
|
721
|
+
return this.props.externshipDemoAccessActive;
|
|
722
|
+
}
|
|
723
|
+
/**
|
|
724
|
+
* Экстернат ждёт оплаты: когда закроется доступ и по какому договору.
|
|
725
|
+
*
|
|
726
|
+
* @returns Объект с датой и id договора либо `null`, если долга нет.
|
|
727
|
+
*/
|
|
728
|
+
get externshipPaymentRequired() {
|
|
729
|
+
return this.props.externshipPaymentRequired;
|
|
730
|
+
}
|
|
731
|
+
/**
|
|
732
|
+
* Показывать промо-шапку экстерната.
|
|
733
|
+
*
|
|
734
|
+
* @returns `true`, если показывать.
|
|
735
|
+
*/
|
|
736
|
+
get externshipPromoHeaderOn() {
|
|
737
|
+
return this.props.externshipPromoHeaderOn;
|
|
738
|
+
}
|
|
739
|
+
/**
|
|
740
|
+
* Доступен раздел прогресса подготовки к экзаменам.
|
|
741
|
+
*
|
|
742
|
+
* @returns `true`, если доступен.
|
|
743
|
+
*/
|
|
744
|
+
get hasExamProgressAccess() {
|
|
745
|
+
return this.props.hasExamProgressAccess;
|
|
746
|
+
}
|
|
747
|
+
/**
|
|
748
|
+
* Доступны итоги года; их адрес — `recapUuid`.
|
|
749
|
+
*
|
|
750
|
+
* @returns `true`, если доступны.
|
|
751
|
+
*/
|
|
752
|
+
get hasYearlyRecapAccess() {
|
|
753
|
+
return this.props.hasYearlyRecapAccess;
|
|
754
|
+
}
|
|
755
|
+
/**
|
|
756
|
+
* Управляет аттестационной школой.
|
|
757
|
+
*
|
|
758
|
+
* @returns `true`, `false` либо `null`, если бэкенд не считал.
|
|
759
|
+
*/
|
|
760
|
+
get isAttestationSchoolManager() {
|
|
761
|
+
return this.props.isAttestationSchoolManager;
|
|
762
|
+
}
|
|
763
|
+
/**
|
|
764
|
+
* Посетитель — наставник.
|
|
765
|
+
*
|
|
766
|
+
* @returns `true`, если наставник.
|
|
767
|
+
*/
|
|
768
|
+
get isMentor() {
|
|
769
|
+
return this.props.isMentor;
|
|
770
|
+
}
|
|
771
|
+
/**
|
|
772
|
+
* Доступна серия ежедневных занятий с опытом (XP-стрик).
|
|
773
|
+
*
|
|
774
|
+
* @returns `true`, если доступна.
|
|
775
|
+
*/
|
|
776
|
+
get isXpStreakAvailable() {
|
|
777
|
+
return this.props.isXpStreakAvailable;
|
|
778
|
+
}
|
|
779
|
+
/**
|
|
780
|
+
* Таблица лидеров: доступна ли посетителю и готов ли он к ней (выбор курса).
|
|
781
|
+
*
|
|
782
|
+
* @returns Объект состояний либо `null`, если посетитель вне программы.
|
|
783
|
+
*/
|
|
784
|
+
get leaderboard() {
|
|
785
|
+
return this.props.leaderboard;
|
|
786
|
+
}
|
|
787
|
+
/**
|
|
788
|
+
* Состояние доступа к таблице лидеров.
|
|
789
|
+
*
|
|
790
|
+
* @returns `unavailable`, `available`, `vacation` либо `disabled`.
|
|
791
|
+
*/
|
|
792
|
+
get leaderboardAccessState() {
|
|
793
|
+
return this.props.leaderboardAccessState;
|
|
794
|
+
}
|
|
795
|
+
/**
|
|
796
|
+
* Как устроены учебные цели у посетителя.
|
|
797
|
+
*
|
|
798
|
+
* @returns `enabled`, `disabled`, `optional` либо `required`.
|
|
799
|
+
*/
|
|
800
|
+
get learningGoalsAccessState() {
|
|
801
|
+
return this.props.learningGoalsAccessState;
|
|
802
|
+
}
|
|
803
|
+
/**
|
|
804
|
+
* Мессенджеры, на которые посетитель подписан на уведомления.
|
|
805
|
+
*
|
|
806
|
+
* @returns Список либо `null`, если бэкенд не считал.
|
|
807
|
+
*/
|
|
808
|
+
get messengerSubscriptions() {
|
|
809
|
+
return this.props.messengerSubscriptions;
|
|
810
|
+
}
|
|
811
|
+
/**
|
|
812
|
+
* Пора предлагать продление занятий с репетитором.
|
|
813
|
+
*
|
|
814
|
+
* @returns `true`, если пора.
|
|
815
|
+
*/
|
|
816
|
+
get needToPromoteRenewalWithCoach() {
|
|
817
|
+
return this.props.needToPromoteRenewalWithCoach;
|
|
818
|
+
}
|
|
819
|
+
/**
|
|
820
|
+
* Показывать баннер курсов следующего учебного года.
|
|
821
|
+
*
|
|
822
|
+
* @returns `true`, если показывать.
|
|
823
|
+
*/
|
|
824
|
+
get nextYearCoursesBannerAvailable() {
|
|
825
|
+
return this.props.nextYearCoursesBannerAvailable;
|
|
826
|
+
}
|
|
827
|
+
/**
|
|
828
|
+
* Пароль задан — вход не только через код или соцсеть.
|
|
829
|
+
*
|
|
830
|
+
* @returns `true`, `false` либо `null`, если бэкенд не считал.
|
|
831
|
+
*/
|
|
832
|
+
get passwordSet() {
|
|
833
|
+
return this.props.passwordSet;
|
|
834
|
+
}
|
|
835
|
+
/**
|
|
836
|
+
* Реферальный код для программы «приведи друга».
|
|
837
|
+
*
|
|
838
|
+
* @returns Строка либо `null`, если код не выдан.
|
|
839
|
+
*/
|
|
840
|
+
get referralCode() {
|
|
841
|
+
return this.props.referralCode;
|
|
842
|
+
}
|
|
843
|
+
/**
|
|
844
|
+
* Доступен онбординг целевых действий.
|
|
845
|
+
*
|
|
846
|
+
* @returns `true`, если доступен.
|
|
847
|
+
*/
|
|
848
|
+
get targetActionsOnboardingAvailable() {
|
|
849
|
+
return this.props.targetActionsOnboardingAvailable;
|
|
850
|
+
}
|
|
334
851
|
/**
|
|
335
852
|
* Идёт ли сейчас окно пролонгации договора домашней школы.
|
|
336
853
|
*
|
|
337
854
|
* Границы включаются: последний день окна ещё считается пролонгацией. Не заданная граница
|
|
338
855
|
* означает, что окна нет вовсе, а не что оно бесконечно.
|
|
856
|
+
*
|
|
857
|
+
* @returns `true`, если сегодня внутри окна включительно
|
|
339
858
|
*/
|
|
340
859
|
isProlongationBetweenDates() {
|
|
341
860
|
var _a;
|
|
@@ -381,6 +900,11 @@ var _User = class _User {
|
|
|
381
900
|
});
|
|
382
901
|
return clonedObj;
|
|
383
902
|
}
|
|
903
|
+
/**
|
|
904
|
+
* Гость — сущность с умолчаниями всех полей и признаком `isDefaultUser()`.
|
|
905
|
+
*
|
|
906
|
+
* @returns Новая сущность на каждый вызов: умолчания общие на процесс, копия своя.
|
|
907
|
+
*/
|
|
384
908
|
static createDefault() {
|
|
385
909
|
return new _User(this.deepClone(DEFAULT_USER), true);
|
|
386
910
|
}
|
|
@@ -388,6 +912,8 @@ var _User = class _User {
|
|
|
388
912
|
* Форма посетителя по умолчанию ДАННЫМИ — гость со всеми полями: тому, кто отдаёт `UserDTO`
|
|
389
913
|
* наружу (хост — приложениям), нужна полная форма, а не сущность с методами. Своя копия на
|
|
390
914
|
* вызов: умолчания общие на процесс, и правка чужой копии их не тронет.
|
|
915
|
+
*
|
|
916
|
+
* @returns Новая копия умолчаний на каждый вызов
|
|
391
917
|
*/
|
|
392
918
|
static defaultDto() {
|
|
393
919
|
return this.deepClone(DEFAULT_USER);
|
|
@@ -405,6 +931,13 @@ var _User = class _User {
|
|
|
405
931
|
}
|
|
406
932
|
return str.replace(/\x00/g, "").trim();
|
|
407
933
|
}
|
|
934
|
+
/**
|
|
935
|
+
* Сущность из профиля бэкенда (`UserDTO` в camelCase): строковые поля чистятся от null-байтов
|
|
936
|
+
* и пробелов по краям, остальное берётся как есть.
|
|
937
|
+
*
|
|
938
|
+
* @param input - Профиль в форме `UserDTO`
|
|
939
|
+
* @returns Сущность над копией профиля: исходный объект не трогается
|
|
940
|
+
*/
|
|
408
941
|
static fromApi(input) {
|
|
409
942
|
const sanitizedData = this.sanitizeUserData(this.deepClone(input));
|
|
410
943
|
return new _User(sanitizedData);
|
|
@@ -425,16 +958,26 @@ var _User = class _User {
|
|
|
425
958
|
shortName: this.sanitizeString(data.shortName)
|
|
426
959
|
});
|
|
427
960
|
}
|
|
961
|
+
/**
|
|
962
|
+
* Сущность собрана из умолчаний (`createDefault`), а не из профиля бэкенда.
|
|
963
|
+
*
|
|
964
|
+
* @returns `true` у гостя по умолчанию
|
|
965
|
+
*/
|
|
428
966
|
isDefaultUser() {
|
|
429
967
|
return this.isDefault;
|
|
430
968
|
}
|
|
969
|
+
/**
|
|
970
|
+
* Посетитель вошёл — у него есть идентификатор на бэкенде.
|
|
971
|
+
*
|
|
972
|
+
* @returns `true`, если `id` задан и положителен
|
|
973
|
+
*/
|
|
431
974
|
isLoggedIn() {
|
|
432
975
|
return this.id && this.id > 0 ? true : false;
|
|
433
976
|
}
|
|
434
977
|
/**
|
|
435
|
-
*
|
|
978
|
+
* Роль либо класс словом — для подписи в интерфейсе.
|
|
436
979
|
*
|
|
437
|
-
* @returns
|
|
980
|
+
* @returns «Дошкольник» для нулевого класса, «Выпускник» без класса, иначе класс («5 класс»)
|
|
438
981
|
*/
|
|
439
982
|
getPupilRole() {
|
|
440
983
|
if (this.grade.index === 0) {
|
|
@@ -443,12 +986,19 @@ var _User = class _User {
|
|
|
443
986
|
if (this.grade.index == null) return "\u0412\u044B\u043F\u0443\u0441\u043A\u043D\u0438\u043A";
|
|
444
987
|
return _User.getGradeString(this.grade.index);
|
|
445
988
|
}
|
|
989
|
+
/**
|
|
990
|
+
* Профиль строкой JSON — для печати в документ и передачи по сети.
|
|
991
|
+
*
|
|
992
|
+
* @returns JSON полей сущности
|
|
993
|
+
*/
|
|
446
994
|
toJson() {
|
|
447
995
|
return JSON.stringify(this.props);
|
|
448
996
|
}
|
|
449
997
|
/**
|
|
450
998
|
* Посетитель данными — то, что едет по сети и в состояние: сущность с методами не
|
|
451
999
|
* сериализуется. Своя копия на вызов: сущность неизменяема, и правка копии её не тронет.
|
|
1000
|
+
*
|
|
1001
|
+
* @returns Копия полей сущности данными
|
|
452
1002
|
*/
|
|
453
1003
|
toDto() {
|
|
454
1004
|
return _User.deepClone(this.props);
|