- keep loading state when installed app list is refetching without a matched id
- align installed-app tests with TanStack Query isPending semantics
- add refetch regression assertions to avoid early 404 fallback
Replace ExploreContext with derived permission checks using useAppContext
and useMembers, eliminating redundant state synchronization. Add oRPC
contract for explore endpoints, extract TryAppSelection type, and migrate
app-publisher icons from @remixicon/react components to CSS icon classes.
Update all related tests to reflect the new context-free architecture.
Eliminate useEffect-based synchronization of React Query server state
into React Context, which caused extra renders, state drift, and
incorrect loading/empty states on the /explore/apps page.
- Remove installedApps, isFetchingInstalledApps, and
controlUpdateInstalledApps from ExploreContext (dead code + anti-pattern)
- Sidebar and InstalledApp now consume useGetInstalledApps() directly
- Use isLoading (not isPending) for conditionally-enabled queries to
avoid permanent loading state when query is disabled
- Derive hasEditPermission during render instead of via useEffect
- Replace FC type annotations with const arrow functions
- Add return type to fetchInstalledAppList
- Update all related unit and integration tests