@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/index.cjs
CHANGED
|
@@ -918,18 +918,34 @@ var DEFAULT_USER = {
|
|
|
918
918
|
room: null,
|
|
919
919
|
street: null
|
|
920
920
|
},
|
|
921
|
+
admissionFinishesOn: null,
|
|
922
|
+
algoritmika: false,
|
|
921
923
|
avatarUrl: "",
|
|
922
924
|
bonus: {
|
|
923
925
|
giftAmount: 0,
|
|
924
926
|
realMoneyAmount: 0
|
|
925
927
|
},
|
|
926
928
|
bonusAmount: 0,
|
|
929
|
+
bonusesPageVisited: false,
|
|
930
|
+
canChangeSchoolInfo: false,
|
|
927
931
|
cartItemsCount: 0,
|
|
928
932
|
cartTemplateId: null,
|
|
929
933
|
createdAt: null,
|
|
934
|
+
currentInterest: {
|
|
935
|
+
businessUnitAbbrs: [],
|
|
936
|
+
disciplineId: null,
|
|
937
|
+
gradeId: null,
|
|
938
|
+
levelId: null,
|
|
939
|
+
productFormat: null,
|
|
940
|
+
productId: null,
|
|
941
|
+
reason: null
|
|
942
|
+
},
|
|
930
943
|
disciplineIds: [],
|
|
931
944
|
email: "",
|
|
932
945
|
emailConfirmed: false,
|
|
946
|
+
externshipDemoAccessActive: false,
|
|
947
|
+
externshipPaymentRequired: null,
|
|
948
|
+
externshipPromoHeaderOn: false,
|
|
933
949
|
externshipUser: false,
|
|
934
950
|
fakeEmail: false,
|
|
935
951
|
fakeUser: false,
|
|
@@ -948,25 +964,37 @@ var DEFAULT_USER = {
|
|
|
948
964
|
hasActivePurchases: false,
|
|
949
965
|
hasAttemptsSolveExamRehearsals: false,
|
|
950
966
|
hasBookmarks: false,
|
|
967
|
+
hasExamProgressAccess: false,
|
|
951
968
|
hasExternshipAttestationAccess: false,
|
|
952
969
|
hasPurchasedExternshipContracts: false,
|
|
970
|
+
hasYearlyRecapAccess: false,
|
|
953
971
|
id: null,
|
|
954
972
|
isAgent: false,
|
|
973
|
+
isAttestationSchoolManager: null,
|
|
955
974
|
isCoach: false,
|
|
956
975
|
isCustomer: null,
|
|
957
976
|
isElementaryPupil: false,
|
|
958
977
|
isExternshipCoach: false,
|
|
959
978
|
isGraduated: false,
|
|
979
|
+
isMentor: false,
|
|
960
980
|
isMiniGroupTeacher: false,
|
|
961
981
|
isParent: false,
|
|
982
|
+
isXpStreakAvailable: false,
|
|
962
983
|
lastName: "",
|
|
984
|
+
leaderboard: null,
|
|
985
|
+
leaderboardAccessState: "unavailable",
|
|
986
|
+
learningGoalsAccessState: "disabled",
|
|
963
987
|
locale: null,
|
|
988
|
+
messengerSubscriptions: null,
|
|
964
989
|
methodist: false,
|
|
965
990
|
middleName: "",
|
|
991
|
+
needToPromoteRenewalWithCoach: false,
|
|
992
|
+
nextYearCoursesBannerAvailable: false,
|
|
966
993
|
onboardingFinished: false,
|
|
967
994
|
onboardingFinishedAt: null,
|
|
968
995
|
parentPhone: null,
|
|
969
996
|
parentPhoneConfirmed: false,
|
|
997
|
+
passwordSet: null,
|
|
970
998
|
phone: null,
|
|
971
999
|
phoneConfirmed: false,
|
|
972
1000
|
privacy: {
|
|
@@ -975,11 +1003,13 @@ var DEFAULT_USER = {
|
|
|
975
1003
|
profileEnriched: false,
|
|
976
1004
|
purchaseAnyExternshipContracts: false,
|
|
977
1005
|
recapUuid: null,
|
|
1006
|
+
referralCode: null,
|
|
978
1007
|
shortName: "",
|
|
979
1008
|
skype: null,
|
|
980
1009
|
socialNets: [],
|
|
981
1010
|
socializationProfile: null,
|
|
982
1011
|
tags: null,
|
|
1012
|
+
targetActionsOnboardingAvailable: false,
|
|
983
1013
|
timezone: null,
|
|
984
1014
|
type: null,
|
|
985
1015
|
webSocketNotificationsJwt: null
|
|
@@ -991,8 +1021,9 @@ var _User = class _User {
|
|
|
991
1021
|
this.props = props;
|
|
992
1022
|
this.isDefault = isDefault;
|
|
993
1023
|
/**
|
|
994
|
-
*
|
|
995
|
-
*
|
|
1024
|
+
* Роль словом — по флагам профиля, первый совпавший: репетитор, учитель, родитель.
|
|
1025
|
+
*
|
|
1026
|
+
* @returns «Репетитор», «Учитель», «Родитель», иначе роль ученика из `getPupilRole()`
|
|
996
1027
|
*/
|
|
997
1028
|
this.getRole = () => {
|
|
998
1029
|
if (this.isCoach) return "\u0420\u0435\u043F\u0435\u0442\u0438\u0442\u043E\u0440";
|
|
@@ -1008,206 +1039,694 @@ var _User = class _User {
|
|
|
1008
1039
|
}
|
|
1009
1040
|
};
|
|
1010
1041
|
/**
|
|
1011
|
-
*
|
|
1012
|
-
*
|
|
1013
|
-
* @
|
|
1042
|
+
* Фамилия с инициалами имени и отчества — подпись в списках.
|
|
1043
|
+
*
|
|
1044
|
+
* @returns Строка вида «Пупкин В. И.»; без отчества — «Пупкин В.»
|
|
1014
1045
|
*/
|
|
1015
1046
|
this.getInitials = () => {
|
|
1016
1047
|
var _a, _b;
|
|
1017
1048
|
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()}.` : ""}`;
|
|
1018
1049
|
};
|
|
1019
1050
|
}
|
|
1051
|
+
/**
|
|
1052
|
+
* Идентификатор посетителя на бэкенде.
|
|
1053
|
+
*
|
|
1054
|
+
* @returns Число либо `null` у гостя.
|
|
1055
|
+
*/
|
|
1020
1056
|
get id() {
|
|
1021
1057
|
return this.props.id;
|
|
1022
1058
|
}
|
|
1059
|
+
/**
|
|
1060
|
+
* Почта посетителя.
|
|
1061
|
+
*
|
|
1062
|
+
* @returns Строка; пустая, если почты нет.
|
|
1063
|
+
*/
|
|
1023
1064
|
get email() {
|
|
1024
1065
|
return this.props.email;
|
|
1025
1066
|
}
|
|
1067
|
+
/**
|
|
1068
|
+
* Имя.
|
|
1069
|
+
*
|
|
1070
|
+
* @returns Строка; пустая, если не заполнено.
|
|
1071
|
+
*/
|
|
1026
1072
|
get firstName() {
|
|
1027
1073
|
return this.props.firstName;
|
|
1028
1074
|
}
|
|
1075
|
+
/**
|
|
1076
|
+
* Отчество.
|
|
1077
|
+
*
|
|
1078
|
+
* @returns Строка; пустая, если не заполнено.
|
|
1079
|
+
*/
|
|
1029
1080
|
get middleName() {
|
|
1030
1081
|
return this.props.middleName;
|
|
1031
1082
|
}
|
|
1083
|
+
/**
|
|
1084
|
+
* Фамилия.
|
|
1085
|
+
*
|
|
1086
|
+
* @returns Строка; пустая, если не заполнено.
|
|
1087
|
+
*/
|
|
1032
1088
|
get lastName() {
|
|
1033
1089
|
return this.props.lastName;
|
|
1034
1090
|
}
|
|
1091
|
+
/**
|
|
1092
|
+
* Полное имя, каким его собрал бэкенд.
|
|
1093
|
+
*
|
|
1094
|
+
* @returns Строка; пустая у гостя.
|
|
1095
|
+
*/
|
|
1035
1096
|
get fullName() {
|
|
1036
1097
|
return this.props.fullName;
|
|
1037
1098
|
}
|
|
1099
|
+
/**
|
|
1100
|
+
* Короткое имя для обращения в интерфейсе.
|
|
1101
|
+
*
|
|
1102
|
+
* @returns Строка; пустая у гостя.
|
|
1103
|
+
*/
|
|
1038
1104
|
get shortName() {
|
|
1039
1105
|
return this.props.shortName;
|
|
1040
1106
|
}
|
|
1107
|
+
/**
|
|
1108
|
+
* Когда заведён профиль.
|
|
1109
|
+
*
|
|
1110
|
+
* @returns Дата ISO либо `null` у гостя.
|
|
1111
|
+
*/
|
|
1041
1112
|
get createdAt() {
|
|
1042
1113
|
return this.props.createdAt;
|
|
1043
1114
|
}
|
|
1115
|
+
/**
|
|
1116
|
+
* Часовой пояс посетителя.
|
|
1117
|
+
*
|
|
1118
|
+
* @returns Имя пояса либо `null`, если не задан.
|
|
1119
|
+
*/
|
|
1044
1120
|
get timezone() {
|
|
1045
1121
|
return this.props.timezone;
|
|
1046
1122
|
}
|
|
1123
|
+
/**
|
|
1124
|
+
* Локаль интерфейса.
|
|
1125
|
+
*
|
|
1126
|
+
* @returns Код локали либо `null`, если не задана.
|
|
1127
|
+
*/
|
|
1047
1128
|
get locale() {
|
|
1048
1129
|
return this.props.locale;
|
|
1049
1130
|
}
|
|
1131
|
+
/**
|
|
1132
|
+
* Класс посетителя: id, порядковый номер, имя и транслит.
|
|
1133
|
+
*
|
|
1134
|
+
* @returns Объект класса; у гостя поля `null` и пустые строки.
|
|
1135
|
+
*/
|
|
1050
1136
|
get grade() {
|
|
1051
1137
|
return this.props.grade;
|
|
1052
1138
|
}
|
|
1139
|
+
/**
|
|
1140
|
+
* Телефон посетителя.
|
|
1141
|
+
*
|
|
1142
|
+
* @returns Строка либо `null`, если не указан.
|
|
1143
|
+
*/
|
|
1053
1144
|
get phone() {
|
|
1054
1145
|
return this.props.phone;
|
|
1055
1146
|
}
|
|
1147
|
+
/**
|
|
1148
|
+
* Адрес аватара.
|
|
1149
|
+
*
|
|
1150
|
+
* @returns Строка; пустая, если аватара нет.
|
|
1151
|
+
*/
|
|
1056
1152
|
get avatarUrl() {
|
|
1057
1153
|
return this.props.avatarUrl;
|
|
1058
1154
|
}
|
|
1155
|
+
/**
|
|
1156
|
+
* Посетитель — родитель.
|
|
1157
|
+
*
|
|
1158
|
+
* @returns `true`, если роль родительская.
|
|
1159
|
+
*/
|
|
1059
1160
|
get isParent() {
|
|
1060
1161
|
return this.props.isParent;
|
|
1061
1162
|
}
|
|
1163
|
+
/**
|
|
1164
|
+
* Посетитель — выпускник.
|
|
1165
|
+
*
|
|
1166
|
+
* @returns `true`, если школу закончил.
|
|
1167
|
+
*/
|
|
1062
1168
|
get isGraduated() {
|
|
1063
1169
|
return this.props.isGraduated;
|
|
1064
1170
|
}
|
|
1171
|
+
/**
|
|
1172
|
+
* Класс подтверждён посетителем.
|
|
1173
|
+
*
|
|
1174
|
+
* @returns `true`, если класс проверен.
|
|
1175
|
+
*/
|
|
1065
1176
|
get gradeChecked() {
|
|
1066
1177
|
return this.props.gradeChecked;
|
|
1067
1178
|
}
|
|
1179
|
+
/**
|
|
1180
|
+
* Тип учётной записи на бэкенде.
|
|
1181
|
+
*
|
|
1182
|
+
* @returns `pupil`, `agent` либо `null` у гостя.
|
|
1183
|
+
*/
|
|
1068
1184
|
get type() {
|
|
1069
1185
|
return this.props.type;
|
|
1070
1186
|
}
|
|
1187
|
+
/**
|
|
1188
|
+
* Посетитель — репетитор.
|
|
1189
|
+
*
|
|
1190
|
+
* @returns `true`, если роль репетитора.
|
|
1191
|
+
*/
|
|
1071
1192
|
get isCoach() {
|
|
1072
1193
|
return this.props.isCoach;
|
|
1073
1194
|
}
|
|
1195
|
+
/**
|
|
1196
|
+
* Ведёт мини-группы.
|
|
1197
|
+
*
|
|
1198
|
+
* @returns `true`, если ведёт.
|
|
1199
|
+
*/
|
|
1074
1200
|
get isMiniGroupTeacher() {
|
|
1075
1201
|
return this.props.isMiniGroupTeacher;
|
|
1076
1202
|
}
|
|
1203
|
+
/**
|
|
1204
|
+
* Репетитор экстерната.
|
|
1205
|
+
*
|
|
1206
|
+
* @returns `true`, если ведёт экстернат.
|
|
1207
|
+
*/
|
|
1077
1208
|
get isExternshipCoach() {
|
|
1078
1209
|
return this.props.isExternshipCoach;
|
|
1079
1210
|
}
|
|
1211
|
+
/**
|
|
1212
|
+
* Посетитель — учитель.
|
|
1213
|
+
*
|
|
1214
|
+
* @returns `true`, если роль учителя.
|
|
1215
|
+
*/
|
|
1080
1216
|
get isAgent() {
|
|
1081
1217
|
return this.props.isAgent;
|
|
1082
1218
|
}
|
|
1219
|
+
/**
|
|
1220
|
+
* Посетитель — методист.
|
|
1221
|
+
*
|
|
1222
|
+
* @returns `true`, если методист.
|
|
1223
|
+
*/
|
|
1083
1224
|
get methodist() {
|
|
1084
1225
|
return this.props.methodist;
|
|
1085
1226
|
}
|
|
1227
|
+
/**
|
|
1228
|
+
* Почтовый адрес: страна, регион, город, улица, дом.
|
|
1229
|
+
*
|
|
1230
|
+
* @returns Объект адреса либо `null`, если не заполнен.
|
|
1231
|
+
*/
|
|
1086
1232
|
get address() {
|
|
1087
1233
|
return this.props.address;
|
|
1088
1234
|
}
|
|
1235
|
+
/**
|
|
1236
|
+
* Привязанные соцсети.
|
|
1237
|
+
*
|
|
1238
|
+
* @returns Список провайдеров с идентификаторами; пустой, если привязок нет.
|
|
1239
|
+
*/
|
|
1089
1240
|
get socialNets() {
|
|
1090
1241
|
return this.props.socialNets;
|
|
1091
1242
|
}
|
|
1243
|
+
/**
|
|
1244
|
+
* Логин в Skype.
|
|
1245
|
+
*
|
|
1246
|
+
* @returns Строка либо `null`.
|
|
1247
|
+
*/
|
|
1092
1248
|
get skype() {
|
|
1093
1249
|
return this.props.skype;
|
|
1094
1250
|
}
|
|
1251
|
+
/**
|
|
1252
|
+
* Настройки интерфейса: показанные подсказки и скрытые баннеры.
|
|
1253
|
+
*
|
|
1254
|
+
* @returns Объект флагов либо `undefined`, если бэкенд их не прислал.
|
|
1255
|
+
*/
|
|
1095
1256
|
get settings() {
|
|
1096
1257
|
return this.props.settings;
|
|
1097
1258
|
}
|
|
1259
|
+
/**
|
|
1260
|
+
* Бонусный счёт: подарочные и реальные бонусы.
|
|
1261
|
+
*
|
|
1262
|
+
* @returns Объект с суммами.
|
|
1263
|
+
*/
|
|
1098
1264
|
get bonus() {
|
|
1099
1265
|
return this.props.bonus;
|
|
1100
1266
|
}
|
|
1267
|
+
/**
|
|
1268
|
+
* Сумма бонусов на счёте.
|
|
1269
|
+
*
|
|
1270
|
+
* @returns Число.
|
|
1271
|
+
*/
|
|
1101
1272
|
get bonusAmount() {
|
|
1102
1273
|
return this.props.bonusAmount;
|
|
1103
1274
|
}
|
|
1275
|
+
/**
|
|
1276
|
+
* Есть действующие покупки.
|
|
1277
|
+
*
|
|
1278
|
+
* @returns `true`, если есть.
|
|
1279
|
+
*/
|
|
1104
1280
|
get hasActivePurchases() {
|
|
1105
1281
|
return this.props.hasActivePurchases;
|
|
1106
1282
|
}
|
|
1283
|
+
/**
|
|
1284
|
+
* Остались попытки пробных экзаменов.
|
|
1285
|
+
*
|
|
1286
|
+
* @returns `true`, если остались.
|
|
1287
|
+
*/
|
|
1107
1288
|
get hasAttemptsSolveExamRehearsals() {
|
|
1108
1289
|
return this.props.hasAttemptsSolveExamRehearsals;
|
|
1109
1290
|
}
|
|
1291
|
+
/**
|
|
1292
|
+
* Есть закладки.
|
|
1293
|
+
*
|
|
1294
|
+
* @returns `true`, если есть.
|
|
1295
|
+
*/
|
|
1110
1296
|
get hasBookmarks() {
|
|
1111
1297
|
return this.props.hasBookmarks;
|
|
1112
1298
|
}
|
|
1299
|
+
/**
|
|
1300
|
+
* Метки посетителя на бэкенде.
|
|
1301
|
+
*
|
|
1302
|
+
* @returns Список строк либо `null`.
|
|
1303
|
+
*/
|
|
1113
1304
|
get tags() {
|
|
1114
1305
|
return this.props.tags;
|
|
1115
1306
|
}
|
|
1307
|
+
/**
|
|
1308
|
+
* Шаблон корзины.
|
|
1309
|
+
*
|
|
1310
|
+
* @returns Число либо `null`.
|
|
1311
|
+
*/
|
|
1116
1312
|
get cartTemplateId() {
|
|
1117
1313
|
return this.props.cartTemplateId;
|
|
1118
1314
|
}
|
|
1315
|
+
/**
|
|
1316
|
+
* Сколько позиций в корзине.
|
|
1317
|
+
*
|
|
1318
|
+
* @returns Число.
|
|
1319
|
+
*/
|
|
1119
1320
|
get cartItemsCount() {
|
|
1120
1321
|
return this.props.cartItemsCount;
|
|
1121
1322
|
}
|
|
1323
|
+
/**
|
|
1324
|
+
* Онбординг пройден.
|
|
1325
|
+
*
|
|
1326
|
+
* @returns `true`, если пройден.
|
|
1327
|
+
*/
|
|
1122
1328
|
get onboardingFinished() {
|
|
1123
1329
|
return this.props.onboardingFinished;
|
|
1124
1330
|
}
|
|
1331
|
+
/**
|
|
1332
|
+
* Когда пройден онбординг.
|
|
1333
|
+
*
|
|
1334
|
+
* @returns Дата ISO либо `null`, пока не пройден.
|
|
1335
|
+
*/
|
|
1125
1336
|
get onboardingFinishedAt() {
|
|
1126
1337
|
return this.props.onboardingFinishedAt;
|
|
1127
1338
|
}
|
|
1339
|
+
/**
|
|
1340
|
+
* Почта подтверждена.
|
|
1341
|
+
*
|
|
1342
|
+
* @returns `true`, если подтверждена.
|
|
1343
|
+
*/
|
|
1128
1344
|
get emailConfirmed() {
|
|
1129
1345
|
return this.props.emailConfirmed;
|
|
1130
1346
|
}
|
|
1347
|
+
/**
|
|
1348
|
+
* Телефон подтверждён.
|
|
1349
|
+
*
|
|
1350
|
+
* @returns `true`, если подтверждён.
|
|
1351
|
+
*/
|
|
1131
1352
|
get phoneConfirmed() {
|
|
1132
1353
|
return this.props.phoneConfirmed;
|
|
1133
1354
|
}
|
|
1355
|
+
/**
|
|
1356
|
+
* Почта выдумана бэкендом при регистрации без почты.
|
|
1357
|
+
*
|
|
1358
|
+
* @returns `true`, если почта ненастоящая.
|
|
1359
|
+
*/
|
|
1134
1360
|
get fakeEmail() {
|
|
1135
1361
|
return this.props.fakeEmail;
|
|
1136
1362
|
}
|
|
1363
|
+
/**
|
|
1364
|
+
* Посетитель заведён бэкендом без его участия (например, по заявке).
|
|
1365
|
+
*
|
|
1366
|
+
* @returns `true`, если учётная запись ненастоящая.
|
|
1367
|
+
*/
|
|
1137
1368
|
get fakeUser() {
|
|
1138
1369
|
return this.props.fakeUser;
|
|
1139
1370
|
}
|
|
1371
|
+
/**
|
|
1372
|
+
* Профиль дополнен данными после регистрации.
|
|
1373
|
+
*
|
|
1374
|
+
* @returns `true`, если дополнен.
|
|
1375
|
+
*/
|
|
1140
1376
|
get profileEnriched() {
|
|
1141
1377
|
return this.props.profileEnriched;
|
|
1142
1378
|
}
|
|
1379
|
+
/**
|
|
1380
|
+
* Идентификатор итогов года.
|
|
1381
|
+
*
|
|
1382
|
+
* @returns Строка либо `null`, если итогов нет.
|
|
1383
|
+
*/
|
|
1143
1384
|
get recapUuid() {
|
|
1144
1385
|
return this.props.recapUuid;
|
|
1145
1386
|
}
|
|
1387
|
+
/**
|
|
1388
|
+
* Дисциплины, которые изучает посетитель.
|
|
1389
|
+
*
|
|
1390
|
+
* @returns Список id; пустой, если не выбраны.
|
|
1391
|
+
*/
|
|
1146
1392
|
get disciplineIds() {
|
|
1147
1393
|
return this.props.disciplineIds;
|
|
1148
1394
|
}
|
|
1395
|
+
/**
|
|
1396
|
+
* Настройки приватности.
|
|
1397
|
+
*
|
|
1398
|
+
* @returns Объект с флагом публичного профиля.
|
|
1399
|
+
*/
|
|
1149
1400
|
get privacy() {
|
|
1150
1401
|
return this.props.privacy;
|
|
1151
1402
|
}
|
|
1403
|
+
/**
|
|
1404
|
+
* Телефон родителя.
|
|
1405
|
+
*
|
|
1406
|
+
* @returns Строка либо `null`.
|
|
1407
|
+
*/
|
|
1152
1408
|
get parentPhone() {
|
|
1153
1409
|
return this.props.parentPhone;
|
|
1154
1410
|
}
|
|
1411
|
+
/**
|
|
1412
|
+
* Телефон родителя подтверждён.
|
|
1413
|
+
*
|
|
1414
|
+
* @returns `true`, если подтверждён.
|
|
1415
|
+
*/
|
|
1155
1416
|
get parentPhoneConfirmed() {
|
|
1156
1417
|
return this.props.parentPhoneConfirmed;
|
|
1157
1418
|
}
|
|
1419
|
+
/**
|
|
1420
|
+
* Посетитель что-то покупал.
|
|
1421
|
+
*
|
|
1422
|
+
* @returns `true`, `false` либо `null`, если бэкенд не считал.
|
|
1423
|
+
*/
|
|
1158
1424
|
get isCustomer() {
|
|
1159
1425
|
return this.props.isCustomer;
|
|
1160
1426
|
}
|
|
1427
|
+
/**
|
|
1428
|
+
* Доступны многодневные серии занятий.
|
|
1429
|
+
*
|
|
1430
|
+
* @returns `true`, если доступны.
|
|
1431
|
+
*/
|
|
1161
1432
|
get hasAccessToMultiDaysStreaks() {
|
|
1162
1433
|
return this.props.hasAccessToMultiDaysStreaks;
|
|
1163
1434
|
}
|
|
1435
|
+
/**
|
|
1436
|
+
* Ученик начальной школы.
|
|
1437
|
+
*
|
|
1438
|
+
* @returns `true`, если начальная школа.
|
|
1439
|
+
*/
|
|
1164
1440
|
get isElementaryPupil() {
|
|
1165
1441
|
return this.props.isElementaryPupil;
|
|
1166
1442
|
}
|
|
1443
|
+
/**
|
|
1444
|
+
* Токен для канала уведомлений по WebSocket.
|
|
1445
|
+
*
|
|
1446
|
+
* @returns Строка либо `null`, если канала нет.
|
|
1447
|
+
*/
|
|
1167
1448
|
get webSocketNotificationsJwt() {
|
|
1168
1449
|
return this.props.webSocketNotificationsJwt;
|
|
1169
1450
|
}
|
|
1451
|
+
/**
|
|
1452
|
+
* Доступны аттестационные листы.
|
|
1453
|
+
*
|
|
1454
|
+
* @returns `true`, если доступны.
|
|
1455
|
+
*/
|
|
1170
1456
|
get hasAccessToAttestationSheets() {
|
|
1171
1457
|
return this.props.hasAccessToAttestationSheets;
|
|
1172
1458
|
}
|
|
1459
|
+
/**
|
|
1460
|
+
* Посетитель учится в экстернате.
|
|
1461
|
+
*
|
|
1462
|
+
* @returns `true`, если экстернат.
|
|
1463
|
+
*/
|
|
1173
1464
|
get externshipUser() {
|
|
1174
1465
|
return this.props.externshipUser;
|
|
1175
1466
|
}
|
|
1467
|
+
/**
|
|
1468
|
+
* Есть оплаченные договоры экстерната.
|
|
1469
|
+
*
|
|
1470
|
+
* @returns `true`, если есть.
|
|
1471
|
+
*/
|
|
1176
1472
|
get hasPurchasedExternshipContracts() {
|
|
1177
1473
|
return this.props.hasPurchasedExternshipContracts;
|
|
1178
1474
|
}
|
|
1475
|
+
/**
|
|
1476
|
+
* Доступна аттестация экстерната.
|
|
1477
|
+
*
|
|
1478
|
+
* @returns `true`, если доступна.
|
|
1479
|
+
*/
|
|
1179
1480
|
get hasExternshipAttestationAccess() {
|
|
1180
1481
|
return this.props.hasExternshipAttestationAccess;
|
|
1181
1482
|
}
|
|
1483
|
+
/**
|
|
1484
|
+
* Профиль в разделе социализации.
|
|
1485
|
+
*
|
|
1486
|
+
* @returns Объект с id и состоянием либо `null`, если профиля нет.
|
|
1487
|
+
*/
|
|
1182
1488
|
get socializationProfile() {
|
|
1183
1489
|
return this.props.socializationProfile;
|
|
1184
1490
|
}
|
|
1491
|
+
/**
|
|
1492
|
+
* Когда заканчивается бесплатный доступ.
|
|
1493
|
+
*
|
|
1494
|
+
* @returns Дата ISO либо `null`, если доступа нет.
|
|
1495
|
+
*/
|
|
1185
1496
|
get freeAccessFinishesAt() {
|
|
1186
1497
|
return this.props.freeAccessFinishesAt;
|
|
1187
1498
|
}
|
|
1499
|
+
/**
|
|
1500
|
+
* В комнате начальной школы есть непросмотренные новинки.
|
|
1501
|
+
*
|
|
1502
|
+
* @returns `true`, если есть; `undefined`, если бэкенд не прислал.
|
|
1503
|
+
*/
|
|
1188
1504
|
get hasUnseenRoomFeatures() {
|
|
1189
1505
|
return this.props.hasUnseenRoomFeatures;
|
|
1190
1506
|
}
|
|
1507
|
+
/**
|
|
1508
|
+
* Покупал договоры экстерната.
|
|
1509
|
+
*
|
|
1510
|
+
* @returns `true`, если покупал.
|
|
1511
|
+
*/
|
|
1191
1512
|
get purchaseAnyExternshipContracts() {
|
|
1192
1513
|
return this.props.purchaseAnyExternshipContracts;
|
|
1193
1514
|
}
|
|
1515
|
+
/**
|
|
1516
|
+
* Связан с экстернатом: ученик, родитель либо репетитор.
|
|
1517
|
+
*
|
|
1518
|
+
* @returns `true`, если связан; `undefined`, если бэкенд не прислал.
|
|
1519
|
+
*/
|
|
1194
1520
|
get hasExternshipRelation() {
|
|
1195
1521
|
return this.props.hasExternshipRelation;
|
|
1196
1522
|
}
|
|
1523
|
+
/**
|
|
1524
|
+
* Есть действующий договор экстерната.
|
|
1525
|
+
*
|
|
1526
|
+
* @returns `true`, если есть; `undefined`, если бэкенд не прислал.
|
|
1527
|
+
*/
|
|
1197
1528
|
get hasExternshipActiveContract() {
|
|
1198
1529
|
return this.props.hasExternshipActiveContract;
|
|
1199
1530
|
}
|
|
1531
|
+
/**
|
|
1532
|
+
* Можно продлить договор домашней школы.
|
|
1533
|
+
*
|
|
1534
|
+
* @returns `true`, если можно; `undefined`, если бэкенд не прислал.
|
|
1535
|
+
*/
|
|
1200
1536
|
get canProlongateContract() {
|
|
1201
1537
|
return this.props.canProlongateContract;
|
|
1202
1538
|
}
|
|
1539
|
+
/**
|
|
1540
|
+
* Окно пролонгации договора: даты, скидка, заголовок следующего года.
|
|
1541
|
+
*
|
|
1542
|
+
* @returns Объект окна, `null` либо `undefined`, если окна нет.
|
|
1543
|
+
*/
|
|
1203
1544
|
get prolongation() {
|
|
1204
1545
|
return this.props.prolongation;
|
|
1205
1546
|
}
|
|
1547
|
+
/**
|
|
1548
|
+
* Текущий интерес посетителя: класс, дисциплина, уровень, формат и причина. Та же форма, что у `GET /api/user/user_interest`, но из профиля, без похода.
|
|
1549
|
+
*
|
|
1550
|
+
* @returns Объект интереса либо `null`, если бэкенд не считал.
|
|
1551
|
+
*/
|
|
1552
|
+
get currentInterest() {
|
|
1553
|
+
return this.props.currentInterest;
|
|
1554
|
+
}
|
|
1555
|
+
/**
|
|
1556
|
+
* До какой даты открыт приём в домашнюю школу.
|
|
1557
|
+
*
|
|
1558
|
+
* @returns Дата либо `null`, если приём не идёт.
|
|
1559
|
+
*/
|
|
1560
|
+
get admissionFinishesOn() {
|
|
1561
|
+
return this.props.admissionFinishesOn;
|
|
1562
|
+
}
|
|
1563
|
+
/**
|
|
1564
|
+
* Посетитель пришёл из Алгоритмики — партнёрский вход с другой площадки.
|
|
1565
|
+
*
|
|
1566
|
+
* @returns `true`, если из Алгоритмики.
|
|
1567
|
+
*/
|
|
1568
|
+
get algoritmika() {
|
|
1569
|
+
return this.props.algoritmika;
|
|
1570
|
+
}
|
|
1571
|
+
/**
|
|
1572
|
+
* Страница бонусов уже открывалась — подсказки на ней больше не показываются.
|
|
1573
|
+
*
|
|
1574
|
+
* @returns `true`, если открывалась.
|
|
1575
|
+
*/
|
|
1576
|
+
get bonusesPageVisited() {
|
|
1577
|
+
return this.props.bonusesPageVisited;
|
|
1578
|
+
}
|
|
1579
|
+
/**
|
|
1580
|
+
* Посетителю разрешено менять школу и класс в профиле.
|
|
1581
|
+
*
|
|
1582
|
+
* @returns `true`, если разрешено.
|
|
1583
|
+
*/
|
|
1584
|
+
get canChangeSchoolInfo() {
|
|
1585
|
+
return this.props.canChangeSchoolInfo;
|
|
1586
|
+
}
|
|
1587
|
+
/**
|
|
1588
|
+
* Идёт демо-доступ к экстернату.
|
|
1589
|
+
*
|
|
1590
|
+
* @returns `true`, пока демо активно.
|
|
1591
|
+
*/
|
|
1592
|
+
get externshipDemoAccessActive() {
|
|
1593
|
+
return this.props.externshipDemoAccessActive;
|
|
1594
|
+
}
|
|
1595
|
+
/**
|
|
1596
|
+
* Экстернат ждёт оплаты: когда закроется доступ и по какому договору.
|
|
1597
|
+
*
|
|
1598
|
+
* @returns Объект с датой и id договора либо `null`, если долга нет.
|
|
1599
|
+
*/
|
|
1600
|
+
get externshipPaymentRequired() {
|
|
1601
|
+
return this.props.externshipPaymentRequired;
|
|
1602
|
+
}
|
|
1603
|
+
/**
|
|
1604
|
+
* Показывать промо-шапку экстерната.
|
|
1605
|
+
*
|
|
1606
|
+
* @returns `true`, если показывать.
|
|
1607
|
+
*/
|
|
1608
|
+
get externshipPromoHeaderOn() {
|
|
1609
|
+
return this.props.externshipPromoHeaderOn;
|
|
1610
|
+
}
|
|
1611
|
+
/**
|
|
1612
|
+
* Доступен раздел прогресса подготовки к экзаменам.
|
|
1613
|
+
*
|
|
1614
|
+
* @returns `true`, если доступен.
|
|
1615
|
+
*/
|
|
1616
|
+
get hasExamProgressAccess() {
|
|
1617
|
+
return this.props.hasExamProgressAccess;
|
|
1618
|
+
}
|
|
1619
|
+
/**
|
|
1620
|
+
* Доступны итоги года; их адрес — `recapUuid`.
|
|
1621
|
+
*
|
|
1622
|
+
* @returns `true`, если доступны.
|
|
1623
|
+
*/
|
|
1624
|
+
get hasYearlyRecapAccess() {
|
|
1625
|
+
return this.props.hasYearlyRecapAccess;
|
|
1626
|
+
}
|
|
1627
|
+
/**
|
|
1628
|
+
* Управляет аттестационной школой.
|
|
1629
|
+
*
|
|
1630
|
+
* @returns `true`, `false` либо `null`, если бэкенд не считал.
|
|
1631
|
+
*/
|
|
1632
|
+
get isAttestationSchoolManager() {
|
|
1633
|
+
return this.props.isAttestationSchoolManager;
|
|
1634
|
+
}
|
|
1635
|
+
/**
|
|
1636
|
+
* Посетитель — наставник.
|
|
1637
|
+
*
|
|
1638
|
+
* @returns `true`, если наставник.
|
|
1639
|
+
*/
|
|
1640
|
+
get isMentor() {
|
|
1641
|
+
return this.props.isMentor;
|
|
1642
|
+
}
|
|
1643
|
+
/**
|
|
1644
|
+
* Доступна серия ежедневных занятий с опытом (XP-стрик).
|
|
1645
|
+
*
|
|
1646
|
+
* @returns `true`, если доступна.
|
|
1647
|
+
*/
|
|
1648
|
+
get isXpStreakAvailable() {
|
|
1649
|
+
return this.props.isXpStreakAvailable;
|
|
1650
|
+
}
|
|
1651
|
+
/**
|
|
1652
|
+
* Таблица лидеров: доступна ли посетителю и готов ли он к ней (выбор курса).
|
|
1653
|
+
*
|
|
1654
|
+
* @returns Объект состояний либо `null`, если посетитель вне программы.
|
|
1655
|
+
*/
|
|
1656
|
+
get leaderboard() {
|
|
1657
|
+
return this.props.leaderboard;
|
|
1658
|
+
}
|
|
1659
|
+
/**
|
|
1660
|
+
* Состояние доступа к таблице лидеров.
|
|
1661
|
+
*
|
|
1662
|
+
* @returns `unavailable`, `available`, `vacation` либо `disabled`.
|
|
1663
|
+
*/
|
|
1664
|
+
get leaderboardAccessState() {
|
|
1665
|
+
return this.props.leaderboardAccessState;
|
|
1666
|
+
}
|
|
1667
|
+
/**
|
|
1668
|
+
* Как устроены учебные цели у посетителя.
|
|
1669
|
+
*
|
|
1670
|
+
* @returns `enabled`, `disabled`, `optional` либо `required`.
|
|
1671
|
+
*/
|
|
1672
|
+
get learningGoalsAccessState() {
|
|
1673
|
+
return this.props.learningGoalsAccessState;
|
|
1674
|
+
}
|
|
1675
|
+
/**
|
|
1676
|
+
* Мессенджеры, на которые посетитель подписан на уведомления.
|
|
1677
|
+
*
|
|
1678
|
+
* @returns Список либо `null`, если бэкенд не считал.
|
|
1679
|
+
*/
|
|
1680
|
+
get messengerSubscriptions() {
|
|
1681
|
+
return this.props.messengerSubscriptions;
|
|
1682
|
+
}
|
|
1683
|
+
/**
|
|
1684
|
+
* Пора предлагать продление занятий с репетитором.
|
|
1685
|
+
*
|
|
1686
|
+
* @returns `true`, если пора.
|
|
1687
|
+
*/
|
|
1688
|
+
get needToPromoteRenewalWithCoach() {
|
|
1689
|
+
return this.props.needToPromoteRenewalWithCoach;
|
|
1690
|
+
}
|
|
1691
|
+
/**
|
|
1692
|
+
* Показывать баннер курсов следующего учебного года.
|
|
1693
|
+
*
|
|
1694
|
+
* @returns `true`, если показывать.
|
|
1695
|
+
*/
|
|
1696
|
+
get nextYearCoursesBannerAvailable() {
|
|
1697
|
+
return this.props.nextYearCoursesBannerAvailable;
|
|
1698
|
+
}
|
|
1699
|
+
/**
|
|
1700
|
+
* Пароль задан — вход не только через код или соцсеть.
|
|
1701
|
+
*
|
|
1702
|
+
* @returns `true`, `false` либо `null`, если бэкенд не считал.
|
|
1703
|
+
*/
|
|
1704
|
+
get passwordSet() {
|
|
1705
|
+
return this.props.passwordSet;
|
|
1706
|
+
}
|
|
1707
|
+
/**
|
|
1708
|
+
* Реферальный код для программы «приведи друга».
|
|
1709
|
+
*
|
|
1710
|
+
* @returns Строка либо `null`, если код не выдан.
|
|
1711
|
+
*/
|
|
1712
|
+
get referralCode() {
|
|
1713
|
+
return this.props.referralCode;
|
|
1714
|
+
}
|
|
1715
|
+
/**
|
|
1716
|
+
* Доступен онбординг целевых действий.
|
|
1717
|
+
*
|
|
1718
|
+
* @returns `true`, если доступен.
|
|
1719
|
+
*/
|
|
1720
|
+
get targetActionsOnboardingAvailable() {
|
|
1721
|
+
return this.props.targetActionsOnboardingAvailable;
|
|
1722
|
+
}
|
|
1206
1723
|
/**
|
|
1207
1724
|
* Идёт ли сейчас окно пролонгации договора домашней школы.
|
|
1208
1725
|
*
|
|
1209
1726
|
* Границы включаются: последний день окна ещё считается пролонгацией. Не заданная граница
|
|
1210
1727
|
* означает, что окна нет вовсе, а не что оно бесконечно.
|
|
1728
|
+
*
|
|
1729
|
+
* @returns `true`, если сегодня внутри окна включительно
|
|
1211
1730
|
*/
|
|
1212
1731
|
isProlongationBetweenDates() {
|
|
1213
1732
|
var _a;
|
|
@@ -1253,6 +1772,11 @@ var _User = class _User {
|
|
|
1253
1772
|
});
|
|
1254
1773
|
return clonedObj;
|
|
1255
1774
|
}
|
|
1775
|
+
/**
|
|
1776
|
+
* Гость — сущность с умолчаниями всех полей и признаком `isDefaultUser()`.
|
|
1777
|
+
*
|
|
1778
|
+
* @returns Новая сущность на каждый вызов: умолчания общие на процесс, копия своя.
|
|
1779
|
+
*/
|
|
1256
1780
|
static createDefault() {
|
|
1257
1781
|
return new _User(this.deepClone(DEFAULT_USER), true);
|
|
1258
1782
|
}
|
|
@@ -1260,6 +1784,8 @@ var _User = class _User {
|
|
|
1260
1784
|
* Форма посетителя по умолчанию ДАННЫМИ — гость со всеми полями: тому, кто отдаёт `UserDTO`
|
|
1261
1785
|
* наружу (хост — приложениям), нужна полная форма, а не сущность с методами. Своя копия на
|
|
1262
1786
|
* вызов: умолчания общие на процесс, и правка чужой копии их не тронет.
|
|
1787
|
+
*
|
|
1788
|
+
* @returns Новая копия умолчаний на каждый вызов
|
|
1263
1789
|
*/
|
|
1264
1790
|
static defaultDto() {
|
|
1265
1791
|
return this.deepClone(DEFAULT_USER);
|
|
@@ -1277,6 +1803,13 @@ var _User = class _User {
|
|
|
1277
1803
|
}
|
|
1278
1804
|
return str.replace(/\x00/g, "").trim();
|
|
1279
1805
|
}
|
|
1806
|
+
/**
|
|
1807
|
+
* Сущность из профиля бэкенда (`UserDTO` в camelCase): строковые поля чистятся от null-байтов
|
|
1808
|
+
* и пробелов по краям, остальное берётся как есть.
|
|
1809
|
+
*
|
|
1810
|
+
* @param input - Профиль в форме `UserDTO`
|
|
1811
|
+
* @returns Сущность над копией профиля: исходный объект не трогается
|
|
1812
|
+
*/
|
|
1280
1813
|
static fromApi(input) {
|
|
1281
1814
|
const sanitizedData = this.sanitizeUserData(this.deepClone(input));
|
|
1282
1815
|
return new _User(sanitizedData);
|
|
@@ -1297,16 +1830,26 @@ var _User = class _User {
|
|
|
1297
1830
|
shortName: this.sanitizeString(data.shortName)
|
|
1298
1831
|
});
|
|
1299
1832
|
}
|
|
1833
|
+
/**
|
|
1834
|
+
* Сущность собрана из умолчаний (`createDefault`), а не из профиля бэкенда.
|
|
1835
|
+
*
|
|
1836
|
+
* @returns `true` у гостя по умолчанию
|
|
1837
|
+
*/
|
|
1300
1838
|
isDefaultUser() {
|
|
1301
1839
|
return this.isDefault;
|
|
1302
1840
|
}
|
|
1841
|
+
/**
|
|
1842
|
+
* Посетитель вошёл — у него есть идентификатор на бэкенде.
|
|
1843
|
+
*
|
|
1844
|
+
* @returns `true`, если `id` задан и положителен
|
|
1845
|
+
*/
|
|
1303
1846
|
isLoggedIn() {
|
|
1304
1847
|
return this.id && this.id > 0 ? true : false;
|
|
1305
1848
|
}
|
|
1306
1849
|
/**
|
|
1307
|
-
*
|
|
1850
|
+
* Роль либо класс словом — для подписи в интерфейсе.
|
|
1308
1851
|
*
|
|
1309
|
-
* @returns
|
|
1852
|
+
* @returns «Дошкольник» для нулевого класса, «Выпускник» без класса, иначе класс («5 класс»)
|
|
1310
1853
|
*/
|
|
1311
1854
|
getPupilRole() {
|
|
1312
1855
|
if (this.grade.index === 0) {
|
|
@@ -1315,12 +1858,19 @@ var _User = class _User {
|
|
|
1315
1858
|
if (this.grade.index == null) return "\u0412\u044B\u043F\u0443\u0441\u043A\u043D\u0438\u043A";
|
|
1316
1859
|
return _User.getGradeString(this.grade.index);
|
|
1317
1860
|
}
|
|
1861
|
+
/**
|
|
1862
|
+
* Профиль строкой JSON — для печати в документ и передачи по сети.
|
|
1863
|
+
*
|
|
1864
|
+
* @returns JSON полей сущности
|
|
1865
|
+
*/
|
|
1318
1866
|
toJson() {
|
|
1319
1867
|
return JSON.stringify(this.props);
|
|
1320
1868
|
}
|
|
1321
1869
|
/**
|
|
1322
1870
|
* Посетитель данными — то, что едет по сети и в состояние: сущность с методами не
|
|
1323
1871
|
* сериализуется. Своя копия на вызов: сущность неизменяема, и правка копии её не тронет.
|
|
1872
|
+
*
|
|
1873
|
+
* @returns Копия полей сущности данными
|
|
1324
1874
|
*/
|
|
1325
1875
|
toDto() {
|
|
1326
1876
|
return _User.deepClone(this.props);
|