mirror of
https://github.com/supabase/supabase.git
synced 2026-10-11 04:15:04 +03:00
## Problem Dashboard users need a notice about the Terms of Service update alongside #51106 and #51107. ## Solution Reuse the organisation landing-page notice pattern from #50397. A compact “We've updated our Terms of Service.” notice opens the explanation and agreement link through **Learn more**. Closing the notice or choosing **Got it** remembers dismissal in the browser with a new version-specific key. ```text Organisation landing page Notice → Learn more → Explanation and Terms of Service link Close / Got it → Remember dismissal ``` | After | | --- | | <img width="628" height="444" alt="CleanShot 2026-10-06 at 14 47 46@2x" src="https://github.com/user-attachments/assets/72922712-321f-4972-b20c-1a075e0745d0" /> | | _Banner_ | | <img width="1078" height="718" alt="CleanShot 2026-10-06 at 16 58 18@2x" src="https://github.com/user-attachments/assets/2109c2ab-e9b7-4855-8acb-42d5232cd002" /> | | _Dialog_ | ## Review instructions 1. Open `/organizations` or an organisation's `/org/<slug>` landing page in the hosted Studio preview. Expect the compact notice. 2. Click **Learn more**. Expect the explanation and a link to the Terms of Service. Escape closes the dialog without dismissing the notice. 3. Choose **Got it**, then reload. The notice stays dismissed. Repeat in a fresh browser profile using **Close banner**. 4. Open a project or an organisation settings page. The notice should not appear.
51 lines
1.2 KiB
TypeScript
51 lines
1.2 KiB
TypeScript
import { describe, expect, test } from 'vitest'
|
|
|
|
import {
|
|
isLogsOrObservabilityPath,
|
|
isOrganizationLandingPath,
|
|
} from '@/components/interfaces/App/AppBannerWrapper.utils'
|
|
|
|
describe('isLogsOrObservabilityPath', () => {
|
|
test.each([
|
|
'/project/abc/logs',
|
|
'/project/abc/logs/',
|
|
'/project/abc/logs/explorer',
|
|
'/project/abc/observability',
|
|
'/project/abc/observability/query-performance',
|
|
])('matches %s', (pathname) => {
|
|
expect(isLogsOrObservabilityPath(pathname)).toBe(true)
|
|
})
|
|
|
|
test.each([
|
|
undefined,
|
|
null,
|
|
'',
|
|
'/project/abc',
|
|
'/project/abc/editor',
|
|
'/project/abc/logs-explorer',
|
|
'/project/abc/functions/my-fn/logs',
|
|
'/org/abc/logs',
|
|
])('does not match %s', (pathname) => {
|
|
expect(isLogsOrObservabilityPath(pathname)).toBe(false)
|
|
})
|
|
})
|
|
|
|
describe('isOrganizationLandingPath', () => {
|
|
test.each(['/org', '/organizations', '/org/my-org', '/org/my-org/'])('matches %s', (pathname) => {
|
|
expect(isOrganizationLandingPath(pathname)).toBe(true)
|
|
})
|
|
|
|
test.each([
|
|
undefined,
|
|
null,
|
|
'',
|
|
'/',
|
|
'/sign-in',
|
|
'/project/abc',
|
|
'/org/abc/general',
|
|
'/organizations/new',
|
|
])('does not match %s', (pathname) => {
|
|
expect(isOrganizationLandingPath(pathname)).toBe(false)
|
|
})
|
|
})
|