"use client"; import { useState } from "react"; import { observer } from "mobx-react"; import useSWR from "swr"; // plane internal packages import { setPromiseToast } from "@plane/propel/toast"; import type { TInstanceConfigurationKeys } from "@plane/types"; import { Loader, ToggleSwitch } from "@plane/ui"; import { cn } from "@plane/utils"; // hooks import { useInstance } from "@/hooks/store"; // plane admin components import { AuthenticationModes } from "@/plane-admin/components/authentication"; import type { Route } from "./+types/page"; const InstanceAuthenticationPage = observer>(() => { // store const { fetchInstanceConfigurations, formattedConfig, updateInstanceConfigurations } = useInstance(); useSWR("INSTANCE_CONFIGURATIONS", () => fetchInstanceConfigurations()); // state const [isSubmitting, setIsSubmitting] = useState(false); // derived values const enableSignUpConfig = formattedConfig?.ENABLE_SIGNUP ?? ""; const updateConfig = async (key: TInstanceConfigurationKeys, value: string) => { setIsSubmitting(true); const payload = { [key]: value, }; const updateConfigPromise = updateInstanceConfigurations(payload); setPromiseToast(updateConfigPromise, { loading: "Saving configuration", success: { title: "Success", message: () => "Configuration saved successfully", }, error: { title: "Error", message: () => "Failed to save configuration", }, }); await updateConfigPromise .then(() => { setIsSubmitting(false); }) .catch((err) => { console.error(err); setIsSubmitting(false); }); }; return ( <>
Manage authentication modes for your instance
Configure authentication modes for your team and restrict sign-ups to be invite only.
{formattedConfig ? (
Allow anyone to sign up even without an invite
Toggling this off will only let users sign up when they are invited.
{ if (Boolean(parseInt(enableSignUpConfig)) === true) { updateConfig("ENABLE_SIGNUP", "0"); } else { updateConfig("ENABLE_SIGNUP", "1"); } }} size="sm" disabled={isSubmitting} />
Available authentication modes
) : ( )}
); }); export const meta: Route.MetaFunction = () => [{ title: "Authentication Settings - Plane Web" }]; export default InstanceAuthenticationPage;