Files
supabase/apps/studio/components/interfaces/Functions/httpHeaderAddActions.test.ts
Danny White b23c6a7fed chore(studio): share key-value field array editor (#43938)
## What kind of change does this PR introduce?

Chore that references DEPR-394.

## What is the current behavior?

Key/value editors for headers are implemented separately in multiple
places.

## What is the new behavior?

DEPR-394 is consolidating repeated RHF field-array UIs across Studio and
the design system.

- adds a shared `KeyValueFieldArray` component in `ui-patterns`
- adds a shared `httpHeaderAddActions` helper for preset header rows
- migrates the key/value header editors in:
  - Platform Webhooks
  - Cron Jobs HTTP headers
  - Database Webhooks HTTP headers
- documents the key/value pattern in the design system with:
  - a dedicated fragment page
  - updated forms guidance
  - updated form pattern demos

| Preview |
| --- |
| <img width="1102" height="420" alt="CleanShot 2026-03-23 at 12 22
18@2x"
src="https://github.com/user-attachments/assets/f8d23ff9-7063-462f-8074-b400561f77e9"
/> |

## Additional context

This is PR 1 of a 3-PR stack for DEPR-394.
2026-03-24 16:16:03 +11:00

31 lines
952 B
TypeScript

import { describe, expect, it } from 'vitest'
import { buildEdgeFunctionHeaderAddActions } from './httpHeaderAddActions'
describe('buildEdgeFunctionHeaderAddActions', () => {
it('includes the apikey header when requested', () => {
const [authAction] = buildEdgeFunctionHeaderAddActions({
apiKey: 'secret-key',
includeApiKeyHeader: true,
createRow: (name, value) => ({ name, value }),
})
expect(authAction.createRows()).toEqual([
{ name: 'Authorization', value: 'Bearer secret-key' },
{ name: 'apikey', value: 'secret-key' },
])
})
it('omits the apikey header when not requested', () => {
const [authAction] = buildEdgeFunctionHeaderAddActions({
apiKey: 'service-key',
includeApiKeyHeader: false,
createRow: (name, value) => ({ name, value }),
})
expect(authAction.createRows()).toEqual([
{ name: 'Authorization', value: 'Bearer service-key' },
])
})
})