Skip to content

Feat/searchpage live#421

Open
444notdotun wants to merge 6 commits into
Grainlify:mainfrom
444notdotun:feat/searchpage-live
Open

Feat/searchpage live#421
444notdotun wants to merge 6 commits into
Grainlify:mainfrom
444notdotun:feat/searchpage-live

Conversation

@444notdotun

Copy link
Copy Markdown
Contributor

closes #163

@444notdotun 444notdotun force-pushed the feat/searchpage-live branch from ca2feec to 4b30c84 Compare June 29, 2026 17:35
- Add role=button, tabIndex=0, and onKeyDown (Enter/Space) to each
  event card so keyboard users can navigate and activate them
- Guard onKeyDown with currentTarget===target to prevent double-firing
  when a key event bubbles up from the nested Join Event button
- Apply focus-visible ring (Tailwind) for a visible keyboard focus indicator
- Prefix status badge with sr-only 'Event status:' text so screen readers
  announce meaning rather than a bare word
- Add TSDoc to the component and its props interface
- Cover loading, empty, and error render states
- Assert cards have tabIndex=0 and role=button
- Test Enter and Space key activation via userEvent
- Verify onKeyDown guard prevents double-firing from nested Join Event button
- Confirm Tab key reaches focusable elements
- Check sr-only 'Event status:' prefix is present in the DOM
- Validate all four status label variants (Upcoming/Running/Completed/Draft)
- Load: empty storage, valid profiles, malformed JSON, non-array, invalid shapes
- Sensitive fields: taxId / paymentMethods / invoices absent from localStorage
- Sensitive fields: remain accessible in memory after strip
- Legacy repair: old stored taxId stripped on first useEffect write-back
- Quota errors: QuotaExceededError, NS_ERROR_DOM_QUOTA_REACHED, generic errors
- In-memory state preserved even when save fails
- Missing provider: throws descriptive error
- addProfile, updateProfile, setProfiles: mutations + persistence
Fix bad-merge corruption in upstream files that prevented tsc from passing:
- App.tsx: use LocaleProvider consistently (was I18nProvider/LocaleProvider mismatch)
- DashboardLayout.tsx: remove duplicate component export, add Header/Sidebar imports, strip unused code
- DashboardLayout.test.tsx: add missing renderLayout helper
- BrowsePage.tsx: remove duplicate useCallback declarations from bad merge
- BrowsePage.test.tsx: remove duplicate describe blocks from bad merge
- DataPage.tsx: restore clean version (remove mixed old/new rendering logic)
- DataPage.test.tsx: remove unused imports

Fix cascaded type errors revealed after syntax fixes:
- messages.ts: remove duplicate settings.tabs keys, add auth.* and invoices.* i18n keys
- SettingsPage.tsx: remove duplicate useTranslation import, add LocaleSwitcher import
- InvoicesTab.tsx: add missing MessageId and useTranslation imports
- LeaderboardPage.tsx: make data prop optional, pass required activeFilter/isLoaded to tables
- PullRequestsTab.tsx: remove unused hasError/retry, cast unknown error to string
- DatePicker.tsx: fix missing calendarSelected reference, keep required prop in interface
- ErrorBoundary.test.tsx: annotate ThrowingChild return type for JSX compatibility
- client.test.ts: cast caught errors to RateLimitError type
- AuthContext.test.tsx: use any type for hrefSetter to satisfy PropertyDescriptor.set
@444notdotun 444notdotun force-pushed the feat/searchpage-live branch from 4b30c84 to b03f799 Compare June 29, 2026 18:28
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.

Replace in-memory mock results in dashboard SearchPage with live search API and result states

1 participant