Conversation
📝 WalkthroughWalkthroughAdds a safe stringification helper for claim attribute values, integrates a new voting credit type label, includes voting credit NFTs in optimistic/preview wave payloads, and updates related UI and tests. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
components/drop-forge/claimTraitsData.ts (1)
16-23: Optional: consider guarding against accidental whitespace-only trait values.In
getClaimSeason, you alreadytrim()theattr.valuestringified result (Line 21). Ifattr.valuecould sometimes be whitespace-only, returning""is fine; just ensure downstream callers handle empty seasons consistently. (No change requested.)🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@components/drop-forge/claimTraitsData.ts` around lines 16 - 23, The getClaimSeason function should guard against whitespace-only trait values by trimming attr.value and treating an all-whitespace result as empty; update getClaimSeason (the attr lookup using trait_type "type - season" and the return logic) to call String(attr.value).trim(), check that the trimmed string has length > 0, and return the trimmed value only when non-empty, otherwise return "" so downstream callers get a consistent empty-season value.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@components/waves/create-wave/voting/CreateWaveVoting.tsx`:
- Line 19: WAVE_VOTING_LABELS is missing the ApiWaveCreditType.CardSetTdh entry
which causes enum drift with VOTING_TYPES_ORDER; add a new key for
ApiWaveCreditType.CardSetTdh to the WAVE_VOTING_LABELS map (in the same shape as
other entries) with the appropriate display label and any needed i18n key so the
enum maps consistently to a label at runtime; update any unit/types/tests that
assert keys if present and ensure imports still reference ApiWaveCreditType and
WAVE_VOTING_LABELS.
---
Nitpick comments:
In `@components/drop-forge/claimTraitsData.ts`:
- Around line 16-23: The getClaimSeason function should guard against
whitespace-only trait values by trimming attr.value and treating an
all-whitespace result as empty; update getClaimSeason (the attr lookup using
trait_type "type - season" and the return logic) to call
String(attr.value).trim(), check that the trimmed string has length > 0, and
return the trimmed value only when non-empty, otherwise return "" so downstream
callers get a consistent empty-season value.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 1ded1f16-688c-4957-bb5e-e187c61d8caa
⛔ Files ignored due to path filters (295)
generated/models/AcceptActionRequest.tsis excluded by!**/generated/**generated/models/AddActionToProxyRequest.tsis excluded by!**/generated/**generated/models/AirdropAddressResponse.tsis excluded by!**/generated/**generated/models/AirdropAddressResponseTdhWallet.tsis excluded by!**/generated/**generated/models/AllowlistNormalizedEntry.tsis excluded by!**/generated/**generated/models/ApiAddReactionToDropRequest.tsis excluded by!**/generated/**generated/models/ApiAggregatedActivity.tsis excluded by!**/generated/**generated/models/ApiAggregatedActivityMemes.tsis excluded by!**/generated/**generated/models/ApiAggregatedActivityPage.tsis excluded by!**/generated/**generated/models/ApiArtistNameItem.tsis excluded by!**/generated/**generated/models/ApiAvailableRatingCredit.tsis excluded by!**/generated/**generated/models/ApiBlockItem.tsis excluded by!**/generated/**generated/models/ApiBlocksPage.tsis excluded by!**/generated/**generated/models/ApiBulkRateRequest.tsis excluded by!**/generated/**generated/models/ApiBulkRateResponse.tsis excluded by!**/generated/**generated/models/ApiBulkRateSkippedIdentity.tsis excluded by!**/generated/**generated/models/ApiBulkRepRequest.tsis excluded by!**/generated/**generated/models/ApiBulkRepTarget.tsis excluded by!**/generated/**generated/models/ApiChangeGroupVisibility.tsis excluded by!**/generated/**generated/models/ApiChangeProfileCicRating.tsis excluded by!**/generated/**generated/models/ApiChangeProfileRepRating.tsis excluded by!**/generated/**generated/models/ApiCicContributor.tsis excluded by!**/generated/**generated/models/ApiCicContributorsPage.tsis excluded by!**/generated/**generated/models/ApiCicOverview.tsis excluded by!**/generated/**generated/models/ApiCollectedStats.tsis excluded by!**/generated/**generated/models/ApiCollectedStatsSeason.tsis excluded by!**/generated/**generated/models/ApiCommunityMemberMinimal.tsis excluded by!**/generated/**generated/models/ApiCommunityMemberOverview.tsis excluded by!**/generated/**generated/models/ApiCommunityMembersPage.tsis excluded by!**/generated/**generated/models/ApiCommunityMetric.tsis excluded by!**/generated/**generated/models/ApiCommunityMetricSample.tsis excluded by!**/generated/**generated/models/ApiCommunityMetrics.tsis excluded by!**/generated/**generated/models/ApiCommunityMetricsSeries.tsis excluded by!**/generated/**generated/models/ApiCompleteMultipartUploadRequest.tsis excluded by!**/generated/**generated/models/ApiCompleteMultipartUploadRequestPart.tsis excluded by!**/generated/**generated/models/ApiCompleteMultipartUploadResponse.tsis excluded by!**/generated/**generated/models/ApiConsolidatedTdh.tsis excluded by!**/generated/**generated/models/ApiCreateDropPart.tsis excluded by!**/generated/**generated/models/ApiCreateDropRequest.tsis excluded by!**/generated/**generated/models/ApiCreateGroup.tsis excluded by!**/generated/**generated/models/ApiCreateGroupDescription.tsis excluded by!**/generated/**generated/models/ApiCreateMediaUploadUrlRequest.tsis excluded by!**/generated/**generated/models/ApiCreateMediaUrlResponse.tsis excluded by!**/generated/**generated/models/ApiCreateMentionedWave.tsis excluded by!**/generated/**generated/models/ApiCreateNewProfileProxy.tsis excluded by!**/generated/**generated/models/ApiCreateNewProfileProxyAllocateCicAction.tsis excluded by!**/generated/**generated/models/ApiCreateNewProfileProxyAllocateRepAction.tsis excluded by!**/generated/**generated/models/ApiCreateNewProfileProxyCreateWaveAction.tsis excluded by!**/generated/**generated/models/ApiCreateNewProfileProxyCreateWaveParticipationDropAction.tsis excluded by!**/generated/**generated/models/ApiCreateNewProfileProxyRateWaveDropAction.tsis excluded by!**/generated/**generated/models/ApiCreateNewProfileProxyReadWaveAction.tsis excluded by!**/generated/**generated/models/ApiCreateNewWave.tsis excluded by!**/generated/**generated/models/ApiCreateNewWaveChatConfig.tsis excluded by!**/generated/**generated/models/ApiCreateNewWaveParticipationConfig.tsis excluded by!**/generated/**generated/models/ApiCreateNewWaveScope.tsis excluded by!**/generated/**generated/models/ApiCreateNewWaveVisibilityConfig.tsis excluded by!**/generated/**generated/models/ApiCreateNewWaveVotingConfig.tsis excluded by!**/generated/**generated/models/ApiCreateNewWaveVotingConfigOneOf.tsis excluded by!**/generated/**generated/models/ApiCreateNewWaveVotingConfigOneOf1.tsis excluded by!**/generated/**generated/models/ApiCreateNewWaveVotingConfigOneOf2.tsis excluded by!**/generated/**generated/models/ApiCreateNewWaveVotingConfigOneOf3.tsis excluded by!**/generated/**generated/models/ApiCreateNewWaveVotingConfigOneOf4.tsis excluded by!**/generated/**generated/models/ApiCreateOrUpdateProfileRequest.tsis excluded by!**/generated/**generated/models/ApiCreateWaveConfig.tsis excluded by!**/generated/**generated/models/ApiCreateWaveDropRequest.tsis excluded by!**/generated/**generated/models/ApiCreateWaveOutcome.tsis excluded by!**/generated/**generated/models/ApiCreateWaveOutcomeDistributionItem.tsis excluded by!**/generated/**generated/models/ApiCuratedProfileWaveDropsPage.tsis excluded by!**/generated/**generated/models/ApiCurationDrop.tsis excluded by!**/generated/**generated/models/ApiCurationDropsPage.tsis excluded by!**/generated/**generated/models/ApiDistributionAirdropsCsvUploadRequest.tsis excluded by!**/generated/**generated/models/ApiDistributionAirdropsUploadResponse.tsis excluded by!**/generated/**generated/models/ApiDrop.tsis excluded by!**/generated/**generated/models/ApiDropAndDropVote.tsis excluded by!**/generated/**generated/models/ApiDropBoost.tsis excluded by!**/generated/**generated/models/ApiDropBoostsPage.tsis excluded by!**/generated/**generated/models/ApiDropContextProfileContext.tsis excluded by!**/generated/**generated/models/ApiDropCuration.tsis excluded by!**/generated/**generated/models/ApiDropCurationRequest.tsis excluded by!**/generated/**generated/models/ApiDropId.tsis excluded by!**/generated/**generated/models/ApiDropMedia.tsis excluded by!**/generated/**generated/models/ApiDropMentionedUser.tsis excluded by!**/generated/**generated/models/ApiDropMetadata.tsis excluded by!**/generated/**generated/models/ApiDropMetadataResponse.tsis excluded by!**/generated/**generated/models/ApiDropNftLink.tsis excluded by!**/generated/**generated/models/ApiDropPart.tsis excluded by!**/generated/**generated/models/ApiDropRater.tsis excluded by!**/generated/**generated/models/ApiDropRatingRequest.tsis excluded by!**/generated/**generated/models/ApiDropReaction.tsis excluded by!**/generated/**generated/models/ApiDropReferencedNFT.tsis excluded by!**/generated/**generated/models/ApiDropResolvedIdentityProfile.tsis excluded by!**/generated/**generated/models/ApiDropSubscriptionActions.tsis excluded by!**/generated/**generated/models/ApiDropTraceItem.tsis excluded by!**/generated/**generated/models/ApiDropVote.tsis excluded by!**/generated/**generated/models/ApiDropWinningContext.tsis excluded by!**/generated/**generated/models/ApiDropWithoutWave.tsis excluded by!**/generated/**generated/models/ApiDropWithoutWavesPageWithoutCount.tsis excluded by!**/generated/**generated/models/ApiDropsLeaderboardPage.tsis excluded by!**/generated/**generated/models/ApiDropsPage.tsis excluded by!**/generated/**generated/models/ApiFeedItem.tsis excluded by!**/generated/**generated/models/ApiGroup.tsis excluded by!**/generated/**generated/models/ApiGroupCicFilter.tsis excluded by!**/generated/**generated/models/ApiGroupDescription.tsis excluded by!**/generated/**generated/models/ApiGroupFull.tsis excluded by!**/generated/**generated/models/ApiGroupLevelFilter.tsis excluded by!**/generated/**generated/models/ApiGroupOwnsNft.tsis excluded by!**/generated/**generated/models/ApiGroupRepFilter.tsis excluded by!**/generated/**generated/models/ApiGroupTdhFilter.tsis excluded by!**/generated/**generated/models/ApiIdentity.tsis excluded by!**/generated/**generated/models/ApiIdentityActivity.tsis excluded by!**/generated/**generated/models/ApiIdentityAndSubscriptionActions.tsis excluded by!**/generated/**generated/models/ApiIdentitySubscriptionActions.tsis excluded by!**/generated/**generated/models/ApiIncomingIdentitySubscriptionsPage.tsis excluded by!**/generated/**generated/models/ApiIntRange.tsis excluded by!**/generated/**generated/models/ApiLightDrop.tsis excluded by!**/generated/**generated/models/ApiLoginRequest.tsis excluded by!**/generated/**generated/models/ApiLoginResponse.tsis excluded by!**/generated/**generated/models/ApiMarkDropUnreadResponse.tsis excluded by!**/generated/**generated/models/ApiMediaUploadMimeType.tsis excluded by!**/generated/**generated/models/ApiMemesMintStat.tsis excluded by!**/generated/**generated/models/ApiMemesMintStatsPage.tsis excluded by!**/generated/**generated/models/ApiMemesMintStatsTotals.tsis excluded by!**/generated/**generated/models/ApiMemesMintStatsYearly.tsis excluded by!**/generated/**generated/models/ApiMentionedWave.tsis excluded by!**/generated/**generated/models/ApiMintMetrics.tsis excluded by!**/generated/**generated/models/ApiMintMetricsPage.tsis excluded by!**/generated/**generated/models/ApiMintingClaimAction.tsis excluded by!**/generated/**generated/models/ApiMintingClaimActionTypesResponse.tsis excluded by!**/generated/**generated/models/ApiMintingClaimActionUpdateRequest.tsis excluded by!**/generated/**generated/models/ApiMintingClaimActionsResponse.tsis excluded by!**/generated/**generated/models/ApiMintingClaimsPhaseTotalItem.tsis excluded by!**/generated/**generated/models/ApiNft.tsis excluded by!**/generated/**generated/models/ApiNftLinkData.tsis excluded by!**/generated/**generated/models/ApiNftLinkMediaPreview.tsis excluded by!**/generated/**generated/models/ApiNftLinkResponse.tsis excluded by!**/generated/**generated/models/ApiNftMedia.tsis excluded by!**/generated/**generated/models/ApiNftOwner.tsis excluded by!**/generated/**generated/models/ApiNftOwnerPage.tsis excluded by!**/generated/**generated/models/ApiNftsPage.tsis excluded by!**/generated/**generated/models/ApiNonceResponse.tsis excluded by!**/generated/**generated/models/ApiNotification.tsis excluded by!**/generated/**generated/models/ApiNotificationsResponse.tsis excluded by!**/generated/**generated/models/ApiOutgoingIdentitySubscriptionsPage.tsis excluded by!**/generated/**generated/models/ApiOwnerBalance.tsis excluded by!**/generated/**generated/models/ApiOwnerBalanceMemes.tsis excluded by!**/generated/**generated/models/ApiOwnerBalancePage.tsis excluded by!**/generated/**generated/models/ApiPageBase.tsis excluded by!**/generated/**generated/models/ApiPageWithNextUriBase.tsis excluded by!**/generated/**generated/models/ApiPageWithoutCount.tsis excluded by!**/generated/**generated/models/ApiPaymentDetails.tsis excluded by!**/generated/**generated/models/ApiProfileMin.tsis excluded by!**/generated/**generated/models/ApiProfileMinsPage.tsis excluded by!**/generated/**generated/models/ApiProfileProxy.tsis excluded by!**/generated/**generated/models/ApiProfileProxyAction.tsis excluded by!**/generated/**generated/models/ApiProfileRepCategorySummary.tsis excluded by!**/generated/**generated/models/ApiProfileWave.tsis excluded by!**/generated/**generated/models/ApiPushNotificationDevice.tsis excluded by!**/generated/**generated/models/ApiPushNotificationSettings.tsis excluded by!**/generated/**generated/models/ApiPushNotificationSettingsUpdate.tsis excluded by!**/generated/**generated/models/ApiQuotedDrop.tsis excluded by!**/generated/**generated/models/ApiQuotedDropResponse.tsis excluded by!**/generated/**generated/models/ApiRatingWithProfileInfoAndLevel.tsis excluded by!**/generated/**generated/models/ApiRatingWithProfileInfoAndLevelPage.tsis excluded by!**/generated/**generated/models/ApiRedeemRefreshTokenRequest.tsis excluded by!**/generated/**generated/models/ApiRedeemRefreshTokenResponse.tsis excluded by!**/generated/**generated/models/ApiRegisterPushNotificationTokenRequest.tsis excluded by!**/generated/**generated/models/ApiRepCategoriesPage.tsis excluded by!**/generated/**generated/models/ApiRepCategory.tsis excluded by!**/generated/**generated/models/ApiRepContributor.tsis excluded by!**/generated/**generated/models/ApiRepContributorsPage.tsis excluded by!**/generated/**generated/models/ApiRepOverview.tsis excluded by!**/generated/**generated/models/ApiRepRating.tsis excluded by!**/generated/**generated/models/ApiReplyToDrop.tsis excluded by!**/generated/**generated/models/ApiReplyToDropResponse.tsis excluded by!**/generated/**generated/models/ApiSeizeSettings.tsis excluded by!**/generated/**generated/models/ApiSetPinnedDropRequest.tsis excluded by!**/generated/**generated/models/ApiSetProfileWaveRequest.tsis excluded by!**/generated/**generated/models/ApiStartMultipartMediaUploadResponse.tsis excluded by!**/generated/**generated/models/ApiTargetAndSubscriptionActions.tsis excluded by!**/generated/**generated/models/ApiTdhEdition.tsis excluded by!**/generated/**generated/models/ApiTdhEditionsPage.tsis excluded by!**/generated/**generated/models/ApiTokenTdh.tsis excluded by!**/generated/**generated/models/ApiTokenTdhRank.tsis excluded by!**/generated/**generated/models/ApiTransaction.tsis excluded by!**/generated/**generated/models/ApiTransactionPage.tsis excluded by!**/generated/**generated/models/ApiUndiscoveredDrop.tsis excluded by!**/generated/**generated/models/ApiUpcomingMemeSubscriptionStatus.tsis excluded by!**/generated/**generated/models/ApiUpdateDropRequest.tsis excluded by!**/generated/**generated/models/ApiUpdateProxyActionRequest.tsis excluded by!**/generated/**generated/models/ApiUpdateWaveDecisionPause.tsis excluded by!**/generated/**generated/models/ApiUpdateWaveNotificationPreferencesRequest.tsis excluded by!**/generated/**generated/models/ApiUpdateWaveParticipationConfig.tsis excluded by!**/generated/**generated/models/ApiUpdateWaveRequest.tsis excluded by!**/generated/**generated/models/ApiUploadItem.tsis excluded by!**/generated/**generated/models/ApiUploadPartOfMultipartUploadRequest.tsis excluded by!**/generated/**generated/models/ApiUploadPartOfMultipartUploadResponse.tsis excluded by!**/generated/**generated/models/ApiUploadsPage.tsis excluded by!**/generated/**generated/models/ApiWallet.tsis excluded by!**/generated/**generated/models/ApiWave.tsis excluded by!**/generated/**generated/models/ApiWaveChatConfig.tsis excluded by!**/generated/**generated/models/ApiWaveConfig.tsis excluded by!**/generated/**generated/models/ApiWaveContributorOverview.tsis excluded by!**/generated/**generated/models/ApiWaveCreditNft.tsis excluded by!**/generated/**generated/models/ApiWaveCreditType.tsis excluded by!**/generated/**generated/models/ApiWaveCuration.tsis excluded by!**/generated/**generated/models/ApiWaveCurationRequest.tsis excluded by!**/generated/**generated/models/ApiWaveDecision.tsis excluded by!**/generated/**generated/models/ApiWaveDecisionAward.tsis excluded by!**/generated/**generated/models/ApiWaveDecisionPause.tsis excluded by!**/generated/**generated/models/ApiWaveDecisionWinner.tsis excluded by!**/generated/**generated/models/ApiWaveDecisionsPage.tsis excluded by!**/generated/**generated/models/ApiWaveDecisionsStrategy.tsis excluded by!**/generated/**generated/models/ApiWaveDropsFeed.tsis excluded by!**/generated/**generated/models/ApiWaveLog.tsis excluded by!**/generated/**generated/models/ApiWaveMetrics.tsis excluded by!**/generated/**generated/models/ApiWaveMin.tsis excluded by!**/generated/**generated/models/ApiWaveNotificationPreferences.tsis excluded by!**/generated/**generated/models/ApiWaveOutcome.tsis excluded by!**/generated/**generated/models/ApiWaveOutcomeDistributionItem.tsis excluded by!**/generated/**generated/models/ApiWaveOutcomeDistributionItemsPage.tsis excluded by!**/generated/**generated/models/ApiWaveOutcomesPage.tsis excluded by!**/generated/**generated/models/ApiWaveParticipationConfig.tsis excluded by!**/generated/**generated/models/ApiWaveParticipationSubmissionStrategy.tsis excluded by!**/generated/**generated/models/ApiWaveParticipationSubmissionStrategyIdentityConf.tsis excluded by!**/generated/**generated/models/ApiWaveRequiredMetadata.tsis excluded by!**/generated/**generated/models/ApiWaveScope.tsis excluded by!**/generated/**generated/models/ApiWaveSubscriptionActions.tsis excluded by!**/generated/**generated/models/ApiWaveVisibilityConfig.tsis excluded by!**/generated/**generated/models/ApiWaveVoter.tsis excluded by!**/generated/**generated/models/ApiWaveVotersPage.tsis excluded by!**/generated/**generated/models/ApiWaveVotingConfig.tsis excluded by!**/generated/**generated/models/ApiXTdhCollection.tsis excluded by!**/generated/**generated/models/ApiXTdhCollectionsPage.tsis excluded by!**/generated/**generated/models/ApiXTdhContribution.tsis excluded by!**/generated/**generated/models/ApiXTdhContributionsPage.tsis excluded by!**/generated/**generated/models/ApiXTdhCreateGrant.tsis excluded by!**/generated/**generated/models/ApiXTdhGlobalStats.tsis excluded by!**/generated/**generated/models/ApiXTdhGrant.tsis excluded by!**/generated/**generated/models/ApiXTdhGrantToken.tsis excluded by!**/generated/**generated/models/ApiXTdhGrantTokensPage.tsis excluded by!**/generated/**generated/models/ApiXTdhGrantUpdateRequest.tsis excluded by!**/generated/**generated/models/ApiXTdhGrantee.tsis excluded by!**/generated/**generated/models/ApiXTdhGranteesPage.tsis excluded by!**/generated/**generated/models/ApiXTdhGrantsPage.tsis excluded by!**/generated/**generated/models/ApiXTdhStats.tsis excluded by!**/generated/**generated/models/ApiXTdhToken.tsis excluded by!**/generated/**generated/models/ApiXTdhTokensPage.tsis excluded by!**/generated/**generated/models/CreateDirectMessageWaveRequest.tsis excluded by!**/generated/**generated/models/DistributionNormalized.tsis excluded by!**/generated/**generated/models/DistributionNormalizedPage.tsis excluded by!**/generated/**generated/models/DistributionOverview.tsis excluded by!**/generated/**generated/models/DistributionPhasesPage.tsis excluded by!**/generated/**generated/models/DistributionPhoto.tsis excluded by!**/generated/**generated/models/DistributionPhotoCompleteRequest.tsis excluded by!**/generated/**generated/models/DistributionPhotoCompleteRequestPhoto.tsis excluded by!**/generated/**generated/models/DistributionPhotoCompleteResponse.tsis excluded by!**/generated/**generated/models/DistributionPhotosPage.tsis excluded by!**/generated/**generated/models/MintingClaim.tsis excluded by!**/generated/**generated/models/MintingClaimAnimationDetails.tsis excluded by!**/generated/**generated/models/MintingClaimAnimationDetailsGlb.tsis excluded by!**/generated/**generated/models/MintingClaimAnimationDetailsHtml.tsis excluded by!**/generated/**generated/models/MintingClaimAnimationDetailsVideo.tsis excluded by!**/generated/**generated/models/MintingClaimAttribute.tsis excluded by!**/generated/**generated/models/MintingClaimAttributeValue.tsis excluded by!**/generated/**generated/models/MintingClaimImageDetails.tsis excluded by!**/generated/**generated/models/MintingClaimUpdateRequest.tsis excluded by!**/generated/**generated/models/MintingClaimsPageResponse.tsis excluded by!**/generated/**generated/models/MintingClaimsProofItem.tsis excluded by!**/generated/**generated/models/MintingClaimsProofsResponse.tsis excluded by!**/generated/**generated/models/MintingClaimsResponse.tsis excluded by!**/generated/**generated/models/MintingClaimsRootItem.tsis excluded by!**/generated/**generated/models/NFTFinalSubscription.tsis excluded by!**/generated/**generated/models/NFTFinalSubscriptionUpload.tsis excluded by!**/generated/**generated/models/NFTFinalSubscriptionUploadPage.tsis excluded by!**/generated/**generated/models/NFTSubscription.tsis excluded by!**/generated/**generated/models/ObjectSerializer.tsis excluded by!**/generated/**generated/models/PhaseAirdrop.tsis excluded by!**/generated/**generated/models/RedeemedSubscription.tsis excluded by!**/generated/**generated/models/RedeemedSubscriptionCounts.tsis excluded by!**/generated/**generated/models/RedeemedSubscriptionCountsPage.tsis excluded by!**/generated/**generated/models/RedeemedSubscriptionPage.tsis excluded by!**/generated/**generated/models/SubscribeAllEditionsResponse.tsis excluded by!**/generated/**generated/models/SubscriptionCountResponse.tsis excluded by!**/generated/**generated/models/SubscriptionCounts.tsis excluded by!**/generated/**generated/models/SubscriptionDetails.tsis excluded by!**/generated/**generated/models/SubscriptionLog.tsis excluded by!**/generated/**generated/models/SubscriptionLogPage.tsis excluded by!**/generated/**generated/models/SubscriptionModeResponse.tsis excluded by!**/generated/**generated/models/SubscriptionResponse.tsis excluded by!**/generated/**generated/models/SubscriptionTopUp.tsis excluded by!**/generated/**generated/models/SubscriptionTopUpPage.tsis excluded by!**/generated/**generated/models/UpdateSubscribeAllEditionsRequest.tsis excluded by!**/generated/**generated/models/UpdateSubscriptionCountRequest.tsis excluded by!**/generated/**generated/models/UpdateSubscriptionModeRequest.tsis excluded by!**/generated/**generated/models/UpdateSubscriptionRequest.tsis excluded by!**/generated/**
📒 Files selected for processing (5)
components/drop-forge/claimTraitsData.tscomponents/waves/create-wave/voting/CreateWaveVoting.tsxcomponents/waves/memes/submission/utils/buildPreviewDrop.tscomponents/waves/specs/WaveRating.tsxcomponents/waves/utils/getOptimisticDrop.ts
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 550fda8139
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Signed-off-by: prxt6529 <prxt@6529.io>
|
There was a problem hiding this comment.
🧹 Nitpick comments (2)
__tests__/components/waves/create-wave/services/multiPartUpload.test.ts (2)
187-211: Progress test does not validate percentages yet.The test title says “correct percentage,” but it only checks that the callback was called. Please assert expected progress values to avoid false positives.
Proposed assertion tightening
- // Verify progress was called - expect(progressSpy).toHaveBeenCalled(); + expect(progressSpy).toHaveBeenCalledTimes(2); + expect(progressSpy).toHaveBeenNthCalledWith(1, 50); + expect(progressSpy).toHaveBeenNthCalledWith(2, 100);🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@__tests__/components/waves/create-wave/services/multiPartUpload.test.ts` around lines 187 - 211, The test titled "calls onProgress with correct percentage" currently only checks that the onProgress callback (progressSpy) was invoked; update the assertions to validate the actual percentage values passed by multiPartUpload by asserting progressSpy was called with 50 and then 100 (or equivalent percentage values) after the mocked mockAxios.put triggers config.onUploadProgress with {loaded:50,total:100} and {loaded:100,total:100}; reference the multiPartUpload invocation, mockAxios.put mockImplementation, and progressSpy to add assertions like checking progressSpy.calls or using toHaveBeenNthCalledWith to verify the first call received 50 and the second call received 100.
401-405: Use subset matching for retry options to reduce brittleness.This strict object match will fail if non-breaking retry options are added. Prefer matching required fields only.
Proposed matcher update
- expect(mockPRetry).toHaveBeenCalledWith(expect.any(Function), { - retries: 3, - factor: 2, - minTimeout: 1000, - }); + expect(mockPRetry).toHaveBeenCalledWith( + expect.any(Function), + expect.objectContaining({ + retries: 3, + factor: 2, + minTimeout: 1000, + }) + );🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@__tests__/components/waves/create-wave/services/multiPartUpload.test.ts` around lines 401 - 405, The test's assertion using mockPRetry is too strict; update the assertion for mockPRetry in the test (the expect call referencing mockPRetry) to use subset matching (e.g., expect.objectContaining) so it only asserts the required retry options (retries, factor, minTimeout) instead of matching the entire options object exactly, reducing brittleness if additional options are added.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@__tests__/components/waves/create-wave/services/multiPartUpload.test.ts`:
- Around line 187-211: The test titled "calls onProgress with correct
percentage" currently only checks that the onProgress callback (progressSpy) was
invoked; update the assertions to validate the actual percentage values passed
by multiPartUpload by asserting progressSpy was called with 50 and then 100 (or
equivalent percentage values) after the mocked mockAxios.put triggers
config.onUploadProgress with {loaded:50,total:100} and {loaded:100,total:100};
reference the multiPartUpload invocation, mockAxios.put mockImplementation, and
progressSpy to add assertions like checking progressSpy.calls or using
toHaveBeenNthCalledWith to verify the first call received 50 and the second call
received 100.
- Around line 401-405: The test's assertion using mockPRetry is too strict;
update the assertion for mockPRetry in the test (the expect call referencing
mockPRetry) to use subset matching (e.g., expect.objectContaining) so it only
asserts the required retry options (retries, factor, minTimeout) instead of
matching the entire options object exactly, reducing brittleness if additional
options are added.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 4920efc6-5f11-457d-9811-c75a777e8765
📒 Files selected for processing (3)
__tests__/components/waves/create-wave/services/multiPartUpload.test.tscomponents/drop-forge/claimTraitsData.tscomponents/drop-forge/launch/DropForgeLaunchClaimPageClient.view.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
- components/drop-forge/claimTraitsData.ts



Summary by CodeRabbit
New Features
Style
Tests