## Summary
- Extracts `useUserProjectRegions` (org + project region aggregation,
fail-open on fetch errors) and `useEmergencyIncidentOverride` (the
`ongoingIncident` flag / env var check) out of
`useStatusPageBannerVisibility`, so the upcoming incident.io status-page
banner can reuse both without duplicating the org/project fan-out logic.
- No behavior change for the legacy banner except one intentional fix:
`StatusPageBanner.utils.ts` compared the incident's affected regions
(lowercased) against the user's regions (not normalized), so a
mixed-case region on either side could silently fail to match. Both
sides now go through the same `normalizeRegion` helper.
- Part of the Linear FE-4057 stack (PR 5a of 6). Base branch is PR 4
(`charis/fe-4057-pr4-project-creation-status-admonition`), not master.
Linear: FE-4057
## Test plan
- [x] `pnpm --filter studio run typecheck`
- [x] `pnpm --filter studio run lint:ratchet`
- [x] `pnpm knip --workspace apps/studio`
- [x] `pnpm test:prettier`
- [x] `pnpm --filter studio exec vitest run` on the touched test files
and the `hooks/misc/` and `components/layouts/AppLayout/` directories
(all passing, no regressions)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Bug Fixes**
* Improved status banner targeting by matching incidents against
normalized regions across the user’s projects.
* Updated banner visibility checks to handle incomplete project or
region data, including when project information fails to load.
* Improved loading behavior so the banner can be evaluated based on
user-region data rather than waiting for separate organization and
project requests.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Feature enhancement — smarter incident banner targeting logic
## What is the current behavior?
Displaying the incident banner requires toggling a flag or environment
variable. Banners are shown to all users regardless of whether their
projects are in affected regions or whether the incident affects project
creation.
## What is the new behavior?
Banner visibility is now driven by `show_banner` metadata from the
StatusPage API — no manual flag or env var toggle needed. Per-user
targeting is then applied:
- Users with projects only see the banner when they have a database in
an affected region
- Users without projects only see the banner when the incident affects
project creation
Incident responses are enriched with cache data (`affected_regions`,
`affects_project_creation`) fetched from a Supabase table. Visibility
logic is extracted into a dedicated hook and pure utility function,
backed by unit tests.
## Additional context
Resolves FE-2562
* Use version 2 organization roles endpoint and fix all affected files + unit tests
* Update API codegen
* Replace all usage of old useProjectsQuery with useOrgProjectsInfiniteQuery
* Swap access callout for project roles to use collapsible instead
* Deprecate useProjectsQuery and clean up
* Update apps/studio/components/interfaces/Organization/TeamSettings/UpdateRolesPanel/UpdateRolesPanel.tsx
Co-authored-by: Alaister Young <alaister@users.noreply.github.com>
---------
Co-authored-by: Alaister Young <alaister@users.noreply.github.com>
* init
* Infinite scrolling pagination for projects in table view
* Infinite scrolling pagination for projects in cards view
* Shift searching projects to URL state + to server side
* Shift status filter to URL state
* opt to use local storage query for view moe
* update wildcard project route
* add created at value, and shift filter status to server side
* Nit
* final nit
* Address comments
* Fix
* Prettier
* Raise page limit to 96
* add new ui for restore to new project
* rm false
* fix typeerr badly
* add form with name and new project pass
* fix flash in loading > results state change
* restore api types
* update api types, add pitr picker
* add additional monthly spend section
* fix loading state jump
* update copy
* update api types
* update to new clone status api res
* fix mutation missing vars
* dont render logical backups in list
* fix state issue on submit
* better pitr empty state
* Update apps/studio/pages/project/[ref]/database/backups/restore-to-new-project.tsx
Co-authored-by: Wen Bo Xie <5532241+w3b6x9@users.noreply.github.com>
* Update apps/studio/pages/project/[ref]/database/backups/restore-to-new-project.tsx
Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
* Apply suggestions from code review
Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
Co-authored-by: Wen Bo Xie <5532241+w3b6x9@users.noreply.github.com>
* update api types to accept recoveryTimeTarget for PITR restores
* simplify pitr code a bit cleanup state bugs
* cleanup
* add PITR submit
* dont show restore btn unless status is complete
* update api types
* fix backups nav
* markdown descs and fix type err in nav
* check if project is cloned
* fix: make source project data optional
* fix datepicker highlighted day style
* fix tz picker
* check if its same or before/after in isWithinRange
* update api types fix issue with clones
* unsus
* fix markdown rendering issues
* add badge
* Update database roles and permissions description
* Update restore message text in PITR form component
* Update key attribute to item.id in DatabaseBackupsNav component
* Add conditional rendering for multiple available dates
* Refactor dialog section styles in restore-to-new-project.tsx
* Update null to undefined in conditional text assignment
* reuse component in pitr backups
* Update apps/studio/pages/project/[ref]/database/backups/restore-to-new-project.tsx
Co-authored-by: Wen Bo Xie <5532241+w3b6x9@users.noreply.github.com>
* Update link to original project in RestoreToNewProject
* fix prettier
---------
Co-authored-by: Wen Bo Xie <5532241+w3b6x9@users.noreply.github.com>
Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
Co-authored-by: Crispy1975 <12525875+Crispy1975@users.noreply.github.com>
* Disable restores if project paused for longer than 30 days
* Update to 90 days
* Update copy
* PRetty
* Update based on API changfes
* Prettier
* Update
* Minor copy fix
* simplify wording
---------
Co-authored-by: Alaister Young <a@alaisteryoung.com>
* Move all studio files from /studio to /apps/studio.
* Move studio specific prettier ignores.
* Fix the ui references from studio.
* Fix the css imports.
* Fix all package.json issues.
* Fix the prettier setup for the studio app.
* Add .turbo folder to prettierignore.
* Fix the github workflows.