import { UseFormReturn } from 'react-hook-form' import { Button } from 'ui' import { FormItemLayout } from 'ui-patterns/form/FormItemLayout/FormItemLayout' import { SingleValueFieldArray } from 'ui-patterns/form/SingleValueFieldArray/SingleValueFieldArray' import type { SSOConfigFormSchema } from './SSOConfig' type ProviderAttribute = 'emailMapping' | 'userNameMapping' | 'firstNameMapping' | 'lastNameMapping' type ProviderPreset = { name: string attributeMapping: { keys: { email?: { name: string } user_name?: { name: string } first_name?: { name: string } last_name?: { name: string } name_identifier?: { name: string } } } } const PROVIDER_PRESETS: ProviderPreset[] = [ { name: 'GSuite', attributeMapping: { keys: { email: { name: 'email', }, user_name: { name: 'user_name', }, first_name: { name: 'first_name', }, last_name: { name: 'last_name', }, }, }, }, { name: 'Azure', attributeMapping: { keys: { email: { name: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress', }, name_identifier: { name: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier', }, first_name: { name: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname', }, last_name: { name: 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname', }, }, }, }, { name: 'Okta', attributeMapping: { keys: { email: { name: 'email', }, user_name: { name: 'user_name', }, first_name: { name: 'first_name', }, last_name: { name: 'last_name', }, }, }, }, ] as const export const AttributeMapping = ({ form, emailField, userNameField, firstNameField, lastNameField, }: { form: UseFormReturn emailField: ProviderAttribute userNameField: ProviderAttribute firstNameField: ProviderAttribute lastNameField: ProviderAttribute }) => { // Helper to apply a preset function applyPreset(preset: ProviderPreset) { const keys = preset.attributeMapping.keys // Set each field if present in the preset, otherwise clear form.setValue(emailField, [{ value: keys.email?.name ?? '' }], { shouldDirty: true }) form.setValue(userNameField, [{ value: keys.user_name?.name ?? '' }], { shouldDirty: true }) form.setValue(firstNameField, [{ value: keys.first_name?.name ?? '' }], { shouldDirty: true }) form.setValue(lastNameField, [{ value: keys.last_name?.name ?? '' }], { shouldDirty: true }) } return (

Map SSO attributes to user fields

Presets for supported identity providers:

{PROVIDER_PRESETS.map((preset) => ( ))}
} className="gap-1" >
) } const MappingFieldArray = ({ form, fieldName, label, required, placeholder, }: { form: UseFormReturn fieldName: ProviderAttribute label: string required: boolean placeholder?: string }) => { return (
{label} {!required ? Optional : null}
({ value: '' })} placeholder={placeholder ?? ''} addLabel="Add another" removeLabel={`Remove ${label} mapping`} minimumRows={1} inputAutoComplete="off" rowsClassName="grid gap-2 w-full" addButtonType="default" addButtonClassName="w-auto self-start justify-self-start" />
) }