Профиль: выбор любимой фракции и строка «Чаще всего играет на»
В кастомизации профиля появился выбор любимой фракции из полного справочника (PickerSelect, все 12 фракций): фракция — свойство игрока, а не группы, поэтому список не зависит от подключённых дополнений. Дополнение показано в строке опции приглушённым текстом, снятие выбора — кнопкой «Убрать». В карточке статистики «Любимая фракция» теперь берётся из профиля, а «Основная фракция» переименована в «Чаще всего играет на» и печатает название в предложном падеже. Публичный профиль правок не потребовал — он использует ту же карточку и ту же схему. schema.d.ts пересобран с живого бэкенда (npm run gen:api). #17 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ps52xzuUXnWrJ5SRnEeaLk
This commit is contained in:
@@ -117,6 +117,26 @@ export function useUpdateBio() {
|
||||
});
|
||||
}
|
||||
|
||||
// Любимая фракция — личный выбор игрока (в статистике не вычисляется). null снимает выбор.
|
||||
// Шлём только это поле: роутер обновляет лишь пришедшие, «о себе» не затирается.
|
||||
export function useUpdateFavoriteFaction() {
|
||||
const qc = useQueryClient();
|
||||
return useMutation({
|
||||
mutationFn: async (factionId: number | null): Promise<Me> =>
|
||||
unwrap(
|
||||
await api.PATCH("/api/users/me/profile", {
|
||||
body: { favorite_faction_id: factionId },
|
||||
}),
|
||||
),
|
||||
onSuccess: (me) => {
|
||||
qc.setQueryData(qk.me, me);
|
||||
// Карточка статистики показывает любимую фракцию — её тоже перезапрашиваем.
|
||||
qc.invalidateQueries({ queryKey: qk.myStats });
|
||||
qc.invalidateQueries({ queryKey: qk.home });
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// Аватар. Картинку уменьшаем на клиенте (≤512px) и грузим multipart'ом отдельным
|
||||
// fetch (openapi-fetch неудобен для файлов); CSRF-токен из cookie ставим вручную.
|
||||
function readCsrfToken(): string | null {
|
||||
|
||||
@@ -10,6 +10,14 @@ export function useExpansions() {
|
||||
});
|
||||
}
|
||||
|
||||
// Весь справочник фракций (для выбора любимой в профиле — он не зависит от группы).
|
||||
export function useFactions() {
|
||||
return useQuery({
|
||||
queryKey: qk.factions,
|
||||
queryFn: async () => unwrap(await api.GET("/api/factions")),
|
||||
});
|
||||
}
|
||||
|
||||
export function useGroupFactions(groupId: number | null) {
|
||||
return useQuery({
|
||||
queryKey: groupId ? qk.groupFactions(groupId) : ["group", "none", "factions"],
|
||||
|
||||
Reference in New Issue
Block a user