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