@taskon/widget-react 0.0.1-beta.5 → 0.0.1-beta.7
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/README.md +61 -47
- package/dist/CommunityTaskList.css +9 -1
- package/dist/EligibilityInfo.css +48 -75
- package/dist/LeaderboardWidget.css +73 -71
- package/dist/PageBuilder.css +5 -0
- package/dist/Quest.css +18 -14
- package/dist/TaskOnProvider.css +289 -0
- package/dist/ThemeProvider.css +227 -0
- package/dist/UserCenterWidget.css +6 -6
- package/dist/UserCenterWidget2.css +1388 -1621
- package/dist/{dynamic-import-helper.css → WidgetShell.css} +0 -227
- package/dist/chunks/{CommunityTaskList-CrMvOB8w.js → CommunityTaskList-D0uVD8wD.js} +393 -208
- package/dist/chunks/{EligibilityInfo-Beww12QX.js → EligibilityInfo-Cf6hx9-a.js} +459 -679
- package/dist/chunks/{LeaderboardWidget-DwuSpVl0.js → LeaderboardWidget-DyoiiNS6.js} +274 -252
- package/dist/chunks/{PageBuilder-DsX6Tv0N.js → PageBuilder-DoAFPm6-.js} +5 -5
- package/dist/chunks/{Quest-CuD2LElS.js → Quest-ySZlYd4u.js} +74 -57
- package/dist/chunks/TaskOnProvider-CxtFIs3n.js +2072 -0
- package/dist/chunks/{dynamic-import-helper-WmIF58Sb.js → ThemeProvider-CulHkqqY.js} +1282 -555
- package/dist/chunks/UserCenterWidget-BJsc_GSZ.js +3246 -0
- package/dist/chunks/{UserCenterWidget-CvU6K4AC.js → UserCenterWidget-STq8kpV4.js} +1174 -1386
- package/dist/chunks/WidgetShell-8xn-Jivw.js +659 -0
- package/dist/chunks/communitytask-es-CBNnS4o2.js +521 -0
- package/dist/chunks/communitytask-ja-GRf9cbdx.js +521 -0
- package/dist/chunks/communitytask-ko-Bf24PQKI.js +521 -0
- package/dist/chunks/{communitytask-ru-DhySaZL8.js → communitytask-ru-CZm2CPoV.js} +211 -1
- package/dist/chunks/leaderboardwidget-es-vKjrjQaz.js +146 -0
- package/dist/chunks/leaderboardwidget-ja-Q6u0HxKG.js +146 -0
- package/dist/chunks/leaderboardwidget-ko-CG6SWgxf.js +146 -0
- package/dist/chunks/leaderboardwidget-ru-DCcHcJGz.js +146 -0
- package/dist/chunks/{quest-es-D-b5xcme.js → quest-es-Dyyy0zaw.js} +8 -93
- package/dist/chunks/{quest-ja-Dxd2vqBF.js → quest-ja-Depog33y.js} +8 -93
- package/dist/chunks/{quest-ko-CSmRWgK_.js → quest-ko-BMu3uRQJ.js} +8 -93
- package/dist/chunks/{quest-ru-CkEKv1_F.js → quest-ru-xne814Rw.js} +8 -93
- package/dist/chunks/useIsMobile-D6Ybur-6.js +30 -0
- package/dist/chunks/useToast-BGJhd3BX.js +93 -0
- package/dist/chunks/usercenter-es-Dz3Wp2vV.js +512 -0
- package/dist/chunks/usercenter-ja-CKE4DJC6.js +512 -0
- package/dist/chunks/usercenter-ko-Dtpkn2qb.js +512 -0
- package/dist/chunks/usercenter-ru-DnBGee45.js +512 -0
- package/dist/community-task.d.ts +0 -390
- package/dist/community-task.js +2 -7
- package/dist/core.d.ts +38 -20
- package/dist/core.js +9 -10
- package/dist/index.d.ts +86 -709
- package/dist/index.js +22 -28
- package/dist/leaderboard.d.ts +0 -498
- package/dist/leaderboard.js +2 -16
- package/dist/page-builder.js +1 -1
- package/dist/quest.d.ts +0 -971
- package/dist/quest.js +2 -7
- package/dist/user-center.d.ts +0 -1610
- package/dist/user-center.js +2 -494
- package/package.json +2 -2
- package/dist/chunks/TaskOnProvider-xUeP2Nro.js +0 -1243
- package/dist/chunks/ThemeProvider-Bt4UZ33y.js +0 -1334
- package/dist/chunks/UserCenterWidget-CB0hnj-L.js +0 -3230
- package/dist/chunks/communitytask-es-1zawvXEX.js +0 -311
- package/dist/chunks/communitytask-ja-CmW6nP-L.js +0 -311
- package/dist/chunks/communitytask-ko-BD0hzQSi.js +0 -311
- package/dist/chunks/createLocaleLoader-BameiEhU.js +0 -65
- package/dist/chunks/leaderboardwidget-ja-Bj6gz6y1.js +0 -119
- package/dist/chunks/leaderboardwidget-ko-f1cLO9ic.js +0 -119
- package/dist/chunks/useToast-CaRkylKe.js +0 -304
- package/dist/chunks/usercenter-ja-B2465c1O.js +0 -326
- package/dist/chunks/usercenter-ko-xAEYxqLg.js +0 -326
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { B as Button, T as Table, P as Pagination, D as Dialog, a as useResolvedWidgetConfig, W as WidgetShell, _ as __variableDynamicImportRuntimeHelper, u as usePagination } from "./dynamic-import-helper-WmIF58Sb.js";
|
|
2
1
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
2
|
import { useState, useCallback, useEffect, useMemo } from "react";
|
|
4
3
|
import { createLeaderboardApi, LeaderboardContentType, formatRankRange, RewardsDistributeType, formatRewardText, calculatePrizePool, RewardType, LeaderboardTableColumn, truncateAddress, isAllTimeResponse, isCampaignResponse } from "@taskon/core";
|
|
5
|
-
import {
|
|
4
|
+
import { h as useTaskOnContext, c as useTranslation, e as createLocaleLoader, D as Dialog } from "./ThemeProvider-CulHkqqY.js";
|
|
5
|
+
import { B as Button, T as Table, P as Pagination, u as useResolvedWidgetConfig, W as WidgetShell, a as usePagination } from "./WidgetShell-8xn-Jivw.js";
|
|
6
6
|
import '../LeaderboardWidget.css';function useLeaderboard(options) {
|
|
7
7
|
const { client } = useTaskOnContext();
|
|
8
8
|
const [data, setData] = useState(null);
|
|
@@ -81,12 +81,12 @@ function useCampaignReward(campaignId) {
|
|
|
81
81
|
}, [campaignId, client]);
|
|
82
82
|
const rewardSummary = useMemo(() => {
|
|
83
83
|
if (!campaignInfo) return null;
|
|
84
|
-
let
|
|
84
|
+
let totalWinners = 0;
|
|
85
85
|
const tiers = [];
|
|
86
86
|
campaignInfo.winner_rewards.forEach((wr) => {
|
|
87
87
|
wr.winner_layer_rewards.forEach((wlr, index) => {
|
|
88
88
|
var _a;
|
|
89
|
-
|
|
89
|
+
totalWinners += wlr.max_winners;
|
|
90
90
|
const { text: rankRangeText, from: rankFrom, to: rankTo } = formatRankRange(wlr, index);
|
|
91
91
|
const distributeType = ((_a = wlr.rewards[0]) == null ? void 0 : _a.reward_distribute_type) || RewardsDistributeType.Equally;
|
|
92
92
|
const simpleReward = campaignInfo.winner_rewards_simple[index];
|
|
@@ -105,10 +105,10 @@ function useCampaignReward(campaignId) {
|
|
|
105
105
|
});
|
|
106
106
|
});
|
|
107
107
|
});
|
|
108
|
-
const
|
|
108
|
+
const prizePool = calculatePrizePool(campaignInfo.winner_rewards_simple);
|
|
109
109
|
return {
|
|
110
|
-
prizePool
|
|
111
|
-
totalWinners
|
|
110
|
+
prizePool,
|
|
111
|
+
totalWinners,
|
|
112
112
|
tiers,
|
|
113
113
|
startTime: campaignInfo.start_time,
|
|
114
114
|
endTime: campaignInfo.end_time,
|
|
@@ -125,6 +125,126 @@ function useCampaignReward(campaignId) {
|
|
|
125
125
|
refresh: fetchCampaignInfo
|
|
126
126
|
};
|
|
127
127
|
}
|
|
128
|
+
const tab_all_time = "All Time";
|
|
129
|
+
const tab_quest = "Quest";
|
|
130
|
+
const tab_event = "Event";
|
|
131
|
+
const tab_sprint = "Sprint";
|
|
132
|
+
const column_rank = "Rank";
|
|
133
|
+
const column_position = "Position";
|
|
134
|
+
const column_user = "User";
|
|
135
|
+
const column_tasks = "Tasks";
|
|
136
|
+
const column_invited_users = "Invited Users";
|
|
137
|
+
const column_current_tier = "Current Tier";
|
|
138
|
+
const column_points = "Points";
|
|
139
|
+
const column_rewards = "Reward";
|
|
140
|
+
const status_ongoing = "Ongoing";
|
|
141
|
+
const status_ended = "Ended";
|
|
142
|
+
const status_upcoming = "Upcoming";
|
|
143
|
+
const participants = "Participants";
|
|
144
|
+
const prize_pool = "Prize Pool";
|
|
145
|
+
const total_winners = "Total Winners";
|
|
146
|
+
const reward_rules = "Reward Rules";
|
|
147
|
+
const reward_rules_title = "Reward Rules";
|
|
148
|
+
const reward_rules_desc = "Rewards will be given based on leaderboard rankings, determined by users' {pointsName} earned during the event.";
|
|
149
|
+
const event_period = "Event Period";
|
|
150
|
+
const reward_details = "Reward Details";
|
|
151
|
+
const each_receives = "Each receives {amount}";
|
|
152
|
+
const randomly_split = "Randomly split {amount}";
|
|
153
|
+
const empty_title = "No Rankings Yet";
|
|
154
|
+
const empty_desc = "Be the first to join and claim the top spot!";
|
|
155
|
+
const page = "Page";
|
|
156
|
+
const of = "of";
|
|
157
|
+
const previous = "Previous";
|
|
158
|
+
const next = "Next";
|
|
159
|
+
const loading = "Loading...";
|
|
160
|
+
const error = "Failed to load leaderboard";
|
|
161
|
+
const retry = "Retry";
|
|
162
|
+
const not_configured = "Not configured";
|
|
163
|
+
const you = "You";
|
|
164
|
+
const unranked = "Unranked";
|
|
165
|
+
const na = "N/A";
|
|
166
|
+
const no_data = "-";
|
|
167
|
+
const whitelist = "Whitelist";
|
|
168
|
+
const reward_type_nft = "NFT:";
|
|
169
|
+
const reward_type_discord_role = "Discord Role:";
|
|
170
|
+
const reward_type_exp = "EXP:";
|
|
171
|
+
const reward_type_token = "Token:";
|
|
172
|
+
const reward_type_cap = "CAP";
|
|
173
|
+
const reward_value_usd_in = "{amount} USD in {symbol}";
|
|
174
|
+
const reward_rank_top = "Top {val}";
|
|
175
|
+
const enMessages = {
|
|
176
|
+
tab_all_time,
|
|
177
|
+
tab_quest,
|
|
178
|
+
tab_event,
|
|
179
|
+
tab_sprint,
|
|
180
|
+
column_rank,
|
|
181
|
+
column_position,
|
|
182
|
+
column_user,
|
|
183
|
+
column_tasks,
|
|
184
|
+
column_invited_users,
|
|
185
|
+
column_current_tier,
|
|
186
|
+
column_points,
|
|
187
|
+
column_rewards,
|
|
188
|
+
status_ongoing,
|
|
189
|
+
status_ended,
|
|
190
|
+
status_upcoming,
|
|
191
|
+
participants,
|
|
192
|
+
prize_pool,
|
|
193
|
+
total_winners,
|
|
194
|
+
reward_rules,
|
|
195
|
+
reward_rules_title,
|
|
196
|
+
reward_rules_desc,
|
|
197
|
+
event_period,
|
|
198
|
+
reward_details,
|
|
199
|
+
each_receives,
|
|
200
|
+
randomly_split,
|
|
201
|
+
empty_title,
|
|
202
|
+
empty_desc,
|
|
203
|
+
page,
|
|
204
|
+
of,
|
|
205
|
+
previous,
|
|
206
|
+
next,
|
|
207
|
+
loading,
|
|
208
|
+
error,
|
|
209
|
+
retry,
|
|
210
|
+
not_configured,
|
|
211
|
+
you,
|
|
212
|
+
unranked,
|
|
213
|
+
na,
|
|
214
|
+
no_data,
|
|
215
|
+
whitelist,
|
|
216
|
+
reward_type_nft,
|
|
217
|
+
reward_type_discord_role,
|
|
218
|
+
reward_type_exp,
|
|
219
|
+
reward_type_token,
|
|
220
|
+
reward_type_cap,
|
|
221
|
+
reward_value_usd_in,
|
|
222
|
+
reward_rank_top
|
|
223
|
+
};
|
|
224
|
+
const loadMessages = createLocaleLoader(
|
|
225
|
+
enMessages,
|
|
226
|
+
{
|
|
227
|
+
ko: () => import("./leaderboardwidget-ko-CG6SWgxf.js").then((module) => ({
|
|
228
|
+
default: module.default
|
|
229
|
+
})),
|
|
230
|
+
ja: () => import("./leaderboardwidget-ja-Q6u0HxKG.js").then((module) => ({
|
|
231
|
+
default: module.default
|
|
232
|
+
})),
|
|
233
|
+
ru: () => import("./leaderboardwidget-ru-DCcHcJGz.js").then((module) => ({
|
|
234
|
+
default: module.default
|
|
235
|
+
})),
|
|
236
|
+
es: () => import("./leaderboardwidget-es-vKjrjQaz.js").then((module) => ({
|
|
237
|
+
default: module.default
|
|
238
|
+
}))
|
|
239
|
+
}
|
|
240
|
+
);
|
|
241
|
+
function useLeaderboardLocale() {
|
|
242
|
+
return useTranslation({
|
|
243
|
+
widgetId: "LeaderboardWidget",
|
|
244
|
+
defaultMessages: enMessages,
|
|
245
|
+
loadMessages
|
|
246
|
+
});
|
|
247
|
+
}
|
|
128
248
|
function HexagonBadge({
|
|
129
249
|
rank,
|
|
130
250
|
colorClass
|
|
@@ -152,11 +272,12 @@ function HexagonBadge({
|
|
|
152
272
|
] });
|
|
153
273
|
}
|
|
154
274
|
function RankBadge({ rank, isAllTime = false, className = "" }) {
|
|
275
|
+
const { t } = useLeaderboardLocale();
|
|
155
276
|
if (rank < 0) {
|
|
156
|
-
return /* @__PURE__ */ jsx("span", { className: `taskon-leaderboard-rank taskon-leaderboard-rank--na ${className}`, children: "
|
|
277
|
+
return /* @__PURE__ */ jsx("span", { className: `taskon-leaderboard-rank taskon-leaderboard-rank--na ${className}`, children: t("na") });
|
|
157
278
|
}
|
|
158
279
|
if (rank === 0) {
|
|
159
|
-
return /* @__PURE__ */ jsx("span", { className: `taskon-leaderboard-rank taskon-leaderboard-rank--unranked ${className}`, children: "
|
|
280
|
+
return /* @__PURE__ */ jsx("span", { className: `taskon-leaderboard-rank taskon-leaderboard-rank--unranked ${className}`, children: t("unranked") });
|
|
160
281
|
}
|
|
161
282
|
if (rank === 1) {
|
|
162
283
|
return /* @__PURE__ */ jsx("div", { className, children: /* @__PURE__ */ jsx(HexagonBadge, { rank: 1, colorClass: "gold" }) });
|
|
@@ -175,10 +296,10 @@ function UserCell({
|
|
|
175
296
|
displayName,
|
|
176
297
|
avatar,
|
|
177
298
|
isCurrentUser = false,
|
|
178
|
-
youLabel = "YOU",
|
|
179
299
|
onUserClick,
|
|
180
300
|
className = ""
|
|
181
301
|
}) {
|
|
302
|
+
const { t } = useLeaderboardLocale();
|
|
182
303
|
const handleClick = () => {
|
|
183
304
|
if (onUserClick) {
|
|
184
305
|
onUserClick(userId, userName);
|
|
@@ -186,7 +307,13 @@ function UserCell({
|
|
|
186
307
|
};
|
|
187
308
|
const isClickable = !!onUserClick && !isCurrentUser;
|
|
188
309
|
if (isCurrentUser) {
|
|
189
|
-
return /* @__PURE__ */ jsx(
|
|
310
|
+
return /* @__PURE__ */ jsx(
|
|
311
|
+
"div",
|
|
312
|
+
{
|
|
313
|
+
className: `taskon-leaderboard-user taskon-leaderboard-user--current ${className}`,
|
|
314
|
+
children: /* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-user__you-badge", children: t("you") })
|
|
315
|
+
}
|
|
316
|
+
);
|
|
190
317
|
}
|
|
191
318
|
return /* @__PURE__ */ jsx(
|
|
192
319
|
"div",
|
|
@@ -204,32 +331,32 @@ function UserCell({
|
|
|
204
331
|
}
|
|
205
332
|
);
|
|
206
333
|
}
|
|
207
|
-
function getRewardTypeLabel(rewardType, rewardPointsName,
|
|
334
|
+
function getRewardTypeLabel(rewardType, rewardPointsName, t) {
|
|
208
335
|
if (!rewardType) return null;
|
|
209
336
|
if (rewardType === RewardType.BMintedNft || rewardType === RewardType.Cap || rewardType === RewardType.Nft) {
|
|
210
|
-
return "
|
|
337
|
+
return t("reward_type_nft");
|
|
211
338
|
}
|
|
212
339
|
if (rewardType === RewardType.DiscordRole) {
|
|
213
|
-
return "
|
|
340
|
+
return t("reward_type_discord_role");
|
|
214
341
|
}
|
|
215
342
|
if (rewardType === RewardType.Exp) {
|
|
216
|
-
return "
|
|
343
|
+
return t("reward_type_exp");
|
|
217
344
|
}
|
|
218
345
|
if (rewardType === RewardType.GTCPoints || rewardType === RewardType.Points) {
|
|
219
|
-
return `${rewardPointsName ||
|
|
346
|
+
return `${rewardPointsName || t("column_points")}:`;
|
|
220
347
|
}
|
|
221
348
|
if (rewardType === RewardType.Token) {
|
|
222
|
-
return "
|
|
349
|
+
return t("reward_type_token");
|
|
223
350
|
}
|
|
224
351
|
if (rewardType === RewardType.Whitelist) {
|
|
225
352
|
return null;
|
|
226
353
|
}
|
|
227
354
|
return null;
|
|
228
355
|
}
|
|
229
|
-
function getRewardValueLabel(rewardType, rewardAmount, rewardSymbol, chainLabel, isUsdtEqual,
|
|
356
|
+
function getRewardValueLabel(rewardType, rewardAmount, rewardSymbol, chainLabel, isUsdtEqual, t) {
|
|
230
357
|
if (!rewardType) {
|
|
231
358
|
return {
|
|
232
|
-
value: rewardAmount ? `${rewardAmount} ${rewardSymbol || ""}` :
|
|
359
|
+
value: rewardAmount ? `${rewardAmount} ${rewardSymbol || ""}` : t("no_data"),
|
|
233
360
|
showChain: !!chainLabel
|
|
234
361
|
};
|
|
235
362
|
}
|
|
@@ -237,22 +364,31 @@ function getRewardValueLabel(rewardType, rewardAmount, rewardSymbol, chainLabel,
|
|
|
237
364
|
return { value: rewardSymbol || "", showChain: false };
|
|
238
365
|
}
|
|
239
366
|
if (rewardType === RewardType.Cap) {
|
|
240
|
-
return { value: "
|
|
367
|
+
return { value: t("reward_type_cap"), showChain: false };
|
|
241
368
|
}
|
|
242
369
|
if (rewardType === RewardType.GTCPoints || rewardType === RewardType.Points) {
|
|
243
370
|
return { value: rewardAmount || "", showChain: false };
|
|
244
371
|
}
|
|
245
372
|
if (rewardType === RewardType.Token) {
|
|
246
373
|
if (isUsdtEqual) {
|
|
247
|
-
return {
|
|
374
|
+
return {
|
|
375
|
+
value: t("reward_value_usd_in", {
|
|
376
|
+
amount: rewardAmount ?? "",
|
|
377
|
+
symbol: rewardSymbol ?? ""
|
|
378
|
+
}),
|
|
379
|
+
showChain: false
|
|
380
|
+
};
|
|
248
381
|
}
|
|
249
|
-
return {
|
|
382
|
+
return {
|
|
383
|
+
value: `${rewardAmount} ${rewardSymbol}`,
|
|
384
|
+
showChain: !!chainLabel
|
|
385
|
+
};
|
|
250
386
|
}
|
|
251
387
|
if (rewardType === RewardType.Whitelist) {
|
|
252
|
-
return { value:
|
|
388
|
+
return { value: t("whitelist"), showChain: false };
|
|
253
389
|
}
|
|
254
390
|
return {
|
|
255
|
-
value: rewardAmount ? `${rewardAmount} ${rewardSymbol || ""}` :
|
|
391
|
+
value: rewardAmount ? `${rewardAmount} ${rewardSymbol || ""}` : t("no_data"),
|
|
256
392
|
showChain: !!chainLabel
|
|
257
393
|
};
|
|
258
394
|
}
|
|
@@ -263,32 +399,38 @@ function RewardCell({
|
|
|
263
399
|
rewardType,
|
|
264
400
|
rewardPointsName,
|
|
265
401
|
isUsdtEqual,
|
|
266
|
-
messages,
|
|
267
402
|
isPotential = false,
|
|
268
403
|
className = ""
|
|
269
404
|
}) {
|
|
405
|
+
const { t } = useLeaderboardLocale();
|
|
270
406
|
if (!rewardAmount && !rewardType) {
|
|
271
|
-
return /* @__PURE__ */ jsx("span", { className, children:
|
|
407
|
+
return /* @__PURE__ */ jsx("span", { className, children: t("no_data") });
|
|
272
408
|
}
|
|
273
|
-
const typeLabel = getRewardTypeLabel(rewardType, rewardPointsName,
|
|
409
|
+
const typeLabel = getRewardTypeLabel(rewardType, rewardPointsName, t);
|
|
274
410
|
const { value, showChain } = getRewardValueLabel(
|
|
275
411
|
rewardType,
|
|
276
412
|
rewardAmount,
|
|
277
413
|
rewardSymbol,
|
|
278
414
|
chainLabel,
|
|
279
415
|
isUsdtEqual,
|
|
280
|
-
|
|
416
|
+
t
|
|
281
417
|
);
|
|
282
418
|
const potentialClass = isPotential ? "taskon-leaderboard-table__reward--potential" : "";
|
|
283
|
-
return /* @__PURE__ */ jsxs(
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
419
|
+
return /* @__PURE__ */ jsxs(
|
|
420
|
+
"span",
|
|
421
|
+
{
|
|
422
|
+
className: `taskon-leaderboard-table__reward ${potentialClass} ${className}`,
|
|
423
|
+
children: [
|
|
424
|
+
typeLabel && /* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-table__reward-type", children: typeLabel }),
|
|
425
|
+
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-table__reward-value", children: value }),
|
|
426
|
+
showChain && chainLabel && /* @__PURE__ */ jsxs("span", { className: "taskon-leaderboard-table__reward-chain", children: [
|
|
427
|
+
"(",
|
|
428
|
+
chainLabel,
|
|
429
|
+
")"
|
|
430
|
+
] })
|
|
431
|
+
]
|
|
432
|
+
}
|
|
433
|
+
);
|
|
292
434
|
}
|
|
293
435
|
function LeaderboardTabs({
|
|
294
436
|
tabs,
|
|
@@ -296,6 +438,21 @@ function LeaderboardTabs({
|
|
|
296
438
|
onTabChange,
|
|
297
439
|
className = ""
|
|
298
440
|
}) {
|
|
441
|
+
const { t } = useLeaderboardLocale();
|
|
442
|
+
const getFallbackTitle = (tab) => {
|
|
443
|
+
switch (tab.type) {
|
|
444
|
+
case LeaderboardContentType.AllTime:
|
|
445
|
+
return t("tab_all_time");
|
|
446
|
+
case LeaderboardContentType.Quest:
|
|
447
|
+
return t("tab_quest");
|
|
448
|
+
case LeaderboardContentType.Event:
|
|
449
|
+
return t("tab_event");
|
|
450
|
+
case LeaderboardContentType.LeaderboardSprint:
|
|
451
|
+
return t("tab_sprint");
|
|
452
|
+
default:
|
|
453
|
+
return "";
|
|
454
|
+
}
|
|
455
|
+
};
|
|
299
456
|
if (tabs.length <= 1) {
|
|
300
457
|
return null;
|
|
301
458
|
}
|
|
@@ -309,7 +466,7 @@ function LeaderboardTabs({
|
|
|
309
466
|
"aria-controls": `leaderboard-panel-${tab.id}`,
|
|
310
467
|
className: `taskon-leaderboard-tabs__tab ${isActive ? "taskon-leaderboard-tabs__tab--active" : ""}`,
|
|
311
468
|
onClick: () => onTabChange(tab.id),
|
|
312
|
-
children: tab.title
|
|
469
|
+
children: tab.title || getFallbackTitle(tab)
|
|
313
470
|
},
|
|
314
471
|
tab.id
|
|
315
472
|
);
|
|
@@ -335,36 +492,38 @@ function formatTimeRange(startTime, endTime) {
|
|
|
335
492
|
const endMinutes = String(end.getMinutes()).padStart(2, "0");
|
|
336
493
|
return `(${timezone}) ${startYear}-${startMonth}-${startDay} ${startHours}:${startMinutes} ~ ${endYear}-${endMonth}-${endDay} ${endHours}:${endMinutes}`;
|
|
337
494
|
}
|
|
338
|
-
function getEventStatus(startTime, endTime,
|
|
495
|
+
function getEventStatus(startTime, endTime, t) {
|
|
339
496
|
if (!startTime || !endTime) return null;
|
|
340
497
|
const now = Date.now();
|
|
341
498
|
if (now < startTime) {
|
|
342
|
-
return { label:
|
|
499
|
+
return { label: t("status_upcoming"), status: "upcoming" };
|
|
343
500
|
}
|
|
344
501
|
if (now > endTime) {
|
|
345
|
-
return { label:
|
|
502
|
+
return { label: t("status_ended"), status: "ended" };
|
|
346
503
|
}
|
|
347
|
-
return { label:
|
|
504
|
+
return { label: t("status_ongoing"), status: "ongoing" };
|
|
348
505
|
}
|
|
349
506
|
function LeaderboardHeader({
|
|
350
507
|
tabConfig,
|
|
351
508
|
showTitle,
|
|
352
509
|
rewardSummary,
|
|
353
510
|
participantsCount,
|
|
354
|
-
messages,
|
|
355
511
|
onOpenRewardRules,
|
|
356
512
|
className = ""
|
|
357
513
|
}) {
|
|
514
|
+
const { t } = useLeaderboardLocale();
|
|
358
515
|
const isSprint = tabConfig.type === LeaderboardContentType.LeaderboardSprint;
|
|
359
|
-
const
|
|
516
|
+
const sprintRewardSummary = isSprint ? rewardSummary ?? null : null;
|
|
517
|
+
const eventStatus = getEventStatus(tabConfig.startTime, tabConfig.endTime, t);
|
|
360
518
|
const hasTimeRange = tabConfig.startTime && tabConfig.endTime;
|
|
361
519
|
const hasParticipants = typeof participantsCount === "number";
|
|
362
|
-
const
|
|
363
|
-
|
|
520
|
+
const shouldShowInfo = Boolean(showTitle && (eventStatus || hasTimeRange || hasParticipants));
|
|
521
|
+
const shouldShowRewardInfo = sprintRewardSummary !== null;
|
|
522
|
+
if (!shouldShowInfo && !shouldShowRewardInfo) {
|
|
364
523
|
return null;
|
|
365
524
|
}
|
|
366
525
|
return /* @__PURE__ */ jsxs("div", { className: `taskon-leaderboard-header ${className}`, children: [
|
|
367
|
-
|
|
526
|
+
shouldShowInfo && /* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard-header__info", children: [
|
|
368
527
|
eventStatus && /* @__PURE__ */ jsx(
|
|
369
528
|
"span",
|
|
370
529
|
{
|
|
@@ -375,19 +534,19 @@ function LeaderboardHeader({
|
|
|
375
534
|
hasTimeRange && /* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-header__time", children: formatTimeRange(tabConfig.startTime, tabConfig.endTime) }),
|
|
376
535
|
hasParticipants && (eventStatus || hasTimeRange) && /* @__PURE__ */ jsx("div", { className: "taskon-leaderboard-header__separator" }),
|
|
377
536
|
hasParticipants && /* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard-header__participants", children: [
|
|
378
|
-
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-header__participants-label", children:
|
|
537
|
+
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-header__participants-label", children: t("participants") }),
|
|
379
538
|
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-header__participants-value", children: participantsCount.toLocaleString() })
|
|
380
539
|
] })
|
|
381
540
|
] }),
|
|
382
|
-
|
|
541
|
+
shouldShowRewardInfo && /* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard-header__reward-info", children: [
|
|
383
542
|
/* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard-header__reward-item", children: [
|
|
384
|
-
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-header__reward-label", children:
|
|
385
|
-
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-header__reward-value", children:
|
|
543
|
+
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-header__reward-label", children: t("prize_pool") }),
|
|
544
|
+
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-header__reward-value", children: sprintRewardSummary.prizePool || t("no_data") })
|
|
386
545
|
] }),
|
|
387
546
|
/* @__PURE__ */ jsx("div", { className: "taskon-leaderboard-header__reward-separator" }),
|
|
388
547
|
/* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard-header__reward-item", children: [
|
|
389
|
-
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-header__reward-label", children:
|
|
390
|
-
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-header__reward-value", children:
|
|
548
|
+
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-header__reward-label", children: t("total_winners") }),
|
|
549
|
+
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-header__reward-value", children: sprintRewardSummary.totalWinners })
|
|
391
550
|
] }),
|
|
392
551
|
onOpenRewardRules && /* @__PURE__ */ jsx(
|
|
393
552
|
Button,
|
|
@@ -396,28 +555,28 @@ function LeaderboardHeader({
|
|
|
396
555
|
size: "small",
|
|
397
556
|
onClick: onOpenRewardRules,
|
|
398
557
|
className: "taskon-leaderboard-header__reward-rules-btn",
|
|
399
|
-
children:
|
|
558
|
+
children: t("reward_rules")
|
|
400
559
|
}
|
|
401
560
|
)
|
|
402
561
|
] })
|
|
403
562
|
] });
|
|
404
563
|
}
|
|
405
|
-
function getColumnTitle(column,
|
|
564
|
+
function getColumnTitle(column, t, pointsName) {
|
|
406
565
|
switch (column) {
|
|
407
566
|
case LeaderboardTableColumn.Rank:
|
|
408
|
-
return
|
|
567
|
+
return t("column_rank");
|
|
409
568
|
case LeaderboardTableColumn.User:
|
|
410
|
-
return
|
|
569
|
+
return t("column_user");
|
|
411
570
|
case LeaderboardTableColumn.Tasks:
|
|
412
|
-
return
|
|
571
|
+
return t("column_tasks");
|
|
413
572
|
case LeaderboardTableColumn.InvitedUsers:
|
|
414
|
-
return
|
|
573
|
+
return t("column_invited_users");
|
|
415
574
|
case LeaderboardTableColumn.CurrentTier:
|
|
416
|
-
return
|
|
575
|
+
return t("column_current_tier");
|
|
417
576
|
case LeaderboardTableColumn.Points:
|
|
418
|
-
return pointsName ||
|
|
577
|
+
return pointsName || t("column_points");
|
|
419
578
|
case LeaderboardTableColumn.Rewards:
|
|
420
|
-
return
|
|
579
|
+
return t("column_rewards");
|
|
421
580
|
default:
|
|
422
581
|
return "";
|
|
423
582
|
}
|
|
@@ -474,12 +633,12 @@ function LeaderboardTable({
|
|
|
474
633
|
allTimeData,
|
|
475
634
|
campaignData,
|
|
476
635
|
currentUserId,
|
|
477
|
-
messages,
|
|
478
636
|
onUserClick,
|
|
479
637
|
rewardTiers,
|
|
480
638
|
loading: loading2 = false,
|
|
481
639
|
className = ""
|
|
482
640
|
}) {
|
|
641
|
+
const { t } = useLeaderboardLocale();
|
|
483
642
|
const isAllTime = tabConfig.type === LeaderboardContentType.AllTime;
|
|
484
643
|
const tableData = useMemo(() => {
|
|
485
644
|
if (isAllTime && allTimeData) {
|
|
@@ -494,7 +653,7 @@ function LeaderboardTable({
|
|
|
494
653
|
return tabConfig.columns.map((column) => {
|
|
495
654
|
const baseColumn = {
|
|
496
655
|
key: column,
|
|
497
|
-
title: getColumnTitle(column,
|
|
656
|
+
title: getColumnTitle(column, t, tabConfig.pointsName)
|
|
498
657
|
};
|
|
499
658
|
switch (column) {
|
|
500
659
|
case LeaderboardTableColumn.Rank:
|
|
@@ -515,7 +674,6 @@ function LeaderboardTable({
|
|
|
515
674
|
displayName: formatUserDisplayName(row.userName),
|
|
516
675
|
avatar: row.avatar,
|
|
517
676
|
isCurrentUser: currentUserId === row.userId,
|
|
518
|
-
youLabel: messages.you,
|
|
519
677
|
onUserClick
|
|
520
678
|
}
|
|
521
679
|
)
|
|
@@ -524,25 +682,25 @@ function LeaderboardTable({
|
|
|
524
682
|
return {
|
|
525
683
|
...baseColumn,
|
|
526
684
|
width: 142,
|
|
527
|
-
render: (_, row) => row.tasks ??
|
|
685
|
+
render: (_, row) => row.tasks ?? t("no_data")
|
|
528
686
|
};
|
|
529
687
|
case LeaderboardTableColumn.InvitedUsers:
|
|
530
688
|
return {
|
|
531
689
|
...baseColumn,
|
|
532
690
|
width: 142,
|
|
533
|
-
render: (_, row) => row.invitedUsers ??
|
|
691
|
+
render: (_, row) => row.invitedUsers ?? t("no_data")
|
|
534
692
|
};
|
|
535
693
|
case LeaderboardTableColumn.CurrentTier:
|
|
536
694
|
return {
|
|
537
695
|
...baseColumn,
|
|
538
696
|
width: 142,
|
|
539
|
-
render: (_, row) => row.currentTier ??
|
|
697
|
+
render: (_, row) => row.currentTier ?? t("no_data")
|
|
540
698
|
};
|
|
541
699
|
case LeaderboardTableColumn.Points:
|
|
542
700
|
return {
|
|
543
701
|
...baseColumn,
|
|
544
702
|
width: 142,
|
|
545
|
-
render: (_, row) => row.points && row.points > 0 ? row.points.toLocaleString() :
|
|
703
|
+
render: (_, row) => row.points && row.points > 0 ? row.points.toLocaleString() : t("no_data")
|
|
546
704
|
};
|
|
547
705
|
case LeaderboardTableColumn.Rewards:
|
|
548
706
|
return {
|
|
@@ -559,8 +717,7 @@ function LeaderboardTable({
|
|
|
559
717
|
chainLabel: row.chainLabel,
|
|
560
718
|
rewardType: row.rewardType,
|
|
561
719
|
rewardPointsName: row.rewardPointsName,
|
|
562
|
-
isUsdtEqual: row.isUsdtEqual
|
|
563
|
-
messages
|
|
720
|
+
isUsdtEqual: row.isUsdtEqual
|
|
564
721
|
}
|
|
565
722
|
);
|
|
566
723
|
}
|
|
@@ -572,22 +729,28 @@ function LeaderboardTable({
|
|
|
572
729
|
rewardAmount: reward.rewardAmount,
|
|
573
730
|
rewardSymbol: reward.rewardSymbol,
|
|
574
731
|
chainLabel: reward.chainLabel,
|
|
575
|
-
messages,
|
|
576
732
|
isPotential: true
|
|
577
733
|
}
|
|
578
734
|
);
|
|
579
735
|
}
|
|
580
|
-
return
|
|
736
|
+
return t("no_data");
|
|
581
737
|
}
|
|
582
738
|
};
|
|
583
739
|
default:
|
|
584
740
|
return {
|
|
585
741
|
...baseColumn,
|
|
586
|
-
render: () =>
|
|
742
|
+
render: () => t("no_data")
|
|
587
743
|
};
|
|
588
744
|
}
|
|
589
745
|
});
|
|
590
|
-
}, [
|
|
746
|
+
}, [
|
|
747
|
+
tabConfig.columns,
|
|
748
|
+
tabConfig.pointsName,
|
|
749
|
+
t,
|
|
750
|
+
currentUserId,
|
|
751
|
+
onUserClick,
|
|
752
|
+
rewardTiers
|
|
753
|
+
]);
|
|
591
754
|
const rowConfig = useMemo(
|
|
592
755
|
() => ({
|
|
593
756
|
getRowKey: (row) => row.id,
|
|
@@ -597,10 +760,10 @@ function LeaderboardTable({
|
|
|
597
760
|
);
|
|
598
761
|
const emptyConfig = useMemo(
|
|
599
762
|
() => ({
|
|
600
|
-
title:
|
|
601
|
-
description:
|
|
763
|
+
title: t("empty_title"),
|
|
764
|
+
description: t("empty_desc")
|
|
602
765
|
}),
|
|
603
|
-
[
|
|
766
|
+
[t]
|
|
604
767
|
);
|
|
605
768
|
return /* @__PURE__ */ jsx(
|
|
606
769
|
Table,
|
|
@@ -609,7 +772,7 @@ function LeaderboardTable({
|
|
|
609
772
|
data: tableData,
|
|
610
773
|
rowConfig,
|
|
611
774
|
loading: loading2,
|
|
612
|
-
loadingText:
|
|
775
|
+
loadingText: t("loading"),
|
|
613
776
|
empty: emptyConfig,
|
|
614
777
|
striped: true,
|
|
615
778
|
className
|
|
@@ -624,7 +787,6 @@ function LeaderboardPagination({
|
|
|
624
787
|
hasNext,
|
|
625
788
|
onPrevious,
|
|
626
789
|
onNext,
|
|
627
|
-
messages,
|
|
628
790
|
className = ""
|
|
629
791
|
}) {
|
|
630
792
|
if (totalPages <= 1 || total === 0) {
|
|
@@ -648,7 +810,7 @@ function LeaderboardPagination({
|
|
|
648
810
|
function formatDate(timestamp) {
|
|
649
811
|
if (!timestamp) return "";
|
|
650
812
|
const date = new Date(timestamp);
|
|
651
|
-
return date.toLocaleDateString(
|
|
813
|
+
return date.toLocaleDateString(void 0, {
|
|
652
814
|
year: "numeric",
|
|
653
815
|
month: "short",
|
|
654
816
|
day: "numeric",
|
|
@@ -656,26 +818,23 @@ function formatDate(timestamp) {
|
|
|
656
818
|
minute: "2-digit"
|
|
657
819
|
});
|
|
658
820
|
}
|
|
659
|
-
function getDistributeText(distributeType,
|
|
821
|
+
function getDistributeText(distributeType, t) {
|
|
660
822
|
switch (distributeType) {
|
|
661
823
|
case RewardsDistributeType.Equally:
|
|
662
|
-
return "
|
|
824
|
+
return t("each_receives", { amount: "{amount}" }).replace("{amount}", "").trim();
|
|
663
825
|
case RewardsDistributeType.Random:
|
|
664
|
-
return "
|
|
826
|
+
return t("randomly_split", { amount: "{amount}" }).replace("{amount}", "").trim();
|
|
665
827
|
default:
|
|
666
828
|
return "";
|
|
667
829
|
}
|
|
668
830
|
}
|
|
669
831
|
function TierRow({
|
|
670
832
|
tier,
|
|
671
|
-
|
|
833
|
+
t
|
|
672
834
|
}) {
|
|
673
|
-
const distributeText = getDistributeText(tier.distributeType);
|
|
835
|
+
const distributeText = getDistributeText(tier.distributeType, t);
|
|
674
836
|
return /* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard-modal__tier", children: [
|
|
675
|
-
/* @__PURE__ */
|
|
676
|
-
"Top ",
|
|
677
|
-
tier.rankRangeText
|
|
678
|
-
] }),
|
|
837
|
+
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-modal__tier-rank", children: t("reward_rank_top", { val: tier.rankRangeText }) }),
|
|
679
838
|
/* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard-modal__tier-reward", children: [
|
|
680
839
|
distributeText && /* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-modal__tier-distribute", children: distributeText }),
|
|
681
840
|
/* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard-modal__tier-token", children: [
|
|
@@ -702,16 +861,15 @@ function RewardRulesModal({
|
|
|
702
861
|
isOpen,
|
|
703
862
|
onClose,
|
|
704
863
|
rewardSummary,
|
|
705
|
-
messages,
|
|
706
864
|
className = ""
|
|
707
865
|
}) {
|
|
866
|
+
const { t } = useLeaderboardLocale();
|
|
708
867
|
if (!rewardSummary) {
|
|
709
868
|
return null;
|
|
710
869
|
}
|
|
711
|
-
const description =
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
);
|
|
870
|
+
const description = t("reward_rules_desc", {
|
|
871
|
+
pointsName: rewardSummary.pointsName || t("column_points")
|
|
872
|
+
});
|
|
715
873
|
return /* @__PURE__ */ jsx(
|
|
716
874
|
Dialog,
|
|
717
875
|
{
|
|
@@ -719,16 +877,16 @@ function RewardRulesModal({
|
|
|
719
877
|
onOpenChange: (open) => {
|
|
720
878
|
if (!open) onClose();
|
|
721
879
|
},
|
|
722
|
-
title:
|
|
880
|
+
title: t("reward_rules_title"),
|
|
723
881
|
showCloseButton: true,
|
|
724
882
|
className,
|
|
725
883
|
contentClassName: "taskon-leaderboard-modal",
|
|
726
884
|
maxWidth: 480,
|
|
727
885
|
children: /* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard-modal__content", children: [
|
|
728
|
-
/* @__PURE__ */ jsx("h2", { className: "taskon-leaderboard-modal__title", children:
|
|
886
|
+
/* @__PURE__ */ jsx("h2", { className: "taskon-leaderboard-modal__title", children: t("reward_rules_title") }),
|
|
729
887
|
/* @__PURE__ */ jsx("p", { className: "taskon-leaderboard-modal__desc", children: description }),
|
|
730
888
|
/* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard-modal__section", children: [
|
|
731
|
-
/* @__PURE__ */ jsx("h3", { className: "taskon-leaderboard-modal__section-title", children:
|
|
889
|
+
/* @__PURE__ */ jsx("h3", { className: "taskon-leaderboard-modal__section-title", children: t("event_period") }),
|
|
732
890
|
/* @__PURE__ */ jsxs("p", { className: "taskon-leaderboard-modal__period", children: [
|
|
733
891
|
formatDate(rewardSummary.startTime),
|
|
734
892
|
" -",
|
|
@@ -737,8 +895,8 @@ function RewardRulesModal({
|
|
|
737
895
|
] })
|
|
738
896
|
] }),
|
|
739
897
|
/* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard-modal__section", children: [
|
|
740
|
-
/* @__PURE__ */ jsx("h3", { className: "taskon-leaderboard-modal__section-title", children:
|
|
741
|
-
/* @__PURE__ */ jsx("div", { className: "taskon-leaderboard-modal__tiers", children: rewardSummary.tiers.map((tier) => /* @__PURE__ */ jsx(TierRow, { tier,
|
|
898
|
+
/* @__PURE__ */ jsx("h3", { className: "taskon-leaderboard-modal__section-title", children: t("reward_details") }),
|
|
899
|
+
/* @__PURE__ */ jsx("div", { className: "taskon-leaderboard-modal__tiers", children: rewardSummary.tiers.map((tier) => /* @__PURE__ */ jsx(TierRow, { tier, t }, tier.tierNo)) })
|
|
742
900
|
] })
|
|
743
901
|
] })
|
|
744
902
|
}
|
|
@@ -749,131 +907,9 @@ function mergeLeaderboardConfig(props, cloud) {
|
|
|
749
907
|
config: props.config ?? cloud ?? null
|
|
750
908
|
};
|
|
751
909
|
}
|
|
752
|
-
const tabAllTime = "All Time";
|
|
753
|
-
const tabQuest = "Quest";
|
|
754
|
-
const tabEvent = "Event";
|
|
755
|
-
const tabSprint = "Sprint";
|
|
756
|
-
const columnRank = "Rank";
|
|
757
|
-
const columnPosition = "Position";
|
|
758
|
-
const columnUser = "User";
|
|
759
|
-
const columnTasks = "Tasks";
|
|
760
|
-
const columnInvitedUsers = "Invited Users";
|
|
761
|
-
const columnCurrentTier = "Current Tier";
|
|
762
|
-
const columnPoints = "Points";
|
|
763
|
-
const columnRewards = "Reward";
|
|
764
|
-
const statusOngoing = "Ongoing";
|
|
765
|
-
const statusEnded = "Ended";
|
|
766
|
-
const statusUpcoming = "Upcoming";
|
|
767
|
-
const participants = "Participants";
|
|
768
|
-
const prizePool = "Prize Pool";
|
|
769
|
-
const totalWinners = "Total Winners";
|
|
770
|
-
const rewardRules = "Reward Rules";
|
|
771
|
-
const rewardRulesTitle = "Reward Rules";
|
|
772
|
-
const rewardRulesDesc = "Rewards will be given based on leaderboard rankings, determined by users' {pointsName} earned during the event.";
|
|
773
|
-
const eventPeriod = "Event Period";
|
|
774
|
-
const rewardDetails = "Reward Details";
|
|
775
|
-
const eachReceives = "Each receives {amount}";
|
|
776
|
-
const randomlySplit = "Randomly split {amount}";
|
|
777
|
-
const emptyTitle = "No Rankings Yet";
|
|
778
|
-
const emptyDesc = "Be the first to join and claim the top spot!";
|
|
779
|
-
const page = "Page";
|
|
780
|
-
const of = "of";
|
|
781
|
-
const previous = "Previous";
|
|
782
|
-
const next = "Next";
|
|
783
|
-
const loading = "Loading...";
|
|
784
|
-
const error = "Failed to load leaderboard";
|
|
785
|
-
const retry = "Retry";
|
|
786
|
-
const you = "You";
|
|
787
|
-
const unranked = "Unranked";
|
|
788
|
-
const na = "N/A";
|
|
789
|
-
const noData = "-";
|
|
790
|
-
const whitelist = "Whitelist";
|
|
791
|
-
const enMessages = {
|
|
792
|
-
tabAllTime,
|
|
793
|
-
tabQuest,
|
|
794
|
-
tabEvent,
|
|
795
|
-
tabSprint,
|
|
796
|
-
columnRank,
|
|
797
|
-
columnPosition,
|
|
798
|
-
columnUser,
|
|
799
|
-
columnTasks,
|
|
800
|
-
columnInvitedUsers,
|
|
801
|
-
columnCurrentTier,
|
|
802
|
-
columnPoints,
|
|
803
|
-
columnRewards,
|
|
804
|
-
statusOngoing,
|
|
805
|
-
statusEnded,
|
|
806
|
-
statusUpcoming,
|
|
807
|
-
participants,
|
|
808
|
-
prizePool,
|
|
809
|
-
totalWinners,
|
|
810
|
-
rewardRules,
|
|
811
|
-
rewardRulesTitle,
|
|
812
|
-
rewardRulesDesc,
|
|
813
|
-
eventPeriod,
|
|
814
|
-
rewardDetails,
|
|
815
|
-
eachReceives,
|
|
816
|
-
randomlySplit,
|
|
817
|
-
emptyTitle,
|
|
818
|
-
emptyDesc,
|
|
819
|
-
page,
|
|
820
|
-
of,
|
|
821
|
-
previous,
|
|
822
|
-
next,
|
|
823
|
-
loading,
|
|
824
|
-
error,
|
|
825
|
-
retry,
|
|
826
|
-
you,
|
|
827
|
-
unranked,
|
|
828
|
-
na,
|
|
829
|
-
noData,
|
|
830
|
-
whitelist
|
|
831
|
-
};
|
|
832
|
-
const en = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
833
|
-
__proto__: null,
|
|
834
|
-
columnCurrentTier,
|
|
835
|
-
columnInvitedUsers,
|
|
836
|
-
columnPoints,
|
|
837
|
-
columnPosition,
|
|
838
|
-
columnRank,
|
|
839
|
-
columnRewards,
|
|
840
|
-
columnTasks,
|
|
841
|
-
columnUser,
|
|
842
|
-
default: enMessages,
|
|
843
|
-
eachReceives,
|
|
844
|
-
emptyDesc,
|
|
845
|
-
emptyTitle,
|
|
846
|
-
error,
|
|
847
|
-
eventPeriod,
|
|
848
|
-
loading,
|
|
849
|
-
na,
|
|
850
|
-
next,
|
|
851
|
-
noData,
|
|
852
|
-
of,
|
|
853
|
-
page,
|
|
854
|
-
participants,
|
|
855
|
-
previous,
|
|
856
|
-
prizePool,
|
|
857
|
-
randomlySplit,
|
|
858
|
-
retry,
|
|
859
|
-
rewardDetails,
|
|
860
|
-
rewardRules,
|
|
861
|
-
rewardRulesDesc,
|
|
862
|
-
rewardRulesTitle,
|
|
863
|
-
statusEnded,
|
|
864
|
-
statusOngoing,
|
|
865
|
-
statusUpcoming,
|
|
866
|
-
tabAllTime,
|
|
867
|
-
tabEvent,
|
|
868
|
-
tabQuest,
|
|
869
|
-
tabSprint,
|
|
870
|
-
totalWinners,
|
|
871
|
-
unranked,
|
|
872
|
-
whitelist,
|
|
873
|
-
you
|
|
874
|
-
}, Symbol.toStringTag, { value: "Module" }));
|
|
875
910
|
function LeaderboardWidget(props) {
|
|
876
911
|
const { widgetId, themeMode } = props;
|
|
912
|
+
const { t } = useLeaderboardLocale();
|
|
877
913
|
const { functionConfig, cloudTheme, isConfigLoading, configError } = useResolvedWidgetConfig(widgetId);
|
|
878
914
|
const mergedConfig = useMemo(() => {
|
|
879
915
|
return mergeLeaderboardConfig(
|
|
@@ -890,7 +926,7 @@ function LeaderboardWidget(props) {
|
|
|
890
926
|
cloudTheme,
|
|
891
927
|
themeMode,
|
|
892
928
|
className: "taskon-leaderboard",
|
|
893
|
-
errorMessage: configError ?? (!isConfigured ? "
|
|
929
|
+
errorMessage: configError ?? (!isConfigured ? t("not_configured") : void 0),
|
|
894
930
|
children: isConfigured ? /* @__PURE__ */ jsx(
|
|
895
931
|
LeaderboardWidgetInner,
|
|
896
932
|
{
|
|
@@ -911,11 +947,7 @@ function LeaderboardWidgetInner({
|
|
|
911
947
|
}) {
|
|
912
948
|
var _a;
|
|
913
949
|
const { userId } = useTaskOnContext();
|
|
914
|
-
const {
|
|
915
|
-
widgetId: "LeaderboardWidget",
|
|
916
|
-
defaultMessages: enMessages,
|
|
917
|
-
loadMessages: (locale) => __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./locales/en.json": () => Promise.resolve().then(() => en), "./locales/ja.json": () => import("./leaderboardwidget-ja-Bj6gz6y1.js"), "./locales/ko.json": () => import("./leaderboardwidget-ko-f1cLO9ic.js") }), `./locales/${locale}.json`, 3)
|
|
918
|
-
});
|
|
950
|
+
const { t } = useLeaderboardLocale();
|
|
919
951
|
const [activeTabId, setActiveTabId] = useState(
|
|
920
952
|
defaultTabId || ((_a = config.leaderboards[0]) == null ? void 0 : _a.id) || ""
|
|
921
953
|
);
|
|
@@ -923,14 +955,17 @@ function LeaderboardWidgetInner({
|
|
|
923
955
|
const currentTab = useMemo(() => {
|
|
924
956
|
return config.leaderboards.find((tab) => tab.id === activeTabId);
|
|
925
957
|
}, [config.leaderboards, activeTabId]);
|
|
958
|
+
const [paginationTotal, setPaginationTotal] = useState(0);
|
|
926
959
|
const {
|
|
927
960
|
page: page2,
|
|
961
|
+
totalPages: actualTotalPages,
|
|
962
|
+
hasPrevious,
|
|
963
|
+
hasNext,
|
|
928
964
|
goToPrevious,
|
|
929
965
|
goToNext,
|
|
930
966
|
reset: resetPagination
|
|
931
967
|
} = usePagination({
|
|
932
|
-
total:
|
|
933
|
-
// 初始值,hasPrevious/hasNext 将根据实际 total 重新计算
|
|
968
|
+
total: paginationTotal,
|
|
934
969
|
pageSize: config.displayOptions.rows
|
|
935
970
|
});
|
|
936
971
|
const {
|
|
@@ -944,9 +979,9 @@ function LeaderboardWidgetInner({
|
|
|
944
979
|
page: page2,
|
|
945
980
|
pageSize: config.displayOptions.rows
|
|
946
981
|
});
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
982
|
+
useEffect(() => {
|
|
983
|
+
setPaginationTotal(total);
|
|
984
|
+
}, [total]);
|
|
950
985
|
const isSprint = (currentTab == null ? void 0 : currentTab.type) === LeaderboardContentType.LeaderboardSprint;
|
|
951
986
|
const { rewardSummary, loading: rewardLoading } = useCampaignReward(
|
|
952
987
|
isSprint ? currentTab == null ? void 0 : currentTab.relatedId : void 0
|
|
@@ -985,7 +1020,7 @@ function LeaderboardWidgetInner({
|
|
|
985
1020
|
}, [leaderboardData]);
|
|
986
1021
|
if (leaderboardError) {
|
|
987
1022
|
return /* @__PURE__ */ jsx("div", { className: `taskon-leaderboard taskon-leaderboard--error ${className}`, style, children: /* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard__error", children: [
|
|
988
|
-
/* @__PURE__ */ jsx("p", { className: "taskon-leaderboard__error-text", children:
|
|
1023
|
+
/* @__PURE__ */ jsx("p", { className: "taskon-leaderboard__error-text", children: t("error") }),
|
|
989
1024
|
/* @__PURE__ */ jsx(
|
|
990
1025
|
Button,
|
|
991
1026
|
{
|
|
@@ -993,7 +1028,7 @@ function LeaderboardWidgetInner({
|
|
|
993
1028
|
size: "medium",
|
|
994
1029
|
onClick: refreshLeaderboard,
|
|
995
1030
|
className: "taskon-leaderboard__retry-btn",
|
|
996
|
-
children:
|
|
1031
|
+
children: t("retry")
|
|
997
1032
|
}
|
|
998
1033
|
)
|
|
999
1034
|
] }) });
|
|
@@ -1017,7 +1052,6 @@ function LeaderboardWidgetInner({
|
|
|
1017
1052
|
showTitle: config.displayOptions.showTitle,
|
|
1018
1053
|
rewardSummary,
|
|
1019
1054
|
participantsCount,
|
|
1020
|
-
messages,
|
|
1021
1055
|
onOpenRewardRules: isSprint ? handleOpenRewardRules : void 0
|
|
1022
1056
|
}
|
|
1023
1057
|
),
|
|
@@ -1028,7 +1062,6 @@ function LeaderboardWidgetInner({
|
|
|
1028
1062
|
allTimeData,
|
|
1029
1063
|
campaignData,
|
|
1030
1064
|
currentUserId: userId,
|
|
1031
|
-
messages,
|
|
1032
1065
|
onUserClick,
|
|
1033
1066
|
rewardTiers: rewardSummary == null ? void 0 : rewardSummary.tiers,
|
|
1034
1067
|
loading: leaderboardLoading || rewardLoading,
|
|
@@ -1044,8 +1077,7 @@ function LeaderboardWidgetInner({
|
|
|
1044
1077
|
hasPrevious,
|
|
1045
1078
|
hasNext,
|
|
1046
1079
|
onPrevious: goToPrevious,
|
|
1047
|
-
onNext: goToNext
|
|
1048
|
-
messages
|
|
1080
|
+
onNext: goToNext
|
|
1049
1081
|
}
|
|
1050
1082
|
),
|
|
1051
1083
|
isSprint && /* @__PURE__ */ jsx(
|
|
@@ -1053,21 +1085,11 @@ function LeaderboardWidgetInner({
|
|
|
1053
1085
|
{
|
|
1054
1086
|
isOpen: isRewardModalOpen,
|
|
1055
1087
|
onClose: handleCloseRewardRules,
|
|
1056
|
-
rewardSummary
|
|
1057
|
-
messages
|
|
1088
|
+
rewardSummary
|
|
1058
1089
|
}
|
|
1059
1090
|
)
|
|
1060
1091
|
] });
|
|
1061
1092
|
}
|
|
1062
1093
|
export {
|
|
1063
|
-
LeaderboardWidget as L
|
|
1064
|
-
RankBadge as R,
|
|
1065
|
-
UserCell as U,
|
|
1066
|
-
useCampaignReward as a,
|
|
1067
|
-
LeaderboardTabs as b,
|
|
1068
|
-
LeaderboardHeader as c,
|
|
1069
|
-
LeaderboardTable as d,
|
|
1070
|
-
LeaderboardPagination as e,
|
|
1071
|
-
RewardRulesModal as f,
|
|
1072
|
-
useLeaderboard as u
|
|
1094
|
+
LeaderboardWidget as L
|
|
1073
1095
|
};
|