# Update Organization Membership Settings Component

PropelAuth's Update Organization Membership Settings component allows you to customize the flow around a user updating an organization's membership settings in your app.

## Update Organization Membership Settings

Allow anyone with an @example.com email address to join this organization

Only users with an @example.com email address can join this organization

Save Membership Settings

---

## [Shadcn Installation](https://ui.propelauth.com/org-membership-components/update-org-membership-settings#shadcn-installation)

Install this component from our [shadcn registry](https://ui.propelauth.com/getting-started/component-registry).

```bash
npx shadcn@latest add https://components.propelauth.com/r/update-org-membership-settings.json
```

---

# Reference APIs

These are the APIs that are used by the above component. You can use these APIs directly in your own code.

## [fetchOrgSettings](https://ui.propelauth.com/org-membership-components/update-org-membership-settings#fetch-org-settings)

Fetches the provided org's settings and information, such as org name, SAML status, 2FA requirements, and more.

## Arguments

- Name `org_id` *Type string* Description The ID of the org.

## Success Response

- Name `org_name` Type string Description The name of the organization.
- Name `user_can_edit_org_access` Type boolean Description Returns true if the user has the necessary permissions to update the org settings.
- Name `user_can_update_metadata` Type boolean Description Returns true if the user has the necessary permissions to update the org metadata.
- Name `autojoin_by_domain` Type boolean Description If a domain is set for the org, new users can join the org if their domain matches the org's domain.
- Name `restrict_to_domain` Type boolean Description If a domain is set for the org, only allow users with that domain to join.
- Name `require_2fa_by` Type string | null Description The date by which 2FA is required for the org. If null, 2FA is not required.
- Name `existing_domain` Type string | null Description The org's current domain, if one is set.
- Name `current_user_domain` Type string Description The domain of the current user.
- Name `current_user_domain_is_personal` Type boolean Description Returns true if the current user's domain is personal (e.g. gmail.com).
- Name `can_setup_saml` Type boolean Description

Returns true if the org can set up [SAML](https://docs.propelauth.com/overview/authentication/saml).

- Name `is_saml_enabled` Type boolean Description

Returns true if the org has [SAML](https://docs.propelauth.com/overview/authentication/saml) enabled.

- Name `is_saml_in_test_mode` Type boolean Description

Returns true if the org has [SAML](https://docs.propelauth.com/overview/authentication/saml) in test mode.

- Name `can_setup_scim` Type boolean Description

Returns true if the org can set up [SCIM](https://docs.propelauth.com/overview/authentication/scim).

- Name `is_scim_enabled` Type boolean Description

Returns true if the org can set has [SCIM](https://docs.propelauth.com/overview/authentication/scim) enabled.

## Response Functions

The response object has a **handle** function that you can use to handle the response. These functions can be async, and you can return values from them.

- Name `success` Description Successful request.
- Name `orgsNotEnabled` Description Orgs are not enabled in the PropelAuth dashboard.
- Name `orgNotFound` Description The provided organization was not found.
- Name `forbidden` Description The user does not have permission to view the organization settings.
- Name `unauthorized` Description The user is not logged in.
- Name `unexpectedOrUnhandled` Description An unexpected error occurred.

### Request

```javascript
const { fetchOrgSettings } = useAuthFrontendApis()

const response = await fetchOrgSettings('1189c444-8a2d-4c41-8b4b-ae43ce79a492')
await response.handle({
    success: (data) => {
        console.log(data)
    },
    orgsNotEnabled() {
        console.log('Organizations are not enabled.')
    },
    orgNotFound() {
        console.log('Organization not found.')
    },
    forbidden() {
        console.log("You do not have permission to view this organization's settings.")
    },
    unexpectedOrUnhandled() {
        console.log('An unexpected error occurred.')
    },
})
```

### Successful Response

```
{
    "user_can_update_metadata": true,
    "user_can_edit_org_access": true,
    "org_name": "Acme Inc",
    "autojoin_by_domain": true,
    "restrict_to_domain": true,
    "existing_domain": "acmeinc.com",
    "current_user_domain": "acmeinc.com",
    "current_user_domain_is_personal": false,
    "require_2fa_by": "1732645813",
    "can_setup_saml": true,
    "is_saml_enabled": false,
    "is_saml_in_test_mode": false,
    "can_setup_scim": false,
    "is_scim_enabled": false
}
```

---

## [updateOrgSettings](https://ui.propelauth.com/org-membership-components/update-org-membership-settings#update-org-settings)

Updates the settings for an organization.

## Arguments

- Name `org_id` *Type string* Description The ID of the org to be updated.
- Name `name` *Type string* Description The new name of the org.
- Name `allow_users_to_join_by_domain` *Type boolean* Description If a domain is set for the org, new users can join the org if their domain matches the org's domain.
- Name `restrict_invites_by_domain` *Type boolean* Description If a domain is set for the org, only allow users with that domain to join.
- Name `require_2fa_by` *Type date* Description If requiring 2FA for an org, the date you want to enforce it by.

## Response Functions

The response object has a **handle** function that you can use to handle the response. These functions can be async, and you can return values from them.

- Name `success` Description Successful request.
- Name `orgsNotEnabled` Description Organizations are not enabled in this project.
- Name `orgNotFound` Description The provided orgId was not found
- Name `forbidden` Description The user does not have permission to edit the org.
- Name `badRequest` Description Incorrect arguments given.
- Name `unauthorized` Description The user is not logged in.
- Name `unexpectedOrUnhandled` Description An unexpected error occurred.

### Request

```javascript
const { updateOrgSettings } = useAuthFrontendApis()

const response = await updateOrgSettings({
    org_id: '1189c444-8a2d-4c41-8b4b-ae43ce79a492',
    name: 'Acme Inc',
    allow_users_to_join_by_domain: true,
    restrict_invites_by_domain: true,
    require_2fa_by: '2025-01-16T00:00:00.000Z',
})
response.handle({
    success() {
        console.log('Updated org settings successfully.')
    },
    badRequest(error) {
        for (const [field, fieldErrorMessage] of Object.entries(error.user_facing_errors)) {
            console.log('Error: "' + fieldErrorMessage + '" for field: "' + field + '"')
        }
    },
    orgsNotEnabled(error) {
        console.log('Org not enabled', error)
    },
    orgNotFound(error) {
        console.log('Org not found', error)
    },
    forbidden(error) {
        console.log('Forbidden', error)
    },
    unexpectedOrUnhandled(error) {
        console.log('Unexpected or unhandled error', error)
    },
})
```

### Successful Response

```
{}
```
