@taskon/widget-react 0.0.1-beta.5 → 0.0.1-beta.6
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 +13 -4
- package/dist/CommunityTaskList.css +9 -1
- package/dist/EligibilityInfo.css +46 -42
- package/dist/LeaderboardWidget.css +73 -71
- package/dist/PageBuilder.css +5 -0
- package/dist/Quest.css +18 -14
- package/dist/TaskOnProvider.css +2 -0
- package/dist/UserCenterWidget.css +6 -6
- package/dist/UserCenterWidget2.css +1626 -1601
- package/dist/{dynamic-import-helper.css → WidgetShell.css} +2 -2
- package/dist/chunks/{CommunityTaskList-CrMvOB8w.js → CommunityTaskList-Hde2OKHH.js} +360 -154
- package/dist/chunks/{EligibilityInfo-Beww12QX.js → EligibilityInfo-BV0Z2TgY.js} +533 -561
- package/dist/chunks/{LeaderboardWidget-DwuSpVl0.js → LeaderboardWidget-BNGRD5Bu.js} +270 -249
- package/dist/chunks/{PageBuilder-DsX6Tv0N.js → PageBuilder-C5DSHiW9.js} +5 -5
- package/dist/chunks/{Quest-CuD2LElS.js → Quest-DG9zfXJo.js} +72 -50
- package/dist/chunks/{TaskOnProvider-xUeP2Nro.js → TaskOnProvider-BhamHIyY.js} +34 -17
- package/dist/chunks/{ThemeProvider-Bt4UZ33y.js → ThemeProvider-mXLdLSkq.js} +81 -18
- package/dist/chunks/{UserCenterWidget-CvU6K4AC.js → UserCenterWidget-D5ttw4hO.js} +1328 -1337
- package/dist/chunks/{UserCenterWidget-CB0hnj-L.js → UserCenterWidget-jDO5zTN1.js} +298 -231
- package/dist/chunks/{dynamic-import-helper-WmIF58Sb.js → WidgetShell-D7yC894Y.js} +447 -457
- 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/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 +29 -5
- package/dist/core.js +8 -9
- package/dist/index.d.ts +29 -701
- package/dist/index.js +18 -29
- 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/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/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 } from "./ThemeProvider-mXLdLSkq.js";
|
|
5
|
+
import { B as Button, T as Table, P as Pagination, D as Dialog, u as useResolvedWidgetConfig, W as WidgetShell, a as usePagination } from "./WidgetShell-D7yC894Y.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,37 @@ 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 eventStatus = getEventStatus(tabConfig.startTime, tabConfig.endTime,
|
|
516
|
+
const eventStatus = getEventStatus(tabConfig.startTime, tabConfig.endTime, t);
|
|
360
517
|
const hasTimeRange = tabConfig.startTime && tabConfig.endTime;
|
|
361
518
|
const hasParticipants = typeof participantsCount === "number";
|
|
519
|
+
const shouldShowTitle = showTitle && Boolean(tabConfig.title);
|
|
362
520
|
const hasContent = eventStatus || hasTimeRange || hasParticipants;
|
|
363
|
-
if (!hasContent && !
|
|
521
|
+
if (!hasContent && !shouldShowTitle && !isSprint) {
|
|
364
522
|
return null;
|
|
365
523
|
}
|
|
366
524
|
return /* @__PURE__ */ jsxs("div", { className: `taskon-leaderboard-header ${className}`, children: [
|
|
367
|
-
(eventStatus || hasTimeRange || hasParticipants) && /* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard-header__info", children: [
|
|
525
|
+
(eventStatus || hasTimeRange || hasParticipants) && shouldShowTitle && /* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard-header__info", children: [
|
|
368
526
|
eventStatus && /* @__PURE__ */ jsx(
|
|
369
527
|
"span",
|
|
370
528
|
{
|
|
@@ -375,18 +533,18 @@ function LeaderboardHeader({
|
|
|
375
533
|
hasTimeRange && /* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-header__time", children: formatTimeRange(tabConfig.startTime, tabConfig.endTime) }),
|
|
376
534
|
hasParticipants && (eventStatus || hasTimeRange) && /* @__PURE__ */ jsx("div", { className: "taskon-leaderboard-header__separator" }),
|
|
377
535
|
hasParticipants && /* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard-header__participants", children: [
|
|
378
|
-
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-header__participants-label", children:
|
|
536
|
+
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-header__participants-label", children: t("participants") }),
|
|
379
537
|
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-header__participants-value", children: participantsCount.toLocaleString() })
|
|
380
538
|
] })
|
|
381
539
|
] }),
|
|
382
540
|
isSprint && rewardSummary && /* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard-header__reward-info", children: [
|
|
383
541
|
/* @__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: rewardSummary.prizePool || "
|
|
542
|
+
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-header__reward-label", children: t("prize_pool") }),
|
|
543
|
+
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-header__reward-value", children: rewardSummary.prizePool || t("no_data") })
|
|
386
544
|
] }),
|
|
387
545
|
/* @__PURE__ */ jsx("div", { className: "taskon-leaderboard-header__reward-separator" }),
|
|
388
546
|
/* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard-header__reward-item", children: [
|
|
389
|
-
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-header__reward-label", children:
|
|
547
|
+
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-header__reward-label", children: t("total_winners") }),
|
|
390
548
|
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-header__reward-value", children: rewardSummary.totalWinners })
|
|
391
549
|
] }),
|
|
392
550
|
onOpenRewardRules && /* @__PURE__ */ jsx(
|
|
@@ -396,28 +554,28 @@ function LeaderboardHeader({
|
|
|
396
554
|
size: "small",
|
|
397
555
|
onClick: onOpenRewardRules,
|
|
398
556
|
className: "taskon-leaderboard-header__reward-rules-btn",
|
|
399
|
-
children:
|
|
557
|
+
children: t("reward_rules")
|
|
400
558
|
}
|
|
401
559
|
)
|
|
402
560
|
] })
|
|
403
561
|
] });
|
|
404
562
|
}
|
|
405
|
-
function getColumnTitle(column,
|
|
563
|
+
function getColumnTitle(column, t, pointsName) {
|
|
406
564
|
switch (column) {
|
|
407
565
|
case LeaderboardTableColumn.Rank:
|
|
408
|
-
return
|
|
566
|
+
return t("column_rank");
|
|
409
567
|
case LeaderboardTableColumn.User:
|
|
410
|
-
return
|
|
568
|
+
return t("column_user");
|
|
411
569
|
case LeaderboardTableColumn.Tasks:
|
|
412
|
-
return
|
|
570
|
+
return t("column_tasks");
|
|
413
571
|
case LeaderboardTableColumn.InvitedUsers:
|
|
414
|
-
return
|
|
572
|
+
return t("column_invited_users");
|
|
415
573
|
case LeaderboardTableColumn.CurrentTier:
|
|
416
|
-
return
|
|
574
|
+
return t("column_current_tier");
|
|
417
575
|
case LeaderboardTableColumn.Points:
|
|
418
|
-
return pointsName ||
|
|
576
|
+
return pointsName || t("column_points");
|
|
419
577
|
case LeaderboardTableColumn.Rewards:
|
|
420
|
-
return
|
|
578
|
+
return t("column_rewards");
|
|
421
579
|
default:
|
|
422
580
|
return "";
|
|
423
581
|
}
|
|
@@ -474,12 +632,12 @@ function LeaderboardTable({
|
|
|
474
632
|
allTimeData,
|
|
475
633
|
campaignData,
|
|
476
634
|
currentUserId,
|
|
477
|
-
messages,
|
|
478
635
|
onUserClick,
|
|
479
636
|
rewardTiers,
|
|
480
637
|
loading: loading2 = false,
|
|
481
638
|
className = ""
|
|
482
639
|
}) {
|
|
640
|
+
const { t } = useLeaderboardLocale();
|
|
483
641
|
const isAllTime = tabConfig.type === LeaderboardContentType.AllTime;
|
|
484
642
|
const tableData = useMemo(() => {
|
|
485
643
|
if (isAllTime && allTimeData) {
|
|
@@ -494,7 +652,7 @@ function LeaderboardTable({
|
|
|
494
652
|
return tabConfig.columns.map((column) => {
|
|
495
653
|
const baseColumn = {
|
|
496
654
|
key: column,
|
|
497
|
-
title: getColumnTitle(column,
|
|
655
|
+
title: getColumnTitle(column, t, tabConfig.pointsName)
|
|
498
656
|
};
|
|
499
657
|
switch (column) {
|
|
500
658
|
case LeaderboardTableColumn.Rank:
|
|
@@ -515,7 +673,6 @@ function LeaderboardTable({
|
|
|
515
673
|
displayName: formatUserDisplayName(row.userName),
|
|
516
674
|
avatar: row.avatar,
|
|
517
675
|
isCurrentUser: currentUserId === row.userId,
|
|
518
|
-
youLabel: messages.you,
|
|
519
676
|
onUserClick
|
|
520
677
|
}
|
|
521
678
|
)
|
|
@@ -524,25 +681,25 @@ function LeaderboardTable({
|
|
|
524
681
|
return {
|
|
525
682
|
...baseColumn,
|
|
526
683
|
width: 142,
|
|
527
|
-
render: (_, row) => row.tasks ??
|
|
684
|
+
render: (_, row) => row.tasks ?? t("no_data")
|
|
528
685
|
};
|
|
529
686
|
case LeaderboardTableColumn.InvitedUsers:
|
|
530
687
|
return {
|
|
531
688
|
...baseColumn,
|
|
532
689
|
width: 142,
|
|
533
|
-
render: (_, row) => row.invitedUsers ??
|
|
690
|
+
render: (_, row) => row.invitedUsers ?? t("no_data")
|
|
534
691
|
};
|
|
535
692
|
case LeaderboardTableColumn.CurrentTier:
|
|
536
693
|
return {
|
|
537
694
|
...baseColumn,
|
|
538
695
|
width: 142,
|
|
539
|
-
render: (_, row) => row.currentTier ??
|
|
696
|
+
render: (_, row) => row.currentTier ?? t("no_data")
|
|
540
697
|
};
|
|
541
698
|
case LeaderboardTableColumn.Points:
|
|
542
699
|
return {
|
|
543
700
|
...baseColumn,
|
|
544
701
|
width: 142,
|
|
545
|
-
render: (_, row) => row.points && row.points > 0 ? row.points.toLocaleString() :
|
|
702
|
+
render: (_, row) => row.points && row.points > 0 ? row.points.toLocaleString() : t("no_data")
|
|
546
703
|
};
|
|
547
704
|
case LeaderboardTableColumn.Rewards:
|
|
548
705
|
return {
|
|
@@ -559,8 +716,7 @@ function LeaderboardTable({
|
|
|
559
716
|
chainLabel: row.chainLabel,
|
|
560
717
|
rewardType: row.rewardType,
|
|
561
718
|
rewardPointsName: row.rewardPointsName,
|
|
562
|
-
isUsdtEqual: row.isUsdtEqual
|
|
563
|
-
messages
|
|
719
|
+
isUsdtEqual: row.isUsdtEqual
|
|
564
720
|
}
|
|
565
721
|
);
|
|
566
722
|
}
|
|
@@ -572,22 +728,28 @@ function LeaderboardTable({
|
|
|
572
728
|
rewardAmount: reward.rewardAmount,
|
|
573
729
|
rewardSymbol: reward.rewardSymbol,
|
|
574
730
|
chainLabel: reward.chainLabel,
|
|
575
|
-
messages,
|
|
576
731
|
isPotential: true
|
|
577
732
|
}
|
|
578
733
|
);
|
|
579
734
|
}
|
|
580
|
-
return
|
|
735
|
+
return t("no_data");
|
|
581
736
|
}
|
|
582
737
|
};
|
|
583
738
|
default:
|
|
584
739
|
return {
|
|
585
740
|
...baseColumn,
|
|
586
|
-
render: () =>
|
|
741
|
+
render: () => t("no_data")
|
|
587
742
|
};
|
|
588
743
|
}
|
|
589
744
|
});
|
|
590
|
-
}, [
|
|
745
|
+
}, [
|
|
746
|
+
tabConfig.columns,
|
|
747
|
+
tabConfig.pointsName,
|
|
748
|
+
t,
|
|
749
|
+
currentUserId,
|
|
750
|
+
onUserClick,
|
|
751
|
+
rewardTiers
|
|
752
|
+
]);
|
|
591
753
|
const rowConfig = useMemo(
|
|
592
754
|
() => ({
|
|
593
755
|
getRowKey: (row) => row.id,
|
|
@@ -597,10 +759,10 @@ function LeaderboardTable({
|
|
|
597
759
|
);
|
|
598
760
|
const emptyConfig = useMemo(
|
|
599
761
|
() => ({
|
|
600
|
-
title:
|
|
601
|
-
description:
|
|
762
|
+
title: t("empty_title"),
|
|
763
|
+
description: t("empty_desc")
|
|
602
764
|
}),
|
|
603
|
-
[
|
|
765
|
+
[t]
|
|
604
766
|
);
|
|
605
767
|
return /* @__PURE__ */ jsx(
|
|
606
768
|
Table,
|
|
@@ -609,7 +771,7 @@ function LeaderboardTable({
|
|
|
609
771
|
data: tableData,
|
|
610
772
|
rowConfig,
|
|
611
773
|
loading: loading2,
|
|
612
|
-
loadingText:
|
|
774
|
+
loadingText: t("loading"),
|
|
613
775
|
empty: emptyConfig,
|
|
614
776
|
striped: true,
|
|
615
777
|
className
|
|
@@ -624,7 +786,6 @@ function LeaderboardPagination({
|
|
|
624
786
|
hasNext,
|
|
625
787
|
onPrevious,
|
|
626
788
|
onNext,
|
|
627
|
-
messages,
|
|
628
789
|
className = ""
|
|
629
790
|
}) {
|
|
630
791
|
if (totalPages <= 1 || total === 0) {
|
|
@@ -648,7 +809,7 @@ function LeaderboardPagination({
|
|
|
648
809
|
function formatDate(timestamp) {
|
|
649
810
|
if (!timestamp) return "";
|
|
650
811
|
const date = new Date(timestamp);
|
|
651
|
-
return date.toLocaleDateString(
|
|
812
|
+
return date.toLocaleDateString(void 0, {
|
|
652
813
|
year: "numeric",
|
|
653
814
|
month: "short",
|
|
654
815
|
day: "numeric",
|
|
@@ -656,26 +817,23 @@ function formatDate(timestamp) {
|
|
|
656
817
|
minute: "2-digit"
|
|
657
818
|
});
|
|
658
819
|
}
|
|
659
|
-
function getDistributeText(distributeType,
|
|
820
|
+
function getDistributeText(distributeType, t) {
|
|
660
821
|
switch (distributeType) {
|
|
661
822
|
case RewardsDistributeType.Equally:
|
|
662
|
-
return "
|
|
823
|
+
return t("each_receives", { amount: "{amount}" }).replace("{amount}", "").trim();
|
|
663
824
|
case RewardsDistributeType.Random:
|
|
664
|
-
return "
|
|
825
|
+
return t("randomly_split", { amount: "{amount}" }).replace("{amount}", "").trim();
|
|
665
826
|
default:
|
|
666
827
|
return "";
|
|
667
828
|
}
|
|
668
829
|
}
|
|
669
830
|
function TierRow({
|
|
670
831
|
tier,
|
|
671
|
-
|
|
832
|
+
t
|
|
672
833
|
}) {
|
|
673
|
-
const distributeText = getDistributeText(tier.distributeType);
|
|
834
|
+
const distributeText = getDistributeText(tier.distributeType, t);
|
|
674
835
|
return /* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard-modal__tier", children: [
|
|
675
|
-
/* @__PURE__ */
|
|
676
|
-
"Top ",
|
|
677
|
-
tier.rankRangeText
|
|
678
|
-
] }),
|
|
836
|
+
/* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-modal__tier-rank", children: t("reward_rank_top", { val: tier.rankRangeText }) }),
|
|
679
837
|
/* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard-modal__tier-reward", children: [
|
|
680
838
|
distributeText && /* @__PURE__ */ jsx("span", { className: "taskon-leaderboard-modal__tier-distribute", children: distributeText }),
|
|
681
839
|
/* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard-modal__tier-token", children: [
|
|
@@ -702,16 +860,15 @@ function RewardRulesModal({
|
|
|
702
860
|
isOpen,
|
|
703
861
|
onClose,
|
|
704
862
|
rewardSummary,
|
|
705
|
-
messages,
|
|
706
863
|
className = ""
|
|
707
864
|
}) {
|
|
865
|
+
const { t } = useLeaderboardLocale();
|
|
708
866
|
if (!rewardSummary) {
|
|
709
867
|
return null;
|
|
710
868
|
}
|
|
711
|
-
const description =
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
);
|
|
869
|
+
const description = t("reward_rules_desc", {
|
|
870
|
+
pointsName: rewardSummary.pointsName || t("column_points")
|
|
871
|
+
});
|
|
715
872
|
return /* @__PURE__ */ jsx(
|
|
716
873
|
Dialog,
|
|
717
874
|
{
|
|
@@ -719,16 +876,16 @@ function RewardRulesModal({
|
|
|
719
876
|
onOpenChange: (open) => {
|
|
720
877
|
if (!open) onClose();
|
|
721
878
|
},
|
|
722
|
-
title:
|
|
879
|
+
title: t("reward_rules_title"),
|
|
723
880
|
showCloseButton: true,
|
|
724
881
|
className,
|
|
725
882
|
contentClassName: "taskon-leaderboard-modal",
|
|
726
883
|
maxWidth: 480,
|
|
727
884
|
children: /* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard-modal__content", children: [
|
|
728
|
-
/* @__PURE__ */ jsx("h2", { className: "taskon-leaderboard-modal__title", children:
|
|
885
|
+
/* @__PURE__ */ jsx("h2", { className: "taskon-leaderboard-modal__title", children: t("reward_rules_title") }),
|
|
729
886
|
/* @__PURE__ */ jsx("p", { className: "taskon-leaderboard-modal__desc", children: description }),
|
|
730
887
|
/* @__PURE__ */ jsxs("div", { className: "taskon-leaderboard-modal__section", children: [
|
|
731
|
-
/* @__PURE__ */ jsx("h3", { className: "taskon-leaderboard-modal__section-title", children:
|
|
888
|
+
/* @__PURE__ */ jsx("h3", { className: "taskon-leaderboard-modal__section-title", children: t("event_period") }),
|
|
732
889
|
/* @__PURE__ */ jsxs("p", { className: "taskon-leaderboard-modal__period", children: [
|
|
733
890
|
formatDate(rewardSummary.startTime),
|
|
734
891
|
" -",
|
|
@@ -737,8 +894,8 @@ function RewardRulesModal({
|
|
|
737
894
|
] })
|
|
738
895
|
] }),
|
|
739
896
|
/* @__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,
|
|
897
|
+
/* @__PURE__ */ jsx("h3", { className: "taskon-leaderboard-modal__section-title", children: t("reward_details") }),
|
|
898
|
+
/* @__PURE__ */ jsx("div", { className: "taskon-leaderboard-modal__tiers", children: rewardSummary.tiers.map((tier) => /* @__PURE__ */ jsx(TierRow, { tier, t }, tier.tierNo)) })
|
|
742
899
|
] })
|
|
743
900
|
] })
|
|
744
901
|
}
|
|
@@ -749,131 +906,9 @@ function mergeLeaderboardConfig(props, cloud) {
|
|
|
749
906
|
config: props.config ?? cloud ?? null
|
|
750
907
|
};
|
|
751
908
|
}
|
|
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
909
|
function LeaderboardWidget(props) {
|
|
876
910
|
const { widgetId, themeMode } = props;
|
|
911
|
+
const { t } = useLeaderboardLocale();
|
|
877
912
|
const { functionConfig, cloudTheme, isConfigLoading, configError } = useResolvedWidgetConfig(widgetId);
|
|
878
913
|
const mergedConfig = useMemo(() => {
|
|
879
914
|
return mergeLeaderboardConfig(
|
|
@@ -890,7 +925,7 @@ function LeaderboardWidget(props) {
|
|
|
890
925
|
cloudTheme,
|
|
891
926
|
themeMode,
|
|
892
927
|
className: "taskon-leaderboard",
|
|
893
|
-
errorMessage: configError ?? (!isConfigured ? "
|
|
928
|
+
errorMessage: configError ?? (!isConfigured ? t("not_configured") : void 0),
|
|
894
929
|
children: isConfigured ? /* @__PURE__ */ jsx(
|
|
895
930
|
LeaderboardWidgetInner,
|
|
896
931
|
{
|
|
@@ -911,11 +946,7 @@ function LeaderboardWidgetInner({
|
|
|
911
946
|
}) {
|
|
912
947
|
var _a;
|
|
913
948
|
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
|
-
});
|
|
949
|
+
const { t } = useLeaderboardLocale();
|
|
919
950
|
const [activeTabId, setActiveTabId] = useState(
|
|
920
951
|
defaultTabId || ((_a = config.leaderboards[0]) == null ? void 0 : _a.id) || ""
|
|
921
952
|
);
|
|
@@ -923,14 +954,17 @@ function LeaderboardWidgetInner({
|
|
|
923
954
|
const currentTab = useMemo(() => {
|
|
924
955
|
return config.leaderboards.find((tab) => tab.id === activeTabId);
|
|
925
956
|
}, [config.leaderboards, activeTabId]);
|
|
957
|
+
const [paginationTotal, setPaginationTotal] = useState(0);
|
|
926
958
|
const {
|
|
927
959
|
page: page2,
|
|
960
|
+
totalPages: actualTotalPages,
|
|
961
|
+
hasPrevious,
|
|
962
|
+
hasNext,
|
|
928
963
|
goToPrevious,
|
|
929
964
|
goToNext,
|
|
930
965
|
reset: resetPagination
|
|
931
966
|
} = usePagination({
|
|
932
|
-
total:
|
|
933
|
-
// 初始值,hasPrevious/hasNext 将根据实际 total 重新计算
|
|
967
|
+
total: paginationTotal,
|
|
934
968
|
pageSize: config.displayOptions.rows
|
|
935
969
|
});
|
|
936
970
|
const {
|
|
@@ -944,9 +978,9 @@ function LeaderboardWidgetInner({
|
|
|
944
978
|
page: page2,
|
|
945
979
|
pageSize: config.displayOptions.rows
|
|
946
980
|
});
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
981
|
+
useEffect(() => {
|
|
982
|
+
setPaginationTotal(total);
|
|
983
|
+
}, [total]);
|
|
950
984
|
const isSprint = (currentTab == null ? void 0 : currentTab.type) === LeaderboardContentType.LeaderboardSprint;
|
|
951
985
|
const { rewardSummary, loading: rewardLoading } = useCampaignReward(
|
|
952
986
|
isSprint ? currentTab == null ? void 0 : currentTab.relatedId : void 0
|
|
@@ -985,7 +1019,7 @@ function LeaderboardWidgetInner({
|
|
|
985
1019
|
}, [leaderboardData]);
|
|
986
1020
|
if (leaderboardError) {
|
|
987
1021
|
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:
|
|
1022
|
+
/* @__PURE__ */ jsx("p", { className: "taskon-leaderboard__error-text", children: t("error") }),
|
|
989
1023
|
/* @__PURE__ */ jsx(
|
|
990
1024
|
Button,
|
|
991
1025
|
{
|
|
@@ -993,7 +1027,7 @@ function LeaderboardWidgetInner({
|
|
|
993
1027
|
size: "medium",
|
|
994
1028
|
onClick: refreshLeaderboard,
|
|
995
1029
|
className: "taskon-leaderboard__retry-btn",
|
|
996
|
-
children:
|
|
1030
|
+
children: t("retry")
|
|
997
1031
|
}
|
|
998
1032
|
)
|
|
999
1033
|
] }) });
|
|
@@ -1017,7 +1051,6 @@ function LeaderboardWidgetInner({
|
|
|
1017
1051
|
showTitle: config.displayOptions.showTitle,
|
|
1018
1052
|
rewardSummary,
|
|
1019
1053
|
participantsCount,
|
|
1020
|
-
messages,
|
|
1021
1054
|
onOpenRewardRules: isSprint ? handleOpenRewardRules : void 0
|
|
1022
1055
|
}
|
|
1023
1056
|
),
|
|
@@ -1028,7 +1061,6 @@ function LeaderboardWidgetInner({
|
|
|
1028
1061
|
allTimeData,
|
|
1029
1062
|
campaignData,
|
|
1030
1063
|
currentUserId: userId,
|
|
1031
|
-
messages,
|
|
1032
1064
|
onUserClick,
|
|
1033
1065
|
rewardTiers: rewardSummary == null ? void 0 : rewardSummary.tiers,
|
|
1034
1066
|
loading: leaderboardLoading || rewardLoading,
|
|
@@ -1044,8 +1076,7 @@ function LeaderboardWidgetInner({
|
|
|
1044
1076
|
hasPrevious,
|
|
1045
1077
|
hasNext,
|
|
1046
1078
|
onPrevious: goToPrevious,
|
|
1047
|
-
onNext: goToNext
|
|
1048
|
-
messages
|
|
1079
|
+
onNext: goToNext
|
|
1049
1080
|
}
|
|
1050
1081
|
),
|
|
1051
1082
|
isSprint && /* @__PURE__ */ jsx(
|
|
@@ -1053,21 +1084,11 @@ function LeaderboardWidgetInner({
|
|
|
1053
1084
|
{
|
|
1054
1085
|
isOpen: isRewardModalOpen,
|
|
1055
1086
|
onClose: handleCloseRewardRules,
|
|
1056
|
-
rewardSummary
|
|
1057
|
-
messages
|
|
1087
|
+
rewardSummary
|
|
1058
1088
|
}
|
|
1059
1089
|
)
|
|
1060
1090
|
] });
|
|
1061
1091
|
}
|
|
1062
1092
|
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
|
|
1093
|
+
LeaderboardWidget as L
|
|
1073
1094
|
};
|