@taskon/widget-react 0.0.1-beta.2 → 0.0.1-beta.4
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 +56 -17
- package/dist/CommunityTaskList.css +1593 -1741
- package/dist/EligibilityInfo.css +1275 -582
- package/dist/LeaderboardWidget.css +355 -152
- package/dist/PageBuilder.css +0 -2
- package/dist/Quest.css +1140 -903
- package/dist/TaskOnProvider.css +50 -31
- package/dist/UserCenterWidget.css +108 -237
- package/dist/UserCenterWidget2.css +2016 -711
- package/dist/chunks/{CommunityTaskList-BlH1Wdd5.js → CommunityTaskList-C9Gv8KOF.js} +962 -827
- package/dist/chunks/{EligibilityInfo-C7GZ2G5u.js → EligibilityInfo-D-Fuy9GE.js} +1137 -449
- package/dist/chunks/{LeaderboardWidget-CmYfDeHV.js → LeaderboardWidget-BV2D2q1N.js} +15 -10
- package/dist/chunks/{PageBuilder-Bw0zSkFh.js → PageBuilder-DQoU4Mwf.js} +5 -5
- package/dist/chunks/{Quest-DKFZ-pPU.js → Quest-B5NyVr3o.js} +516 -325
- package/dist/chunks/{TaskOnProvider-BD6Vp2x8.js → TaskOnProvider-93UxARFo.js} +2 -207
- package/dist/chunks/{ThemeProvider-wnSXrNQb.js → ThemeProvider-CPI_roeh.js} +249 -57
- package/dist/chunks/{UserCenterWidget-Cw6h_5hT.js → UserCenterWidget-BRtigY_S.js} +206 -1002
- package/dist/chunks/UserCenterWidget-cADBSVg7.js +8358 -0
- package/dist/chunks/{WidgetShell-D_5OjvNZ.js → dynamic-import-helper-DwXlQC0S.js} +607 -40
- package/dist/chunks/useToast-CaRkylKe.js +304 -0
- package/dist/chunks/{usercenter-ja-uu-XfVF9.js → usercenter-ja-B2465c1O.js} +4 -10
- package/dist/chunks/{usercenter-ko-DYgUOVzd.js → usercenter-ko-xAEYxqLg.js} +4 -10
- package/dist/community-task.d.ts +34 -3
- package/dist/community-task.js +1 -1
- package/dist/core.d.ts +40 -3
- package/dist/core.js +9 -10
- package/dist/dynamic-import-helper.css +596 -289
- package/dist/index.d.ts +207 -10
- package/dist/index.js +21 -19
- package/dist/leaderboard.d.ts +8 -1
- package/dist/leaderboard.js +2 -2
- package/dist/page-builder.js +1 -1
- package/dist/quest.d.ts +8 -2
- package/dist/quest.js +1 -1
- package/dist/user-center.d.ts +20 -136
- package/dist/user-center.js +19 -236
- package/package.json +10 -2
- package/dist/TipPopover.css +0 -210
- package/dist/WidgetShell.css +0 -182
- package/dist/chunks/TipPopover-BrW8jo71.js +0 -2926
- package/dist/chunks/UserCenterWidget-BE329iS7.js +0 -3546
- package/dist/chunks/dynamic-import-helper-DxEFwm31.js +0 -537
- package/dist/chunks/useToast-B-wyO5zL.js +0 -93
- package/dist/chunks/useWidgetLocale-JDelxtt8.js +0 -74
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from "react/jsx-runtime";
|
|
2
|
-
import React__default, {
|
|
3
|
-
import { isUnauthorizedError, TaskReviewResult, formatLongNumber, EligibilityType, Operator, MeetConditionStatus, RewardType, formatUtcTime, SnsType, createCommunityTaskApi, ApiError,
|
|
4
|
-
import {
|
|
5
|
-
import { D as Dialog,
|
|
6
|
-
import {
|
|
7
|
-
import { u as
|
|
8
|
-
import {
|
|
2
|
+
import React__default, { useState, useRef, useCallback, useEffect, useContext, useMemo } from "react";
|
|
3
|
+
import { isUnauthorizedError, TaskReviewResult, formatLongNumber, EligibilityType, Operator, MeetConditionStatus, RewardType, formatUtcTime, ErrorCode, SnsType, createCommunityTaskApi, ApiError, TaskCardType, ChainType, getSwapDexTitleExpress, UserEligibleStatus, CampaignStatus, MediaType, createQuestApi, CampaignType, formatTokenAmount, TaskTemplateId, EligibilityTemplateId, RecurrenceType, createCommonApi, normalizeTask, formatSwapTokensForDisplay, formatAddress } from "@taskon/core";
|
|
4
|
+
import { p as TaskOnContext, d as useTaskOnContext, s as useTaskOnPortalContainer } from "./ThemeProvider-CPI_roeh.js";
|
|
5
|
+
import { D as Dialog, a as useResolvedWidgetConfig, W as WidgetShell } from "./dynamic-import-helper-DwXlQC0S.js";
|
|
6
|
+
import { d as useToast } from "./useToast-CaRkylKe.js";
|
|
7
|
+
import { u as useBindWallet, T as TitleExpress, a as CardDescExpress, b as useNftClaimFlow, R as RewardModuleDialog, B as BlindBoxDialog, c as TaskItem, E as EligibilityInfo, d as Textarea } from "./EligibilityInfo-D-Fuy9GE.js";
|
|
8
|
+
import { g as useBindSocialAccount, B as BindWalletDialog, l as useChainMap, s as TipPopover, k as useIsMobile, I as Input } from "./UserCenterWidget-cADBSVg7.js";
|
|
9
9
|
import { createPortal } from "react-dom";
|
|
10
10
|
import '../CommunityTaskList.css';function CardSelector({
|
|
11
11
|
options,
|
|
@@ -39,300 +39,6 @@ import '../CommunityTaskList.css';function CardSelector({
|
|
|
39
39
|
);
|
|
40
40
|
}) });
|
|
41
41
|
}
|
|
42
|
-
const MetaMaskIcon = new URL("data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3crect%20width='24'%20height='24'%20rx='8'%20fill='white'/%3e%3crect%20width='24'%20height='24'%20fill='url(%23pattern0)'/%3e%3cdefs%3e%3cpattern%20id='pattern0'%20patternContentUnits='objectBoundingBox'%20width='1'%20height='1'%3e%3cuse%20xlink:href='%23image0_1936_8376'%20transform='scale(0.00227273)'/%3e%3c/pattern%3e%3cimage%20id='image0_1936_8376'%20width='440'%20height='440'%20xlink:href='data:image/png;base64,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l53inR274nedqvKqqtptvHtZNVotr+7aM27P5b3BextqnGq21urXlu4D++T7XuzP2H/jQOSBloPMgzW/Wv+64RD9UEkdUjetrqdeWN/RkNbQfjjicEujb+OhI85Hdh41P1pxTO/YsuOU4wuO9zcVNfU2S5q7T2SfeNwyseXuydST107FnWo7HXn63JnQMyfPss42nfM7d/S8z/nDF5gX6i96Xqxr9Wg99JvHb4faPNvqLnldarjsfbmxfXT78SsBV05cDb565hrn2sXr0dfbbyTduHVz3M2OW/xbz2/n3X59p/BO39059wj3Su5r3S97YPyg8nf732s7PDuOPQx+2Poo4dHdx7zHL5/InnzuXPCU9rTsmdmzqueuz492hXZdfjH2RedLycu+7uI/tP/Y8Mru1a9/Bv7Z2pPa0/la+rr/zZK3hm93/uX+V0tvbO+Dd/nv+t6XfDD8sOsj8+PZTymfnvVN+Uz6XP7F/kvj18iv9/rz+/slXCl34FMAgwPNygLgzU4AaGkA0GHfRhmr7AUHBFH2rwMI/Ces7BcHxBOAGvj9HtcNv25uArBvO2y/IL8m7FVjaQAkegPUzW1oqESW5eaq5KLCPoXwoL//LezZSKsA+LK8v7+vsr//yzYYLOwdm8XKHlQhRNgzbIn+kpmfCf6NKPvT73L88QwUEbiDH8//AlB8kNc164p8AAAAOGVYSWZNTQAqAAAACAABh2kABAAAAAEAAAAaAAAAAAACoAIABAAAAAEAAAG4oAMABAAAAAEAAAG4AAAAAAH7VFcAAEAASURBVHgB7L0HnBzHdSZe3TOzEbsLgNgFsABIgAQBZgWKpEQCTGKQqESKQZKDJNuyrL/P9sm2CMr++fzH+SSKAChZ54vSna1gi0qWxCCREqlAIVDMIikxIRCBCJuAxeYwM133vZ7p3dnZnpmeme6erppX5GJmOlS9+qrqvXqvXr0SghMjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAgwAowAI8AIMAKMACPACDACjAAjwAhEHQEj6gT6Td89t3ZdOzJl3P2WlYn//Oauw/cam4XldxmcHyPACDACUUDgxc3nNgy8fvIPXhpI/8WipsR7P/jt1/dFga6waIiHVVBUytl7wvjw6LS8oGds+ntp2X388B3Glwwpv75i69FXo0Ij08EIMAKMQDUIHPz08guFND6y79CJP/z5a1brdFqK/obJDyDPO6vJV7V360qD2yyEOb6x6xgaqcswhMSncekqU7x5RUwAiOelNL4Ss6xvdH/+6IBqDcn0MgKMQH0jsP/21ctMkfoAeNnH0kKet+uAJX7TkwYoEsmQwhRPbt3e97Z6QqmuBNztV3RuNCxje24DEwDd7YZ45/qY1RIz0AtECh3hXsi+r6x87fDDxncF9RBOjAAjwAhEDoE9f762saFp4r2mIf4AvOs6InBkSpgP7U4Z/aPSnsXnEA0xF1+9ZefRQznXtP5aVwLujo1L/wlN/gm0aCK3VdE5RENMiOvXxcVpHQSJkcSsJ4GJzwA0vXtIs1u57chzue/wd0aAEWAEaoXAwTtOPdeUqd+Xwvg4aFgErpWCgIvvO2GJn+61RMoirY0MUznJwGRdGp/auqP3izlXtf46FwCNq7o5xzzpWk2YLKG+GWSufNupJpS4mZTCt7g0xG488S/xWOpfln+up3/mLn9hBBgB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Rqgqv49VlnCuOBiixLFo0IPFiNWIIbNba86Gv0jh5tiiZsYyEOAILgMUfuV8AhdjzSnEmnPqAhRDbNs+0jq+rn7NA+86v1SZQxIYSoAjuKE8eOQSAovXPvB6RTR+HUZzLzk0y7KQ5McVserrKdwcWsLMVk4CHMHlRMQTnE7gSEvzdVGf6XdSPiG4e269u/H/nJQn5oUESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAESIAEiiDw/21fUQrhhQi0AAAAAElFTkSuQmCC'/%3e%3c/defs%3e%3c/svg%3e", import.meta.url).href;
|
|
43
|
-
const WalletConnectIcon = new URL("data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20width='24'%20height='24'%20rx='8'%20fill='%23216DFF'/%3e%3cpath%20d='M7.82421%2018.1965C7.54878%2018.1956%207.36404%2018.0185%207.18434%2017.8404C5.61069%2016.2668%204.03201%2014.6965%202.46507%2013.1145C1.83528%2012.4771%201.84871%2012.289%202.48355%2011.6256C3.5584%2010.5046%203.57687%2010.4836%204.71722%2011.5626C5.61741%2012.4141%206.47561%2013.3135%207.32457%2014.2179C7.6739%2014.589%207.91154%2014.5722%208.27682%2014.2229C9.29286%2013.2589%2010.2813%2012.2662%2011.2411%2011.2461C11.8986%2010.5407%2012.1035%2010.5491%2012.803%2011.2385C13.7653%2012.1874%2014.6428%2013.2236%2015.6563%2014.1263C16.1148%2014.5344%2016.3684%2014.6041%2016.8126%2014.1288C17.801%2013.0741%2018.8565%2012.0833%2019.8667%2011.047C20.2488%2010.6557%2020.5679%2010.6389%2020.9727%2011.0168C22.3632%2012.3134%2022.333%2012.4158%2020.9374%2013.7258C19.6005%2014.9812%2018.3435%2016.3264%2017.0553%2017.6355C16.3214%2018.3821%2016.2156%2018.3426%2015.4422%2017.68C14.3573%2016.7496%2013.4731%2015.6244%2012.4696%2014.6167C12.1371%2014.2825%2011.9162%2014.2556%2011.5803%2014.61C10.5684%2015.6739%209.61535%2016.8%208.50187%2017.7607C8.29446%2017.9395%208.11812%2018.1621%207.82421%2018.1973'%20fill='white'/%3e%3cpath%20d='M11.9418%205C14.3342%205.17298%2016.515%205.89179%2018.2373%207.88026C18.6697%208.37906%2018.6823%208.79725%2018.2675%209.27421C18.2028%209.34811%2018.1407%209.42452%2018.0743%209.49758C17.0474%2010.643%2017.0474%2010.643%2015.954%209.58659C13.6666%207.37559%2010.3027%207.39826%208.03205%209.64033C7.87586%209.79484%207.72051%209.95019%207.5702%2010.1106C7.18225%2010.5262%206.86483%2010.5178%206.45084%2010.0711C5.0485%208.5596%205.02247%208.5638%206.51634%207.17237C8.07908%205.71713%209.95167%205.17214%2011.9418%205Z'%20fill='white'/%3e%3c/svg%3e", import.meta.url).href;
|
|
44
|
-
const OntoIcon = new URL("data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20width='24'%20height='24'%20rx='8'%20fill='white'/%3e%3cpath%20d='M4%203L6.79044%205.78909C7.92085%204.88432%209.28103%204.31246%2010.7184%204.1377C12.1557%203.96293%2013.6133%204.19216%2014.9276%204.79967C16.2418%205.40718%2017.3608%206.36893%2018.159%207.577C18.9571%208.78507%2019.4028%2010.1917%2019.446%2011.6389V11.8645V21L16.6556%2018.2116C15.5251%2019.1154%2014.1652%2019.6864%2012.7284%2019.8606C11.2917%2020.0349%209.83473%2019.8054%208.52103%2019.198C7.20733%2018.5906%206.08879%2017.6293%205.29085%2016.4218C4.4929%2015.2143%204.04708%2013.8084%204.00339%2012.3618L4%2012.1355V3ZM5.90839%207.6067V12.1355C5.90923%2013.2008%206.19949%2014.2459%206.74817%2015.1591C7.29684%2016.0722%208.08331%2016.8192%209.02353%2017.3201C9.96376%2017.821%2011.0224%2018.057%2012.0864%2018.0029C13.1503%2017.9489%2014.1796%2017.6068%2015.0642%2017.0132L15.2153%2016.9082L6.28099%207.9793L5.90839%207.6067ZM8.38178%206.98683L8.23071%207.09183L17.165%2016.0214L17.5376%2016.394V11.8645C17.5368%2010.7992%2017.2465%209.7541%2016.6978%208.84093C16.1491%207.92777%2015.3627%207.18083%2014.4225%206.67993C13.4822%206.17903%2012.4236%205.943%2011.3596%205.99706C10.2957%206.05111%209.2664%206.39322%208.38178%206.98683Z'%20fill='black'/%3e%3c/svg%3e", import.meta.url).href;
|
|
45
|
-
const BitgetIcon = new URL("data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3cg%20clip-path='url(%23clip0_2600_5842)'%3e%3cpath%20d='M16%200H8C3.58172%200%200%203.58172%200%208V16C0%2020.4183%203.58172%2024%208%2024H16C20.4183%2024%2024%2020.4183%2024%2016V8C24%203.58172%2020.4183%200%2016%200Z'%20fill='white'/%3e%3cmask%20id='mask0_2600_5842'%20style='mask-type:alpha'%20maskUnits='userSpaceOnUse'%20x='0'%20y='0'%20width='24'%20height='24'%3e%3cpath%20d='M16%200H8C3.58172%200%200%203.58172%200%208V16C0%2020.4183%203.58172%2024%208%2024H16C20.4183%2024%2024%2020.4183%2024%2016V8C24%203.58172%2020.4183%200%2016%200Z'%20fill='white'/%3e%3c/mask%3e%3cg%20mask='url(%23mask0_2600_5842)'%3e%3cg%20filter='url(%23filter0_f_2600_5842)'%3e%3cpath%20d='M26.0859%20-6.75C26.0859%204.56321%2016.9148%2013.7344%205.60156%2013.7344C-5.71165%2013.7344%20-14.8828%204.56321%20-14.8828%20-6.75C-14.8828%20-18.0632%20-5.71165%20-27.2344%205.60156%20-27.2344C16.9148%20-27.2344%2026.0859%20-18.0632%2026.0859%20-6.75Z'%20fill='%2333FFF3'/%3e%3c/g%3e%3cg%20filter='url(%23filter1_f_2600_5842)'%3e%3cpath%20d='M9.5625%2022.957C9.5625%2027.4423%205.92657%2031.0781%201.44141%2031.0781C-3.04376%2031.0781%20-6.67969%2027.4423%20-6.67969%2022.957C-6.67969%2018.4719%20-3.04376%2014.8359%201.44141%2014.8359C5.92657%2014.8359%209.5625%2018.4719%209.5625%2022.957Z'%20fill='url(%23paint0_linear_2600_5842)'%20fill-opacity='0.87'/%3e%3c/g%3e%3cg%20filter='url(%23filter2_f_2600_5842)'%3e%3cpath%20d='M49.5%2042.2578C49.5%2053.5711%2040.3289%2062.7422%2029.0156%2062.7422C17.7024%2062.7422%208.53125%2053.5711%208.53125%2042.2578C8.53125%2030.9445%2017.7024%2021.7734%2029.0156%2021.7734C40.3289%2021.7734%2049.5%2030.9445%2049.5%2042.2578Z'%20fill='%2333FFF3'/%3e%3c/g%3e%3cg%20filter='url(%23filter3_f_2600_5842)'%3e%3cpath%20d='M26.0391%20-1.66406C26.0391%201.92147%2023.1324%204.82812%2019.5469%204.82812C15.9613%204.82812%2013.0547%201.92147%2013.0547%20-1.66406C13.0547%20-5.2496%2015.9613%20-8.15625%2019.5469%20-8.15625C23.1324%20-8.15625%2026.0391%20-5.2496%2026.0391%20-1.66406Z'%20fill='%2353C0FB'/%3e%3c/g%3e%3c/g%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M14.1111%203.63526C14.1335%203.61077%2014.1559%203.58628%2014.1786%203.56211L14.1789%203.56139C14.175%203.55316%2014.1707%203.54493%2014.1664%203.53668L14.1664%203.53664C14.1549%203.53544%2014.1434%203.53387%2014.1319%203.53228C14.1088%203.52909%2014.0856%203.52588%2014.0626%203.52588C13.6357%203.5256%2013.2085%203.52196%2012.781%203.51833C11.8354%203.51027%2010.889%203.50221%209.94501%203.53054C9.8897%203.53197%209.82326%203.56389%209.78301%203.60336C9.56315%203.81772%209.34682%204.03562%209.1304%204.25361C9.07987%204.3045%209.02934%204.3554%208.97876%204.40626C8.79524%204.59078%208.61182%204.77547%208.42837%204.96018C8.13468%205.25594%207.84091%205.55175%207.54663%205.84699C7.36675%206.02713%207.18642%206.2068%207.00609%206.3865C6.79569%206.59614%206.5853%206.80579%206.37562%207.01617C6.16108%207.23182%205.94716%207.4481%205.73325%207.6644C5.55501%207.84461%205.37676%208.02485%205.19815%208.20471C5.07098%208.33277%204.94317%208.46015%204.81537%208.58751C4.63886%208.76341%204.46237%208.93931%204.28758%209.11699C4.07528%209.33261%204.01495%209.68202%204.1755%209.93531C4.28216%2010.1044%204.42867%2010.2506%204.5719%2010.3936L4.58357%2010.4053C4.96429%2010.7855%205.3478%2011.1632%205.73133%2011.5408C5.91733%2011.724%206.10335%2011.9072%206.28905%2012.0907C6.47772%2012.2771%206.66613%2012.4639%206.85459%2012.6506C7.00523%2012.7999%207.15588%2012.9492%207.30668%2013.0984C7.38648%2013.1774%207.46624%2013.2565%207.546%2013.3356C7.888%2013.6746%208.22993%2014.0136%208.57537%2014.349C8.61705%2014.3896%208.69031%2014.4179%208.74888%2014.4179C10.0646%2014.4222%2011.3804%2014.4218%2012.6962%2014.4208C12.7156%2014.4205%2012.735%2014.4121%2012.7544%2014.4036C12.7637%2014.3996%2012.773%2014.3956%2012.7824%2014.3924C12.7779%2014.3843%2012.774%2014.3758%2012.7701%2014.3672C12.7622%2014.3496%2012.7542%2014.332%2012.7414%2014.3192C12.629%2014.2059%2012.516%2014.0929%2012.403%2013.98C12.2901%2013.8671%2012.1771%2013.7542%2012.0647%2013.6408C11.8397%2013.4143%2011.6151%2013.1873%2011.3905%2012.9604C11.1659%2012.7333%2010.9413%2012.5063%2010.7162%2012.2797C10.1131%2011.6724%209.50931%2011.0661%208.90512%2010.4598C8.65907%2010.213%208.41194%209.96688%208.16482%209.72114C8.0653%209.62211%208.0646%209.61494%208.15619%209.52311C8.2033%209.47591%208.25004%209.42835%208.29677%209.38078C8.36303%209.31335%208.42931%209.24589%208.49672%209.17943C8.67972%208.99886%208.86305%208.81849%209.04637%208.63814C9.33983%208.34941%209.63334%208.06066%209.92561%207.77097C10.1823%207.51658%2010.438%207.26123%2010.6937%207.00593C10.9067%206.79316%2011.1198%206.58042%2011.3333%206.36826C11.454%206.2484%2011.5756%206.12941%2011.6972%206.01042C11.8249%205.88538%2011.9526%205.76034%2012.0794%205.63425C12.1843%205.5299%2012.2883%205.42455%2012.3923%205.31917C12.5419%205.16765%2012.6915%205.01613%2012.8438%204.8676C13.0639%204.65282%2013.2862%204.43996%2013.5085%204.2271C13.6612%204.08085%2013.8139%203.9346%2013.9659%203.78777C14.0162%203.73902%2014.0636%203.68715%2014.1111%203.63526ZM9.80814%2020.4998C9.80802%2020.4999%209.80793%2020.5%209.80781%2020.5001V20.4998C9.80793%2020.4998%209.80802%2020.4998%209.80814%2020.4998ZM9.80814%2020.4998C10.3735%2020.4998%2010.9515%2020.5036%2011.5319%2020.5074C12.3677%2020.5129%2013.2084%2020.5184%2014.023%2020.5127C14.0809%2020.5123%2014.1531%2020.4951%2014.1933%2020.4582C14.3316%2020.3316%2014.4637%2020.198%2014.5957%2020.0645C14.619%2020.041%2014.6423%2020.0174%2014.6657%2019.9939C14.9028%2019.7551%2015.1397%2019.516%2015.3766%2019.277C15.7318%2018.9185%2016.087%2018.56%2016.443%2018.2023C16.9423%2017.7007%2017.4421%2017.1996%2017.942%2016.6984C18.2275%2016.412%2018.5131%2016.1257%2018.7986%2015.8393C18.882%2015.7557%2018.9656%2015.6724%2019.0493%2015.5892C19.2722%2015.3672%2019.4952%2015.1452%2019.7128%2014.918C19.9028%2014.7196%2019.9495%2014.4814%2019.8719%2014.2138C19.8247%2014.0512%2019.713%2013.9407%2019.6013%2013.8302C19.589%2013.8181%2019.5767%2013.8059%2019.5645%2013.7937C19.3393%2013.5683%2019.1125%2013.3448%2018.8857%2013.1211C18.7261%2012.9638%2018.5665%2012.8065%2018.4075%2012.6485C18.1675%2012.41%2017.9281%2012.1708%2017.6887%2011.9317C17.4893%2011.7324%2017.2898%2011.533%2017.0899%2011.3341C16.9052%2011.1503%2016.7203%2010.9669%2016.5354%2010.7834C16.1823%2010.4331%2015.8293%2010.0828%2015.4778%209.73082C15.4027%209.65584%2015.3266%209.6196%2015.2181%209.62033C14.6488%209.62375%2014.0793%209.62354%2013.51%209.62331C13.3676%209.62324%2013.2253%209.62319%2013.083%209.62319C12.9198%209.6231%2012.7566%209.62286%2012.5934%209.62265C12.1855%209.62209%2011.7775%209.62155%2011.3696%209.62284C11.338%209.62307%2011.3064%209.63404%2011.275%209.64499C11.2601%209.65019%2011.2452%209.65539%2011.2302%209.65943C11.2378%209.67161%2011.2448%209.68443%2011.2518%209.69723C11.2669%209.7251%2011.2821%209.75294%2011.3035%209.77457C11.4959%209.96906%2011.6894%2010.1626%2011.8828%2010.3562C11.9869%2010.4604%2012.0911%2010.5646%2012.1951%2010.6689C12.6498%2011.1253%2013.1042%2011.5818%2013.5586%2012.0384C13.7104%2012.191%2013.8622%2012.3435%2014.0141%2012.4961L14.0177%2012.4997C14.6286%2013.1131%2015.2398%2013.7267%2015.8507%2014.3404C15.9362%2014.4261%2015.9365%2014.4279%2015.8503%2014.514C15.5288%2014.8342%2015.2069%2015.154%2014.8849%2015.4738C14.8043%2015.5539%2014.7236%2015.6339%2014.643%2015.7141L14.6391%2015.7179C13.8821%2016.4693%2013.1255%2017.2203%2012.3689%2017.972C12.2165%2018.1233%2012.0645%2018.2751%2011.9126%2018.4268C11.6509%2018.6881%2011.3892%2018.9493%2011.1254%2019.2083C10.8876%2019.4419%2010.6473%2019.6732%2010.4071%2019.9045C10.2688%2020.0376%2010.1306%2020.1707%209.9928%2020.3042C9.95322%2020.3428%209.91574%2020.3835%209.87362%2020.4292C9.85316%2020.4514%209.83158%2020.4748%209.80814%2020.4998Z'%20fill='black'/%3e%3c/g%3e%3cdefs%3e%3cfilter%20id='filter0_f_2600_5842'%20x='-28.9453'%20y='-41.2969'%20width='69.0938'%20height='69.0938'%20filterUnits='userSpaceOnUse'%20color-interpolation-filters='sRGB'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeBlend%20mode='normal'%20in='SourceGraphic'%20in2='BackgroundImageFix'%20result='shape'/%3e%3cfeGaussianBlur%20stdDeviation='7.03125'%20result='effect1_foregroundBlur_2600_5842'/%3e%3c/filter%3e%3cfilter%20id='filter1_f_2600_5842'%20x='-16.0547'%20y='5.46094'%20width='34.9922'%20height='34.9922'%20filterUnits='userSpaceOnUse'%20color-interpolation-filters='sRGB'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeBlend%20mode='normal'%20in='SourceGraphic'%20in2='BackgroundImageFix'%20result='shape'/%3e%3cfeGaussianBlur%20stdDeviation='4.6875'%20result='effect1_foregroundBlur_2600_5842'/%3e%3c/filter%3e%3cfilter%20id='filter2_f_2600_5842'%20x='-0.84375'%20y='12.3984'%20width='59.7188'%20height='59.7188'%20filterUnits='userSpaceOnUse'%20color-interpolation-filters='sRGB'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeBlend%20mode='normal'%20in='SourceGraphic'%20in2='BackgroundImageFix'%20result='shape'/%3e%3cfeGaussianBlur%20stdDeviation='4.6875'%20result='effect1_foregroundBlur_2600_5842'/%3e%3c/filter%3e%3cfilter%20id='filter3_f_2600_5842'%20x='6.02344'%20y='-15.1875'%20width='27.0469'%20height='27.0469'%20filterUnits='userSpaceOnUse'%20color-interpolation-filters='sRGB'%3e%3cfeFlood%20flood-opacity='0'%20result='BackgroundImageFix'/%3e%3cfeBlend%20mode='normal'%20in='SourceGraphic'%20in2='BackgroundImageFix'%20result='shape'/%3e%3cfeGaussianBlur%20stdDeviation='3.51562'%20result='effect1_foregroundBlur_2600_5842'/%3e%3c/filter%3e%3clinearGradient%20id='paint0_linear_2600_5842'%20x1='1.01953'%20y1='21.7852'%20x2='8.66016'%20y2='18.457'%20gradientUnits='userSpaceOnUse'%3e%3cstop%20offset='0.442707'%20stop-color='%239D95FE'/%3e%3cstop%20offset='1'%20stop-color='%23E395FE'/%3e%3c/linearGradient%3e%3cclipPath%20id='clip0_2600_5842'%3e%3crect%20width='24'%20height='24'%20fill='white'/%3e%3c/clipPath%3e%3c/defs%3e%3c/svg%3e", import.meta.url).href;
|
|
46
|
-
const OkxIcon = new URL("data:image/svg+xml,%3csvg%20width='24'%20height='24'%20viewBox='0%200%2024%2024'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20width='24'%20height='24'%20rx='8'%20fill='white'/%3e%3cpath%20d='M5%205H9.66667V9.66667H5V5ZM14.3333%205H19V9.66667H14.3333V5ZM5%2014.3333H9.66667V19H5V14.3333ZM14.3333%2014.3333H19V19H14.3333V14.3333ZM9.66667%209.66667H14.3333V14.3333H9.66667V9.66667Z'%20fill='%23010101'/%3e%3c/svg%3e", import.meta.url).href;
|
|
47
|
-
const EVM_WALLETS = [
|
|
48
|
-
{
|
|
49
|
-
id: "metamask",
|
|
50
|
-
name: "MetaMask",
|
|
51
|
-
icon: MetaMaskIcon,
|
|
52
|
-
downloadUrl: "https://metamask.io/download/",
|
|
53
|
-
checkInstalled: () => typeof window !== "undefined" && Boolean(window.ethereum)
|
|
54
|
-
},
|
|
55
|
-
{
|
|
56
|
-
id: "walletconnect",
|
|
57
|
-
name: "WalletConnect",
|
|
58
|
-
icon: WalletConnectIcon,
|
|
59
|
-
downloadUrl: "https://walletconnect.com/",
|
|
60
|
-
checkInstalled: () => false
|
|
61
|
-
// WalletConnect 不需要安装
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
id: "onto",
|
|
65
|
-
name: "ONTO",
|
|
66
|
-
icon: OntoIcon,
|
|
67
|
-
downloadUrl: "https://onto.app/",
|
|
68
|
-
checkInstalled: () => typeof window !== "undefined" && Boolean(window.onto)
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
id: "bitget",
|
|
72
|
-
name: "Bitget Wallet",
|
|
73
|
-
icon: BitgetIcon,
|
|
74
|
-
downloadUrl: "https://web3.bitget.com/",
|
|
75
|
-
checkInstalled: () => {
|
|
76
|
-
var _a;
|
|
77
|
-
return typeof window !== "undefined" && Boolean((_a = window.bitkeep) == null ? void 0 : _a.ethereum);
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
{
|
|
81
|
-
id: "okx",
|
|
82
|
-
name: "OKX Wallet",
|
|
83
|
-
icon: OkxIcon,
|
|
84
|
-
downloadUrl: "https://www.okx.com/web3",
|
|
85
|
-
checkInstalled: () => typeof window !== "undefined" && Boolean(window.okxwallet)
|
|
86
|
-
}
|
|
87
|
-
];
|
|
88
|
-
function getWalletProvider(walletId) {
|
|
89
|
-
var _a;
|
|
90
|
-
if (typeof window === "undefined") return null;
|
|
91
|
-
switch (walletId) {
|
|
92
|
-
case "metamask":
|
|
93
|
-
return window.ethereum;
|
|
94
|
-
case "onto":
|
|
95
|
-
return window.onto;
|
|
96
|
-
case "bitget":
|
|
97
|
-
return (_a = window.bitkeep) == null ? void 0 : _a.ethereum;
|
|
98
|
-
case "okx":
|
|
99
|
-
return window.okxwallet;
|
|
100
|
-
default:
|
|
101
|
-
return null;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
async function checkWalletConnectAvailable() {
|
|
105
|
-
try {
|
|
106
|
-
await import("@walletconnect/ethereum-provider");
|
|
107
|
-
return true;
|
|
108
|
-
} catch {
|
|
109
|
-
return false;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
function ConnectLoading({ walletName }) {
|
|
113
|
-
return /* @__PURE__ */ jsxs("div", { className: "taskon-bind-wallet-loading-overlay", children: [
|
|
114
|
-
/* @__PURE__ */ jsx("svg", { className: "taskon-bind-wallet-loading-spinner", viewBox: "0 0 50 50", children: /* @__PURE__ */ jsx(
|
|
115
|
-
"circle",
|
|
116
|
-
{
|
|
117
|
-
cx: "25",
|
|
118
|
-
cy: "25",
|
|
119
|
-
r: "20",
|
|
120
|
-
fill: "none",
|
|
121
|
-
stroke: "currentColor",
|
|
122
|
-
strokeWidth: "4",
|
|
123
|
-
strokeLinecap: "round",
|
|
124
|
-
strokeDasharray: "80 60"
|
|
125
|
-
}
|
|
126
|
-
) }),
|
|
127
|
-
/* @__PURE__ */ jsxs("p", { className: "taskon-bind-wallet-loading-text", children: [
|
|
128
|
-
"Please log in to ",
|
|
129
|
-
walletName,
|
|
130
|
-
" and sign message to proceed"
|
|
131
|
-
] })
|
|
132
|
-
] });
|
|
133
|
-
}
|
|
134
|
-
function WalletItem({
|
|
135
|
-
wallet,
|
|
136
|
-
isInstalled,
|
|
137
|
-
isConnecting,
|
|
138
|
-
isDisabled,
|
|
139
|
-
disabledReason,
|
|
140
|
-
onClick
|
|
141
|
-
}) {
|
|
142
|
-
return /* @__PURE__ */ jsxs(
|
|
143
|
-
"button",
|
|
144
|
-
{
|
|
145
|
-
type: "button",
|
|
146
|
-
className: `taskon-bind-wallet-item ${isConnecting ? "taskon-bind-wallet-item--connecting" : ""} ${isDisabled ? "taskon-bind-wallet-item--disabled" : ""}`,
|
|
147
|
-
onClick,
|
|
148
|
-
disabled: isConnecting || isDisabled,
|
|
149
|
-
title: disabledReason,
|
|
150
|
-
children: [
|
|
151
|
-
/* @__PURE__ */ jsx(
|
|
152
|
-
"img",
|
|
153
|
-
{
|
|
154
|
-
className: "taskon-bind-wallet-item-icon",
|
|
155
|
-
src: wallet.icon,
|
|
156
|
-
alt: wallet.name
|
|
157
|
-
}
|
|
158
|
-
),
|
|
159
|
-
/* @__PURE__ */ jsx("span", { className: "taskon-bind-wallet-item-name", children: wallet.name }),
|
|
160
|
-
isConnecting ? /* @__PURE__ */ jsx("span", { className: "taskon-bind-wallet-item-connecting", children: /* @__PURE__ */ jsx("svg", { className: "taskon-bind-wallet-spinner", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "3", strokeLinecap: "round", strokeDasharray: "31.4 31.4" }) }) }) : isDisabled ? /* @__PURE__ */ jsx("span", { className: "taskon-bind-wallet-item-unavailable", children: "N/A" }) : isInstalled ? /* @__PURE__ */ jsx("span", { className: "taskon-bind-wallet-item-installed", children: "INSTALLED" }) : null
|
|
161
|
-
]
|
|
162
|
-
}
|
|
163
|
-
);
|
|
164
|
-
}
|
|
165
|
-
function BindWalletDialog({
|
|
166
|
-
open,
|
|
167
|
-
onOpenChange,
|
|
168
|
-
onConnect,
|
|
169
|
-
onError
|
|
170
|
-
}) {
|
|
171
|
-
var _a;
|
|
172
|
-
const isMobile = useIsMobile$1();
|
|
173
|
-
const context = useContext(TaskOnContext);
|
|
174
|
-
const walletConnectProjectId = (_a = context == null ? void 0 : context.config) == null ? void 0 : _a.walletConnectProjectId;
|
|
175
|
-
const [connectingWalletId, setConnectingWalletId] = useState(null);
|
|
176
|
-
const [connectingWalletName, setConnectingWalletName] = useState("");
|
|
177
|
-
const [wcAvailable, setWcAvailable] = useState(null);
|
|
178
|
-
const wcProviderRef = useRef(null);
|
|
179
|
-
React__default.useEffect(() => {
|
|
180
|
-
checkWalletConnectAvailable().then(setWcAvailable);
|
|
181
|
-
}, []);
|
|
182
|
-
const isWalletConnectEnabled = useMemo(() => {
|
|
183
|
-
return Boolean(walletConnectProjectId) && wcAvailable === true;
|
|
184
|
-
}, [walletConnectProjectId, wcAvailable]);
|
|
185
|
-
const wcDisabledReason = useMemo(() => {
|
|
186
|
-
if (!walletConnectProjectId) {
|
|
187
|
-
return "WalletConnect requires walletConnectProjectId configuration";
|
|
188
|
-
}
|
|
189
|
-
if (wcAvailable === false) {
|
|
190
|
-
return "WalletConnect SDK not installed. Please install @walletconnect/ethereum-provider";
|
|
191
|
-
}
|
|
192
|
-
return void 0;
|
|
193
|
-
}, [walletConnectProjectId, wcAvailable]);
|
|
194
|
-
const walletsWithStatus = useMemo(() => {
|
|
195
|
-
const walletList = isMobile ? EVM_WALLETS.filter((w) => w.id === "walletconnect") : EVM_WALLETS;
|
|
196
|
-
return walletList.map((wallet) => ({
|
|
197
|
-
wallet,
|
|
198
|
-
isInstalled: wallet.id === "walletconnect" ? isWalletConnectEnabled : wallet.checkInstalled(),
|
|
199
|
-
isDisabled: wallet.id === "walletconnect" && !isWalletConnectEnabled,
|
|
200
|
-
disabledReason: wallet.id === "walletconnect" ? wcDisabledReason : void 0
|
|
201
|
-
}));
|
|
202
|
-
}, [isMobile, isWalletConnectEnabled, wcDisabledReason]);
|
|
203
|
-
const connectWalletConnect = useCallback(async () => {
|
|
204
|
-
var _a2, _b, _c;
|
|
205
|
-
if (!walletConnectProjectId) {
|
|
206
|
-
onError == null ? void 0 : onError("WalletConnect projectId not configured");
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
setConnectingWalletId("walletconnect");
|
|
210
|
-
setConnectingWalletName("WalletConnect");
|
|
211
|
-
try {
|
|
212
|
-
const { EthereumProvider } = await import("@walletconnect/ethereum-provider");
|
|
213
|
-
const provider = await EthereumProvider.init({
|
|
214
|
-
projectId: walletConnectProjectId,
|
|
215
|
-
chains: [1],
|
|
216
|
-
// Ethereum mainnet
|
|
217
|
-
optionalChains: [56, 137, 42161, 10, 8453],
|
|
218
|
-
// BSC, Polygon, Arbitrum, Optimism, Base
|
|
219
|
-
showQrModal: true,
|
|
220
|
-
qrModalOptions: {
|
|
221
|
-
themeMode: "dark"
|
|
222
|
-
}
|
|
223
|
-
});
|
|
224
|
-
wcProviderRef.current = provider;
|
|
225
|
-
await provider.connect();
|
|
226
|
-
const accounts = provider.accounts;
|
|
227
|
-
const address = accounts[0];
|
|
228
|
-
if (!address) {
|
|
229
|
-
onError == null ? void 0 : onError("No account found");
|
|
230
|
-
setConnectingWalletId(null);
|
|
231
|
-
return;
|
|
232
|
-
}
|
|
233
|
-
await (onConnect == null ? void 0 : onConnect(address, provider));
|
|
234
|
-
} catch (e) {
|
|
235
|
-
const error = e;
|
|
236
|
-
if (((_a2 = error.message) == null ? void 0 : _a2.includes("rejected")) || ((_b = error.message) == null ? void 0 : _b.includes("denied")) || ((_c = error.message) == null ? void 0 : _c.includes("User closed"))) {
|
|
237
|
-
onError == null ? void 0 : onError("User rejected the connection");
|
|
238
|
-
} else {
|
|
239
|
-
onError == null ? void 0 : onError(error.message || "Failed to connect WalletConnect");
|
|
240
|
-
}
|
|
241
|
-
} finally {
|
|
242
|
-
setConnectingWalletId(null);
|
|
243
|
-
}
|
|
244
|
-
}, [walletConnectProjectId, onConnect, onError]);
|
|
245
|
-
const connectWallet = useCallback(async (wallet) => {
|
|
246
|
-
var _a2, _b;
|
|
247
|
-
const provider = getWalletProvider(wallet.id);
|
|
248
|
-
if (!provider) {
|
|
249
|
-
onError == null ? void 0 : onError(`${wallet.name} provider not found`);
|
|
250
|
-
return;
|
|
251
|
-
}
|
|
252
|
-
setConnectingWalletId(wallet.id);
|
|
253
|
-
setConnectingWalletName(wallet.name);
|
|
254
|
-
try {
|
|
255
|
-
const accounts = await provider.request({
|
|
256
|
-
method: "eth_requestAccounts"
|
|
257
|
-
});
|
|
258
|
-
const address = accounts[0];
|
|
259
|
-
if (!address) {
|
|
260
|
-
onError == null ? void 0 : onError("No account found");
|
|
261
|
-
setConnectingWalletId(null);
|
|
262
|
-
return;
|
|
263
|
-
}
|
|
264
|
-
await (onConnect == null ? void 0 : onConnect(address, provider));
|
|
265
|
-
} catch (e) {
|
|
266
|
-
const error = e;
|
|
267
|
-
if (((_a2 = error.message) == null ? void 0 : _a2.includes("rejected")) || ((_b = error.message) == null ? void 0 : _b.includes("denied"))) {
|
|
268
|
-
onError == null ? void 0 : onError("User rejected the connection");
|
|
269
|
-
} else {
|
|
270
|
-
onError == null ? void 0 : onError(error.message || "Failed to connect wallet");
|
|
271
|
-
}
|
|
272
|
-
} finally {
|
|
273
|
-
setConnectingWalletId(null);
|
|
274
|
-
}
|
|
275
|
-
}, [onConnect, onError]);
|
|
276
|
-
const handleWalletClick = useCallback((wallet, isInstalled, isDisabled) => {
|
|
277
|
-
if (isDisabled) {
|
|
278
|
-
return;
|
|
279
|
-
}
|
|
280
|
-
if (wallet.id === "walletconnect") {
|
|
281
|
-
connectWalletConnect();
|
|
282
|
-
return;
|
|
283
|
-
}
|
|
284
|
-
if (isInstalled) {
|
|
285
|
-
connectWallet(wallet);
|
|
286
|
-
} else {
|
|
287
|
-
window.open(wallet.downloadUrl, "_blank", "noopener,noreferrer");
|
|
288
|
-
}
|
|
289
|
-
}, [connectWallet, connectWalletConnect]);
|
|
290
|
-
return /* @__PURE__ */ jsx(
|
|
291
|
-
Dialog,
|
|
292
|
-
{
|
|
293
|
-
open,
|
|
294
|
-
onOpenChange,
|
|
295
|
-
title: "Connect Wallet",
|
|
296
|
-
showCloseButton: true,
|
|
297
|
-
maxWidth: 510,
|
|
298
|
-
children: /* @__PURE__ */ jsxs("div", { className: "taskon-bind-wallet-dialog", children: [
|
|
299
|
-
/* @__PURE__ */ jsx("h2", { className: "taskon-bind-wallet-dialog-title", children: "Please connect wallet" }),
|
|
300
|
-
/* @__PURE__ */ jsx("div", { className: "taskon-bind-wallet-dialog-chain-label", children: "EVM Chain" }),
|
|
301
|
-
/* @__PURE__ */ jsx("div", { className: "taskon-bind-wallet-dialog-grid", children: walletsWithStatus.map(({ wallet, isInstalled, isDisabled, disabledReason }) => /* @__PURE__ */ jsx(
|
|
302
|
-
WalletItem,
|
|
303
|
-
{
|
|
304
|
-
wallet,
|
|
305
|
-
isInstalled,
|
|
306
|
-
isConnecting: connectingWalletId === wallet.id,
|
|
307
|
-
isDisabled,
|
|
308
|
-
disabledReason,
|
|
309
|
-
onClick: () => handleWalletClick(wallet, isInstalled, isDisabled)
|
|
310
|
-
},
|
|
311
|
-
wallet.id
|
|
312
|
-
)) }),
|
|
313
|
-
connectingWalletId && /* @__PURE__ */ jsx(ConnectLoading, { walletName: connectingWalletName })
|
|
314
|
-
] })
|
|
315
|
-
}
|
|
316
|
-
);
|
|
317
|
-
}
|
|
318
|
-
function CardDescExpress({
|
|
319
|
-
label
|
|
320
|
-
}) {
|
|
321
|
-
const sanitizedHtml = useMemo(() => {
|
|
322
|
-
if (!label) return "";
|
|
323
|
-
return sanitizeHtml(label);
|
|
324
|
-
}, [label]);
|
|
325
|
-
if (!label) {
|
|
326
|
-
return null;
|
|
327
|
-
}
|
|
328
|
-
return /* @__PURE__ */ jsx(
|
|
329
|
-
"div",
|
|
330
|
-
{
|
|
331
|
-
className: "taskon-card-desc-rich",
|
|
332
|
-
dangerouslySetInnerHTML: { __html: sanitizedHtml }
|
|
333
|
-
}
|
|
334
|
-
);
|
|
335
|
-
}
|
|
336
42
|
function ClaimButton({
|
|
337
43
|
verifyClaim = false,
|
|
338
44
|
recurrence,
|
|
@@ -618,14 +324,14 @@ function WarningIcon() {
|
|
|
618
324
|
"path",
|
|
619
325
|
{
|
|
620
326
|
d: "M6.134 1.5a1 1 0 0 1 1.732 0l5.196 9a1 1 0 0 1-.866 1.5H1.804a1 1 0 0 1-.866-1.5l5.196-9Z",
|
|
621
|
-
fill: "
|
|
327
|
+
fill: "var(--taskon-color-warning)"
|
|
622
328
|
}
|
|
623
329
|
),
|
|
624
330
|
/* @__PURE__ */ jsx(
|
|
625
331
|
"path",
|
|
626
332
|
{
|
|
627
333
|
d: "M7 4.5v3M7 9.5v.5",
|
|
628
|
-
stroke: "
|
|
334
|
+
stroke: "var(--taskon-color-text-on-primary)",
|
|
629
335
|
strokeWidth: "1.5",
|
|
630
336
|
strokeLinecap: "round"
|
|
631
337
|
}
|
|
@@ -745,7 +451,7 @@ function BlingSvg({ className }) {
|
|
|
745
451
|
fillRule: "evenodd",
|
|
746
452
|
clipRule: "evenodd",
|
|
747
453
|
d: "M26.8262 15C22.857 15 19.9169 13.8078 17.9676 11.8586C16.0183 9.90931 14.8262 6.96917 14.8262 3C14.8262 6.96917 13.634 9.90932 11.6848 11.8586C9.73549 13.8078 6.79534 15 2.82617 15C6.79534 15 9.73549 16.1922 11.6848 18.1414C13.634 20.0907 14.8262 23.0308 14.8262 27C14.8262 23.0308 16.0183 20.0907 17.9676 18.1414C19.9169 16.1922 22.857 15 26.8262 15Z",
|
|
748
|
-
fill: "
|
|
454
|
+
fill: "var(--taskon-color-link)",
|
|
749
455
|
fillOpacity: "0.4"
|
|
750
456
|
}
|
|
751
457
|
),
|
|
@@ -755,7 +461,7 @@ function BlingSvg({ className }) {
|
|
|
755
461
|
fillRule: "evenodd",
|
|
756
462
|
clipRule: "evenodd",
|
|
757
463
|
d: "M11 5.5C9.1808 5.5 7.83323 4.9536 6.93982 4.06018C6.04641 3.16677 5.5 1.8192 5.5 9.08106e-10C5.5 1.8192 4.9536 3.16677 4.06018 4.06018C3.16677 4.9536 1.8192 5.5 7.1235e-07 5.5C1.8192 5.5 3.16677 6.04641 4.06018 6.93982C4.95359 7.83323 5.5 9.1808 5.5 11C5.5 9.1808 6.0464 7.83323 6.93982 6.93982C7.83323 6.04641 9.1808 5.5 11 5.5Z",
|
|
758
|
-
fill: "
|
|
464
|
+
fill: "var(--taskon-color-link)",
|
|
759
465
|
fillOpacity: "0.4"
|
|
760
466
|
}
|
|
761
467
|
)
|
|
@@ -786,6 +492,7 @@ function BaseTask(props) {
|
|
|
786
492
|
recurrence,
|
|
787
493
|
noRecurrence = false,
|
|
788
494
|
showUnlimitedClaim = true,
|
|
495
|
+
taskId,
|
|
789
496
|
// taskId - Widget 版本不显示 Task ID
|
|
790
497
|
validTime,
|
|
791
498
|
validationTimeFrame,
|
|
@@ -803,6 +510,7 @@ function BaseTask(props) {
|
|
|
803
510
|
isSubmitting = false,
|
|
804
511
|
coolDown = 0,
|
|
805
512
|
onCoolDownComplete,
|
|
513
|
+
onDoneCountdownComplete,
|
|
806
514
|
disabled = false,
|
|
807
515
|
reviewResult,
|
|
808
516
|
communityInfo,
|
|
@@ -1056,7 +764,15 @@ function BaseTask(props) {
|
|
|
1056
764
|
) : /* @__PURE__ */ jsx("h3", { className: "taskon-community-task-title", children: title }),
|
|
1057
765
|
renderValidTime(),
|
|
1058
766
|
validationTimeFrame && /* @__PURE__ */ jsx(ValidationTimeTip, { timeFrame: validationTimeFrame }),
|
|
1059
|
-
isPeriodic && currentCompleted && nextTime ? /* @__PURE__ */ jsx(
|
|
767
|
+
isPeriodic && currentCompleted && nextTime ? /* @__PURE__ */ jsx(
|
|
768
|
+
DoneCountdown,
|
|
769
|
+
{
|
|
770
|
+
nextTime,
|
|
771
|
+
onComplete: () => {
|
|
772
|
+
onDoneCountdownComplete == null ? void 0 : onDoneCountdownComplete(taskId);
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
) : (
|
|
1060
776
|
/* 任务额外内容(由具体任务组件提供) */
|
|
1061
777
|
children
|
|
1062
778
|
)
|
|
@@ -1202,7 +918,7 @@ function SuccessIcon({
|
|
|
1202
918
|
fillRule: "evenodd",
|
|
1203
919
|
clipRule: "evenodd",
|
|
1204
920
|
d: "M12.7173 2.49792C13.3812 3.16181 13.3812 4.23819 12.7173 4.90208L6.70694 10.9125C6.38813 11.2313 5.95572 11.4104 5.50486 11.4104C5.05399 11.4104 4.62159 11.2313 4.30277 10.9125L1.49792 8.10763C0.834027 7.44374 0.834027 6.36736 1.49792 5.70347C2.16181 5.03958 3.23819 5.03958 3.90208 5.70347L5.50486 7.30624L10.3132 2.49792C10.9771 1.83403 12.0535 1.83403 12.7173 2.49792Z",
|
|
1205
|
-
fill: "
|
|
921
|
+
fill: "var(--taskon-color-success)"
|
|
1206
922
|
}
|
|
1207
923
|
)
|
|
1208
924
|
}
|
|
@@ -1226,7 +942,7 @@ function FailedIcon({
|
|
|
1226
942
|
fillRule: "evenodd",
|
|
1227
943
|
clipRule: "evenodd",
|
|
1228
944
|
d: "M3.90208 1.49792C3.23819 0.834027 2.16181 0.834027 1.49792 1.49792C0.834027 2.16181 0.834027 3.23819 1.49792 3.90208L4.2625 6.66667L1.49792 9.43125C0.834027 10.0951 0.834027 11.1715 1.49792 11.8354C2.16181 12.4993 3.23819 12.4993 3.90208 11.8354L6.66667 9.07083L9.43125 11.8354C10.0951 12.4993 11.1715 12.4993 11.8354 11.8354C12.4993 11.1715 12.4993 10.0951 11.8354 9.43125L9.07083 6.66667L11.8354 3.90208C12.4993 3.23819 12.4993 2.16181 11.8354 1.49792C11.1715 0.834027 10.0951 0.834027 9.43125 1.49792L6.66667 4.2625L3.90208 1.49792Z",
|
|
1229
|
-
fill: "
|
|
945
|
+
fill: "var(--taskon-color-error)"
|
|
1230
946
|
}
|
|
1231
947
|
)
|
|
1232
948
|
}
|
|
@@ -1245,15 +961,24 @@ function UnknownIcon({
|
|
|
1245
961
|
viewBox: "0 0 14 14",
|
|
1246
962
|
fill: "none",
|
|
1247
963
|
children: [
|
|
1248
|
-
/* @__PURE__ */ jsx(
|
|
1249
|
-
|
|
964
|
+
/* @__PURE__ */ jsx(
|
|
965
|
+
"circle",
|
|
966
|
+
{
|
|
967
|
+
cx: "7",
|
|
968
|
+
cy: "7.00002",
|
|
969
|
+
r: "6.125",
|
|
970
|
+
stroke: "var(--taskon-color-warning)",
|
|
971
|
+
strokeWidth: "1.75"
|
|
972
|
+
}
|
|
973
|
+
),
|
|
974
|
+
/* @__PURE__ */ jsx("circle", { cx: "7.01736", cy: "10.2012", r: "0.99881", fill: "var(--taskon-color-warning)" }),
|
|
1250
975
|
/* @__PURE__ */ jsx(
|
|
1251
976
|
"path",
|
|
1252
977
|
{
|
|
1253
978
|
fillRule: "evenodd",
|
|
1254
979
|
clipRule: "evenodd",
|
|
1255
980
|
d: "M7.01877 2.79999C7.5704 2.79999 8.01758 3.27655 8.01758 3.86442V7.49432C8.01758 8.08219 7.5704 8.55875 7.01877 8.55875C6.46714 8.55875 6.01996 8.08219 6.01996 7.49432V3.86442C6.01996 3.27655 6.46714 2.79999 7.01877 2.79999Z",
|
|
1256
|
-
fill: "
|
|
981
|
+
fill: "var(--taskon-color-warning)"
|
|
1257
982
|
}
|
|
1258
983
|
)
|
|
1259
984
|
]
|
|
@@ -1273,160 +998,29 @@ function LockedIcon({
|
|
|
1273
998
|
viewBox: "0 0 22 22",
|
|
1274
999
|
fill: "none",
|
|
1275
1000
|
children: [
|
|
1276
|
-
/* @__PURE__ */
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
"
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
] }),
|
|
1300
|
-
/* @__PURE__ */ jsxs("defs", { children: [
|
|
1301
|
-
/* @__PURE__ */ jsxs(
|
|
1302
|
-
"filter",
|
|
1303
|
-
{
|
|
1304
|
-
id: "filter0_i_locked",
|
|
1305
|
-
x: "1.64687",
|
|
1306
|
-
y: "0",
|
|
1307
|
-
width: "18.3072",
|
|
1308
|
-
height: "22.4",
|
|
1309
|
-
filterUnits: "userSpaceOnUse",
|
|
1310
|
-
colorInterpolationFilters: "sRGB",
|
|
1311
|
-
children: [
|
|
1312
|
-
/* @__PURE__ */ jsx("feFlood", { floodOpacity: "0", result: "BackgroundImageFix" }),
|
|
1313
|
-
/* @__PURE__ */ jsx("feBlend", { mode: "normal", in: "SourceGraphic", in2: "BackgroundImageFix", result: "shape" }),
|
|
1314
|
-
/* @__PURE__ */ jsx(
|
|
1315
|
-
"feColorMatrix",
|
|
1316
|
-
{
|
|
1317
|
-
in: "SourceAlpha",
|
|
1318
|
-
type: "matrix",
|
|
1319
|
-
values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0",
|
|
1320
|
-
result: "hardAlpha"
|
|
1321
|
-
}
|
|
1322
|
-
),
|
|
1323
|
-
/* @__PURE__ */ jsx("feOffset", { dx: "-0.4", dy: "0.4" }),
|
|
1324
|
-
/* @__PURE__ */ jsx("feGaussianBlur", { stdDeviation: "0.2" }),
|
|
1325
|
-
/* @__PURE__ */ jsx("feComposite", { in2: "hardAlpha", operator: "arithmetic", k2: "-1", k3: "1" }),
|
|
1326
|
-
/* @__PURE__ */ jsx("feColorMatrix", { type: "matrix", values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0" }),
|
|
1327
|
-
/* @__PURE__ */ jsx("feBlend", { mode: "normal", in2: "shape", result: "effect1_innerShadow_locked" })
|
|
1328
|
-
]
|
|
1329
|
-
}
|
|
1330
|
-
),
|
|
1331
|
-
/* @__PURE__ */ jsxs(
|
|
1332
|
-
"filter",
|
|
1333
|
-
{
|
|
1334
|
-
id: "filter1_d_locked",
|
|
1335
|
-
x: "1.34688",
|
|
1336
|
-
y: "7.79766",
|
|
1337
|
-
width: "19.3072",
|
|
1338
|
-
height: "14.7023",
|
|
1339
|
-
filterUnits: "userSpaceOnUse",
|
|
1340
|
-
colorInterpolationFilters: "sRGB",
|
|
1341
|
-
children: [
|
|
1342
|
-
/* @__PURE__ */ jsx("feFlood", { floodOpacity: "0", result: "BackgroundImageFix" }),
|
|
1343
|
-
/* @__PURE__ */ jsx(
|
|
1344
|
-
"feColorMatrix",
|
|
1345
|
-
{
|
|
1346
|
-
in: "SourceAlpha",
|
|
1347
|
-
type: "matrix",
|
|
1348
|
-
values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0",
|
|
1349
|
-
result: "hardAlpha"
|
|
1350
|
-
}
|
|
1351
|
-
),
|
|
1352
|
-
/* @__PURE__ */ jsx("feOffset", { dy: "-0.2" }),
|
|
1353
|
-
/* @__PURE__ */ jsx("feGaussianBlur", { stdDeviation: "0.35" }),
|
|
1354
|
-
/* @__PURE__ */ jsx("feComposite", { in2: "hardAlpha", operator: "out" }),
|
|
1355
|
-
/* @__PURE__ */ jsx("feColorMatrix", { type: "matrix", values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0" }),
|
|
1356
|
-
/* @__PURE__ */ jsx("feBlend", { mode: "normal", in2: "BackgroundImageFix", result: "effect1_dropShadow_locked" }),
|
|
1357
|
-
/* @__PURE__ */ jsx(
|
|
1358
|
-
"feBlend",
|
|
1359
|
-
{
|
|
1360
|
-
mode: "normal",
|
|
1361
|
-
in: "SourceGraphic",
|
|
1362
|
-
in2: "effect1_dropShadow_locked",
|
|
1363
|
-
result: "shape"
|
|
1364
|
-
}
|
|
1365
|
-
)
|
|
1366
|
-
]
|
|
1367
|
-
}
|
|
1368
|
-
),
|
|
1369
|
-
/* @__PURE__ */ jsxs(
|
|
1370
|
-
"filter",
|
|
1371
|
-
{
|
|
1372
|
-
id: "filter2_i_locked",
|
|
1373
|
-
x: "9.75879",
|
|
1374
|
-
y: "13.3023",
|
|
1375
|
-
width: "2.99316",
|
|
1376
|
-
height: "4.09302",
|
|
1377
|
-
filterUnits: "userSpaceOnUse",
|
|
1378
|
-
colorInterpolationFilters: "sRGB",
|
|
1379
|
-
children: [
|
|
1380
|
-
/* @__PURE__ */ jsx("feFlood", { floodOpacity: "0", result: "BackgroundImageFix" }),
|
|
1381
|
-
/* @__PURE__ */ jsx("feBlend", { mode: "normal", in: "SourceGraphic", in2: "BackgroundImageFix", result: "shape" }),
|
|
1382
|
-
/* @__PURE__ */ jsx(
|
|
1383
|
-
"feColorMatrix",
|
|
1384
|
-
{
|
|
1385
|
-
in: "SourceAlpha",
|
|
1386
|
-
type: "matrix",
|
|
1387
|
-
values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0",
|
|
1388
|
-
result: "hardAlpha"
|
|
1389
|
-
}
|
|
1390
|
-
),
|
|
1391
|
-
/* @__PURE__ */ jsx("feOffset", { dy: "0.4" }),
|
|
1392
|
-
/* @__PURE__ */ jsx("feComposite", { in2: "hardAlpha", operator: "arithmetic", k2: "-1", k3: "1" }),
|
|
1393
|
-
/* @__PURE__ */ jsx("feColorMatrix", { type: "matrix", values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0" }),
|
|
1394
|
-
/* @__PURE__ */ jsx("feBlend", { mode: "normal", in2: "shape", result: "effect1_innerShadow_locked" })
|
|
1395
|
-
]
|
|
1396
|
-
}
|
|
1397
|
-
),
|
|
1398
|
-
/* @__PURE__ */ jsxs(
|
|
1399
|
-
"linearGradient",
|
|
1400
|
-
{
|
|
1401
|
-
id: "paint0_linear_locked",
|
|
1402
|
-
x1: "9.50049",
|
|
1403
|
-
y1: "-2",
|
|
1404
|
-
x2: "9.50049",
|
|
1405
|
-
y2: "8",
|
|
1406
|
-
gradientUnits: "userSpaceOnUse",
|
|
1407
|
-
children: [
|
|
1408
|
-
/* @__PURE__ */ jsx("stop", { stopColor: "#EBEBEB" }),
|
|
1409
|
-
/* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "#ABACAA" })
|
|
1410
|
-
]
|
|
1411
|
-
}
|
|
1412
|
-
),
|
|
1413
|
-
/* @__PURE__ */ jsxs(
|
|
1414
|
-
"linearGradient",
|
|
1415
|
-
{
|
|
1416
|
-
id: "paint1_linear_locked",
|
|
1417
|
-
x1: "3.00049",
|
|
1418
|
-
y1: "10.9999",
|
|
1419
|
-
x2: "19.0005",
|
|
1420
|
-
y2: "21.4999",
|
|
1421
|
-
gradientUnits: "userSpaceOnUse",
|
|
1422
|
-
children: [
|
|
1423
|
-
/* @__PURE__ */ jsx("stop", { stopColor: "#E6E19E" }),
|
|
1424
|
-
/* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "#C3BC79" })
|
|
1425
|
-
]
|
|
1426
|
-
}
|
|
1427
|
-
),
|
|
1428
|
-
/* @__PURE__ */ jsx("clipPath", { id: "clip0_locked", children: /* @__PURE__ */ jsx("rect", { width: "22", height: "22", fill: "white" }) })
|
|
1429
|
-
] })
|
|
1001
|
+
/* @__PURE__ */ jsx(
|
|
1002
|
+
"rect",
|
|
1003
|
+
{
|
|
1004
|
+
x: "3",
|
|
1005
|
+
y: "9",
|
|
1006
|
+
width: "16",
|
|
1007
|
+
height: "11",
|
|
1008
|
+
rx: "2.5",
|
|
1009
|
+
fill: "var(--taskon-color-bg-surface)",
|
|
1010
|
+
stroke: "var(--taskon-color-border)"
|
|
1011
|
+
}
|
|
1012
|
+
),
|
|
1013
|
+
/* @__PURE__ */ jsx(
|
|
1014
|
+
"path",
|
|
1015
|
+
{
|
|
1016
|
+
d: "M7 9V6.5C7 4.29086 8.79086 2.5 11 2.5C13.2091 2.5 15 4.29086 15 6.5V9",
|
|
1017
|
+
stroke: "var(--taskon-color-text-secondary)",
|
|
1018
|
+
strokeWidth: "1.5",
|
|
1019
|
+
strokeLinecap: "round"
|
|
1020
|
+
}
|
|
1021
|
+
),
|
|
1022
|
+
/* @__PURE__ */ jsx("circle", { cx: "11", cy: "14", r: "1.5", fill: "var(--taskon-color-text-secondary)" }),
|
|
1023
|
+
/* @__PURE__ */ jsx("rect", { x: "10.25", y: "14", width: "1.5", height: "3", rx: "0.75", fill: "var(--taskon-color-text-secondary)" })
|
|
1430
1024
|
]
|
|
1431
1025
|
}
|
|
1432
1026
|
);
|
|
@@ -1768,6 +1362,25 @@ function useTaskTime(task) {
|
|
|
1768
1362
|
};
|
|
1769
1363
|
}, [task.time_frame, task.status]);
|
|
1770
1364
|
}
|
|
1365
|
+
const DISCORD_USER_NOT_IN_CHANNEL_CODE = "DISCORD_USER_NOT_IN_CHANNEL";
|
|
1366
|
+
const DISCORD_JOIN_REQUIRED_FALLBACK_MESSAGE = "Please join the required Discord channel and try again.";
|
|
1367
|
+
const DEFAULT_SUBMIT_TASK_ERROR_MESSAGE = "Submission failed";
|
|
1368
|
+
const isBlankMessage = (message) => {
|
|
1369
|
+
return message.trim().length === 0;
|
|
1370
|
+
};
|
|
1371
|
+
const isDiscordNotJoinedError = (errorCode) => {
|
|
1372
|
+
return errorCode === ErrorCode.DISCORD_USRE_NOT_IN_GROUP || errorCode === DISCORD_USER_NOT_IN_CHANNEL_CODE;
|
|
1373
|
+
};
|
|
1374
|
+
const resolveCommunityTaskSubmitErrorMessage = (error, errorCode) => {
|
|
1375
|
+
const errorMessage = error instanceof Error ? error.message : typeof error === "string" ? error : "";
|
|
1376
|
+
if (!isBlankMessage(errorMessage)) {
|
|
1377
|
+
return errorMessage;
|
|
1378
|
+
}
|
|
1379
|
+
if (isDiscordNotJoinedError(errorCode)) {
|
|
1380
|
+
return DISCORD_JOIN_REQUIRED_FALLBACK_MESSAGE;
|
|
1381
|
+
}
|
|
1382
|
+
return DEFAULT_SUBMIT_TASK_ERROR_MESSAGE;
|
|
1383
|
+
};
|
|
1771
1384
|
function useSubmitTask(taskId, onSuccess, platform, options) {
|
|
1772
1385
|
const { refreshOnFail = false } = options ?? {};
|
|
1773
1386
|
const { client, userToken, userInfo } = useTaskOnContext();
|
|
@@ -1839,9 +1452,9 @@ function useSubmitTask(taskId, onSuccess, platform, options) {
|
|
|
1839
1452
|
return { successful: false };
|
|
1840
1453
|
}
|
|
1841
1454
|
} catch (err) {
|
|
1842
|
-
const errorMsg = err instanceof Error ? err.message : "Submission failed";
|
|
1843
1455
|
const errorCode = err instanceof ApiError ? err.code : void 0;
|
|
1844
1456
|
const errorData = err instanceof ApiError ? err.data : void 0;
|
|
1457
|
+
const errorMsg = resolveCommunityTaskSubmitErrorMessage(err, errorCode);
|
|
1845
1458
|
setError(errorMsg);
|
|
1846
1459
|
console.error("Submit task failed:", err);
|
|
1847
1460
|
if (errorCode === ErrorCode.TASK_PARTIAL_PASS) {
|
|
@@ -1899,22 +1512,11 @@ function useTaskDetail(options) {
|
|
|
1899
1512
|
setIsLoading(true);
|
|
1900
1513
|
setError(null);
|
|
1901
1514
|
const api = createCommunityTaskApi(client);
|
|
1902
|
-
const
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
found = card;
|
|
1908
|
-
break;
|
|
1909
|
-
}
|
|
1910
|
-
}
|
|
1911
|
-
if (found) break;
|
|
1912
|
-
}
|
|
1913
|
-
if (found) {
|
|
1914
|
-
setData(found);
|
|
1915
|
-
} else {
|
|
1916
|
-
setError("Task not found");
|
|
1917
|
-
}
|
|
1515
|
+
const detail = await api.getCommunityTaskCardInfo({
|
|
1516
|
+
card_id: taskId,
|
|
1517
|
+
card_type: TaskCardType.GTCTask
|
|
1518
|
+
});
|
|
1519
|
+
setData(detail);
|
|
1918
1520
|
} catch (err) {
|
|
1919
1521
|
setError(err instanceof Error ? err.message : "Failed to load task");
|
|
1920
1522
|
setData(null);
|
|
@@ -1961,7 +1563,8 @@ function TemplateTask({
|
|
|
1961
1563
|
onUpdate,
|
|
1962
1564
|
onEligTaskClick,
|
|
1963
1565
|
coolDown: sharedCoolDown,
|
|
1964
|
-
onCoolDownComplete: sharedOnCoolDownComplete
|
|
1566
|
+
onCoolDownComplete: sharedOnCoolDownComplete,
|
|
1567
|
+
onDoneCountdownComplete
|
|
1965
1568
|
}) {
|
|
1966
1569
|
var _a, _b;
|
|
1967
1570
|
const [localCoolDown, setLocalCoolDown] = useState(
|
|
@@ -2105,11 +1708,17 @@ function TemplateTask({
|
|
|
2105
1708
|
nextTime: userStatus == null ? void 0 : userStatus.next_time,
|
|
2106
1709
|
coolDown,
|
|
2107
1710
|
onCoolDownComplete: handleCoolDownComplete,
|
|
1711
|
+
onDoneCountdownComplete,
|
|
2108
1712
|
onClick,
|
|
2109
1713
|
onClaim: handleClaim,
|
|
2110
1714
|
children: [
|
|
2111
|
-
params.desc &&
|
|
2112
|
-
|
|
1715
|
+
params.desc && /* @__PURE__ */ jsx(
|
|
1716
|
+
CardDescExpress,
|
|
1717
|
+
{
|
|
1718
|
+
label: params.desc,
|
|
1719
|
+
className: "taskon-template-task-rich-desc"
|
|
1720
|
+
}
|
|
1721
|
+
),
|
|
2113
1722
|
(_a2 = params.desc_fields) == null ? void 0 : _a2.filter((field) => !field.display || field.display !== "dialog").map((field, index) => {
|
|
2114
1723
|
const label = field.key === "open_post_link" ? void 0 : field.key;
|
|
2115
1724
|
return /* @__PURE__ */ jsx(
|
|
@@ -2134,7 +1743,7 @@ function TemplateTask({
|
|
|
2134
1743
|
{
|
|
2135
1744
|
task,
|
|
2136
1745
|
conditions: meetConditions,
|
|
2137
|
-
onCheck: onUpdate,
|
|
1746
|
+
onCheck: onUpdate ? () => onUpdate(task.id) : void 0,
|
|
2138
1747
|
onTaskClick: onEligTaskClick
|
|
2139
1748
|
}
|
|
2140
1749
|
),
|
|
@@ -2150,7 +1759,8 @@ function PowTask({
|
|
|
2150
1759
|
disabled = false,
|
|
2151
1760
|
onClick,
|
|
2152
1761
|
onUpdate,
|
|
2153
|
-
onEligTaskClick
|
|
1762
|
+
onEligTaskClick,
|
|
1763
|
+
onDoneCountdownComplete
|
|
2154
1764
|
}) {
|
|
2155
1765
|
var _a;
|
|
2156
1766
|
const params = useMemo(() => {
|
|
@@ -2231,10 +1841,17 @@ function PowTask({
|
|
|
2231
1841
|
actionAutoDialog: true,
|
|
2232
1842
|
noClaim: true,
|
|
2233
1843
|
// PowTask 不需要 Claim 按钮
|
|
2234
|
-
targetLink: params.task_url
|
|
1844
|
+
targetLink: params.task_url,
|
|
2235
1845
|
// 标题跳转链接
|
|
1846
|
+
onDoneCountdownComplete
|
|
2236
1847
|
};
|
|
2237
|
-
const renderTaskCard = () => /* @__PURE__ */ jsx(BaseTask, { ...baseTaskProps, children: /* @__PURE__ */ jsx(
|
|
1848
|
+
const renderTaskCard = () => /* @__PURE__ */ jsx(BaseTask, { ...baseTaskProps, children: /* @__PURE__ */ jsx(
|
|
1849
|
+
CardDescExpress,
|
|
1850
|
+
{
|
|
1851
|
+
label: params.desc,
|
|
1852
|
+
className: "taskon-community-pow-desc"
|
|
1853
|
+
}
|
|
1854
|
+
) });
|
|
2238
1855
|
if (showEligibilityMask && meetConditions) {
|
|
2239
1856
|
return /* @__PURE__ */ jsxs("div", { className: "taskon-pow-task-wrap", children: [
|
|
2240
1857
|
/* @__PURE__ */ jsx(
|
|
@@ -2242,7 +1859,7 @@ function PowTask({
|
|
|
2242
1859
|
{
|
|
2243
1860
|
task,
|
|
2244
1861
|
conditions: meetConditions,
|
|
2245
|
-
onCheck: onUpdate,
|
|
1862
|
+
onCheck: onUpdate ? () => onUpdate(task.id) : void 0,
|
|
2246
1863
|
onTaskClick: onEligTaskClick
|
|
2247
1864
|
}
|
|
2248
1865
|
),
|
|
@@ -2261,7 +1878,8 @@ function ContractInteractiveTask({
|
|
|
2261
1878
|
onUpdate,
|
|
2262
1879
|
onEligTaskClick,
|
|
2263
1880
|
coolDown: sharedCoolDown,
|
|
2264
|
-
onCoolDownComplete: sharedOnCoolDownComplete
|
|
1881
|
+
onCoolDownComplete: sharedOnCoolDownComplete,
|
|
1882
|
+
onDoneCountdownComplete
|
|
2265
1883
|
}) {
|
|
2266
1884
|
var _a, _b;
|
|
2267
1885
|
const [localCoolDown, setLocalCoolDown] = useState(
|
|
@@ -2399,6 +2017,7 @@ function ContractInteractiveTask({
|
|
|
2399
2017
|
nextTime: userStatus == null ? void 0 : userStatus.next_time,
|
|
2400
2018
|
coolDown,
|
|
2401
2019
|
onCoolDownComplete: handleCoolDownComplete,
|
|
2020
|
+
onDoneCountdownComplete,
|
|
2402
2021
|
onClick,
|
|
2403
2022
|
onClaim: handleClaim,
|
|
2404
2023
|
disabled: disabled || showEligibilityMask
|
|
@@ -2410,7 +2029,7 @@ function ContractInteractiveTask({
|
|
|
2410
2029
|
{
|
|
2411
2030
|
task,
|
|
2412
2031
|
conditions: meetConditions,
|
|
2413
|
-
onCheck: onUpdate,
|
|
2032
|
+
onCheck: onUpdate ? () => onUpdate(task.id) : void 0,
|
|
2414
2033
|
onTaskClick: onEligTaskClick
|
|
2415
2034
|
}
|
|
2416
2035
|
),
|
|
@@ -2436,7 +2055,8 @@ function SwapDexTask({
|
|
|
2436
2055
|
onUpdate,
|
|
2437
2056
|
onEligTaskClick,
|
|
2438
2057
|
coolDown: sharedCoolDown,
|
|
2439
|
-
onCoolDownComplete: sharedOnCoolDownComplete
|
|
2058
|
+
onCoolDownComplete: sharedOnCoolDownComplete,
|
|
2059
|
+
onDoneCountdownComplete
|
|
2440
2060
|
}) {
|
|
2441
2061
|
var _a, _b;
|
|
2442
2062
|
const [localCoolDown, setLocalCoolDown] = useState(
|
|
@@ -2458,7 +2078,7 @@ function SwapDexTask({
|
|
|
2458
2078
|
setLocalCoolDown(0);
|
|
2459
2079
|
sharedOnCoolDownComplete == null ? void 0 : sharedOnCoolDownComplete();
|
|
2460
2080
|
}, [sharedOnCoolDownComplete]);
|
|
2461
|
-
const { getChainType } = useChainMap();
|
|
2081
|
+
const { getChainType, chainMap } = useChainMap();
|
|
2462
2082
|
const { communityInfo: contextCommunityInfo } = useTaskOnContext();
|
|
2463
2083
|
const params = useMemo(() => {
|
|
2464
2084
|
return parseParams$2(task.template.params);
|
|
@@ -2467,8 +2087,10 @@ function SwapDexTask({
|
|
|
2467
2087
|
const reward = useTaskReward(task);
|
|
2468
2088
|
const time = useTaskTime(task);
|
|
2469
2089
|
const chainLabel = useMemo(() => {
|
|
2470
|
-
|
|
2471
|
-
|
|
2090
|
+
var _a2;
|
|
2091
|
+
if (!params.chain) return "";
|
|
2092
|
+
return ((_a2 = chainMap[params.chain.toLowerCase()]) == null ? void 0 : _a2.label) || params.chain;
|
|
2093
|
+
}, [chainMap, params.chain]);
|
|
2472
2094
|
const titleExpress = useMemo(() => {
|
|
2473
2095
|
return getSwapDexTitleExpress({
|
|
2474
2096
|
tokenOutList: params.token_out_list,
|
|
@@ -2563,6 +2185,7 @@ function SwapDexTask({
|
|
|
2563
2185
|
nextTime: userStatus == null ? void 0 : userStatus.next_time,
|
|
2564
2186
|
coolDown,
|
|
2565
2187
|
onCoolDownComplete: handleCoolDownComplete,
|
|
2188
|
+
onDoneCountdownComplete,
|
|
2566
2189
|
disabled: disabled || showEligibilityMask,
|
|
2567
2190
|
onClick,
|
|
2568
2191
|
onClaim: handleClaim
|
|
@@ -2575,7 +2198,7 @@ function SwapDexTask({
|
|
|
2575
2198
|
{
|
|
2576
2199
|
task,
|
|
2577
2200
|
conditions: meetConditions,
|
|
2578
|
-
onCheck: onUpdate,
|
|
2201
|
+
onCheck: onUpdate ? () => onUpdate(task.id) : void 0,
|
|
2579
2202
|
onTaskClick: onEligTaskClick
|
|
2580
2203
|
}
|
|
2581
2204
|
),
|
|
@@ -2605,7 +2228,7 @@ function getTaskComponent(templateId) {
|
|
|
2605
2228
|
}
|
|
2606
2229
|
return TemplateTask;
|
|
2607
2230
|
}
|
|
2608
|
-
function
|
|
2231
|
+
function CommunityTaskComponent({
|
|
2609
2232
|
task,
|
|
2610
2233
|
userStatus,
|
|
2611
2234
|
meetConditions,
|
|
@@ -2617,7 +2240,8 @@ function CommunityTask({
|
|
|
2617
2240
|
onUpdate,
|
|
2618
2241
|
onEligTaskClick,
|
|
2619
2242
|
coolDown,
|
|
2620
|
-
onCoolDownComplete
|
|
2243
|
+
onCoolDownComplete,
|
|
2244
|
+
onDoneCountdownComplete
|
|
2621
2245
|
}) {
|
|
2622
2246
|
var _a;
|
|
2623
2247
|
const TaskComponent = useMemo(() => {
|
|
@@ -2657,7 +2281,8 @@ function CommunityTask({
|
|
|
2657
2281
|
onUpdate,
|
|
2658
2282
|
onEligTaskClick,
|
|
2659
2283
|
coolDown,
|
|
2660
|
-
onCoolDownComplete
|
|
2284
|
+
onCoolDownComplete,
|
|
2285
|
+
onDoneCountdownComplete
|
|
2661
2286
|
}
|
|
2662
2287
|
),
|
|
2663
2288
|
disabled && /* @__PURE__ */ jsx("div", { className: "taskon-community-task-item-mask" })
|
|
@@ -2665,6 +2290,7 @@ function CommunityTask({
|
|
|
2665
2290
|
}
|
|
2666
2291
|
);
|
|
2667
2292
|
}
|
|
2293
|
+
const CommunityTask = React__default.memo(CommunityTaskComponent);
|
|
2668
2294
|
function isLockedByPreDayChallenge(meetConditions) {
|
|
2669
2295
|
if (!meetConditions) return false;
|
|
2670
2296
|
return meetConditions.some(
|
|
@@ -2795,7 +2421,7 @@ function parseNftParams(rewardParam) {
|
|
|
2795
2421
|
return null;
|
|
2796
2422
|
}
|
|
2797
2423
|
}
|
|
2798
|
-
function getMiniNftCdnUrl(url) {
|
|
2424
|
+
function getMiniNftCdnUrl$1(url) {
|
|
2799
2425
|
if (!url) return "";
|
|
2800
2426
|
const separator = url.includes("?") ? "&" : "?";
|
|
2801
2427
|
return `${url}${separator}x-oss-process=image/resize,m_fill,h_160,w_160`;
|
|
@@ -2857,7 +2483,7 @@ function TaskChainCard({
|
|
|
2857
2483
|
if (!reward) return null;
|
|
2858
2484
|
const params = parseNftParams(reward.reward_param);
|
|
2859
2485
|
if (!params) return null;
|
|
2860
|
-
const icon = params.media_type === MediaType.Video || !params.nft_cdn_image ? NFT_ICON$1 : getMiniNftCdnUrl(params.nft_cdn_image);
|
|
2486
|
+
const icon = params.media_type === MediaType.Video || !params.nft_cdn_image ? NFT_ICON$1 : getMiniNftCdnUrl$1(params.nft_cdn_image);
|
|
2861
2487
|
return {
|
|
2862
2488
|
icon,
|
|
2863
2489
|
name: params.nft_collection_name || "NFT"
|
|
@@ -3258,7 +2884,7 @@ function TaskChainDetailTime({
|
|
|
3258
2884
|
] })
|
|
3259
2885
|
] }) });
|
|
3260
2886
|
}
|
|
3261
|
-
const DEFAULT_TOKEN_ICON$
|
|
2887
|
+
const DEFAULT_TOKEN_ICON$2 = new URL("data:image/svg+xml,%3csvg%20width='20'%20height='20'%20viewBox='0%200%2020%2020'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3ccircle%20cx='10'%20cy='10'%20r='10'%20fill='%23DDAF39'/%3e%3cpath%20d='M6%2013.125L6%206.875M13.5%206.875L13.5%2013.125'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M13.5%2013.125C13.5%2014.1605%2011.8211%2015%209.75%2015C7.67893%2015%206%2014.1605%206%2013.125'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M13.5%2010C13.5%2011.0355%2011.8211%2011.875%209.75%2011.875C7.67893%2011.875%206%2011.0355%206%2010'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3cpath%20d='M9.75%208.75C11.8211%208.75%2013.5%207.91053%2013.5%206.875C13.5%205.83947%2011.8211%205%209.75%205C7.67893%205%206%205.83947%206%206.875C6%207.91053%207.67893%208.75%209.75%208.75Z'%20stroke='white'%20stroke-width='1.5'%20stroke-linecap='round'%20stroke-linejoin='round'/%3e%3c/svg%3e", import.meta.url).href;
|
|
3262
2888
|
function safeDiv(a, b) {
|
|
3263
2889
|
const numA = typeof a === "string" ? parseFloat(a) : a;
|
|
3264
2890
|
if (!b || isNaN(numA)) return 0;
|
|
@@ -3351,7 +2977,7 @@ function RewardDisplay({
|
|
|
3351
2977
|
/* @__PURE__ */ jsx(
|
|
3352
2978
|
"img",
|
|
3353
2979
|
{
|
|
3354
|
-
src: tokenParam.token_icon || DEFAULT_TOKEN_ICON$
|
|
2980
|
+
src: tokenParam.token_icon || DEFAULT_TOKEN_ICON$2,
|
|
3355
2981
|
alt: tokenParam.token_name || "Token",
|
|
3356
2982
|
className: "taskon-taskchain-reward-display-icon"
|
|
3357
2983
|
}
|
|
@@ -3422,8 +3048,8 @@ function RewardDisplay({
|
|
|
3422
3048
|
y2: "8.70312",
|
|
3423
3049
|
gradientUnits: "userSpaceOnUse",
|
|
3424
3050
|
children: [
|
|
3425
|
-
/* @__PURE__ */ jsx("stop", { stopColor: "
|
|
3426
|
-
/* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "
|
|
3051
|
+
/* @__PURE__ */ jsx("stop", { stopColor: "var(--taskon-color-border-secondary)", stopOpacity: "0" }),
|
|
3052
|
+
/* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "var(--taskon-color-border-secondary)" })
|
|
3427
3053
|
]
|
|
3428
3054
|
}
|
|
3429
3055
|
) })
|
|
@@ -3432,8 +3058,345 @@ function RewardDisplay({
|
|
|
3432
3058
|
) })
|
|
3433
3059
|
] }) });
|
|
3434
3060
|
}
|
|
3061
|
+
const DEFAULT_TOKEN_ICON$1 = new URL("data:image/png;base64,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", import.meta.url).href;
|
|
3062
|
+
const DEFAULT_NFT_ICON = new URL("data:image/png;base64,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", import.meta.url).href;
|
|
3063
|
+
function getMiniNftCdnUrl(url) {
|
|
3064
|
+
if (!url) return "";
|
|
3065
|
+
const separator = url.includes("?") ? "&" : "?";
|
|
3066
|
+
return `${url}${separator}x-oss-process=image/resize,m_fill,h_160,w_160`;
|
|
3067
|
+
}
|
|
3068
|
+
const TASKCHAIN_NFT_CLAIM_MESSAGES = {
|
|
3069
|
+
claimDialog: {
|
|
3070
|
+
claimNft: "Claim NFT",
|
|
3071
|
+
claimingNft: "Claiming NFT...",
|
|
3072
|
+
claimConnectingWallet: "Connecting wallet...",
|
|
3073
|
+
claimSwitchingNetwork: "Switching network...",
|
|
3074
|
+
claimGettingSignature: "Getting signature...",
|
|
3075
|
+
claimConfirmInWallet: "Please confirm in your wallet",
|
|
3076
|
+
claimTransactionPending: "Transaction pending...",
|
|
3077
|
+
claimSuccess: "Claim successful!",
|
|
3078
|
+
claimFailed: "Claim failed",
|
|
3079
|
+
claimCanceled: "Transaction was rejected by user.",
|
|
3080
|
+
viewOnExplorer: "View on Explorer",
|
|
3081
|
+
retry: "Retry",
|
|
3082
|
+
close: "Close"
|
|
3083
|
+
},
|
|
3084
|
+
pendingDialog: {
|
|
3085
|
+
pendingTransaction: "Pending Transaction",
|
|
3086
|
+
claimPendingTitle: "You have already claimed this NFT, please wait for this transaction to be confirmed.",
|
|
3087
|
+
claimPendingCheckExplorer: "You can check this transaction on explorer:",
|
|
3088
|
+
claimPendingHashLabel: "Transaction hash:",
|
|
3089
|
+
claimPendingClaimAgainWarn: '"Claim Again" will send a new transaction it is only recommended when you are sure there is something wrong with the current transaction.',
|
|
3090
|
+
claimPendingReceiveAddressNoChange: "This receive address can’t be changed:",
|
|
3091
|
+
claimAgain: "Claim Again",
|
|
3092
|
+
continueWaiting: "Continue Waiting"
|
|
3093
|
+
}
|
|
3094
|
+
};
|
|
3095
|
+
function RightChevronIcon({ className }) {
|
|
3096
|
+
return /* @__PURE__ */ jsx(
|
|
3097
|
+
"svg",
|
|
3098
|
+
{
|
|
3099
|
+
className,
|
|
3100
|
+
width: "8",
|
|
3101
|
+
height: "8",
|
|
3102
|
+
viewBox: "0 0 16 16",
|
|
3103
|
+
fill: "none",
|
|
3104
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
3105
|
+
children: /* @__PURE__ */ jsx(
|
|
3106
|
+
"path",
|
|
3107
|
+
{
|
|
3108
|
+
d: "M6 12L10 8L6 4",
|
|
3109
|
+
stroke: "currentColor",
|
|
3110
|
+
strokeWidth: "1.5",
|
|
3111
|
+
strokeLinecap: "round",
|
|
3112
|
+
strokeLinejoin: "round"
|
|
3113
|
+
}
|
|
3114
|
+
)
|
|
3115
|
+
}
|
|
3116
|
+
);
|
|
3117
|
+
}
|
|
3118
|
+
function getClaimedRewardDisplay(reward) {
|
|
3119
|
+
if (reward.reward_type === RewardType.Token) {
|
|
3120
|
+
const rewardValue = reward.reward_value;
|
|
3121
|
+
const icon = DEFAULT_TOKEN_ICON$1;
|
|
3122
|
+
const name = (rewardValue == null ? void 0 : rewardValue.token_name) || "Token";
|
|
3123
|
+
const rawAmount = (rewardValue == null ? void 0 : rewardValue.amount) || "0";
|
|
3124
|
+
const amount = formatLongNumber(Number(rawAmount) || 0) || rawAmount;
|
|
3125
|
+
return {
|
|
3126
|
+
icon,
|
|
3127
|
+
text: `+ ${amount} ${name}`.trim(),
|
|
3128
|
+
colorClass: "taskon-taskchain-claimed-text--token",
|
|
3129
|
+
glowClass: "taskon-taskchain-claimed-icon--glow-token"
|
|
3130
|
+
};
|
|
3131
|
+
}
|
|
3132
|
+
if (reward.reward_type === RewardType.GTCPoints || reward.reward_type === RewardType.Points) {
|
|
3133
|
+
const rewardValue = reward.reward_value;
|
|
3134
|
+
const icon = (rewardValue == null ? void 0 : rewardValue.points_icon) || "";
|
|
3135
|
+
const name = (rewardValue == null ? void 0 : rewardValue.points_name) || "Points";
|
|
3136
|
+
const amount = (rewardValue == null ? void 0 : rewardValue.amount) != null ? String(rewardValue.amount) : "0";
|
|
3137
|
+
return {
|
|
3138
|
+
icon,
|
|
3139
|
+
text: `+ ${amount} ${name}`.trim(),
|
|
3140
|
+
colorClass: "taskon-taskchain-claimed-text--points",
|
|
3141
|
+
glowClass: "taskon-taskchain-claimed-icon--glow-points"
|
|
3142
|
+
};
|
|
3143
|
+
}
|
|
3144
|
+
return { icon: "", text: "", colorClass: "", glowClass: "" };
|
|
3145
|
+
}
|
|
3146
|
+
function TaskChainClaimedRewards({
|
|
3147
|
+
rewards,
|
|
3148
|
+
campaignId,
|
|
3149
|
+
campaignType,
|
|
3150
|
+
tokenPrice = 0,
|
|
3151
|
+
rewardDisplayMode = "popup",
|
|
3152
|
+
rewardRedirectUrl = "",
|
|
3153
|
+
onClaimedNft,
|
|
3154
|
+
className
|
|
3155
|
+
}) {
|
|
3156
|
+
const { toast } = useToast();
|
|
3157
|
+
const [isTokenRewardPopupOpen, setIsTokenRewardPopupOpen] = useState(false);
|
|
3158
|
+
const [isViewMyNftPopupOpen, setIsViewMyNftPopupOpen] = useState(false);
|
|
3159
|
+
const {
|
|
3160
|
+
claimNftReward,
|
|
3161
|
+
isSupportedNftRewardType,
|
|
3162
|
+
dialogs: nftClaimDialogs
|
|
3163
|
+
} = useNftClaimFlow({
|
|
3164
|
+
campaignId,
|
|
3165
|
+
targetType: campaignType === CampaignType.Event ? "event" : "campaign",
|
|
3166
|
+
messages: TASKCHAIN_NFT_CLAIM_MESSAGES,
|
|
3167
|
+
onClaimSuccess: async () => {
|
|
3168
|
+
await (onClaimedNft == null ? void 0 : onClaimedNft());
|
|
3169
|
+
},
|
|
3170
|
+
onClaimError: (error) => {
|
|
3171
|
+
toast.error(error.message || "Failed to claim NFT");
|
|
3172
|
+
},
|
|
3173
|
+
onWalletError: (errorMessage) => {
|
|
3174
|
+
toast.error(errorMessage);
|
|
3175
|
+
}
|
|
3176
|
+
});
|
|
3177
|
+
const nftClaimedRewards = useMemo(() => {
|
|
3178
|
+
return rewards.filter(
|
|
3179
|
+
(reward) => reward.reward_type === RewardType.BMintedNft || reward.reward_type === RewardType.Nft || reward.reward_type === RewardType.Cap
|
|
3180
|
+
);
|
|
3181
|
+
}, [rewards]);
|
|
3182
|
+
const otherClaimedRewards = useMemo(() => {
|
|
3183
|
+
return rewards.filter(
|
|
3184
|
+
(reward) => reward.reward_type !== RewardType.BMintedNft && reward.reward_type !== RewardType.Nft && reward.reward_type !== RewardType.Cap
|
|
3185
|
+
);
|
|
3186
|
+
}, [rewards]);
|
|
3187
|
+
const wrapperClassName = useMemo(() => {
|
|
3188
|
+
return ["taskon-taskchain-claimed-rewards-wrap", className].filter(Boolean).join(" ");
|
|
3189
|
+
}, [className]);
|
|
3190
|
+
const isMultiClaimed = otherClaimedRewards.length > 1;
|
|
3191
|
+
const handleViewTokenReward = useCallback(() => {
|
|
3192
|
+
if (rewardDisplayMode === "redirect" && rewardRedirectUrl) {
|
|
3193
|
+
window.open(rewardRedirectUrl, "_blank", "noopener,noreferrer");
|
|
3194
|
+
return;
|
|
3195
|
+
}
|
|
3196
|
+
setIsTokenRewardPopupOpen(true);
|
|
3197
|
+
}, [rewardDisplayMode, rewardRedirectUrl]);
|
|
3198
|
+
const handleViewMyNft = useCallback(() => {
|
|
3199
|
+
if (rewardDisplayMode === "redirect" && rewardRedirectUrl) {
|
|
3200
|
+
window.open(rewardRedirectUrl, "_blank", "noopener,noreferrer");
|
|
3201
|
+
return;
|
|
3202
|
+
}
|
|
3203
|
+
setIsViewMyNftPopupOpen(true);
|
|
3204
|
+
}, [rewardDisplayMode, rewardRedirectUrl]);
|
|
3205
|
+
const handleTaskChainNftClaim = useCallback(
|
|
3206
|
+
async (reward) => {
|
|
3207
|
+
if (!isSupportedNftRewardType(reward.reward_type)) {
|
|
3208
|
+
return;
|
|
3209
|
+
}
|
|
3210
|
+
try {
|
|
3211
|
+
await claimNftReward(reward);
|
|
3212
|
+
} catch (error) {
|
|
3213
|
+
console.error("TaskChain NFT claim failed:", error);
|
|
3214
|
+
}
|
|
3215
|
+
},
|
|
3216
|
+
[isSupportedNftRewardType, claimNftReward]
|
|
3217
|
+
);
|
|
3218
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
3219
|
+
/* @__PURE__ */ jsxs("div", { className: wrapperClassName, children: [
|
|
3220
|
+
otherClaimedRewards.length > 0 && /* @__PURE__ */ jsx(
|
|
3221
|
+
"div",
|
|
3222
|
+
{
|
|
3223
|
+
className: `taskon-taskchain-claimed-card ${isMultiClaimed ? "taskon-taskchain-claimed-card--multi" : ""}`,
|
|
3224
|
+
children: otherClaimedRewards.map((reward, index) => {
|
|
3225
|
+
const display = getClaimedRewardDisplay(reward);
|
|
3226
|
+
const isToken = reward.reward_type === RewardType.Token;
|
|
3227
|
+
if (isToken) {
|
|
3228
|
+
const tokenRewardValue = reward.reward_value;
|
|
3229
|
+
const rawAmount = (tokenRewardValue == null ? void 0 : tokenRewardValue.amount) || "0";
|
|
3230
|
+
const tokenName = (tokenRewardValue == null ? void 0 : tokenRewardValue.token_name) || "Token";
|
|
3231
|
+
const formattedAmount = formatLongNumber(Number(rawAmount) || 0) || rawAmount;
|
|
3232
|
+
const usdValue = formatTokenAmount(
|
|
3233
|
+
Number(rawAmount) * tokenPrice,
|
|
3234
|
+
{
|
|
3235
|
+
decimals: 2
|
|
3236
|
+
}
|
|
3237
|
+
);
|
|
3238
|
+
const tooltipContent = /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-token-tooltip", children: [
|
|
3239
|
+
/* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-token-tooltip-row", children: [
|
|
3240
|
+
/* @__PURE__ */ jsx("span", { className: "taskon-taskchain-token-tooltip-label", children: "Reward Token" }),
|
|
3241
|
+
/* @__PURE__ */ jsxs("span", { className: "taskon-taskchain-token-tooltip-value", children: [
|
|
3242
|
+
formattedAmount,
|
|
3243
|
+
" ",
|
|
3244
|
+
tokenName
|
|
3245
|
+
] })
|
|
3246
|
+
] }),
|
|
3247
|
+
/* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-token-tooltip-row", children: [
|
|
3248
|
+
/* @__PURE__ */ jsx("span", { className: "taskon-taskchain-token-tooltip-label", children: "Value" }),
|
|
3249
|
+
/* @__PURE__ */ jsxs("span", { className: "taskon-taskchain-token-tooltip-usd", children: [
|
|
3250
|
+
"≈$",
|
|
3251
|
+
usdValue
|
|
3252
|
+
] })
|
|
3253
|
+
] })
|
|
3254
|
+
] });
|
|
3255
|
+
return /* @__PURE__ */ jsx(TipPopover, { content: tooltipContent, side: "top", children: /* @__PURE__ */ jsxs(
|
|
3256
|
+
"button",
|
|
3257
|
+
{
|
|
3258
|
+
type: "button",
|
|
3259
|
+
className: `taskon-taskchain-claimed-item taskon-taskchain-claimed-item--token-trigger ${isMultiClaimed ? "taskon-taskchain-claimed-item--multi" : ""}`,
|
|
3260
|
+
onClick: handleViewTokenReward,
|
|
3261
|
+
children: [
|
|
3262
|
+
display.icon && /* @__PURE__ */ jsx(
|
|
3263
|
+
"img",
|
|
3264
|
+
{
|
|
3265
|
+
src: display.icon,
|
|
3266
|
+
alt: "",
|
|
3267
|
+
className: `taskon-taskchain-claimed-icon ${isMultiClaimed ? "taskon-taskchain-claimed-icon--multi" : ""} ${isMultiClaimed ? display.glowClass : ""}`
|
|
3268
|
+
}
|
|
3269
|
+
),
|
|
3270
|
+
/* @__PURE__ */ jsxs(
|
|
3271
|
+
"span",
|
|
3272
|
+
{
|
|
3273
|
+
className: `taskon-taskchain-claimed-text taskon-taskchain-claimed-text--token-link ${isMultiClaimed ? "taskon-taskchain-claimed-text--multi" : ""} ${display.colorClass}`,
|
|
3274
|
+
children: [
|
|
3275
|
+
display.text,
|
|
3276
|
+
/* @__PURE__ */ jsx(
|
|
3277
|
+
RightChevronIcon,
|
|
3278
|
+
{
|
|
3279
|
+
className: `taskon-taskchain-claimed-arrow ${isMultiClaimed ? "taskon-taskchain-claimed-arrow--multi" : ""}`
|
|
3280
|
+
}
|
|
3281
|
+
)
|
|
3282
|
+
]
|
|
3283
|
+
}
|
|
3284
|
+
)
|
|
3285
|
+
]
|
|
3286
|
+
}
|
|
3287
|
+
) }, index);
|
|
3288
|
+
}
|
|
3289
|
+
return /* @__PURE__ */ jsxs(
|
|
3290
|
+
"div",
|
|
3291
|
+
{
|
|
3292
|
+
className: `taskon-taskchain-claimed-item ${isMultiClaimed ? "taskon-taskchain-claimed-item--multi" : ""}`,
|
|
3293
|
+
children: [
|
|
3294
|
+
display.icon && /* @__PURE__ */ jsx(
|
|
3295
|
+
"img",
|
|
3296
|
+
{
|
|
3297
|
+
src: display.icon,
|
|
3298
|
+
alt: "",
|
|
3299
|
+
className: `taskon-taskchain-claimed-icon ${isMultiClaimed ? "taskon-taskchain-claimed-icon--multi" : ""} ${isMultiClaimed ? display.glowClass : ""}`
|
|
3300
|
+
}
|
|
3301
|
+
),
|
|
3302
|
+
/* @__PURE__ */ jsx(
|
|
3303
|
+
"span",
|
|
3304
|
+
{
|
|
3305
|
+
className: `taskon-taskchain-claimed-text ${isMultiClaimed ? "taskon-taskchain-claimed-text--multi" : ""} ${display.colorClass}`,
|
|
3306
|
+
children: display.text
|
|
3307
|
+
}
|
|
3308
|
+
)
|
|
3309
|
+
]
|
|
3310
|
+
},
|
|
3311
|
+
index
|
|
3312
|
+
);
|
|
3313
|
+
})
|
|
3314
|
+
}
|
|
3315
|
+
),
|
|
3316
|
+
nftClaimedRewards.length > 0 && /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-claimed-nft-list", children: nftClaimedRewards.map((reward, index) => {
|
|
3317
|
+
var _a;
|
|
3318
|
+
const nftValue = reward.reward_value;
|
|
3319
|
+
const rewardTypeLabel = reward.reward_type === RewardType.Cap ? "Cap" : "NFT";
|
|
3320
|
+
const nftName = (nftValue == null ? void 0 : nftValue.collection_name) || (nftValue == null ? void 0 : nftValue.title) || rewardTypeLabel;
|
|
3321
|
+
const nftImage = (nftValue == null ? void 0 : nftValue.media_type) === "video" ? "" : (nftValue == null ? void 0 : nftValue.collection_image) ? getMiniNftCdnUrl(nftValue.collection_image) : "";
|
|
3322
|
+
const chainIcon = (nftValue == null ? void 0 : nftValue.chain_icon) || "";
|
|
3323
|
+
const claimable = ((_a = reward.reward_value) == null ? void 0 : _a.claimable) ?? false;
|
|
3324
|
+
const isNftClaimSupported = isSupportedNftRewardType(reward.reward_type);
|
|
3325
|
+
const ctaLabel = claimable ? "Mint" : "View my NFT";
|
|
3326
|
+
return /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-card", children: [
|
|
3327
|
+
/* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-info", children: [
|
|
3328
|
+
/* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-image-wrap", children: [
|
|
3329
|
+
nftImage ? /* @__PURE__ */ jsx(
|
|
3330
|
+
"img",
|
|
3331
|
+
{
|
|
3332
|
+
src: nftImage,
|
|
3333
|
+
alt: "nft",
|
|
3334
|
+
className: "taskon-taskchain-claimed-nft-image"
|
|
3335
|
+
}
|
|
3336
|
+
) : /* @__PURE__ */ jsx(
|
|
3337
|
+
"img",
|
|
3338
|
+
{
|
|
3339
|
+
src: DEFAULT_NFT_ICON,
|
|
3340
|
+
alt: "nft",
|
|
3341
|
+
className: "taskon-taskchain-claimed-nft-image taskon-taskchain-claimed-nft-image--fallback"
|
|
3342
|
+
}
|
|
3343
|
+
),
|
|
3344
|
+
chainIcon && /* @__PURE__ */ jsx(
|
|
3345
|
+
"img",
|
|
3346
|
+
{
|
|
3347
|
+
src: chainIcon,
|
|
3348
|
+
alt: "chain",
|
|
3349
|
+
className: "taskon-taskchain-claimed-nft-chain"
|
|
3350
|
+
}
|
|
3351
|
+
)
|
|
3352
|
+
] }),
|
|
3353
|
+
/* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-text", children: [
|
|
3354
|
+
/* @__PURE__ */ jsx("div", { className: "taskon-taskchain-claimed-nft-label", children: rewardTypeLabel }),
|
|
3355
|
+
/* @__PURE__ */ jsx("div", { className: "taskon-taskchain-claimed-nft-name", children: nftName })
|
|
3356
|
+
] })
|
|
3357
|
+
] }),
|
|
3358
|
+
/* @__PURE__ */ jsx(
|
|
3359
|
+
"button",
|
|
3360
|
+
{
|
|
3361
|
+
type: "button",
|
|
3362
|
+
className: "taskon-taskchain-claimed-nft-btn",
|
|
3363
|
+
onClick: () => {
|
|
3364
|
+
if (!isNftClaimSupported) {
|
|
3365
|
+
toast.info("NFT claim is not supported for this reward type yet.");
|
|
3366
|
+
return;
|
|
3367
|
+
}
|
|
3368
|
+
if (!claimable) {
|
|
3369
|
+
handleViewMyNft();
|
|
3370
|
+
return;
|
|
3371
|
+
}
|
|
3372
|
+
void handleTaskChainNftClaim(reward);
|
|
3373
|
+
},
|
|
3374
|
+
children: ctaLabel
|
|
3375
|
+
}
|
|
3376
|
+
)
|
|
3377
|
+
] }, `nft-${index}`);
|
|
3378
|
+
}) })
|
|
3379
|
+
] }),
|
|
3380
|
+
nftClaimDialogs,
|
|
3381
|
+
/* @__PURE__ */ jsx(
|
|
3382
|
+
RewardModuleDialog,
|
|
3383
|
+
{
|
|
3384
|
+
open: isTokenRewardPopupOpen,
|
|
3385
|
+
onOpenChange: setIsTokenRewardPopupOpen,
|
|
3386
|
+
type: "token"
|
|
3387
|
+
}
|
|
3388
|
+
),
|
|
3389
|
+
/* @__PURE__ */ jsx(
|
|
3390
|
+
RewardModuleDialog,
|
|
3391
|
+
{
|
|
3392
|
+
open: isViewMyNftPopupOpen,
|
|
3393
|
+
onOpenChange: setIsViewMyNftPopupOpen,
|
|
3394
|
+
type: "nft"
|
|
3395
|
+
}
|
|
3396
|
+
)
|
|
3397
|
+
] });
|
|
3398
|
+
}
|
|
3435
3399
|
const DEFAULT_TOKEN_ICON = new URL("data:image/png;base64,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", import.meta.url).href;
|
|
3436
|
-
const DEFAULT_NFT_ICON = new URL("data:image/png;base64,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", import.meta.url).href;
|
|
3437
3400
|
const PC_CONFIGS_4 = [
|
|
3438
3401
|
{ x: -40, y: -45 },
|
|
3439
3402
|
// top-left
|
|
@@ -3490,12 +3453,19 @@ function getPositionConfig(index, total) {
|
|
|
3490
3453
|
};
|
|
3491
3454
|
}
|
|
3492
3455
|
function triggerConfetti(container) {
|
|
3493
|
-
const colors = [
|
|
3456
|
+
const colors = [
|
|
3457
|
+
"var(--taskon-color-primary)",
|
|
3458
|
+
"var(--taskon-color-secondary)",
|
|
3459
|
+
"var(--taskon-color-warning)",
|
|
3460
|
+
"var(--taskon-color-success)",
|
|
3461
|
+
"var(--taskon-color-link)",
|
|
3462
|
+
"var(--taskon-color-error)"
|
|
3463
|
+
];
|
|
3494
3464
|
const particleCount = 50;
|
|
3495
3465
|
for (let i = 0; i < particleCount; i++) {
|
|
3496
3466
|
const particle = document.createElement("div");
|
|
3497
3467
|
particle.className = "taskon-taskchain-confetti-particle";
|
|
3498
|
-
particle.style.backgroundColor = colors[Math.floor(Math.random() * colors.length)] || "
|
|
3468
|
+
particle.style.backgroundColor = colors[Math.floor(Math.random() * colors.length)] || "var(--taskon-color-primary)";
|
|
3499
3469
|
particle.style.left = `${50 + (Math.random() - 0.5) * 60}%`;
|
|
3500
3470
|
particle.style.animationDelay = `${Math.random() * 0.3}s`;
|
|
3501
3471
|
particle.style.animationDuration = `${1 + Math.random() * 1}s`;
|
|
@@ -3540,74 +3510,14 @@ function getExpectedRewardDisplay(reward) {
|
|
|
3540
3510
|
}
|
|
3541
3511
|
return { icon: "", text: "", colorClass: "" };
|
|
3542
3512
|
}
|
|
3543
|
-
function getClaimedRewardDisplay(reward) {
|
|
3544
|
-
if (reward.reward_type === RewardType.Token) {
|
|
3545
|
-
const rewardValue = reward.reward_value;
|
|
3546
|
-
const icon = DEFAULT_TOKEN_ICON;
|
|
3547
|
-
const name = (rewardValue == null ? void 0 : rewardValue.token_name) || "Token";
|
|
3548
|
-
const rawAmount = (rewardValue == null ? void 0 : rewardValue.amount) || "0";
|
|
3549
|
-
const amount = formatLongNumber(Number(rawAmount) || 0) || rawAmount;
|
|
3550
|
-
return {
|
|
3551
|
-
icon,
|
|
3552
|
-
text: `+ ${amount} ${name}`.trim(),
|
|
3553
|
-
colorClass: "taskon-taskchain-claimed-text--token",
|
|
3554
|
-
glowClass: "taskon-taskchain-claimed-icon--glow-token"
|
|
3555
|
-
};
|
|
3556
|
-
}
|
|
3557
|
-
if (reward.reward_type === RewardType.GTCPoints || reward.reward_type === RewardType.Points) {
|
|
3558
|
-
const rewardValue = reward.reward_value;
|
|
3559
|
-
const icon = (rewardValue == null ? void 0 : rewardValue.points_icon) || "";
|
|
3560
|
-
const name = (rewardValue == null ? void 0 : rewardValue.points_name) || "Points";
|
|
3561
|
-
const amount = (rewardValue == null ? void 0 : rewardValue.amount) != null ? String(rewardValue.amount) : "0";
|
|
3562
|
-
return {
|
|
3563
|
-
icon,
|
|
3564
|
-
text: `+ ${amount} ${name}`.trim(),
|
|
3565
|
-
colorClass: "taskon-taskchain-claimed-text--points",
|
|
3566
|
-
glowClass: "taskon-taskchain-claimed-icon--glow-points"
|
|
3567
|
-
};
|
|
3568
|
-
}
|
|
3569
|
-
return { icon: "", text: "", colorClass: "", glowClass: "" };
|
|
3570
|
-
}
|
|
3571
|
-
function useIsMobile() {
|
|
3572
|
-
const [isMobile, setIsMobile] = useState(false);
|
|
3573
|
-
useEffect(() => {
|
|
3574
|
-
const mql = window.matchMedia("(max-width: 750px)");
|
|
3575
|
-
setIsMobile(mql.matches);
|
|
3576
|
-
const handler = (e) => setIsMobile(e.matches);
|
|
3577
|
-
mql.addEventListener("change", handler);
|
|
3578
|
-
return () => mql.removeEventListener("change", handler);
|
|
3579
|
-
}, []);
|
|
3580
|
-
return isMobile;
|
|
3581
|
-
}
|
|
3582
|
-
function RightChevronIcon({ className }) {
|
|
3583
|
-
return /* @__PURE__ */ jsx(
|
|
3584
|
-
"svg",
|
|
3585
|
-
{
|
|
3586
|
-
className,
|
|
3587
|
-
width: "8",
|
|
3588
|
-
height: "8",
|
|
3589
|
-
viewBox: "0 0 16 16",
|
|
3590
|
-
fill: "none",
|
|
3591
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
3592
|
-
children: /* @__PURE__ */ jsx(
|
|
3593
|
-
"path",
|
|
3594
|
-
{
|
|
3595
|
-
d: "M6 12L10 8L6 4",
|
|
3596
|
-
stroke: "currentColor",
|
|
3597
|
-
strokeWidth: "1.5",
|
|
3598
|
-
strokeLinecap: "round",
|
|
3599
|
-
strokeLinejoin: "round"
|
|
3600
|
-
}
|
|
3601
|
-
)
|
|
3602
|
-
}
|
|
3603
|
-
);
|
|
3604
|
-
}
|
|
3605
3513
|
function TaskChainRewardStep({
|
|
3606
3514
|
campaignId,
|
|
3607
3515
|
campaign,
|
|
3608
3516
|
userStatus,
|
|
3609
3517
|
refetchUserStatus,
|
|
3610
|
-
onClose
|
|
3518
|
+
onClose,
|
|
3519
|
+
rewardDisplayMode = "popup",
|
|
3520
|
+
rewardRedirectUrl = ""
|
|
3611
3521
|
}) {
|
|
3612
3522
|
const { client } = useTaskOnContext();
|
|
3613
3523
|
const { toast } = useToast();
|
|
@@ -3642,12 +3552,6 @@ function TaskChainRewardStep({
|
|
|
3642
3552
|
if (!(userStatus == null ? void 0 : userStatus.winner_rewards)) return [];
|
|
3643
3553
|
return userStatus.winner_rewards.flatMap((r) => r.reward);
|
|
3644
3554
|
}, [userStatus == null ? void 0 : userStatus.winner_rewards]);
|
|
3645
|
-
const nftClaimedRewards = useMemo(() => {
|
|
3646
|
-
return userRewards.filter((r) => r.reward_type === RewardType.BMintedNft);
|
|
3647
|
-
}, [userRewards]);
|
|
3648
|
-
const otherClaimedRewards = useMemo(() => {
|
|
3649
|
-
return userRewards.filter((r) => r.reward_type !== RewardType.BMintedNft);
|
|
3650
|
-
}, [userRewards]);
|
|
3651
3555
|
const expectedRewards = useMemo(() => {
|
|
3652
3556
|
var _a;
|
|
3653
3557
|
const rewards = ((_a = campaign == null ? void 0 : campaign.winner_rewards) == null ? void 0 : _a.flatMap(
|
|
@@ -3706,7 +3610,6 @@ function TaskChainRewardStep({
|
|
|
3706
3610
|
};
|
|
3707
3611
|
});
|
|
3708
3612
|
}, [expectedRewards, isSpread, isMobile]);
|
|
3709
|
-
const isMultiClaimed = otherClaimedRewards.length > 1;
|
|
3710
3613
|
return /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-reward-step", ref: containerRef, children: /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-reward-content", children: [
|
|
3711
3614
|
/* @__PURE__ */ jsx("div", { className: "taskon-taskchain-reward-title", children: "Congratulations!" }),
|
|
3712
3615
|
/* @__PURE__ */ jsx("div", { className: "taskon-taskchain-reward-subtitle", children: "You have won" }),
|
|
@@ -3715,145 +3618,18 @@ function TaskChainRewardStep({
|
|
|
3715
3618
|
{
|
|
3716
3619
|
className: `taskon-taskchain-reward-claimed ${shouldAnimate ? "taskon-taskchain-reward-claimed--animate" : ""}`,
|
|
3717
3620
|
children: [
|
|
3718
|
-
/* @__PURE__ */
|
|
3719
|
-
|
|
3720
|
-
|
|
3721
|
-
|
|
3722
|
-
|
|
3723
|
-
|
|
3724
|
-
|
|
3725
|
-
|
|
3726
|
-
|
|
3727
|
-
|
|
3728
|
-
|
|
3729
|
-
|
|
3730
|
-
const formattedAmount = formatLongNumber(Number(rawAmount) || 0) || rawAmount;
|
|
3731
|
-
const usdValue = formatTokenAmount(Number(rawAmount) * (tokenPrice || 0), { decimals: 2 });
|
|
3732
|
-
const tooltipContent = /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-token-tooltip", children: [
|
|
3733
|
-
/* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-token-tooltip-row", children: [
|
|
3734
|
-
/* @__PURE__ */ jsx("span", { className: "taskon-taskchain-token-tooltip-label", children: "Reward Token" }),
|
|
3735
|
-
/* @__PURE__ */ jsxs("span", { className: "taskon-taskchain-token-tooltip-value", children: [
|
|
3736
|
-
formattedAmount,
|
|
3737
|
-
" ",
|
|
3738
|
-
tokenName
|
|
3739
|
-
] })
|
|
3740
|
-
] }),
|
|
3741
|
-
/* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-token-tooltip-row", children: [
|
|
3742
|
-
/* @__PURE__ */ jsx("span", { className: "taskon-taskchain-token-tooltip-label", children: "Value" }),
|
|
3743
|
-
/* @__PURE__ */ jsxs("span", { className: "taskon-taskchain-token-tooltip-usd", children: [
|
|
3744
|
-
"≈$",
|
|
3745
|
-
usdValue
|
|
3746
|
-
] })
|
|
3747
|
-
] })
|
|
3748
|
-
] });
|
|
3749
|
-
return /* @__PURE__ */ jsx(TipPopover, { content: tooltipContent, side: "top", children: /* @__PURE__ */ jsxs(
|
|
3750
|
-
"div",
|
|
3751
|
-
{
|
|
3752
|
-
className: `taskon-taskchain-claimed-item ${isMultiClaimed ? "taskon-taskchain-claimed-item--multi" : ""}`,
|
|
3753
|
-
children: [
|
|
3754
|
-
display.icon && /* @__PURE__ */ jsx(
|
|
3755
|
-
"img",
|
|
3756
|
-
{
|
|
3757
|
-
src: display.icon,
|
|
3758
|
-
alt: "",
|
|
3759
|
-
className: `taskon-taskchain-claimed-icon ${isMultiClaimed ? "taskon-taskchain-claimed-icon--multi" : ""} ${isMultiClaimed ? display.glowClass : ""}`
|
|
3760
|
-
}
|
|
3761
|
-
),
|
|
3762
|
-
/* @__PURE__ */ jsxs(
|
|
3763
|
-
"span",
|
|
3764
|
-
{
|
|
3765
|
-
className: `taskon-taskchain-claimed-text taskon-taskchain-claimed-text--token-link ${isMultiClaimed ? "taskon-taskchain-claimed-text--multi" : ""} ${display.colorClass}`,
|
|
3766
|
-
children: [
|
|
3767
|
-
display.text,
|
|
3768
|
-
/* @__PURE__ */ jsx(
|
|
3769
|
-
RightChevronIcon,
|
|
3770
|
-
{
|
|
3771
|
-
className: `taskon-taskchain-claimed-arrow ${isMultiClaimed ? "taskon-taskchain-claimed-arrow--multi" : ""}`
|
|
3772
|
-
}
|
|
3773
|
-
)
|
|
3774
|
-
]
|
|
3775
|
-
}
|
|
3776
|
-
)
|
|
3777
|
-
]
|
|
3778
|
-
}
|
|
3779
|
-
) }, index);
|
|
3780
|
-
}
|
|
3781
|
-
return /* @__PURE__ */ jsxs(
|
|
3782
|
-
"div",
|
|
3783
|
-
{
|
|
3784
|
-
className: `taskon-taskchain-claimed-item ${isMultiClaimed ? "taskon-taskchain-claimed-item--multi" : ""}`,
|
|
3785
|
-
children: [
|
|
3786
|
-
display.icon && /* @__PURE__ */ jsx(
|
|
3787
|
-
"img",
|
|
3788
|
-
{
|
|
3789
|
-
src: display.icon,
|
|
3790
|
-
alt: "",
|
|
3791
|
-
className: `taskon-taskchain-claimed-icon ${isMultiClaimed ? "taskon-taskchain-claimed-icon--multi" : ""} ${isMultiClaimed ? display.glowClass : ""}`
|
|
3792
|
-
}
|
|
3793
|
-
),
|
|
3794
|
-
/* @__PURE__ */ jsx(
|
|
3795
|
-
"span",
|
|
3796
|
-
{
|
|
3797
|
-
className: `taskon-taskchain-claimed-text ${isMultiClaimed ? "taskon-taskchain-claimed-text--multi" : ""} ${display.colorClass}`,
|
|
3798
|
-
children: display.text
|
|
3799
|
-
}
|
|
3800
|
-
)
|
|
3801
|
-
]
|
|
3802
|
-
},
|
|
3803
|
-
index
|
|
3804
|
-
);
|
|
3805
|
-
})
|
|
3806
|
-
}
|
|
3807
|
-
),
|
|
3808
|
-
nftClaimedRewards.length > 0 && /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-claimed-nft-list", children: nftClaimedRewards.map((reward, index) => {
|
|
3809
|
-
const nftValue = reward.reward_value;
|
|
3810
|
-
const nftName = (nftValue == null ? void 0 : nftValue.collection_name) || "NFT";
|
|
3811
|
-
const nftImage = (nftValue == null ? void 0 : nftValue.media_type) === "video" ? "" : (nftValue == null ? void 0 : nftValue.collection_image) || "";
|
|
3812
|
-
const chainIcon = (nftValue == null ? void 0 : nftValue.chain_icon) || "";
|
|
3813
|
-
return /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-card", children: [
|
|
3814
|
-
/* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-info", children: [
|
|
3815
|
-
/* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-image-wrap", children: [
|
|
3816
|
-
nftImage ? /* @__PURE__ */ jsx(
|
|
3817
|
-
"img",
|
|
3818
|
-
{
|
|
3819
|
-
src: nftImage,
|
|
3820
|
-
alt: "nft",
|
|
3821
|
-
className: "taskon-taskchain-claimed-nft-image"
|
|
3822
|
-
}
|
|
3823
|
-
) : /* @__PURE__ */ jsx(
|
|
3824
|
-
"img",
|
|
3825
|
-
{
|
|
3826
|
-
src: DEFAULT_NFT_ICON,
|
|
3827
|
-
alt: "nft",
|
|
3828
|
-
className: "taskon-taskchain-claimed-nft-image taskon-taskchain-claimed-nft-image--fallback"
|
|
3829
|
-
}
|
|
3830
|
-
),
|
|
3831
|
-
chainIcon && /* @__PURE__ */ jsx(
|
|
3832
|
-
"img",
|
|
3833
|
-
{
|
|
3834
|
-
src: chainIcon,
|
|
3835
|
-
alt: "chain",
|
|
3836
|
-
className: "taskon-taskchain-claimed-nft-chain"
|
|
3837
|
-
}
|
|
3838
|
-
)
|
|
3839
|
-
] }),
|
|
3840
|
-
/* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-claimed-nft-text", children: [
|
|
3841
|
-
/* @__PURE__ */ jsx("div", { className: "taskon-taskchain-claimed-nft-label", children: "NFT" }),
|
|
3842
|
-
/* @__PURE__ */ jsx("div", { className: "taskon-taskchain-claimed-nft-name", children: nftName })
|
|
3843
|
-
] })
|
|
3844
|
-
] }),
|
|
3845
|
-
/* @__PURE__ */ jsx(
|
|
3846
|
-
"button",
|
|
3847
|
-
{
|
|
3848
|
-
type: "button",
|
|
3849
|
-
className: "taskon-taskchain-claimed-nft-btn",
|
|
3850
|
-
onClick: () => toast.info("Coming soon"),
|
|
3851
|
-
children: "Claim"
|
|
3852
|
-
}
|
|
3853
|
-
)
|
|
3854
|
-
] }, `nft-${index}`);
|
|
3855
|
-
}) })
|
|
3856
|
-
] }),
|
|
3621
|
+
/* @__PURE__ */ jsx(
|
|
3622
|
+
TaskChainClaimedRewards,
|
|
3623
|
+
{
|
|
3624
|
+
rewards: userRewards,
|
|
3625
|
+
campaignId,
|
|
3626
|
+
campaignType: campaign == null ? void 0 : campaign.campaign_type,
|
|
3627
|
+
tokenPrice,
|
|
3628
|
+
rewardDisplayMode,
|
|
3629
|
+
rewardRedirectUrl,
|
|
3630
|
+
onClaimedNft: refetchUserStatus
|
|
3631
|
+
}
|
|
3632
|
+
),
|
|
3857
3633
|
/* @__PURE__ */ jsx("div", { className: "taskon-taskchain-reward-actions", children: /* @__PURE__ */ jsx(
|
|
3858
3634
|
"button",
|
|
3859
3635
|
{
|
|
@@ -3964,7 +3740,9 @@ function TaskChainBlindBoxStep({
|
|
|
3964
3740
|
campaign,
|
|
3965
3741
|
userStatus,
|
|
3966
3742
|
refetchUserStatus,
|
|
3967
|
-
onClose
|
|
3743
|
+
onClose,
|
|
3744
|
+
rewardDisplayMode = "popup",
|
|
3745
|
+
rewardRedirectUrl = ""
|
|
3968
3746
|
}) {
|
|
3969
3747
|
const { client } = useTaskOnContext();
|
|
3970
3748
|
const { toast } = useToast();
|
|
@@ -4064,16 +3842,35 @@ function TaskChainBlindBoxStep({
|
|
|
4064
3842
|
}
|
|
4065
3843
|
}, [campaign, api]);
|
|
4066
3844
|
if (userBlindBoxStatus === "claimed") {
|
|
4067
|
-
|
|
4068
|
-
|
|
4069
|
-
|
|
4070
|
-
|
|
4071
|
-
|
|
4072
|
-
|
|
4073
|
-
|
|
4074
|
-
|
|
4075
|
-
|
|
4076
|
-
|
|
3845
|
+
const title = isOpenedButNotWon ? "Oops! Better Luck Next Time!" : "Congratulations!";
|
|
3846
|
+
const subtitle = isOpenedButNotWon ? "Rewards Missed" : "You Have Won";
|
|
3847
|
+
const displayRewards = emptyReward ? [emptyReward, ...userRewards] : userRewards;
|
|
3848
|
+
return /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-blindbox-step", children: /* @__PURE__ */ jsxs("div", { className: "taskon-taskchain-blindbox-result", children: [
|
|
3849
|
+
/* @__PURE__ */ jsx("h2", { className: "taskon-taskchain-blindbox-result-title", children: title }),
|
|
3850
|
+
/* @__PURE__ */ jsx("p", { className: "taskon-taskchain-blindbox-result-subtitle", children: subtitle }),
|
|
3851
|
+
displayRewards.length > 0 && /* @__PURE__ */ jsx(
|
|
3852
|
+
TaskChainClaimedRewards,
|
|
3853
|
+
{
|
|
3854
|
+
className: "taskon-taskchain-blindbox-result-rewards",
|
|
3855
|
+
rewards: displayRewards,
|
|
3856
|
+
campaignId,
|
|
3857
|
+
campaignType: (campaign == null ? void 0 : campaign.campaign_type) ?? CampaignType.Campaign,
|
|
3858
|
+
tokenPrice,
|
|
3859
|
+
rewardDisplayMode,
|
|
3860
|
+
rewardRedirectUrl,
|
|
3861
|
+
onClaimedNft: refetchUserStatus
|
|
3862
|
+
}
|
|
3863
|
+
),
|
|
3864
|
+
/* @__PURE__ */ jsx("div", { className: "taskon-taskchain-blindbox-result-actions", children: /* @__PURE__ */ jsx(
|
|
3865
|
+
"button",
|
|
3866
|
+
{
|
|
3867
|
+
type: "button",
|
|
3868
|
+
className: "taskon-taskchain-btn taskon-taskchain-btn--secondary",
|
|
3869
|
+
onClick: onClose,
|
|
3870
|
+
children: "Back"
|
|
3871
|
+
}
|
|
3872
|
+
) })
|
|
3873
|
+
] }) });
|
|
4077
3874
|
}
|
|
4078
3875
|
if (userBlindBoxStatus === "wait-claim") {
|
|
4079
3876
|
return /* @__PURE__ */ jsx("div", { className: "taskon-taskchain-blindbox-step", children: /* @__PURE__ */ jsx(
|
|
@@ -4119,7 +3916,9 @@ function TaskChainMain({
|
|
|
4119
3916
|
hasBlindBox,
|
|
4120
3917
|
onTaskComplete,
|
|
4121
3918
|
onClose,
|
|
4122
|
-
refetchUserStatus
|
|
3919
|
+
refetchUserStatus,
|
|
3920
|
+
rewardDisplayMode,
|
|
3921
|
+
rewardRedirectUrl
|
|
4123
3922
|
}) {
|
|
4124
3923
|
const handleVerifyAttempted = useCallback(
|
|
4125
3924
|
async (_taskId, success) => {
|
|
@@ -4139,7 +3938,9 @@ function TaskChainMain({
|
|
|
4139
3938
|
campaign,
|
|
4140
3939
|
userStatus,
|
|
4141
3940
|
refetchUserStatus,
|
|
4142
|
-
onClose
|
|
3941
|
+
onClose,
|
|
3942
|
+
rewardDisplayMode,
|
|
3943
|
+
rewardRedirectUrl
|
|
4143
3944
|
}
|
|
4144
3945
|
);
|
|
4145
3946
|
}
|
|
@@ -4150,7 +3951,9 @@ function TaskChainMain({
|
|
|
4150
3951
|
campaign,
|
|
4151
3952
|
userStatus,
|
|
4152
3953
|
refetchUserStatus,
|
|
4153
|
-
onClose
|
|
3954
|
+
onClose,
|
|
3955
|
+
rewardDisplayMode,
|
|
3956
|
+
rewardRedirectUrl
|
|
4154
3957
|
}
|
|
4155
3958
|
);
|
|
4156
3959
|
}
|
|
@@ -4280,7 +4083,7 @@ function NeedLoginMask({
|
|
|
4280
4083
|
style: {
|
|
4281
4084
|
fontSize: "18px",
|
|
4282
4085
|
fontWeight: 600,
|
|
4283
|
-
color: "var(--taskon-text
|
|
4086
|
+
color: "var(--taskon-color-text)",
|
|
4284
4087
|
marginBottom: "8px"
|
|
4285
4088
|
},
|
|
4286
4089
|
children: "Login Required"
|
|
@@ -4291,7 +4094,7 @@ function NeedLoginMask({
|
|
|
4291
4094
|
{
|
|
4292
4095
|
style: {
|
|
4293
4096
|
fontSize: "14px",
|
|
4294
|
-
color: "var(--taskon-text-secondary
|
|
4097
|
+
color: "var(--taskon-color-text-secondary)",
|
|
4295
4098
|
marginBottom: "24px",
|
|
4296
4099
|
maxWidth: "300px",
|
|
4297
4100
|
lineHeight: 1.5
|
|
@@ -4308,8 +4111,8 @@ function NeedLoginMask({
|
|
|
4308
4111
|
padding: "12px 32px",
|
|
4309
4112
|
fontSize: "14px",
|
|
4310
4113
|
fontWeight: 600,
|
|
4311
|
-
color: "
|
|
4312
|
-
backgroundColor: "
|
|
4114
|
+
color: "var(--taskon-color-text-on-primary)",
|
|
4115
|
+
backgroundColor: "var(--taskon-color-primary)",
|
|
4313
4116
|
border: "none",
|
|
4314
4117
|
borderRadius: "8px",
|
|
4315
4118
|
cursor: "pointer",
|
|
@@ -4340,7 +4143,9 @@ function TaskChainDetail({
|
|
|
4340
4143
|
onStepChange,
|
|
4341
4144
|
onTaskComplete,
|
|
4342
4145
|
onClose,
|
|
4343
|
-
refetchUserStatus
|
|
4146
|
+
refetchUserStatus,
|
|
4147
|
+
rewardDisplayMode,
|
|
4148
|
+
rewardRedirectUrl
|
|
4344
4149
|
}) {
|
|
4345
4150
|
var _a, _b;
|
|
4346
4151
|
const { isLoggedIn, requestLogin, client } = useTaskOnContext();
|
|
@@ -4459,7 +4264,9 @@ function TaskChainDetail({
|
|
|
4459
4264
|
hasBlindBox,
|
|
4460
4265
|
onTaskComplete,
|
|
4461
4266
|
onClose,
|
|
4462
|
-
refetchUserStatus
|
|
4267
|
+
refetchUserStatus,
|
|
4268
|
+
rewardDisplayMode,
|
|
4269
|
+
rewardRedirectUrl
|
|
4463
4270
|
}
|
|
4464
4271
|
);
|
|
4465
4272
|
};
|
|
@@ -4560,6 +4367,7 @@ function BottomDialog({
|
|
|
4560
4367
|
top = "16vh",
|
|
4561
4368
|
showCloseButton = true
|
|
4562
4369
|
}) {
|
|
4370
|
+
const portalContainer = useTaskOnPortalContainer();
|
|
4563
4371
|
const [mounted, setMounted] = useState(false);
|
|
4564
4372
|
const [isExiting, setIsExiting] = useState(false);
|
|
4565
4373
|
const exitTimerRef = useRef(null);
|
|
@@ -4629,14 +4437,19 @@ function BottomDialog({
|
|
|
4629
4437
|
}
|
|
4630
4438
|
)
|
|
4631
4439
|
] });
|
|
4632
|
-
|
|
4440
|
+
if (!portalContainer) {
|
|
4441
|
+
return null;
|
|
4442
|
+
}
|
|
4443
|
+
return createPortal(dialog, portalContainer);
|
|
4633
4444
|
}
|
|
4634
4445
|
function TaskChainDialog({
|
|
4635
4446
|
campaignId,
|
|
4636
4447
|
open,
|
|
4637
4448
|
onClose,
|
|
4638
4449
|
onUpdate,
|
|
4639
|
-
defaultStepIndex
|
|
4450
|
+
defaultStepIndex,
|
|
4451
|
+
rewardDisplayMode,
|
|
4452
|
+
rewardRedirectUrl
|
|
4640
4453
|
}) {
|
|
4641
4454
|
var _a, _b;
|
|
4642
4455
|
const {
|
|
@@ -4718,12 +4531,14 @@ function TaskChainDialog({
|
|
|
4718
4531
|
onStepChange: handleStepChange,
|
|
4719
4532
|
onTaskComplete: handleTaskComplete,
|
|
4720
4533
|
onClose,
|
|
4721
|
-
refetchUserStatus
|
|
4534
|
+
refetchUserStatus,
|
|
4535
|
+
rewardDisplayMode,
|
|
4536
|
+
rewardRedirectUrl
|
|
4722
4537
|
}
|
|
4723
4538
|
)
|
|
4724
4539
|
] }) });
|
|
4725
4540
|
}
|
|
4726
|
-
function
|
|
4541
|
+
function SectorItemComponent({
|
|
4727
4542
|
sector,
|
|
4728
4543
|
showSectorName = true,
|
|
4729
4544
|
showSectorDescription = true,
|
|
@@ -4735,7 +4550,8 @@ function SectorItem({
|
|
|
4735
4550
|
onTaskChainOpen,
|
|
4736
4551
|
onEligTaskClick,
|
|
4737
4552
|
coolDownMap,
|
|
4738
|
-
onCoolDownComplete
|
|
4553
|
+
onCoolDownComplete,
|
|
4554
|
+
onDoneCountdownComplete
|
|
4739
4555
|
}) {
|
|
4740
4556
|
const hasPeriodicTask = useMemo(() => {
|
|
4741
4557
|
return sector.cards.some((card) => {
|
|
@@ -4808,10 +4624,11 @@ function SectorItem({
|
|
|
4808
4624
|
var _a;
|
|
4809
4625
|
return onClaimTask(taskInfo.id, token, (_a = taskInfo.template) == null ? void 0 : _a.platform);
|
|
4810
4626
|
} : void 0,
|
|
4811
|
-
onUpdate,
|
|
4627
|
+
onUpdate: onUpdate ? () => onUpdate(taskInfo.id) : void 0,
|
|
4812
4628
|
onEligTaskClick,
|
|
4813
4629
|
coolDown: coolDownMap == null ? void 0 : coolDownMap[taskInfo.id],
|
|
4814
|
-
onCoolDownComplete: onCoolDownComplete ? () => onCoolDownComplete(taskInfo.id) : void 0
|
|
4630
|
+
onCoolDownComplete: onCoolDownComplete ? () => onCoolDownComplete(taskInfo.id) : void 0,
|
|
4631
|
+
onDoneCountdownComplete
|
|
4815
4632
|
}
|
|
4816
4633
|
) }, key);
|
|
4817
4634
|
}
|
|
@@ -4844,7 +4661,8 @@ function SectorItem({
|
|
|
4844
4661
|
task: taskInfo,
|
|
4845
4662
|
userStatus: card.user_status,
|
|
4846
4663
|
onClick: () => onTaskClick == null ? void 0 : onTaskClick(card),
|
|
4847
|
-
onEligTaskClick
|
|
4664
|
+
onEligTaskClick,
|
|
4665
|
+
onDoneCountdownComplete
|
|
4848
4666
|
}
|
|
4849
4667
|
) }, key);
|
|
4850
4668
|
}
|
|
@@ -4853,6 +4671,58 @@ function SectorItem({
|
|
|
4853
4671
|
] })
|
|
4854
4672
|
] });
|
|
4855
4673
|
}
|
|
4674
|
+
const SectorItem = React__default.memo(SectorItemComponent);
|
|
4675
|
+
function renderTaskCards(count) {
|
|
4676
|
+
return Array.from({ length: count }, (_, index) => /* @__PURE__ */ jsx(
|
|
4677
|
+
"div",
|
|
4678
|
+
{
|
|
4679
|
+
className: "taskon-community-list-skeleton-block taskon-community-list-skeleton-task"
|
|
4680
|
+
},
|
|
4681
|
+
`task-${index}`
|
|
4682
|
+
));
|
|
4683
|
+
}
|
|
4684
|
+
function CommunityTaskListSkeleton({
|
|
4685
|
+
showSectorTab = true,
|
|
4686
|
+
showSectorName = true,
|
|
4687
|
+
showSectorDescription = true,
|
|
4688
|
+
showSectorReward = true
|
|
4689
|
+
}) {
|
|
4690
|
+
return /* @__PURE__ */ jsxs(
|
|
4691
|
+
"div",
|
|
4692
|
+
{
|
|
4693
|
+
className: "taskon-community-list-skeleton",
|
|
4694
|
+
"aria-busy": "true",
|
|
4695
|
+
"aria-label": "Loading tasks",
|
|
4696
|
+
children: [
|
|
4697
|
+
showSectorTab && /* @__PURE__ */ jsxs("div", { className: "taskon-community-list-skeleton-selector", children: [
|
|
4698
|
+
/* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-chip taskon-community-list-skeleton-chip--wide" }),
|
|
4699
|
+
/* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-chip" }),
|
|
4700
|
+
/* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-chip" })
|
|
4701
|
+
] }),
|
|
4702
|
+
/* @__PURE__ */ jsxs("div", { className: "taskon-community-list-skeleton-content", children: [
|
|
4703
|
+
/* @__PURE__ */ jsxs("div", { className: "taskon-community-list-skeleton-sector", children: [
|
|
4704
|
+
showSectorName && /* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-block taskon-community-list-skeleton-title" }),
|
|
4705
|
+
showSectorDescription && /* @__PURE__ */ jsxs("div", { className: "taskon-community-list-skeleton-lines", children: [
|
|
4706
|
+
/* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-block taskon-community-list-skeleton-line" }),
|
|
4707
|
+
/* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-block taskon-community-list-skeleton-line taskon-community-list-skeleton-line--short" })
|
|
4708
|
+
] }),
|
|
4709
|
+
showSectorReward && /* @__PURE__ */ jsxs("div", { className: "taskon-community-list-skeleton-points", children: [
|
|
4710
|
+
/* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-block taskon-community-list-skeleton-pill" }),
|
|
4711
|
+
/* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-block taskon-community-list-skeleton-pill taskon-community-list-skeleton-pill--short" })
|
|
4712
|
+
] }),
|
|
4713
|
+
/* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-tasks", children: renderTaskCards(4) })
|
|
4714
|
+
] }),
|
|
4715
|
+
/* @__PURE__ */ jsxs("div", { className: "taskon-community-list-skeleton-sector", children: [
|
|
4716
|
+
showSectorName && /* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-block taskon-community-list-skeleton-title taskon-community-list-skeleton-title--second" }),
|
|
4717
|
+
showSectorDescription && /* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-lines", children: /* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-block taskon-community-list-skeleton-line" }) }),
|
|
4718
|
+
showSectorReward && /* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-points", children: /* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-block taskon-community-list-skeleton-pill taskon-community-list-skeleton-pill--short" }) }),
|
|
4719
|
+
/* @__PURE__ */ jsx("div", { className: "taskon-community-list-skeleton-tasks", children: renderTaskCards(3) })
|
|
4720
|
+
] })
|
|
4721
|
+
] })
|
|
4722
|
+
]
|
|
4723
|
+
}
|
|
4724
|
+
);
|
|
4725
|
+
}
|
|
4856
4726
|
const RECURRENCE_LABEL_MAP = {
|
|
4857
4727
|
Once: "Once",
|
|
4858
4728
|
Daily: "Daily",
|
|
@@ -5069,9 +4939,19 @@ function formatDateTime(timestamp) {
|
|
|
5069
4939
|
}
|
|
5070
4940
|
function formatCountdown(diff) {
|
|
5071
4941
|
if (diff <= 0) return "00:00:00";
|
|
5072
|
-
|
|
5073
|
-
|
|
5074
|
-
|
|
4942
|
+
if (diff / (1e3 * 60 * 60) > 24) {
|
|
4943
|
+
const day2 = 24 * 60 * 60 * 1e3;
|
|
4944
|
+
const days = Math.ceil(diff / day2);
|
|
4945
|
+
return `${days} day${days > 1 ? "s" : ""}`;
|
|
4946
|
+
}
|
|
4947
|
+
const day = 24 * 60 * 60 * 1e3;
|
|
4948
|
+
const hour = 60 * 60 * 1e3;
|
|
4949
|
+
const minute = 60 * 1e3;
|
|
4950
|
+
const second = 1e3;
|
|
4951
|
+
const normalizedDiff = Math.abs(diff);
|
|
4952
|
+
const hours = Math.floor(normalizedDiff % day / hour);
|
|
4953
|
+
const minutes = Math.floor(normalizedDiff % hour / minute);
|
|
4954
|
+
const seconds = Math.floor(normalizedDiff % minute / second);
|
|
5075
4955
|
const prefix2 = (n) => String(n).padStart(2, "0");
|
|
5076
4956
|
return `${prefix2(hours)}:${prefix2(minutes)}:${prefix2(seconds)}`;
|
|
5077
4957
|
}
|
|
@@ -5088,6 +4968,7 @@ function DialogRewardCard({
|
|
|
5088
4968
|
chainType,
|
|
5089
4969
|
onBindFailed,
|
|
5090
4970
|
renderStatus,
|
|
4971
|
+
renderStatusPrefix,
|
|
5091
4972
|
hideClaimButton = false,
|
|
5092
4973
|
verifyClaim,
|
|
5093
4974
|
isPeriodic = false,
|
|
@@ -5122,7 +5003,7 @@ function DialogRewardCard({
|
|
|
5122
5003
|
const renderPeriodicCountdown = useCallback(() => {
|
|
5123
5004
|
if (!showPeriodicCountdown) return null;
|
|
5124
5005
|
return /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-periodic-done", children: [
|
|
5125
|
-
/* @__PURE__ */ jsx("span", { children: "Done
|
|
5006
|
+
/* @__PURE__ */ jsx("span", { children: "Done for today" }),
|
|
5126
5007
|
/* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-periodic-done__line" }),
|
|
5127
5008
|
/* @__PURE__ */ jsx("span", { children: "Continue in" }),
|
|
5128
5009
|
/* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-periodic-done__time", children: countdownLabel })
|
|
@@ -5203,6 +5084,8 @@ function DialogRewardCard({
|
|
|
5203
5084
|
}
|
|
5204
5085
|
) });
|
|
5205
5086
|
};
|
|
5087
|
+
const statusPrefixNode = renderStatusPrefix == null ? void 0 : renderStatusPrefix();
|
|
5088
|
+
const statusNode = showPeriodicCountdown ? renderPeriodicCountdown() : renderStatus ? renderStatus() : renderDefaultStatus();
|
|
5206
5089
|
return /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-reward-card", children: [
|
|
5207
5090
|
claimLimit > 0 && /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-max-claim", children: [
|
|
5208
5091
|
"Max. Claims",
|
|
@@ -5211,7 +5094,10 @@ function DialogRewardCard({
|
|
|
5211
5094
|
] }),
|
|
5212
5095
|
/* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-label-row", children: [
|
|
5213
5096
|
/* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-rewards-label", children: "🎁 Rewards" }),
|
|
5214
|
-
|
|
5097
|
+
(statusPrefixNode || statusNode) && /* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-label-right", children: [
|
|
5098
|
+
statusPrefixNode,
|
|
5099
|
+
statusNode
|
|
5100
|
+
] })
|
|
5215
5101
|
] }),
|
|
5216
5102
|
renderRewardContent(),
|
|
5217
5103
|
renderClaimArea(),
|
|
@@ -5264,6 +5150,10 @@ function BaseDialogLayout({
|
|
|
5264
5150
|
claimLimit,
|
|
5265
5151
|
reward,
|
|
5266
5152
|
isWon,
|
|
5153
|
+
eligibilityTask,
|
|
5154
|
+
eligibilityConditions,
|
|
5155
|
+
onEligibilityCheck,
|
|
5156
|
+
onEligTaskClick,
|
|
5267
5157
|
coolDown,
|
|
5268
5158
|
onCoolDownComplete,
|
|
5269
5159
|
isSubmitting,
|
|
@@ -5272,6 +5162,7 @@ function BaseDialogLayout({
|
|
|
5272
5162
|
chainType,
|
|
5273
5163
|
onBindFailed,
|
|
5274
5164
|
renderStatus,
|
|
5165
|
+
renderStatusPrefix,
|
|
5275
5166
|
hideClaimButton,
|
|
5276
5167
|
verifyClaim,
|
|
5277
5168
|
hideRewardCard = false,
|
|
@@ -5283,7 +5174,12 @@ function BaseDialogLayout({
|
|
|
5283
5174
|
showCloseIn = false,
|
|
5284
5175
|
onCloseInClose
|
|
5285
5176
|
}) {
|
|
5177
|
+
var _a;
|
|
5286
5178
|
const recurrenceLabel = getRecurrenceLabel(recurrence);
|
|
5179
|
+
const shouldShowEligibilityMask = Boolean(
|
|
5180
|
+
((_a = eligibilityTask == null ? void 0 : eligibilityTask.eligiblity) == null ? void 0 : _a.length) && (eligibilityConditions == null ? void 0 : eligibilityConditions.length)
|
|
5181
|
+
);
|
|
5182
|
+
const leftPanelClassName = shouldShowEligibilityMask ? "taskon-task-dialog-left taskon-task-dialog-left--mask-active" : "taskon-task-dialog-left";
|
|
5287
5183
|
const renderValidTime = () => {
|
|
5288
5184
|
if (!(validTime == null ? void 0 : validTime.endTime)) return null;
|
|
5289
5185
|
if (validTime.isExpired) {
|
|
@@ -5297,7 +5193,16 @@ function BaseDialogLayout({
|
|
|
5297
5193
|
/* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-valid-time-value", children: validTime.endTime })
|
|
5298
5194
|
] });
|
|
5299
5195
|
};
|
|
5300
|
-
return /* @__PURE__ */ jsxs("div", { className:
|
|
5196
|
+
return /* @__PURE__ */ jsxs("div", { className: leftPanelClassName, children: [
|
|
5197
|
+
shouldShowEligibilityMask && eligibilityTask && eligibilityConditions && /* @__PURE__ */ jsx(
|
|
5198
|
+
UserEligibilityMask,
|
|
5199
|
+
{
|
|
5200
|
+
task: eligibilityTask,
|
|
5201
|
+
conditions: eligibilityConditions,
|
|
5202
|
+
onCheck: onEligibilityCheck,
|
|
5203
|
+
onTaskClick: onEligTaskClick
|
|
5204
|
+
}
|
|
5205
|
+
),
|
|
5301
5206
|
/* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-main", children: [
|
|
5302
5207
|
!noRecurrence && /* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-recurrence", children: recurrenceLabel }),
|
|
5303
5208
|
titleLink ? /* @__PURE__ */ jsx(
|
|
@@ -5328,6 +5233,7 @@ function BaseDialogLayout({
|
|
|
5328
5233
|
chainType,
|
|
5329
5234
|
onBindFailed,
|
|
5330
5235
|
renderStatus,
|
|
5236
|
+
renderStatusPrefix,
|
|
5331
5237
|
hideClaimButton,
|
|
5332
5238
|
verifyClaim,
|
|
5333
5239
|
isPeriodic,
|
|
@@ -5350,6 +5256,9 @@ function parseTemplateParams(params) {
|
|
|
5350
5256
|
function TemplateDialogContent({
|
|
5351
5257
|
task,
|
|
5352
5258
|
taskInfo,
|
|
5259
|
+
eligibilityConditions,
|
|
5260
|
+
onEligibilityCheck,
|
|
5261
|
+
onEligTaskClick,
|
|
5353
5262
|
onClaimSuccess,
|
|
5354
5263
|
showCloseIn,
|
|
5355
5264
|
onCloseInClose,
|
|
@@ -5481,6 +5390,10 @@ function TemplateDialogContent({
|
|
|
5481
5390
|
claimLimit: info.claim_limit,
|
|
5482
5391
|
reward,
|
|
5483
5392
|
isWon: state.isWon,
|
|
5393
|
+
eligibilityTask: info,
|
|
5394
|
+
eligibilityConditions,
|
|
5395
|
+
onEligibilityCheck,
|
|
5396
|
+
onEligTaskClick,
|
|
5484
5397
|
coolDown,
|
|
5485
5398
|
onCoolDownComplete: handleCoolDownComplete,
|
|
5486
5399
|
isSubmitting,
|
|
@@ -5498,9 +5411,9 @@ function TemplateDialogContent({
|
|
|
5498
5411
|
showCloseIn,
|
|
5499
5412
|
onCloseInClose,
|
|
5500
5413
|
children: [
|
|
5414
|
+
validationTimeFrame && /* @__PURE__ */ jsx(ValidationTimeTip, { timeFrame: validationTimeFrame }),
|
|
5501
5415
|
/* @__PURE__ */ jsxs("div", { className: "taskon-task-dialog-desc", children: [
|
|
5502
|
-
params.desc &&
|
|
5503
|
-
params.desc && !info.template.is_rich_text && /* @__PURE__ */ jsx(CardField, { label: params.desc }),
|
|
5416
|
+
params.desc && /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc, noMaxHeight: true }),
|
|
5504
5417
|
(_d = params.desc_fields) == null ? void 0 : _d.filter((field) => !field.display || field.display !== "card").map((field, index) => {
|
|
5505
5418
|
const label = field.key === "open_post_link" ? void 0 : field.key;
|
|
5506
5419
|
return /* @__PURE__ */ jsx(
|
|
@@ -5515,7 +5428,6 @@ function TemplateDialogContent({
|
|
|
5515
5428
|
);
|
|
5516
5429
|
})
|
|
5517
5430
|
] }),
|
|
5518
|
-
validationTimeFrame && /* @__PURE__ */ jsx(ValidationTimeTip, { timeFrame: validationTimeFrame }),
|
|
5519
5431
|
params.action_label && !state.isWon && /* @__PURE__ */ jsxs(
|
|
5520
5432
|
"button",
|
|
5521
5433
|
{
|
|
@@ -5747,6 +5659,9 @@ function parsePowParams(params) {
|
|
|
5747
5659
|
function PowTaskDialogContent({
|
|
5748
5660
|
task,
|
|
5749
5661
|
taskInfo,
|
|
5662
|
+
eligibilityConditions,
|
|
5663
|
+
onEligibilityCheck,
|
|
5664
|
+
onEligTaskClick,
|
|
5750
5665
|
onClaimSuccess,
|
|
5751
5666
|
showCloseIn,
|
|
5752
5667
|
onCloseInClose
|
|
@@ -5768,6 +5683,7 @@ function PowTaskDialogContent({
|
|
|
5768
5683
|
}, [(_b = info == null ? void 0 : info.template) == null ? void 0 : _b.params]);
|
|
5769
5684
|
const state = useTaskState(info, userStatus);
|
|
5770
5685
|
const reward = useTaskReward(info);
|
|
5686
|
+
const validTime = useTaskTime(info);
|
|
5771
5687
|
const { submitTask, isSubmitting } = useSubmitTask(
|
|
5772
5688
|
(info == null ? void 0 : info.id) ?? 0,
|
|
5773
5689
|
onClaimSuccess,
|
|
@@ -5923,9 +5839,14 @@ function PowTaskDialogContent({
|
|
|
5923
5839
|
recurrence: info.recurrence,
|
|
5924
5840
|
title: info.name,
|
|
5925
5841
|
titleLink: params.task_url,
|
|
5842
|
+
validTime,
|
|
5926
5843
|
claimLimit: info.claim_limit,
|
|
5927
5844
|
reward,
|
|
5928
5845
|
isWon: state.isWon,
|
|
5846
|
+
eligibilityTask: info,
|
|
5847
|
+
eligibilityConditions,
|
|
5848
|
+
onEligibilityCheck,
|
|
5849
|
+
onEligTaskClick,
|
|
5929
5850
|
coolDown: 0,
|
|
5930
5851
|
renderStatus: renderReviewStatus,
|
|
5931
5852
|
hideClaimButton: true,
|
|
@@ -5937,7 +5858,7 @@ function PowTaskDialogContent({
|
|
|
5937
5858
|
showCloseIn,
|
|
5938
5859
|
onCloseInClose,
|
|
5939
5860
|
children: [
|
|
5940
|
-
params.desc && /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc }) }),
|
|
5861
|
+
params.desc && /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc, noMaxHeight: true }) }),
|
|
5941
5862
|
renderInputArea(),
|
|
5942
5863
|
renderActionButton()
|
|
5943
5864
|
]
|
|
@@ -5954,6 +5875,9 @@ function parseParams$1(params) {
|
|
|
5954
5875
|
function ContractInteractiveDialogContent({
|
|
5955
5876
|
task,
|
|
5956
5877
|
taskInfo,
|
|
5878
|
+
eligibilityConditions,
|
|
5879
|
+
onEligibilityCheck,
|
|
5880
|
+
onEligTaskClick,
|
|
5957
5881
|
onClaimSuccess,
|
|
5958
5882
|
showCloseIn,
|
|
5959
5883
|
onCloseInClose,
|
|
@@ -5979,6 +5903,7 @@ function ContractInteractiveDialogContent({
|
|
|
5979
5903
|
}, [(_b = info == null ? void 0 : info.template) == null ? void 0 : _b.params]);
|
|
5980
5904
|
const state = useTaskState(info, userStatus);
|
|
5981
5905
|
const reward = useTaskReward(info);
|
|
5906
|
+
const validTime = useTaskTime(info);
|
|
5982
5907
|
const { submitTask, isSubmitting } = useSubmitTask(
|
|
5983
5908
|
(info == null ? void 0 : info.id) ?? 0,
|
|
5984
5909
|
onClaimSuccess,
|
|
@@ -6044,9 +5969,14 @@ function ContractInteractiveDialogContent({
|
|
|
6044
5969
|
{
|
|
6045
5970
|
recurrence: info.recurrence,
|
|
6046
5971
|
title: info.name,
|
|
5972
|
+
validTime,
|
|
6047
5973
|
claimLimit: info.claim_limit,
|
|
6048
5974
|
reward,
|
|
6049
5975
|
isWon: state.isWon,
|
|
5976
|
+
eligibilityTask: info,
|
|
5977
|
+
eligibilityConditions,
|
|
5978
|
+
onEligibilityCheck,
|
|
5979
|
+
onEligTaskClick,
|
|
6050
5980
|
coolDown,
|
|
6051
5981
|
onCoolDownComplete: handleCoolDownComplete,
|
|
6052
5982
|
isSubmitting,
|
|
@@ -6062,8 +5992,8 @@ function ContractInteractiveDialogContent({
|
|
|
6062
5992
|
showCloseIn,
|
|
6063
5993
|
onCloseInClose,
|
|
6064
5994
|
children: [
|
|
6065
|
-
params.desc && /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc }) }),
|
|
6066
5995
|
validationTimeFrame && /* @__PURE__ */ jsx(ValidationTimeTip, { timeFrame: validationTimeFrame }),
|
|
5996
|
+
params.desc && /* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc, noMaxHeight: true }) }),
|
|
6067
5997
|
params.task_url && !state.isWon && /* @__PURE__ */ jsx(
|
|
6068
5998
|
"button",
|
|
6069
5999
|
{
|
|
@@ -6085,18 +6015,12 @@ function parseParams(params) {
|
|
|
6085
6015
|
return {};
|
|
6086
6016
|
}
|
|
6087
6017
|
}
|
|
6088
|
-
function generateRulesText(params, pointName) {
|
|
6089
|
-
const { each_trading_volume, each_receive_points, swap_receive_max_points } = params;
|
|
6090
|
-
if (!each_trading_volume || !each_receive_points) return "";
|
|
6091
|
-
let text = `Swap $${each_trading_volume} USD to earn ${each_receive_points} ${pointName}`;
|
|
6092
|
-
if (typeof swap_receive_max_points === "number" && swap_receive_max_points >= 0) {
|
|
6093
|
-
text += `. Maximum ${swap_receive_max_points} ${pointName} per task.`;
|
|
6094
|
-
}
|
|
6095
|
-
return text;
|
|
6096
|
-
}
|
|
6097
6018
|
function SwapDexDialogContent({
|
|
6098
6019
|
task,
|
|
6099
6020
|
taskInfo,
|
|
6021
|
+
eligibilityConditions,
|
|
6022
|
+
onEligibilityCheck,
|
|
6023
|
+
onEligTaskClick,
|
|
6100
6024
|
onClaimSuccess,
|
|
6101
6025
|
showCloseIn,
|
|
6102
6026
|
onCloseInClose,
|
|
@@ -6107,7 +6031,7 @@ function SwapDexDialogContent({
|
|
|
6107
6031
|
var _a, _b, _c;
|
|
6108
6032
|
const userStatus = task.user_status;
|
|
6109
6033
|
const { showToast } = useToast();
|
|
6110
|
-
const { getChainType } = useChainMap();
|
|
6034
|
+
const { getChainType, chainMap } = useChainMap();
|
|
6111
6035
|
const { communityInfo } = useTaskOnContext();
|
|
6112
6036
|
const totalEarned = ((_a = userStatus == null ? void 0 : userStatus.total_point) == null ? void 0 : _a.amount) ?? 0;
|
|
6113
6037
|
const rawInfo = taskInfo ?? task.card_info;
|
|
@@ -6122,6 +6046,7 @@ function SwapDexDialogContent({
|
|
|
6122
6046
|
}, [(_b = info == null ? void 0 : info.template) == null ? void 0 : _b.params]);
|
|
6123
6047
|
const state = useTaskState(info, userStatus);
|
|
6124
6048
|
const reward = useTaskReward(info);
|
|
6049
|
+
const validTime = useTaskTime(info);
|
|
6125
6050
|
const { submitTask, isSubmitting } = useSubmitTask(
|
|
6126
6051
|
(info == null ? void 0 : info.id) ?? 0,
|
|
6127
6052
|
onClaimSuccess,
|
|
@@ -6133,18 +6058,33 @@ function SwapDexDialogContent({
|
|
|
6133
6058
|
);
|
|
6134
6059
|
const coolDown = sharedCoolDown ?? localCoolDown;
|
|
6135
6060
|
const isFixedRule = params.is_fixed_reward_type;
|
|
6061
|
+
const rulePointName = reward.name || "Points";
|
|
6062
|
+
const ruleMaxText = useMemo(() => {
|
|
6063
|
+
if (typeof params.swap_receive_max_points === "number" && params.swap_receive_max_points >= 0) {
|
|
6064
|
+
return `(Max ${params.swap_receive_max_points} ${rulePointName})`;
|
|
6065
|
+
}
|
|
6066
|
+
return "";
|
|
6067
|
+
}, [params.swap_receive_max_points, rulePointName]);
|
|
6068
|
+
const hasRulesText = useMemo(() => {
|
|
6069
|
+
return Boolean(params.each_trading_volume && params.each_receive_points);
|
|
6070
|
+
}, [params.each_trading_volume, params.each_receive_points]);
|
|
6071
|
+
const chainLabel = useMemo(() => {
|
|
6072
|
+
var _a2;
|
|
6073
|
+
if (!params.chain) return "";
|
|
6074
|
+
return ((_a2 = chainMap[params.chain.toLowerCase()]) == null ? void 0 : _a2.label) || params.chain;
|
|
6075
|
+
}, [chainMap, params.chain]);
|
|
6136
6076
|
const titleExpress = useMemo(() => {
|
|
6137
6077
|
return getSwapDexTitleExpress({
|
|
6138
6078
|
tokenOutList: params.token_out_list,
|
|
6139
6079
|
tokenInList: params.token_in_list,
|
|
6140
|
-
chainLabel
|
|
6080
|
+
chainLabel,
|
|
6141
6081
|
dexName: (info == null ? void 0 : info.project_name) || (communityInfo == null ? void 0 : communityInfo.name) || "DEX",
|
|
6142
6082
|
dexLink: params.task_url,
|
|
6143
6083
|
isFixedReward: params.is_fixed_reward_type || false,
|
|
6144
6084
|
minTradingVolume: params.min_trading_volume,
|
|
6145
6085
|
minTradesTimes: params.min_trades_times
|
|
6146
6086
|
});
|
|
6147
|
-
}, [params, info == null ? void 0 : info.project_name, communityInfo == null ? void 0 : communityInfo.name]);
|
|
6087
|
+
}, [params, chainLabel, info == null ? void 0 : info.project_name, communityInfo == null ? void 0 : communityInfo.name]);
|
|
6148
6088
|
const fromTokenDisplay = useMemo(
|
|
6149
6089
|
() => formatSwapTokensForDisplay(params.token_out_list),
|
|
6150
6090
|
[params.token_out_list]
|
|
@@ -6153,10 +6093,6 @@ function SwapDexDialogContent({
|
|
|
6153
6093
|
() => formatSwapTokensForDisplay(params.token_in_list),
|
|
6154
6094
|
[params.token_in_list]
|
|
6155
6095
|
);
|
|
6156
|
-
const rulesText = useMemo(() => {
|
|
6157
|
-
if (isFixedRule) return "";
|
|
6158
|
-
return generateRulesText(params, reward.name || "points");
|
|
6159
|
-
}, [isFixedRule, params, reward.name]);
|
|
6160
6096
|
const validationTimeFrame = useMemo(() => {
|
|
6161
6097
|
if (!(info == null ? void 0 : info.template)) return void 0;
|
|
6162
6098
|
const { class_type, is_hold } = info.template;
|
|
@@ -6210,12 +6146,9 @@ function SwapDexDialogContent({
|
|
|
6210
6146
|
window.open(params.task_url, "_blank");
|
|
6211
6147
|
}
|
|
6212
6148
|
}, [params.task_url]);
|
|
6213
|
-
const
|
|
6214
|
-
if (state.isWon) {
|
|
6215
|
-
return /* @__PURE__ */ jsx("span", { className: "taskon-task-dialog-won", children: "Won" });
|
|
6216
|
-
}
|
|
6149
|
+
const renderRewardStatusPrefix = useCallback(() => {
|
|
6217
6150
|
if (isDynamicTimes) {
|
|
6218
|
-
const currentTimes = (userStatus == null ? void 0 : userStatus.current_trades_times)
|
|
6151
|
+
const currentTimes = (userStatus == null ? void 0 : userStatus.current_trades_times) && userStatus.current_trades_times > 0 ? userStatus.current_trades_times : "--";
|
|
6219
6152
|
const minTimes = params.min_trades_times ?? 0;
|
|
6220
6153
|
return /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-progress", children: [
|
|
6221
6154
|
/* @__PURE__ */ jsx("span", { className: "taskon-swap-dialog-progress-current", children: currentTimes }),
|
|
@@ -6227,14 +6160,9 @@ function SwapDexDialogContent({
|
|
|
6227
6160
|
] });
|
|
6228
6161
|
}
|
|
6229
6162
|
return null;
|
|
6230
|
-
}, [
|
|
6231
|
-
state.isWon,
|
|
6232
|
-
isDynamicTimes,
|
|
6233
|
-
userStatus == null ? void 0 : userStatus.current_trades_times,
|
|
6234
|
-
params.min_trades_times
|
|
6235
|
-
]);
|
|
6163
|
+
}, [isDynamicTimes, userStatus == null ? void 0 : userStatus.current_trades_times, params.min_trades_times]);
|
|
6236
6164
|
const renderFixedModeContent = () => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
6237
|
-
params.chain && /* @__PURE__ */ jsx(CardField, { label: "Chain: ", value:
|
|
6165
|
+
params.chain && /* @__PURE__ */ jsx(CardField, { label: "Chain: ", value: chainLabel }),
|
|
6238
6166
|
params.token_out_list && params.token_out_list.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
6239
6167
|
/* @__PURE__ */ jsx(CardField, { label: "Swap From: ", value: fromTokenDisplay }),
|
|
6240
6168
|
params.token_out_list.filter(
|
|
@@ -6265,17 +6193,30 @@ function SwapDexDialogContent({
|
|
|
6265
6193
|
] }),
|
|
6266
6194
|
params.desc && /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-section", children: [
|
|
6267
6195
|
/* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-title", children: "Instructions" }),
|
|
6268
|
-
/* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-content", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc }) })
|
|
6196
|
+
/* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-content", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc, noMaxHeight: true }) })
|
|
6269
6197
|
] })
|
|
6270
6198
|
] });
|
|
6271
6199
|
const renderDynamicModeContent = () => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
6272
|
-
|
|
6200
|
+
hasRulesText && /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-section", children: [
|
|
6273
6201
|
/* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-title", children: "Rules" }),
|
|
6274
|
-
/* @__PURE__ */
|
|
6202
|
+
/* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-section-content taskon-swap-dialog-section-content--rules", children: [
|
|
6203
|
+
/* @__PURE__ */ jsx("span", { children: "Every" }),
|
|
6204
|
+
/* @__PURE__ */ jsxs("span", { className: "taskon-swap-dialog-rules-highlight", children: [
|
|
6205
|
+
"$",
|
|
6206
|
+
params.each_trading_volume || "0",
|
|
6207
|
+
" USD"
|
|
6208
|
+
] }),
|
|
6209
|
+
/* @__PURE__ */ jsx("span", { children: "will give you" }),
|
|
6210
|
+
/* @__PURE__ */ jsx("span", { className: "taskon-swap-dialog-rules-highlight", children: params.each_receive_points }),
|
|
6211
|
+
/* @__PURE__ */ jsxs("span", { className: "taskon-swap-dialog-rules-point-name", children: [
|
|
6212
|
+
rulePointName,
|
|
6213
|
+
ruleMaxText && /* @__PURE__ */ jsx("span", { className: "taskon-swap-dialog-rules-max", children: ruleMaxText })
|
|
6214
|
+
] })
|
|
6215
|
+
] })
|
|
6275
6216
|
] }),
|
|
6276
6217
|
params.desc && /* @__PURE__ */ jsxs("div", { className: "taskon-swap-dialog-section", children: [
|
|
6277
6218
|
/* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-title", children: "Instructions" }),
|
|
6278
|
-
/* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-content", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc }) })
|
|
6219
|
+
/* @__PURE__ */ jsx("div", { className: "taskon-swap-dialog-section-content", children: /* @__PURE__ */ jsx(CardDescExpress, { label: params.desc, noMaxHeight: true }) })
|
|
6279
6220
|
] })
|
|
6280
6221
|
] });
|
|
6281
6222
|
if (!info) {
|
|
@@ -6286,16 +6227,21 @@ function SwapDexDialogContent({
|
|
|
6286
6227
|
{
|
|
6287
6228
|
recurrence: info.recurrence,
|
|
6288
6229
|
title: /* @__PURE__ */ jsx(TitleExpress, { express: titleExpress }),
|
|
6230
|
+
validTime,
|
|
6289
6231
|
claimLimit: info.claim_limit,
|
|
6290
6232
|
reward,
|
|
6291
6233
|
isWon: state.isWon,
|
|
6234
|
+
eligibilityTask: info,
|
|
6235
|
+
eligibilityConditions,
|
|
6236
|
+
onEligibilityCheck,
|
|
6237
|
+
onEligTaskClick,
|
|
6292
6238
|
coolDown,
|
|
6293
6239
|
onCoolDownComplete: handleCoolDownComplete,
|
|
6294
6240
|
isSubmitting,
|
|
6295
6241
|
onClaim: handleClaim,
|
|
6296
6242
|
chainType: requiredChainType,
|
|
6297
6243
|
onBindFailed: handleBindFailed,
|
|
6298
|
-
|
|
6244
|
+
renderStatusPrefix: renderRewardStatusPrefix,
|
|
6299
6245
|
verifyClaim: true,
|
|
6300
6246
|
isPeriodic: state.isPeriodic,
|
|
6301
6247
|
nextTime: userStatus == null ? void 0 : userStatus.next_time,
|
|
@@ -6305,8 +6251,8 @@ function SwapDexDialogContent({
|
|
|
6305
6251
|
showCloseIn,
|
|
6306
6252
|
onCloseInClose,
|
|
6307
6253
|
children: [
|
|
6308
|
-
/* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: isFixedRule ? renderFixedModeContent() : renderDynamicModeContent() }),
|
|
6309
6254
|
validationTimeFrame && /* @__PURE__ */ jsx(ValidationTimeTip, { timeFrame: validationTimeFrame }),
|
|
6255
|
+
/* @__PURE__ */ jsx("div", { className: "taskon-task-dialog-desc", children: isFixedRule ? renderFixedModeContent() : renderDynamicModeContent() }),
|
|
6310
6256
|
params.task_url && !state.isWon && /* @__PURE__ */ jsx(
|
|
6311
6257
|
"button",
|
|
6312
6258
|
{
|
|
@@ -6344,6 +6290,9 @@ function getDialogContentComponent$1(templateId) {
|
|
|
6344
6290
|
function TaskDialogContent({
|
|
6345
6291
|
task,
|
|
6346
6292
|
taskInfo,
|
|
6293
|
+
eligibilityConditions,
|
|
6294
|
+
onEligibilityCheck,
|
|
6295
|
+
onEligTaskClick,
|
|
6347
6296
|
onClaimSuccess,
|
|
6348
6297
|
showCloseIn,
|
|
6349
6298
|
onCloseInClose,
|
|
@@ -6362,6 +6311,9 @@ function TaskDialogContent({
|
|
|
6362
6311
|
{
|
|
6363
6312
|
task,
|
|
6364
6313
|
taskInfo: info,
|
|
6314
|
+
eligibilityConditions,
|
|
6315
|
+
onEligibilityCheck,
|
|
6316
|
+
onEligTaskClick,
|
|
6365
6317
|
onClaimSuccess,
|
|
6366
6318
|
showCloseIn,
|
|
6367
6319
|
onCloseInClose,
|
|
@@ -6413,7 +6365,7 @@ function DialogError({
|
|
|
6413
6365
|
)
|
|
6414
6366
|
] });
|
|
6415
6367
|
}
|
|
6416
|
-
function
|
|
6368
|
+
function TaskDialogComponent(props) {
|
|
6417
6369
|
var _a;
|
|
6418
6370
|
const {
|
|
6419
6371
|
task,
|
|
@@ -6423,6 +6375,8 @@ function TaskDialog(props) {
|
|
|
6423
6375
|
renderContent,
|
|
6424
6376
|
rightSlot,
|
|
6425
6377
|
coolDownMap,
|
|
6378
|
+
onTaskRefresh,
|
|
6379
|
+
onEligTaskClick,
|
|
6426
6380
|
onCoolDownUpdate,
|
|
6427
6381
|
onCoolDownComplete
|
|
6428
6382
|
} = props;
|
|
@@ -6453,10 +6407,29 @@ function TaskDialog(props) {
|
|
|
6453
6407
|
},
|
|
6454
6408
|
[onClose]
|
|
6455
6409
|
);
|
|
6456
|
-
const handleClaimSuccess = useCallback(() => {
|
|
6410
|
+
const handleClaimSuccess = useCallback(async () => {
|
|
6411
|
+
const targetTaskId = taskInfo == null ? void 0 : taskInfo.id;
|
|
6457
6412
|
setJustVerified(true);
|
|
6458
|
-
|
|
6459
|
-
|
|
6413
|
+
if (targetTaskId) {
|
|
6414
|
+
await (onClaimSuccess == null ? void 0 : onClaimSuccess(targetTaskId));
|
|
6415
|
+
return;
|
|
6416
|
+
}
|
|
6417
|
+
if (taskId) {
|
|
6418
|
+
await (onClaimSuccess == null ? void 0 : onClaimSuccess(taskId));
|
|
6419
|
+
}
|
|
6420
|
+
}, [onClaimSuccess, taskInfo == null ? void 0 : taskInfo.id, taskId]);
|
|
6421
|
+
const handleEligibilityCheck = useCallback(async () => {
|
|
6422
|
+
const targetTaskId = (taskInfo == null ? void 0 : taskInfo.id) ?? taskId;
|
|
6423
|
+
if (!targetTaskId) {
|
|
6424
|
+
return;
|
|
6425
|
+
}
|
|
6426
|
+
if (onTaskRefresh) {
|
|
6427
|
+
await onTaskRefresh(targetTaskId);
|
|
6428
|
+
}
|
|
6429
|
+
if (!task) {
|
|
6430
|
+
await refetch();
|
|
6431
|
+
}
|
|
6432
|
+
}, [taskInfo == null ? void 0 : taskInfo.id, taskId, onTaskRefresh, task, refetch]);
|
|
6460
6433
|
const DialogContentComponent = useMemo(() => {
|
|
6461
6434
|
var _a2;
|
|
6462
6435
|
const templateId = (_a2 = taskInfo == null ? void 0 : taskInfo.template) == null ? void 0 : _a2.template_id;
|
|
@@ -6475,6 +6448,7 @@ function TaskDialog(props) {
|
|
|
6475
6448
|
title: dialogTitle,
|
|
6476
6449
|
description: "查看任务详情和奖励信息",
|
|
6477
6450
|
showCloseButton: true,
|
|
6451
|
+
bodyPadding: false,
|
|
6478
6452
|
contentClassName: "taskon-task-dialog",
|
|
6479
6453
|
maxWidth: rightSlot ? 800 : 480,
|
|
6480
6454
|
children: [
|
|
@@ -6489,6 +6463,9 @@ function TaskDialog(props) {
|
|
|
6489
6463
|
onClaimSuccess: handleClaimSuccess,
|
|
6490
6464
|
showCloseIn: justVerified,
|
|
6491
6465
|
onCloseInClose: onClose,
|
|
6466
|
+
eligibilityConditions: taskData.meet_conditions,
|
|
6467
|
+
onEligibilityCheck: handleEligibilityCheck,
|
|
6468
|
+
onEligTaskClick,
|
|
6492
6469
|
coolDown: (taskInfo == null ? void 0 : taskInfo.id) ? coolDownMap == null ? void 0 : coolDownMap[taskInfo.id] : void 0,
|
|
6493
6470
|
onCoolDownUpdate: (taskInfo == null ? void 0 : taskInfo.id) && onCoolDownUpdate ? (coolDown) => onCoolDownUpdate(taskInfo.id, coolDown) : void 0,
|
|
6494
6471
|
onCoolDownComplete: (taskInfo == null ? void 0 : taskInfo.id) && onCoolDownComplete ? () => onCoolDownComplete(taskInfo.id) : void 0
|
|
@@ -6500,6 +6477,7 @@ function TaskDialog(props) {
|
|
|
6500
6477
|
}
|
|
6501
6478
|
);
|
|
6502
6479
|
}
|
|
6480
|
+
const TaskDialog = React__default.memo(TaskDialogComponent);
|
|
6503
6481
|
function mergeCommunityTaskConfig(props, cloud) {
|
|
6504
6482
|
var _a, _b, _c, _d, _e;
|
|
6505
6483
|
const cloudSectorIds = ((_a = cloud == null ? void 0 : cloud.sectors) == null ? void 0 : _a.length) ? cloud.sectors.map((s) => s.sector_id) : void 0;
|
|
@@ -6508,24 +6486,56 @@ function mergeCommunityTaskConfig(props, cloud) {
|
|
|
6508
6486
|
showSectorTab: props.showSectorTab ?? ((_b = cloud == null ? void 0 : cloud.displayOptions) == null ? void 0 : _b.showSectorTab) ?? true,
|
|
6509
6487
|
showSectorName: props.showSectorName ?? ((_c = cloud == null ? void 0 : cloud.displayOptions) == null ? void 0 : _c.showSectorName) ?? true,
|
|
6510
6488
|
showSectorDescription: props.showSectorDescription ?? ((_d = cloud == null ? void 0 : cloud.displayOptions) == null ? void 0 : _d.showSectorDescription) ?? true,
|
|
6511
|
-
showSectorReward: props.showSectorReward ?? ((_e = cloud == null ? void 0 : cloud.displayOptions) == null ? void 0 : _e.showSectorReward) ?? true
|
|
6489
|
+
showSectorReward: props.showSectorReward ?? ((_e = cloud == null ? void 0 : cloud.displayOptions) == null ? void 0 : _e.showSectorReward) ?? true,
|
|
6490
|
+
rewardDisplayMode: props.rewardDisplayMode ?? (cloud == null ? void 0 : cloud.rewardDisplayMode) ?? "popup",
|
|
6491
|
+
rewardRedirectUrl: props.rewardRedirectUrl ?? (cloud == null ? void 0 : cloud.rewardRedirectUrl) ?? ""
|
|
6512
6492
|
};
|
|
6513
6493
|
}
|
|
6494
|
+
function findTaskByIdFromCards(data, taskId) {
|
|
6495
|
+
for (const sectorItem of data) {
|
|
6496
|
+
const found = sectorItem.cards.find((card) => card.card_info.id === taskId);
|
|
6497
|
+
if (found) {
|
|
6498
|
+
return found;
|
|
6499
|
+
}
|
|
6500
|
+
}
|
|
6501
|
+
return null;
|
|
6502
|
+
}
|
|
6503
|
+
function parsePreTaskIdFromEligibilityParams(params) {
|
|
6504
|
+
try {
|
|
6505
|
+
const parsed = JSON.parse(params);
|
|
6506
|
+
const taskId = Number(parsed.task_id);
|
|
6507
|
+
if (Number.isInteger(taskId) && taskId > 0) {
|
|
6508
|
+
return taskId;
|
|
6509
|
+
}
|
|
6510
|
+
} catch {
|
|
6511
|
+
}
|
|
6512
|
+
return null;
|
|
6513
|
+
}
|
|
6514
6514
|
function CommunityTaskList(props) {
|
|
6515
|
-
const { widgetId } = props;
|
|
6515
|
+
const { widgetId, themeMode } = props;
|
|
6516
6516
|
const { functionConfig, cloudTheme, isConfigLoading, configError } = useResolvedWidgetConfig(widgetId);
|
|
6517
6517
|
const mergedConfig = useMemo(() => {
|
|
6518
6518
|
return mergeCommunityTaskConfig(
|
|
6519
6519
|
props,
|
|
6520
6520
|
functionConfig ?? null
|
|
6521
6521
|
);
|
|
6522
|
-
}, [
|
|
6522
|
+
}, [
|
|
6523
|
+
props.sectorIds,
|
|
6524
|
+
props.showSectorTab,
|
|
6525
|
+
props.showSectorName,
|
|
6526
|
+
props.showSectorDescription,
|
|
6527
|
+
props.showSectorReward,
|
|
6528
|
+
props.rewardDisplayMode,
|
|
6529
|
+
props.rewardRedirectUrl,
|
|
6530
|
+
functionConfig
|
|
6531
|
+
]);
|
|
6523
6532
|
return /* @__PURE__ */ jsx(
|
|
6524
6533
|
WidgetShell,
|
|
6525
6534
|
{
|
|
6526
6535
|
widgetId,
|
|
6527
6536
|
isConfigLoading,
|
|
6528
6537
|
cloudTheme,
|
|
6538
|
+
themeMode,
|
|
6529
6539
|
className: "taskon-community-list",
|
|
6530
6540
|
errorMessage: configError ?? void 0,
|
|
6531
6541
|
children: /* @__PURE__ */ jsx(
|
|
@@ -6536,7 +6546,9 @@ function CommunityTaskList(props) {
|
|
|
6536
6546
|
showSectorTab: mergedConfig.showSectorTab,
|
|
6537
6547
|
showSectorName: mergedConfig.showSectorName,
|
|
6538
6548
|
showSectorDescription: mergedConfig.showSectorDescription,
|
|
6539
|
-
showSectorReward: mergedConfig.showSectorReward
|
|
6549
|
+
showSectorReward: mergedConfig.showSectorReward,
|
|
6550
|
+
rewardDisplayMode: mergedConfig.rewardDisplayMode,
|
|
6551
|
+
rewardRedirectUrl: mergedConfig.rewardRedirectUrl
|
|
6540
6552
|
}
|
|
6541
6553
|
)
|
|
6542
6554
|
}
|
|
@@ -6549,11 +6561,16 @@ function CommunityTaskListInner(props) {
|
|
|
6549
6561
|
initialTaskId,
|
|
6550
6562
|
onTaskOpen,
|
|
6551
6563
|
onTaskClose,
|
|
6564
|
+
initialTaskChainId,
|
|
6565
|
+
onTaskChainOpen,
|
|
6566
|
+
onTaskChainClose,
|
|
6552
6567
|
sectorIds,
|
|
6553
6568
|
showSectorTab = true,
|
|
6554
6569
|
showSectorName = true,
|
|
6555
6570
|
showSectorDescription = true,
|
|
6556
|
-
showSectorReward = true
|
|
6571
|
+
showSectorReward = true,
|
|
6572
|
+
rewardDisplayMode = "popup",
|
|
6573
|
+
rewardRedirectUrl = ""
|
|
6557
6574
|
} = props;
|
|
6558
6575
|
const { client, userToken } = useTaskOnContext();
|
|
6559
6576
|
const [taskCards, setTaskCards] = useState(
|
|
@@ -6566,7 +6583,9 @@ function CommunityTaskListInner(props) {
|
|
|
6566
6583
|
const [openTaskId, setOpenTaskId] = useState(
|
|
6567
6584
|
initialTaskId ?? null
|
|
6568
6585
|
);
|
|
6569
|
-
const [openTaskChainId, setOpenTaskChainId] = useState(
|
|
6586
|
+
const [openTaskChainId, setOpenTaskChainId] = useState(
|
|
6587
|
+
initialTaskChainId ?? null
|
|
6588
|
+
);
|
|
6570
6589
|
const [coolDownMap, setCoolDownMap] = useState({});
|
|
6571
6590
|
const updateCoolDown = useCallback((taskId, coolDown) => {
|
|
6572
6591
|
setCoolDownMap((prev) => ({ ...prev, [taskId]: coolDown }));
|
|
@@ -6580,15 +6599,22 @@ function CommunityTaskListInner(props) {
|
|
|
6580
6599
|
}, []);
|
|
6581
6600
|
const handleTaskChainOpen = useCallback((taskChainId) => {
|
|
6582
6601
|
setOpenTaskChainId(taskChainId);
|
|
6583
|
-
|
|
6602
|
+
onTaskChainOpen == null ? void 0 : onTaskChainOpen(taskChainId);
|
|
6603
|
+
}, [onTaskChainOpen]);
|
|
6584
6604
|
const handleTaskChainClose = useCallback(() => {
|
|
6585
6605
|
setOpenTaskChainId(null);
|
|
6586
|
-
|
|
6606
|
+
onTaskChainClose == null ? void 0 : onTaskChainClose();
|
|
6607
|
+
}, [onTaskChainClose]);
|
|
6587
6608
|
useEffect(() => {
|
|
6588
6609
|
if (initialTaskId && !openTask && openTaskId !== initialTaskId) {
|
|
6589
6610
|
setOpenTaskId(initialTaskId);
|
|
6590
6611
|
}
|
|
6591
6612
|
}, [initialTaskId]);
|
|
6613
|
+
useEffect(() => {
|
|
6614
|
+
if (initialTaskChainId && openTaskChainId !== initialTaskChainId) {
|
|
6615
|
+
setOpenTaskChainId(initialTaskChainId);
|
|
6616
|
+
}
|
|
6617
|
+
}, [initialTaskChainId]);
|
|
6592
6618
|
useEffect(() => {
|
|
6593
6619
|
const loadTasks = async () => {
|
|
6594
6620
|
if (!client) {
|
|
@@ -6601,7 +6627,8 @@ function CommunityTaskListInner(props) {
|
|
|
6601
6627
|
setError(null);
|
|
6602
6628
|
const api = createCommunityTaskApi(client);
|
|
6603
6629
|
const data = await api.getCommunityTaskCards({
|
|
6604
|
-
is_preview: isPreview
|
|
6630
|
+
is_preview: isPreview,
|
|
6631
|
+
...sectorIds && sectorIds.length > 0 ? { sector_id: sectorIds } : {}
|
|
6605
6632
|
});
|
|
6606
6633
|
setTaskCards(data);
|
|
6607
6634
|
} catch (err) {
|
|
@@ -6612,7 +6639,7 @@ function CommunityTaskListInner(props) {
|
|
|
6612
6639
|
}
|
|
6613
6640
|
};
|
|
6614
6641
|
loadTasks();
|
|
6615
|
-
}, [client, isPreview, userToken]);
|
|
6642
|
+
}, [client, isPreview, userToken, sectorIds]);
|
|
6616
6643
|
const selectorOptions = React__default.useMemo(
|
|
6617
6644
|
() => {
|
|
6618
6645
|
const sectors = taskCards.map((item) => item.sector);
|
|
@@ -6659,6 +6686,35 @@ function CommunityTaskListInner(props) {
|
|
|
6659
6686
|
},
|
|
6660
6687
|
[taskCards, selectedSectorId, sectorIds]
|
|
6661
6688
|
);
|
|
6689
|
+
const taskDependencyIndex = useMemo(() => {
|
|
6690
|
+
const index = /* @__PURE__ */ new Map();
|
|
6691
|
+
for (const sectorItem of taskCards) {
|
|
6692
|
+
for (const card of sectorItem.cards) {
|
|
6693
|
+
if (card.card_type !== "GTCTask") {
|
|
6694
|
+
continue;
|
|
6695
|
+
}
|
|
6696
|
+
const taskInfo = card.card_info;
|
|
6697
|
+
const currentTaskId = taskInfo.id;
|
|
6698
|
+
const eligibilityList = taskInfo.eligiblity;
|
|
6699
|
+
if (!(eligibilityList == null ? void 0 : eligibilityList.length)) {
|
|
6700
|
+
continue;
|
|
6701
|
+
}
|
|
6702
|
+
for (const eligibility of eligibilityList) {
|
|
6703
|
+
if (eligibility.type !== EligibilityType.CommunityPreTask) {
|
|
6704
|
+
continue;
|
|
6705
|
+
}
|
|
6706
|
+
const preTaskId = parsePreTaskIdFromEligibilityParams(eligibility.params);
|
|
6707
|
+
if (!preTaskId || preTaskId === currentTaskId) {
|
|
6708
|
+
continue;
|
|
6709
|
+
}
|
|
6710
|
+
const dependentSet = index.get(preTaskId) ?? /* @__PURE__ */ new Set();
|
|
6711
|
+
dependentSet.add(currentTaskId);
|
|
6712
|
+
index.set(preTaskId, dependentSet);
|
|
6713
|
+
}
|
|
6714
|
+
}
|
|
6715
|
+
}
|
|
6716
|
+
return index;
|
|
6717
|
+
}, [taskCards]);
|
|
6662
6718
|
const handleSelectorChange = (value) => {
|
|
6663
6719
|
setSelectedSectorId(value ?? null);
|
|
6664
6720
|
};
|
|
@@ -6677,34 +6733,100 @@ function CommunityTaskListInner(props) {
|
|
|
6677
6733
|
setOpenTaskId(null);
|
|
6678
6734
|
onTaskClose == null ? void 0 : onTaskClose();
|
|
6679
6735
|
}, [onTaskClose]);
|
|
6680
|
-
const
|
|
6681
|
-
for (const sectorItem of data) {
|
|
6682
|
-
const found = sectorItem.cards.find(
|
|
6683
|
-
(card) => card.card_info.id === taskId
|
|
6684
|
-
);
|
|
6685
|
-
if (found) {
|
|
6686
|
-
return found;
|
|
6687
|
-
}
|
|
6688
|
-
}
|
|
6689
|
-
return null;
|
|
6690
|
-
};
|
|
6691
|
-
const handleClaimSuccess = useCallback(async () => {
|
|
6736
|
+
const refreshTaskList = useCallback(async () => {
|
|
6692
6737
|
if (!client) return;
|
|
6693
6738
|
try {
|
|
6694
6739
|
const api = createCommunityTaskApi(client);
|
|
6695
6740
|
const data = await api.getCommunityTaskCards({
|
|
6696
|
-
is_preview: isPreview
|
|
6741
|
+
is_preview: isPreview,
|
|
6742
|
+
...sectorIds && sectorIds.length > 0 ? { sector_id: sectorIds } : {}
|
|
6697
6743
|
});
|
|
6698
6744
|
setTaskCards(data);
|
|
6699
6745
|
setOpenTask((currentOpenTask) => {
|
|
6700
|
-
if (!currentOpenTask)
|
|
6701
|
-
|
|
6746
|
+
if (!currentOpenTask) {
|
|
6747
|
+
return null;
|
|
6748
|
+
}
|
|
6749
|
+
const updatedTask = findTaskByIdFromCards(data, currentOpenTask.card_info.id);
|
|
6702
6750
|
return updatedTask ?? currentOpenTask;
|
|
6703
6751
|
});
|
|
6704
6752
|
} catch (err) {
|
|
6705
6753
|
console.error("Failed to refresh tasks:", err);
|
|
6706
6754
|
}
|
|
6755
|
+
}, [client, isPreview, sectorIds]);
|
|
6756
|
+
const refreshSingleCard = useCallback(async (cardId, cardType) => {
|
|
6757
|
+
if (!client) return;
|
|
6758
|
+
try {
|
|
6759
|
+
const api = createCommunityTaskApi(client);
|
|
6760
|
+
const latestCard = await api.getCommunityTaskCardInfo({
|
|
6761
|
+
card_id: cardId,
|
|
6762
|
+
card_type: cardType,
|
|
6763
|
+
is_preview: isPreview
|
|
6764
|
+
});
|
|
6765
|
+
setTaskCards((currentCards) => {
|
|
6766
|
+
let targetSectorIndex = -1;
|
|
6767
|
+
let targetCardIndex = -1;
|
|
6768
|
+
for (let sectorIndex = 0; sectorIndex < currentCards.length; sectorIndex += 1) {
|
|
6769
|
+
const sectorItem = currentCards[sectorIndex];
|
|
6770
|
+
if (!sectorItem) {
|
|
6771
|
+
continue;
|
|
6772
|
+
}
|
|
6773
|
+
const cardIndex = sectorItem.cards.findIndex(
|
|
6774
|
+
(card) => card.card_type === cardType && card.card_info.id === cardId
|
|
6775
|
+
);
|
|
6776
|
+
if (cardIndex !== -1) {
|
|
6777
|
+
targetSectorIndex = sectorIndex;
|
|
6778
|
+
targetCardIndex = cardIndex;
|
|
6779
|
+
break;
|
|
6780
|
+
}
|
|
6781
|
+
}
|
|
6782
|
+
if (targetSectorIndex === -1 || targetCardIndex === -1) {
|
|
6783
|
+
return currentCards;
|
|
6784
|
+
}
|
|
6785
|
+
const nextCards = [...currentCards];
|
|
6786
|
+
const targetSector = currentCards[targetSectorIndex];
|
|
6787
|
+
if (!targetSector) {
|
|
6788
|
+
return currentCards;
|
|
6789
|
+
}
|
|
6790
|
+
const nextSectorCards = [...targetSector.cards];
|
|
6791
|
+
nextSectorCards[targetCardIndex] = latestCard;
|
|
6792
|
+
nextCards[targetSectorIndex] = {
|
|
6793
|
+
...targetSector,
|
|
6794
|
+
cards: nextSectorCards
|
|
6795
|
+
};
|
|
6796
|
+
return nextCards;
|
|
6797
|
+
});
|
|
6798
|
+
if (cardType === TaskCardType.GTCTask) {
|
|
6799
|
+
setOpenTask((currentOpenTask) => {
|
|
6800
|
+
if (!currentOpenTask || currentOpenTask.card_info.id !== cardId) {
|
|
6801
|
+
return currentOpenTask;
|
|
6802
|
+
}
|
|
6803
|
+
return latestCard;
|
|
6804
|
+
});
|
|
6805
|
+
}
|
|
6806
|
+
} catch (err) {
|
|
6807
|
+
console.error(`Failed to refresh card ${cardType}:${cardId}:`, err);
|
|
6808
|
+
}
|
|
6707
6809
|
}, [client, isPreview]);
|
|
6810
|
+
const refreshSingleTask = useCallback(async (taskId) => {
|
|
6811
|
+
await refreshSingleCard(taskId, TaskCardType.GTCTask);
|
|
6812
|
+
}, [refreshSingleCard]);
|
|
6813
|
+
const refreshSingleTaskChain = useCallback(async (taskChainId) => {
|
|
6814
|
+
await refreshSingleCard(taskChainId, TaskCardType.TaskChain);
|
|
6815
|
+
}, [refreshSingleCard]);
|
|
6816
|
+
const handleClaimSuccess = useCallback(async (taskId) => {
|
|
6817
|
+
if (!client) {
|
|
6818
|
+
return;
|
|
6819
|
+
}
|
|
6820
|
+
if (typeof taskId !== "number") {
|
|
6821
|
+
await refreshTaskList();
|
|
6822
|
+
return;
|
|
6823
|
+
}
|
|
6824
|
+
await refreshSingleTask(taskId);
|
|
6825
|
+
const dependentTasks = taskDependencyIndex.get(taskId);
|
|
6826
|
+
if (dependentTasks && dependentTasks.size > 0) {
|
|
6827
|
+
await refreshTaskList();
|
|
6828
|
+
}
|
|
6829
|
+
}, [client, refreshSingleTask, refreshTaskList, taskDependencyIndex]);
|
|
6708
6830
|
const { toast } = useToast();
|
|
6709
6831
|
const handleClaimTask = useCallback(async (taskId, token, platform) => {
|
|
6710
6832
|
if (!client) return { successful: false };
|
|
@@ -6715,7 +6837,7 @@ function CommunityTaskListInner(props) {
|
|
|
6715
6837
|
task_value: token || ""
|
|
6716
6838
|
});
|
|
6717
6839
|
if (result.successful) {
|
|
6718
|
-
handleClaimSuccess();
|
|
6840
|
+
await handleClaimSuccess(taskId);
|
|
6719
6841
|
return { successful: true };
|
|
6720
6842
|
} else if (result.cool_down) {
|
|
6721
6843
|
updateCoolDown(taskId, result.cool_down);
|
|
@@ -6735,7 +6857,7 @@ function CommunityTaskListInner(props) {
|
|
|
6735
6857
|
} catch (err) {
|
|
6736
6858
|
console.error("Failed to submit task:", err);
|
|
6737
6859
|
const errorCode = err instanceof ApiError ? err.code : void 0;
|
|
6738
|
-
const errorMessage = err
|
|
6860
|
+
const errorMessage = resolveCommunityTaskSubmitErrorMessage(err, errorCode);
|
|
6739
6861
|
const errorData = err instanceof ApiError ? err.data : void 0;
|
|
6740
6862
|
if (errorCode === ErrorCode.TASK_PARTIAL_PASS) {
|
|
6741
6863
|
return { successful: false, errorCode };
|
|
@@ -6748,7 +6870,7 @@ function CommunityTaskListInner(props) {
|
|
|
6748
6870
|
toast.error(errorMessage);
|
|
6749
6871
|
return { successful: false, errorCode };
|
|
6750
6872
|
}
|
|
6751
|
-
}, [client, handleClaimSuccess, toast]);
|
|
6873
|
+
}, [client, handleClaimSuccess, toast, updateCoolDown]);
|
|
6752
6874
|
const isDialogOpen = openTask !== null || openTaskId !== null;
|
|
6753
6875
|
const currentSelectorValue = selectedSectorId ?? void 0;
|
|
6754
6876
|
if (error) {
|
|
@@ -6758,7 +6880,7 @@ function CommunityTaskListInner(props) {
|
|
|
6758
6880
|
] }) });
|
|
6759
6881
|
}
|
|
6760
6882
|
return /* @__PURE__ */ jsxs("div", { className: "taskon-community-list", children: [
|
|
6761
|
-
showSectorTab && /* @__PURE__ */ jsx(
|
|
6883
|
+
showSectorTab && !isLoading && /* @__PURE__ */ jsx(
|
|
6762
6884
|
CardSelector,
|
|
6763
6885
|
{
|
|
6764
6886
|
options: selectorOptions,
|
|
@@ -6768,7 +6890,15 @@ function CommunityTaskListInner(props) {
|
|
|
6768
6890
|
className: "taskon-community-list-selector"
|
|
6769
6891
|
}
|
|
6770
6892
|
),
|
|
6771
|
-
/* @__PURE__ */ jsx("div", { className: "taskon-community-list-content", children: isLoading ? /* @__PURE__ */ jsx(
|
|
6893
|
+
/* @__PURE__ */ jsx("div", { className: "taskon-community-list-content", children: isLoading ? /* @__PURE__ */ jsx(
|
|
6894
|
+
CommunityTaskListSkeleton,
|
|
6895
|
+
{
|
|
6896
|
+
showSectorTab,
|
|
6897
|
+
showSectorName,
|
|
6898
|
+
showSectorDescription,
|
|
6899
|
+
showSectorReward
|
|
6900
|
+
}
|
|
6901
|
+
) : filteredTaskCards.length === 0 ? /* @__PURE__ */ jsx("div", { className: "taskon-community-list-empty", children: "No tasks available" }) : filteredTaskCards.map((sectorItem) => /* @__PURE__ */ jsx(
|
|
6772
6902
|
SectorItem,
|
|
6773
6903
|
{
|
|
6774
6904
|
sector: sectorItem,
|
|
@@ -6782,7 +6912,8 @@ function CommunityTaskListInner(props) {
|
|
|
6782
6912
|
onTaskChainOpen: handleTaskChainOpen,
|
|
6783
6913
|
onEligTaskClick: handleEligTaskClick,
|
|
6784
6914
|
coolDownMap,
|
|
6785
|
-
onCoolDownComplete: clearCoolDown
|
|
6915
|
+
onCoolDownComplete: clearCoolDown,
|
|
6916
|
+
onDoneCountdownComplete: refreshSingleTask
|
|
6786
6917
|
},
|
|
6787
6918
|
sectorItem.sector.id
|
|
6788
6919
|
)) }),
|
|
@@ -6793,6 +6924,8 @@ function CommunityTaskListInner(props) {
|
|
|
6793
6924
|
taskId: openTaskId,
|
|
6794
6925
|
onClose: handleDialogClose,
|
|
6795
6926
|
onClaimSuccess: handleClaimSuccess,
|
|
6927
|
+
onTaskRefresh: refreshSingleTask,
|
|
6928
|
+
onEligTaskClick: handleEligTaskClick,
|
|
6796
6929
|
coolDownMap,
|
|
6797
6930
|
onCoolDownUpdate: updateCoolDown,
|
|
6798
6931
|
onCoolDownComplete: clearCoolDown
|
|
@@ -6804,7 +6937,9 @@ function CommunityTaskListInner(props) {
|
|
|
6804
6937
|
campaignId: openTaskChainId,
|
|
6805
6938
|
open: true,
|
|
6806
6939
|
onClose: handleTaskChainClose,
|
|
6807
|
-
onUpdate:
|
|
6940
|
+
onUpdate: () => refreshSingleTaskChain(openTaskChainId),
|
|
6941
|
+
rewardDisplayMode,
|
|
6942
|
+
rewardRedirectUrl
|
|
6808
6943
|
}
|
|
6809
6944
|
)
|
|
6810
6945
|
] });
|