Skip to content

Refactor/627 sharecard decompose - #705

Merged
Calebux merged 3 commits into
zintarh:mainfrom
AnnieIj:refactor/627-sharecard-decompose
Oct 1, 2026
Merged

Calebux merged 3 commits into
zintarh:mainfrom
AnnieIj:refactor/627-sharecard-decompose

Conversation

@AnnieIj

@AnnieIj AnnieIj commented Sep 27, 2026

Copy link
Copy Markdown
Contributor

Summary

Refactors the 847-line ShareCard.tsx into smaller, focused modules to improve readability, maintainability, and testability while preserving the existing public component interface.

Changes

  • Reduced ShareCard.tsx from 847 lines to approximately 420 lines, retaining it as the main entry point.
  • Extracted reusable pure functions into shareCardUtils.ts.
  • Introduced CardPreview.tsx for animated card presentation.
  • Introduced MintSection.tsx for minting controls, transaction progress, and error states.
  • Introduced ShareActions.tsx for download and sharing functionality.
  • Preserved the existing component interface so callers do not require changes.

Testing

Added 21 unit tests for the extracted utility functions:

  • 11 tests for getMintButtonText, covering transaction states and online/offline behaviour.
  • 4 tests for buildShareText.
  • 6 tests for getExplorerUrl, covering network mapping and resource types.

All 21 new utility tests pass.

Outcome

The component is decomposed into smaller, independently maintainable modules, with extracted pure logic covered by direct unit tests.

Closes #627

…pace, define failure modes

Resolves the obscured storage boundary described in zintarh#618.

- app/api/notifications/_lib/kv.ts: now imports storage helpers directly from ../../_lib/kv (no re-export chain). Adds full JSDoc for the notif:sub:, notif:period:, and notif:log: key families. Adds KV_FAILURE_LOUD / KV_FAILURE_DEGRADE constants and KvFailureMode type.

- All six notification routes annotated with // KV_FAILURE: LOUD or DEGRADE at the import site. dispatch/subscribe/subscribe-email/confirm-email use ../_lib/kv; preferences/{wallet} and data/{wallet} use ../../_lib/kv (both resolve to the notifications _lib).

- app/api/notifications/__tests__/kv.test.ts: 39 tests covering key builders, namespace isolation, failure-mode constants, storage helper re-exports, and LOUD vs DEGRADE caller behaviour (all green).

Closes zintarh#618
ShareCard.tsx was 847 lines mixing layout, animation, data formatting,
and archetype selection in a single monolith (zintarh#377 flagged it as
unparseable).

Changes
-------
- Extract pure logic into shareCard/shareCardUtils.ts
    getMintButtonText, buildShareText, getExplorerUrl
    No React / browser dependencies; fully unit-tested.

- Extract CardPreview sub-component (shareCard/CardPreview.tsx)
    Animated share-card visual (left panel).
    Pure presentational — all data passed as props.

- Extract MintSection sub-component (shareCard/MintSection.tsx)
    Mint button + confirming progress bar + timeout/error banners.
    All state passed as props for easy snapshot testing.

- Extract ShareActions sub-component (shareCard/ShareActions.tsx)
    SHARE heading + format toggle + all download/share buttons
    + export progress bar + error state with retry.

- Rewrite ShareCard.tsx as a thin orchestrator (~420 lines)
    Wires stores, hooks, and event handlers; delegates rendering
    to the three sub-components above.
    Public interface (props) is identical — callers are unaffected.

- Add unit tests (app/components/__tests__/shareCardUtils.test.ts)
    21 tests covering all branches of getMintButtonText (11 cases),
    buildShareText (4 cases), and getExplorerUrl (6 cases).
    All 21 pass.

Closes zintarh#627
@vercel

vercel Bot commented Sep 27, 2026

Copy link
Copy Markdown

@zintarh is attempting to deploy a commit to the zintarh Team on Vercel.

A member of the Team first needs to authorize it.

@drips-wave

drips-wave Bot commented Sep 27, 2026

Copy link
Copy Markdown

@AnnieIj Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits.

You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀

Learn more about application limits

@Calebux
Calebux merged commit 0e4a253 into zintarh:main Oct 1, 2026
3 of 14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

refactor(share): ShareCard.tsx is 847 lines in a single component

3 participants