skillhub/web/src/shared/hooks
Michael a063090a52
fix(web): stop React 19 portal removeChild/insertBefore crashes (#624)
* fix(web): replace custom Dialog with Radix to stop portal races

Hand-rolled createPortal siblings on document.body raced with Radix
Select/DropdownMenu/Sonner under React 19 (insertBefore/removeChild).
Use @radix-ui/react-dialog like select/dropdown adapters and bail out
overview ResizeObserver setState when values are unchanged.

Signed-off-by: Mikhail Neradkov <michael.neradkov@gmail.com>

* fix(web): stop portal removeChild races on search and shell

Move Radix portals to #skillhub-portals, drop language-switcher body
portal (match UserMenu), remove Select/Dropdown exit animations, and keep
previous search results while typing to avoid skeleton unmount churn.

Signed-off-by: Mikhail Neradkov <michael.neradkov@gmail.com>

* fix(web): systemic overlay teardown for React 19 removeChild

Render Select/Dropdown in-tree (no Portal), translate=no on overlays,
dismiss overlays on pathname change, defer navigate after close, host
Toaster in #skillhub-portals, and add recoverable RouteError UI.

Signed-off-by: Mikhail Neradkov <michael.neradkov@gmail.com>

* fix(web): harden overlay dismiss after code review

Clip decorative layer only, dismiss Dialog via overlay pointer events,
log RouteError once in useEffect, and defer skill-detail leave navigations.

Signed-off-by: Mikhail Neradkov <michael.neradkov@gmail.com>

* fix(web): batch starred highlight and defer Sonner toasts

Avoid N× per-card star fetches on /search and flushSync toast races
during React 19 list re-renders (removeChild / insertBefore).

Signed-off-by: Mikhail Neradkov <michael.neradkov@gmail.com>

* fix(web): block Chrome Translate DOM races on skill overview

Keep html/#root notranslate, sync lang with i18n, and harden overview
expand so memoized markdown + quiet ResizeObserver avoid insertBefore crashes.

Signed-off-by: Mikhail Neradkov <michael.neradkov@gmail.com>

---------

Signed-off-by: Mikhail Neradkov <michael.neradkov@gmail.com>
2026-08-04 13:59:37 +08:00
..
label-query.test.ts feat(notification): add in-app notifications and harden delivery 2026-03-23 12:31:28 +08:00
label-query.ts feat(notification): add in-app notifications and harden delivery 2026-03-23 12:31:28 +08:00
query-keys.test.ts test(web): add colocated frontend coverage 2026-03-23 16:13:34 +08:00
query-keys.ts refactor: address code review findings from 2026-03-22 2026-03-23 13:48:23 +08:00
skill-query-helpers.test.ts fix(search): preserve empty-query discovery results 2026-04-23 16:24:23 +08:00
skill-query-helpers.ts fix(search): preserve empty-query discovery results 2026-04-23 16:24:23 +08:00
use-debounce.test.ts test(web): add colocated frontend coverage 2026-03-23 16:13:34 +08:00
use-debounce.ts feat(web): add Phase 2 frontend foundation - types, hooks, shared and feature components 2026-03-12 02:43:01 +08:00
use-in-view.test.ts test(web): add colocated frontend coverage 2026-03-23 16:13:34 +08:00
use-in-view.ts fix: handle archived skill version deletion 2026-03-19 14:54:04 +08:00
use-label-queries.test.ts test(web): add colocated frontend coverage 2026-03-23 16:13:34 +08:00
use-label-queries.ts refactor: address code review findings from 2026-03-22 2026-03-23 13:48:23 +08:00
use-namespace-queries.test.ts test(web): add colocated frontend coverage 2026-03-23 16:13:34 +08:00
use-namespace-queries.ts Merge branch 'main' into fix/namespace-management-gaps 2026-05-09 15:13:44 +08:00
use-skill-queries.test.ts refactor: address code review findings from 2026-03-22 2026-03-23 13:48:23 +08:00
use-skill-queries.ts fix(web): stop React 19 portal removeChild/insertBefore crashes (#624) 2026-08-04 13:59:37 +08:00
use-user-queries.test.ts test(web): add colocated frontend coverage 2026-03-23 16:13:34 +08:00
use-user-queries.ts feat(my-skills): add keyword search, namespace filter and clickable pagination (#493) 2026-06-05 17:24:51 +08:00