useOrganizationCreationDefaults()
The useOrganizationCreationDefaults() hook retrieves the organization creation defaults for the current user. This includes a suggested organization name based on your application's default naming rules, and an advisory if an organization with that name or domain already exists.
Parameters
useOrganizationCreationDefaults() accepts a single object with the following optional properties:
- Name
-
data - Type
undefined | null | OrganizationCreationDefaultsResource- Description
The organization creation defaults resource,
undefinedbefore the first fetch, ornullif not available.
- Name
form- Type
object- Description
An object containing the suggested form values:
name- The suggested organization name.slug- The suggested organization slug.logo- The suggested organization logo URL, ornull.blurHash- The blur hash for the logo, ornull.
- Name
advisory- Type
object | null- Description
An advisory object if there's a potential issue with the suggested organization, or
nullif no issues. Contains:code- The advisory type. Currently only'organization_already_exists'.severity- The severity level. Currently only'warning'.meta- Additional metadata, such asorganization_nameandorganization_domainfor existing organizations.
Examples
Basic usage
The following example demonstrates how to use the useOrganizationCreationDefaults() hook to pre-populate an organization creation form with suggested values.
import { useOrganizationCreationDefaults, useOrganizationList } from '@clerk/expo'
import { useEffect, useState } from 'react'
import { Text, TextInput, TouchableOpacity, View } from 'react-native'
export default function CreateOrganization() {
const { createOrganization } = useOrganizationList()
const { data: defaults, isLoading } = useOrganizationCreationDefaults()
const [organizationName, setOrganizationName] = useState('')
// Pre-populate the form with suggested organization name
useEffect(() => {
if (defaults?.form.name) {
setOrganizationName(defaults.form.name)
}
}, [defaults?.form.name])
if (isLoading) return <Text>Loading...</Text>
const handleSubmit = async () => {
await createOrganization?.({ name: organizationName })
}
return (
<View>
<TextInput
value={organizationName}
onChangeText={setOrganizationName}
placeholder="Organization name"
/>
<TouchableOpacity onPress={handleSubmit}>
<Text>Create organization</Text>
</TouchableOpacity>
</View>
)
}Display advisory warnings
The following example demonstrates how to use the advisory property to display a warning when an organization with the suggested name or domain already exists.
import { ThemedText } from '@/components/themed-text'
import { ThemedView } from '@/components/themed-view'
import { useOrganizationList } from '@clerk/expo'
import * as React from 'react'
import { Pressable, StyleSheet, TextInput } from 'react-native'
export default function CreateOrganization() {
const { createOrganization, setActive } = useOrganizationList()
const [organizationName, setOrganizationName] = React.useState('')
const [isSubmitting, setIsSubmitting] = React.useState(false)
const [completed, setCompleted] = React.useState(false)
const handleSubmit = async () => {
try {
setIsSubmitting(true)
const newOrganization = await createOrganization?.({ name: organizationName })
// Set the created Organization as the Active Organization
if (newOrganization) {
await setActive?.({ organization: newOrganization.id })
setIsSubmitting(false)
setCompleted(true)
setOrganizationName('')
setTimeout(() => {
setCompleted(false)
}, 3000)
}
} catch (err) {
// See https://clerk.com/docs/guides/development/custom-flows/error-handling
// for more info on error handling
console.error(JSON.stringify(err, null, 2))
}
}
return (
<ThemedView style={styles.container}>
<ThemedText style={styles.label}>Organization name</ThemedText>
<TextInput
style={styles.input}
value={organizationName}
onChangeText={setOrganizationName}
placeholder="Organization name"
placeholderTextColor="#666666"
/>
<Pressable
style={({ pressed }) => [
styles.button,
completed && styles.buttonSuccess,
!organizationName && !completed && styles.buttonDisabled,
pressed && !completed && styles.buttonPressed,
]}
onPress={handleSubmit}
disabled={!organizationName || isSubmitting}
>
<ThemedText style={styles.buttonText} disabled={isSubmitting}>
{completed ? 'Organization created' : 'Create organization'}
</ThemedText>
</Pressable>
</ThemedView>
)
}
const styles = StyleSheet.create({
container: {
gap: 12,
},
label: {
fontWeight: '600',
fontSize: 14,
},
input: {
borderWidth: 1,
borderColor: '#ccc',
borderRadius: 8,
padding: 12,
fontSize: 16,
backgroundColor: '#fff',
},
button: {
backgroundColor: '#0a7ea4',
paddingVertical: 12,
paddingHorizontal: 24,
borderRadius: 8,
alignItems: 'center',
marginTop: 8,
},
buttonSuccess: {
backgroundColor: '#2e7d32',
},
buttonPressed: {
opacity: 0.7,
},
buttonDisabled: {
opacity: 0.5,
},
buttonText: {
color: '#fff',
fontWeight: '600',
},
})Build a custom flow for creating Organizations
Learn how to build a custom flow for creating Organizations.
Configure default naming rules
Learn how to configure default naming rules for your Organizations.
Feedback
Last updated on