fix: batch bug fixes matching backend changes

- Promo code errors: add inactive/not_yet_valid translations (4 locales) + Balance.tsx parser
- Daily 100% discount: render price block when originalDailyPrice > 0
- Webvisor: enable in Yandex Metrika init config
- Referral attribution: consume campaign/referral slugs only after successful auth (all login methods)
- registerWithEmail: consume referral code after success
- AdminSettings: move TARIFF_MODE_SETTINGS to module scope (fix eslint warning)
This commit is contained in:
c0mrade
2026-04-08 18:33:47 +03:00
parent 1cf9526713
commit e6f6713b0e
11 changed files with 65 additions and 30 deletions

View File

@@ -3,8 +3,16 @@ import { persist } from 'zustand/middleware';
import type { CampaignBonusInfo, RegisterResponse, User } from '../types';
import { authApi } from '../api/auth';
import { apiClient } from '../api/client';
import { captureCampaignFromUrl, consumeCampaignSlug } from '../utils/campaign';
import { captureReferralFromUrl, consumeReferralCode } from '../utils/referral';
import {
captureCampaignFromUrl,
consumeCampaignSlug,
getPendingCampaignSlug,
} from '../utils/campaign';
import {
captureReferralFromUrl,
consumeReferralCode,
getPendingReferralCode,
} from '../utils/referral';
import { tokenStorage, isTokenValid, tokenRefreshManager } from '../utils/token';
import { usePermissionStore } from './permissions';
@@ -241,9 +249,12 @@ export const useAuthStore = create<AuthState>()(
},
loginWithTelegram: async (initData) => {
const campaignSlug = consumeCampaignSlug();
const referralCode = consumeReferralCode();
const campaignSlug = getPendingCampaignSlug();
const referralCode = getPendingReferralCode();
const response = await authApi.loginTelegram(initData, campaignSlug, referralCode);
// Clear only after successful auth — retry keeps the slugs
consumeCampaignSlug();
consumeReferralCode();
tokenStorage.setTokens(response.access_token, response.refresh_token);
set({
accessToken: response.access_token,
@@ -256,9 +267,11 @@ export const useAuthStore = create<AuthState>()(
},
loginWithTelegramWidget: async (data) => {
const campaignSlug = consumeCampaignSlug();
const referralCode = consumeReferralCode();
const campaignSlug = getPendingCampaignSlug();
const referralCode = getPendingReferralCode();
const response = await authApi.loginTelegramWidget(data, campaignSlug, referralCode);
consumeCampaignSlug();
consumeReferralCode();
tokenStorage.setTokens(response.access_token, response.refresh_token);
set({
accessToken: response.access_token,
@@ -271,9 +284,11 @@ export const useAuthStore = create<AuthState>()(
},
loginWithTelegramOIDC: async (idToken) => {
const campaignSlug = consumeCampaignSlug();
const referralCode = consumeReferralCode();
const campaignSlug = getPendingCampaignSlug();
const referralCode = getPendingReferralCode();
const response = await authApi.loginTelegramOIDC(idToken, campaignSlug, referralCode);
consumeCampaignSlug();
consumeReferralCode();
tokenStorage.setTokens(response.access_token, response.refresh_token);
set({
accessToken: response.access_token,
@@ -286,9 +301,11 @@ export const useAuthStore = create<AuthState>()(
},
loginWithEmail: async (email, password) => {
const campaignSlug = consumeCampaignSlug();
const referralCode = consumeReferralCode();
const campaignSlug = getPendingCampaignSlug();
const referralCode = getPendingReferralCode();
const response = await authApi.loginEmail(email, password, campaignSlug, referralCode);
consumeCampaignSlug();
consumeReferralCode();
tokenStorage.setTokens(response.access_token, response.refresh_token);
set({
accessToken: response.access_token,
@@ -301,8 +318,8 @@ export const useAuthStore = create<AuthState>()(
},
loginWithOAuth: async (provider, code, state, deviceId) => {
const campaignSlug = consumeCampaignSlug();
const referralCode = consumeReferralCode();
const campaignSlug = getPendingCampaignSlug();
const referralCode = getPendingReferralCode();
const response = await authApi.oauthCallback(
provider,
code,
@@ -311,6 +328,8 @@ export const useAuthStore = create<AuthState>()(
campaignSlug,
referralCode,
);
consumeCampaignSlug();
consumeReferralCode();
tokenStorage.setTokens(response.access_token, response.refresh_token);
set({
accessToken: response.access_token,
@@ -339,7 +358,7 @@ export const useAuthStore = create<AuthState>()(
},
registerWithEmail: async (email, password, firstName, referralCode) => {
const code = referralCode || consumeReferralCode() || undefined;
const code = referralCode || getPendingReferralCode() || undefined;
const response = await authApi.registerEmailStandalone({
email,
password,
@@ -347,6 +366,7 @@ export const useAuthStore = create<AuthState>()(
language: navigator.language.split('-')[0] || 'ru',
referral_code: code,
});
consumeReferralCode();
return response;
},
}),