diff --git a/package.json b/package.json index f97a682..d21c3ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "pezkuwi-telegram-miniapp", - "version": "1.0.202", + "version": "1.0.205", "type": "module", "description": "Pezkuwichain Telegram Mini App - Forum, Announcements, Rewards", "author": "Pezkuwichain Team", diff --git a/src/i18n/translations/ar.ts b/src/i18n/translations/ar.ts index 1b81862..1984e45 100644 --- a/src/i18n/translations/ar.ts +++ b/src/i18n/translations/ar.ts @@ -110,6 +110,7 @@ const ar: Translations = { citizen: 'مواطن', staking: 'التخزين', stakingNotStarted: 'لم يبدأ بعد', + stakingWaitingData: 'في انتظار البيانات...', stakingCountedInTrust: 'يُحتسب في نقاط الثقة', people: '{count} شخص', tiki: 'تيكي', diff --git a/src/i18n/translations/ckb.ts b/src/i18n/translations/ckb.ts index 207253f..5f31498 100644 --- a/src/i18n/translations/ckb.ts +++ b/src/i18n/translations/ckb.ts @@ -111,6 +111,7 @@ const ckb: Translations = { citizen: 'هاوڵاتی', staking: 'ستەیکینگ', stakingNotStarted: 'دەستپێنەکراوە', + stakingWaitingData: 'چاوەڕوانی داتا...', stakingCountedInTrust: 'لە خاڵی متمانە ژمێردراوە', people: '{count} کەس', tiki: 'تیکی', diff --git a/src/i18n/translations/en.ts b/src/i18n/translations/en.ts index 90c322d..9324d24 100644 --- a/src/i18n/translations/en.ts +++ b/src/i18n/translations/en.ts @@ -110,6 +110,7 @@ const en: Translations = { citizen: 'Citizen', staking: 'Staking', stakingNotStarted: 'Not started', + stakingWaitingData: 'Waiting for data...', stakingCountedInTrust: 'Counted in Trust score', people: '{count} people', tiki: 'Tiki', diff --git a/src/i18n/translations/fa.ts b/src/i18n/translations/fa.ts index 80b6ede..4ec56af 100644 --- a/src/i18n/translations/fa.ts +++ b/src/i18n/translations/fa.ts @@ -110,6 +110,7 @@ const fa: Translations = { citizen: 'شهروند', staking: 'سهامگذاری', stakingNotStarted: 'شروع نشده', + stakingWaitingData: 'در انتظار دادهها...', stakingCountedInTrust: 'در امتیاز اعتماد محاسبه میشود', people: '{count} نفر', tiki: 'تیکی', diff --git a/src/i18n/translations/krd.ts b/src/i18n/translations/krd.ts index 11759f4..04d5c0d 100644 --- a/src/i18n/translations/krd.ts +++ b/src/i18n/translations/krd.ts @@ -114,6 +114,7 @@ const krd: Translations = { citizen: 'Welat\u00ee', staking: 'Staking', stakingNotStarted: 'Nehat\u00eeye destp\u00eakirin', + stakingWaitingData: 'Li benda daneyan...', stakingCountedInTrust: 'Di Trust de t\u00ea hesibandin', people: '{count} kes', tiki: 'Tiki', diff --git a/src/i18n/translations/tr.ts b/src/i18n/translations/tr.ts index 6b2d355..7b4ccd8 100644 --- a/src/i18n/translations/tr.ts +++ b/src/i18n/translations/tr.ts @@ -110,6 +110,7 @@ const tr: Translations = { citizen: 'Vatandaş', staking: 'Staking', stakingNotStarted: 'Başlamadı', + stakingWaitingData: 'Veri bekleniyor...', stakingCountedInTrust: 'Güven puanına dahil', people: '{count} kişi', tiki: 'Tiki', diff --git a/src/i18n/types.ts b/src/i18n/types.ts index 96908c1..eb6e3a9 100644 --- a/src/i18n/types.ts +++ b/src/i18n/types.ts @@ -112,6 +112,7 @@ export interface Translations { citizen: string; staking: string; stakingNotStarted: string; + stakingWaitingData: string; stakingCountedInTrust: string; people: string; tiki: string; diff --git a/src/lib/scores.ts b/src/lib/scores.ts index 341954b..d6cf446 100644 --- a/src/lib/scores.ts +++ b/src/lib/scores.ts @@ -28,6 +28,7 @@ export interface UserScores { export interface StakingScoreStatus { isTracking: boolean; + hasCachedData: boolean; // Whether noter has submitted staking data startBlock: number | null; currentBlock: number; durationBlocks: number; @@ -107,7 +108,13 @@ export async function getStakingScoreStatus( try { // eslint-disable-next-line @typescript-eslint/no-explicit-any if (!(peopleApi?.query as any)?.stakingScore?.stakingStartBlock) { - return { isTracking: false, startBlock: null, currentBlock: 0, durationBlocks: 0 }; + return { + isTracking: false, + hasCachedData: false, + startBlock: null, + currentBlock: 0, + durationBlocks: 0, + }; } // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -115,21 +122,59 @@ export async function getStakingScoreStatus( const currentBlock = Number((await peopleApi.query.system.number()).toString()); if (startBlockResult.isEmpty || startBlockResult.isNone) { - return { isTracking: false, startBlock: null, currentBlock, durationBlocks: 0 }; + return { + isTracking: false, + hasCachedData: false, + startBlock: null, + currentBlock, + durationBlocks: 0, + }; } const startBlock = Number(startBlockResult.toString()); const durationBlocks = currentBlock - startBlock; + // Check if noter has submitted cached staking data + let hasCachedData = false; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + if ((peopleApi.query as any).stakingScore?.cachedStakingDetails) { + try { + const [relayResult, assetHubResult] = await Promise.all([ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (peopleApi.query as any).stakingScore + .cachedStakingDetails(address, 'RelayChain') + .catch(() => ({ isSome: false, isEmpty: true })), + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (peopleApi.query as any).stakingScore + .cachedStakingDetails(address, 'AssetHub') + .catch(() => ({ isSome: false, isEmpty: true })), + ]); + hasCachedData = + relayResult.isSome || + !relayResult.isEmpty || + assetHubResult.isSome || + !assetHubResult.isEmpty; + } catch { + hasCachedData = false; + } + } + return { isTracking: true, + hasCachedData, startBlock, currentBlock, durationBlocks, }; } catch (error) { console.error('Error fetching staking score status:', error); - return { isTracking: false, startBlock: null, currentBlock: 0, durationBlocks: 0 }; + return { + isTracking: false, + hasCachedData: false, + startBlock: null, + currentBlock: 0, + durationBlocks: 0, + }; } } diff --git a/src/sections/Rewards.tsx b/src/sections/Rewards.tsx index 05c60a9..854f567 100644 --- a/src/sections/Rewards.tsx +++ b/src/sections/Rewards.tsx @@ -609,10 +609,16 @@ export function RewardsSection() {
{stakingStatus?.isTracking ? (
-
-