Xtdh groups#1642
Conversation
WalkthroughThe PR introduces support for multiple TDH (Trust Delegation Hash) inclusion strategies—TDH, xTDH, and Both—across group creation, configuration, and display components. A new Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~22 minutes
Possibly related PRs
Suggested reviewers
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (1 passed)
✨ Finishing touches
🧪 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: 0
🧹 Nitpick comments (4)
components/groups/page/list/card/GroupCardConfigs.tsx (1)
60-79: TDH label derived from inclusion_strategy is correct and robust
getTdhConfignow computes alabelfromtdh.inclusion_strategywith sensible values ("Tdh","xTDH","TDH + xTDH") and includes it in the returned config, which matches how the card renderer now prefersconfig.label. As a minor optional tidy-up, you could express this as a small mapping instead ofif/elsechains:- let label = "Tdh"; - if (tdh.inclusion_strategy === ApiGroupTdhInclusionStrategy.Xtdh) { - label = "xTDH"; - } else if (tdh.inclusion_strategy === ApiGroupTdhInclusionStrategy.Both) { - label = "TDH + xTDH"; - } + const inclusionStrategyLabelMap: Partial<Record<ApiGroupTdhInclusionStrategy, string>> = { + [ApiGroupTdhInclusionStrategy.Tdh]: "Tdh", + [ApiGroupTdhInclusionStrategy.Xtdh]: "xTDH", + [ApiGroupTdhInclusionStrategy.Both]: "TDH + xTDH", + }; + const label = inclusionStrategyLabelMap[tdh.inclusion_strategy] ?? "Tdh";__tests__/components/waves/specs/groups/group/edit/buttons/useWaveGroupEditButtonsController.test.tsx (1)
3-65: Test fixtures updated correctly; consider asserting inclusion_strategy in payloadImporting
ApiGroupTdhInclusionStrategyand extendingbaseGroupFull.group.tdhwithinclusion_strategy: ApiGroupTdhInclusionStrategy.Tdhkeeps the fixture aligned with the new schema and the rest of the codebase.To strengthen coverage, you could also assert that the controller preserves/sets this field when calling
createGroup, for example in the first test:- const payloadArg = mockCreateGroup.mock.calls[0][0].payload; - expect(payloadArg.group.identity_addresses).toEqual(['0xabcd']); + const payloadArg = mockCreateGroup.mock.calls[0][0].payload; + expect(payloadArg.group.tdh.inclusion_strategy).toBe(ApiGroupTdhInclusionStrategy.Tdh); + expect(payloadArg.group.identity_addresses).toEqual(['0xabcd']);This would catch any future regression where
tdh.inclusion_strategyis dropped from the payload while still keeping the tests focused on identity behavior.components/groups/page/create/config/GroupCreateTDH.tsx (1)
3-5: TDH/xTDH/Both UI wiring is solid; consider centralizing display labelsThe enum-driven
modeslist,CommonTabswiring, andsetTDHcalls correctly keeptdh.inclusion_strategyin sync with the UI, and the “Both” handling ("TDH + xTDH") is clear and consistent across heading, description, and numeric label.One minor improvement: for the non‑Both cases you currently render
tdh.inclusion_strategydirectly, which surfaces the raw enum value (e.g."XTDH") while the tab label uses"xTDH". To keep casing and wording consistent and avoid depending on enum string values, you could derive the display label from themodesarray (or a small mapping) and reuse that for the heading, description, and numeric label.Also applies to: 14-30, 35-61, 64-71
components/groups/page/create/GroupCreate.tsx (1)
11-11: GroupCreate TDH defaults and edit mapping look correct; consider centralizing the default
- New groups get
groupConfig.group.tdh.inclusion_strategyset toApiGroupTdhInclusionStrategy.Tdh, and edited groups maporiginalGroup.group.tdh?.inclusion_strategywith a sane fallback to the same default. This keepstdh.inclusion_strategynon‑null for the TDH UI and payload builders.- Extending
isFetchingto also depend onloadingOriginalGroupWalletsandloadingOriginalGroupExcludedWalletsensures the “Loading...” state covers the wallet lookups as well, which is consistent with how the form uses those arrays.As a small maintainability improvement, you now hard‑code
.Tdhas the default inclusion strategy in several places (here, in the wave edit hook, in wave group creation helpers, and in tests). Consider extracting a sharedDEFAULT_TDH_INCLUSION_STRATEGYconstant (or helper that builds the default TDH filter) to keep these call sites in sync if the default ever changes.Also applies to: 76-91, 93-120, 131-137
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (5)
generated/models/ApiGroupTdhFilter.tsis excluded by!**/generated/**generated/models/ApiGroupTdhInclusionStrategy.tsis excluded by!**/generated/**generated/models/ApiRatingWithProfileInfoAndLevel.tsis excluded by!**/generated/**generated/models/ObjectSerializer.tsis excluded by!**/generated/**package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (11)
__tests__/components/groups/page/create/actions/GroupCreateActions.test.tsx(2 hunks)__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsx(3 hunks)__tests__/components/waves/specs/groups/group/edit/buttons/useWaveGroupEditButtonsController.test.tsx(2 hunks)__tests__/services/groups/groupMutations.test.ts(5 hunks)components/groups/page/create/GroupCreate.tsx(4 hunks)components/groups/page/create/config/GroupCreateTDH.tsx(2 hunks)components/groups/page/list/card/GroupCardConfig.tsx(1 hunks)components/groups/page/list/card/GroupCardConfigs.tsx(3 hunks)components/waves/create-wave/services/waveGroupService.ts(2 hunks)components/waves/specs/groups/group/edit/buttons/hooks/useWaveGroupEditButtonsController.ts(2 hunks)openapi.yaml(4 hunks)
🧰 Additional context used
📓 Path-based instructions (12)
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (.cursorrules)
**/*.{ts,tsx,js,jsx}: Do not include any comments in the code; it should be self-explanatory
Write correct, up-to-date, bug-free, fully componentized, secure, and efficient code
Include all required imports and ensure proper naming of key components
Use NextJS features that match the current version
**/*.{ts,tsx,js,jsx}: Replace<img>elements with<Image />fromnext/imageto satisfy@next/next/no-img-elementESLint rule
Use<Link href="/path">from Next.js for internal navigation instead of plain HTML links to satisfy@next/next/no-html-link-for-pagesESLint rule
Files:
components/waves/create-wave/services/waveGroupService.tscomponents/groups/page/list/card/GroupCardConfig.tsx__tests__/components/waves/specs/groups/group/edit/buttons/useWaveGroupEditButtonsController.test.tsxcomponents/waves/specs/groups/group/edit/buttons/hooks/useWaveGroupEditButtonsController.tscomponents/groups/page/create/config/GroupCreateTDH.tsx__tests__/components/groups/page/create/actions/GroupCreateActions.test.tsx__tests__/services/groups/groupMutations.test.tscomponents/groups/page/list/card/GroupCardConfigs.tsx__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsxcomponents/groups/page/create/GroupCreate.tsx
**/*.{js,jsx,ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{js,jsx,ts,tsx}: Code must satisfy ESLint (Next's Core Web Vitals + React Hooks)
Use framework APIs: internal links should use<Link>, images should usenext/image, and adopt Next's ESLint rules (Core Web Vitals)
**/*.{js,jsx,ts,tsx}: Code must satisfy ESLint (Next's Core Web Vitals + React Hooks rules)
Follow existing code style and naming conventions; maintain clean code standards (measured by SonarQube)
Files:
components/waves/create-wave/services/waveGroupService.tscomponents/groups/page/list/card/GroupCardConfig.tsx__tests__/components/waves/specs/groups/group/edit/buttons/useWaveGroupEditButtonsController.test.tsxcomponents/waves/specs/groups/group/edit/buttons/hooks/useWaveGroupEditButtonsController.tscomponents/groups/page/create/config/GroupCreateTDH.tsx__tests__/components/groups/page/create/actions/GroupCreateActions.test.tsx__tests__/services/groups/groupMutations.test.tscomponents/groups/page/list/card/GroupCardConfigs.tsx__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsxcomponents/groups/page/create/GroupCreate.tsx
**/*.{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
**/*.{ts,tsx}: Must passtsc --noEmittype checking
Prefer direct named imports for React hooks and types (import { useMemo, useRef, FC, etc. } from "react") overReact.namespace usage (React.useMemo,React.useRef, etc.)
If thereact-hooks/exhaustive-depslint rule is triggered: if the Effect only derives state, remove the Effect and compute during render; if listening to an external system and needing fresh props/state, wrap non-reactive logic inuseEffectEvent
**/*.{ts,tsx}: Must passtsc --noEmitfor TypeScript type checking
Prefer Server Components over Client Components; use Server Functions/Server Actions ('use server') for mutations
Remove unnecessary Effects; if Effect only derives state, compute during render instead
UseuseEffectEventfor non-reactive logic inside Effects to avoid unnecessary re-runs
Use framework APIs:<Link>for internal links,next/imagefor images, adopt Next's ESLint rules
Use'use cache'directive and Cache Components features for explicit opt-in caching in Next.js 16
Use TypeScript and React functional components with hooks
When parsing Seize URLs or similar, fail fast if base origin is unavailable; do not fall back to placeholder origins
Replace<img>elements with<Image />fromnext/image
Use<Link href="/path">for internal navigation instead of plain HTML links
Move data fetches to Server Components; handle mutations through Server Functions/Server Actions with'use server'directive
Files:
components/waves/create-wave/services/waveGroupService.tscomponents/groups/page/list/card/GroupCardConfig.tsx__tests__/components/waves/specs/groups/group/edit/buttons/useWaveGroupEditButtonsController.test.tsxcomponents/waves/specs/groups/group/edit/buttons/hooks/useWaveGroupEditButtonsController.tscomponents/groups/page/create/config/GroupCreateTDH.tsx__tests__/components/groups/page/create/actions/GroupCreateActions.test.tsx__tests__/services/groups/groupMutations.test.tscomponents/groups/page/list/card/GroupCardConfigs.tsx__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsxcomponents/groups/page/create/GroupCreate.tsx
**/*.{tsx,jsx}
📄 CodeRabbit inference engine (.cursorrules)
**/*.{tsx,jsx}: Use FontAwesome for icons in React components
Use TailwindCSS for styling in React components
Use react-query for data fetching
Always addreadonlybefore props in React components
Files:
components/groups/page/list/card/GroupCardConfig.tsx__tests__/components/waves/specs/groups/group/edit/buttons/useWaveGroupEditButtonsController.test.tsxcomponents/groups/page/create/config/GroupCreateTDH.tsx__tests__/components/groups/page/create/actions/GroupCreateActions.test.tsxcomponents/groups/page/list/card/GroupCardConfigs.tsx__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsxcomponents/groups/page/create/GroupCreate.tsx
**/@(__tests__|*.test).{ts,tsx}
📄 CodeRabbit inference engine (AGENTS.md)
Tests should live in
__tests__/orComponentName.test.tsx; mock external dependencies and APIs in tests
Files:
__tests__/components/waves/specs/groups/group/edit/buttons/useWaveGroupEditButtonsController.test.tsx__tests__/components/groups/page/create/actions/GroupCreateActions.test.tsx__tests__/services/groups/groupMutations.test.ts__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsx
**/__tests__/**/*.{ts,tsx}
📄 CodeRabbit inference engine (GEMINI.md)
Place tests in
__tests__/directory or asComponentName.test.tsxalongside components
Files:
__tests__/components/waves/specs/groups/group/edit/buttons/useWaveGroupEditButtonsController.test.tsx__tests__/components/groups/page/create/actions/GroupCreateActions.test.tsx__tests__/services/groups/groupMutations.test.ts__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsx
**/*.test.{ts,tsx}
📄 CodeRabbit inference engine (GEMINI.md)
Mock external dependencies and APIs in tests
Files:
__tests__/components/waves/specs/groups/group/edit/buttons/useWaveGroupEditButtonsController.test.tsx__tests__/components/groups/page/create/actions/GroupCreateActions.test.tsx__tests__/services/groups/groupMutations.test.ts__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsx
__tests__/**/*.test.{ts,tsx}
📄 CodeRabbit inference engine (tests/AGENTS.md)
Use Jest +
ts-jestfor TypeScript testing
Files:
__tests__/components/waves/specs/groups/group/edit/buttons/useWaveGroupEditButtonsController.test.tsx__tests__/components/groups/page/create/actions/GroupCreateActions.test.tsx__tests__/services/groups/groupMutations.test.ts__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsx
__tests__/**/*.{ts,tsx}
📄 CodeRabbit inference engine (tests/AGENTS.md)
Functions must have ≤ 15 cognitive complexity; extract deep ternaries (>3 levels) and break down complex logic
Files:
__tests__/components/waves/specs/groups/group/edit/buttons/useWaveGroupEditButtonsController.test.tsx__tests__/components/groups/page/create/actions/GroupCreateActions.test.tsx__tests__/services/groups/groupMutations.test.ts__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsx
__tests__/**/*.{ts,tsx,js}
📄 CodeRabbit inference engine (tests/AGENTS.md)
__tests__/**/*.{ts,tsx,js}: Preferfor...ofloops overforEachas it allowsbreak/continueand works with async/await
Usearray.at(-1)andarray.at(-2)instead of index-based array access for negative indexing
UseString.prototype.replaceAll()instead ofreplace()for global string replacements
UseglobalThis.fetch()instead of directfetch()calls
Organize imports with one import per module in order: external → internal → types, with no duplicates
Useelement.remove()instead ofparent.removeChild(element)for DOM manipulation
Catch errors only when meaningful; no empty catch blocks; log errors with context
Avoid double negatives in code; prefer explicit logic and remove redundant annotations; use optional chaining (?.)
Files:
__tests__/components/waves/specs/groups/group/edit/buttons/useWaveGroupEditButtonsController.test.tsx__tests__/components/groups/page/create/actions/GroupCreateActions.test.tsx__tests__/services/groups/groupMutations.test.ts__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsx
__tests__/**/{components,contexts,hooks}/**/*.{ts,tsx}
📄 CodeRabbit inference engine (tests/AGENTS.md)
Use semantic HTML elements (
<label>,<output>) over ARIA attributes when possible; every form control must have a label
Files:
__tests__/components/waves/specs/groups/group/edit/buttons/useWaveGroupEditButtonsController.test.tsx__tests__/components/groups/page/create/actions/GroupCreateActions.test.tsx__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsx
{.env*,*.env,**/config/**}
📄 CodeRabbit inference engine (.cursor/rules/dev_workflow.mdc)
Configure Task Master behavior via environment variables: ANTHROPIC_API_KEY (required), MODEL, MAX_TOKENS, TEMPERATURE, DEBUG, LOG_LEVEL, DEFAULT_SUBTASKS, DEFAULT_PRIORITY, PROJECT_NAME, PROJECT_VERSION, PERPLEXITY_API_KEY, and PERPLEXITY_MODEL
Files:
components/groups/page/create/config/GroupCreateTDH.tsx
🧠 Learnings (13)
📚 Learning: 2025-12-05T10:55:43.476Z
Learnt from: CR
Repo: 6529-Collections/6529seize-frontend PR: 0
File: __tests__/AGENTS.md:0-0
Timestamp: 2025-12-05T10:55:43.476Z
Learning: Applies to __tests__/app/api/**/__tests__/**/*.test.{ts,tsx,js} : API integration tests should be located in `app/api`
Applied to files:
__tests__/components/waves/specs/groups/group/edit/buttons/useWaveGroupEditButtonsController.test.tsx__tests__/components/groups/page/create/actions/GroupCreateActions.test.tsx__tests__/services/groups/groupMutations.test.ts__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsx
📚 Learning: 2025-12-05T10:55:43.476Z
Learnt from: CR
Repo: 6529-Collections/6529seize-frontend PR: 0
File: __tests__/AGENTS.md:0-0
Timestamp: 2025-12-05T10:55:43.476Z
Learning: Applies to __tests__/**/__tests__/**/components/**/*.test.{ts,tsx} : Use testing-library/react + user-event for React component tests
Applied to files:
__tests__/components/waves/specs/groups/group/edit/buttons/useWaveGroupEditButtonsController.test.tsx__tests__/components/groups/page/create/actions/GroupCreateActions.test.tsx__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsx
📚 Learning: 2025-12-05T10:55:30.871Z
Learnt from: CR
Repo: 6529-Collections/6529seize-frontend PR: 0
File: GEMINI.md:0-0
Timestamp: 2025-12-05T10:55:30.871Z
Learning: Applies to **/*.{ts,tsx} : Use TypeScript and React functional components with hooks
Applied to files:
__tests__/components/waves/specs/groups/group/edit/buttons/useWaveGroupEditButtonsController.test.tsx
📚 Learning: 2025-12-05T10:55:43.476Z
Learnt from: CR
Repo: 6529-Collections/6529seize-frontend PR: 0
File: __tests__/AGENTS.md:0-0
Timestamp: 2025-12-05T10:55:43.476Z
Learning: Applies to __tests__/**/__tests__/**/*.test.{ts,tsx,js} : Keep tests independent, deterministic, and fast with production-like data
Applied to files:
__tests__/components/groups/page/create/actions/GroupCreateActions.test.tsx__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsx
📚 Learning: 2025-12-05T10:55:43.476Z
Learnt from: CR
Repo: 6529-Collections/6529seize-frontend PR: 0
File: __tests__/AGENTS.md:0-0
Timestamp: 2025-12-05T10:55:43.476Z
Learning: Applies to __tests__/**/*.{ts,tsx,js} : Organize imports with one import per module in order: external → internal → types, with no duplicates
Applied to files:
__tests__/components/groups/page/create/actions/GroupCreateActions.test.tsx__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsx
📚 Learning: 2025-12-05T10:55:30.871Z
Learnt from: CR
Repo: 6529-Collections/6529seize-frontend PR: 0
File: GEMINI.md:0-0
Timestamp: 2025-12-05T10:55:30.871Z
Learning: Applies to **/*.test.{ts,tsx} : Mock external dependencies and APIs in tests
Applied to files:
__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsx
📚 Learning: 2025-12-03T14:52:34.271Z
Learnt from: CR
Repo: 6529-Collections/6529seize-frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-03T14:52:34.271Z
Learning: Applies to **/@(__tests__|*.test).{ts,tsx} : Tests should live in `__tests__/` or `ComponentName.test.tsx`; mock external dependencies and APIs in tests
Applied to files:
__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsx
📚 Learning: 2025-12-05T10:55:43.476Z
Learnt from: CR
Repo: 6529-Collections/6529seize-frontend PR: 0
File: __tests__/AGENTS.md:0-0
Timestamp: 2025-12-05T10:55:43.476Z
Learning: Applies to __tests__/**/*.{ts,tsx,js} : Avoid double negatives in code; prefer explicit logic and remove redundant annotations; use optional chaining (`?.`)
Applied to files:
__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsx
📚 Learning: 2025-12-05T10:55:43.476Z
Learnt from: CR
Repo: 6529-Collections/6529seize-frontend PR: 0
File: __tests__/AGENTS.md:0-0
Timestamp: 2025-12-05T10:55:43.476Z
Learning: Applies to __tests__/**/__tests__/**/*.test.{ts,tsx,js} : Test high-risk areas including happy path workflows, invalid input errors, edge cases/boundaries, component & API interactions, and performance/security when relevant
Applied to files:
__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsx
📚 Learning: 2025-12-05T10:55:30.871Z
Learnt from: CR
Repo: 6529-Collections/6529seize-frontend PR: 0
File: GEMINI.md:0-0
Timestamp: 2025-12-05T10:55:30.871Z
Learning: Applies to **/__tests__/**/*.{ts,tsx} : Place tests in `__tests__/` directory or as `ComponentName.test.tsx` alongside components
Applied to files:
__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsx
📚 Learning: 2025-11-25T08:35:58.729Z
Learnt from: CR
Repo: 6529-Collections/6529seize-frontend PR: 0
File: .cursorrules:0-0
Timestamp: 2025-11-25T08:35:58.729Z
Learning: Applies to **/*.{tsx,jsx} : Use react-query for data fetching
Applied to files:
__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsx
📚 Learning: 2025-12-05T10:55:43.476Z
Learnt from: CR
Repo: 6529-Collections/6529seize-frontend PR: 0
File: __tests__/AGENTS.md:0-0
Timestamp: 2025-12-05T10:55:43.476Z
Learning: Applies to __tests__/**/*.{ts,tsx,js} : Use `globalThis.fetch()` instead of direct `fetch()` calls
Applied to files:
__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsx
📚 Learning: 2025-12-05T10:55:43.476Z
Learnt from: CR
Repo: 6529-Collections/6529seize-frontend PR: 0
File: __tests__/AGENTS.md:0-0
Timestamp: 2025-12-05T10:55:43.476Z
Learning: Applies to __tests__/**/*.test.{ts,tsx} : Use Jest + `ts-jest` for TypeScript testing
Applied to files:
__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsx
🧬 Code graph analysis (1)
components/groups/page/create/config/GroupCreateTDH.tsx (3)
components/utils/select/CommonSelect.tsx (1)
CommonSelectItem(11-18)components/utils/select/tabs/CommonTabs.tsx (1)
CommonTabs(7-174)components/groups/page/create/config/common/GroupCreateNumericValue.tsx (1)
GroupCreateNumericValue(1-47)
🔇 Additional comments (10)
components/waves/create-wave/services/waveGroupService.ts (1)
3-32: TDH inclusion strategy correctly added to admin-group creation payloadImporting
ApiGroupTdhInclusionStrategyand settingtdh.inclusion_strategytoApiGroupTdhInclusionStrategy.TdhincreateOnlyMeGroupkeeps the payload in sync with the updatedApiGroupTdhFilterschema and provides a sensible default for admin groups.components/groups/page/list/card/GroupCardConfig.tsx (1)
18-22: Config label override with safe fallback looks goodUsing
config.label ?? configLabel[config.key]cleanly supports custom labels from callers while preserving the existing per-key default label behavior.openapi.yaml (2)
5441-5464: ApiGroupTdhFilter / ApiGroupTdhInclusionStrategy schema alignmentAdding
inclusion_strategytoApiGroupTdhFilter(and making it required) plus the newApiGroupTdhInclusionStrategyenum matches how the frontend now constructs TDH filters and derives labels fromTDH | XTDH | BOTH. Ensure server implementations and any non-TS clients are updated in lockstep with this contract change.
6401-6427: xtdh added to ApiRatingWithProfileInfoAndLevelExtending
ApiRatingWithProfileInfoAndLevelto requirextdhand defining it asnumberwithfloatformat is consistent with other xTDH exposure in the API. Just confirm that all endpoints populating this schema now always setxtdhto avoid breaking existing consumers expecting the previous shape.components/groups/page/list/card/GroupCardConfigs.tsx (2)
8-15: Config props/interface correctly extended with optional labelImporting
ApiGroupTdhInclusionStrategyand extendingGroupCardConfigPropswith an optionallabel?: stringkeeps this component aligned with upstream config builders while remaining backward compatible for existing callers that don’t pass a label.
46-58: Identity display string remains clear and stableThe multi-line template string in
getIdentityValuestill yields readable values like"from identity: 0x..."or"identity: 0x..."when direction is absent, without introducing extra whitespace artifacts.components/waves/specs/groups/group/edit/buttons/hooks/useWaveGroupEditButtonsController.ts (1)
18-18: TDH inclusion_strategy default is wired correctly into new group payloadsImporting
ApiGroupTdhInclusionStrategyand defaultingcreateEmptyGroupPayload().group.tdh.inclusion_strategytoApiGroupTdhInclusionStrategy.Tdhaligns with the updated schema and keepscloneGroupPayloadbehavior intact for existing groups. No issues found here.Also applies to: 119-142
__tests__/components/groups/page/create/actions/GroupCreateTest.test.tsx (1)
2-3: Test groupConfig updated to reflect TDH inclusion_strategy enumThe added
ApiGroupTdhInclusionStrategyimport and the extendedtdhconfig (min,max, andinclusion_strategy: ApiGroupTdhInclusionStrategy.Tdh) keep the test payload aligned with the new API shape and avoid hard-coded strings. The React Query mock remains sufficient for these assertions.Also applies to: 20-30, 32-43
__tests__/components/groups/page/create/actions/GroupCreateActions.test.tsx (1)
3-4: Default test group now matches extended TDH shapeImporting
ApiGroupTdhInclusionStrategyand initializingdefaultGroup.group.tdhwithmin,max, andinclusion_strategy: ApiGroupTdhInclusionStrategy.Tdhkeeps the test payload consistent with the updated group model used byGroupCreateActions. No issues detected.Also applies to: 26-37
__tests__/services/groups/groupMutations.test.ts (1)
6-25: createPayload helper aligned with new TDH inclusion_strategyThe
createPayloadfactory now seedsgroup.tdhwithmin,max, andinclusion_strategy: ApiGroupTdhInclusionStrategy.Tdh, which is consistent with the new API shape and other defaults. The tests that passgroupoverrides viaas anystill correctly rely oncreatePayloadto provide TDH defaults, so validation coverage remains accurate.Also applies to: 35-41, 53-60, 66-74, 80-88



Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.