import { createFileRoute } from "@tanstack/react-router";
import { useState } from "react";
import { Exit } from "effect";
import * as AsyncResult from "effect/unstable/reactivity/AsyncResult";
import { useAtom, useAtomValue } from "@effect/atom-react";
import { toast } from "@executor-js/react/components/sonner";
import { Button } from "@executor-js/react/components/button";
import { CopyButton } from "@executor-js/react/components/copy-button";
import { Input } from "@executor-js/react/components/input";
import { Label } from "@executor-js/react/components/label";
import { NativeSelect, NativeSelectOption } from "@executor-js/react/components/native-select";
import { useExecutorDocumentTitle } from "@executor-js/react/lib/document-title";
import {
orgMembersAtom,
removeMember,
updateMemberRole,
} from "@executor-js/react/api/account-atoms";
import { orgMemberWriteKeys } from "@executor-js/react/api/reactivity-keys";
import { createInvite, invitesAtom, inviteWriteKeys, revokeInvite } from "../../admin-atoms";
export const Route = createFileRoute("/{-$orgSlug}/admin")({
component: AdminPage,
});
const ROLES = ["member", "admin"] as const;
// Instance admin console. Members reuse the shared account atoms; invite codes
// are the self-host join mechanism. The API gates to owner/admin, so a
// non-admin who opens this just sees load failures.
function AdminPage() {
useExecutorDocumentTitle("Admin");
return (
Admin
Manage members and invite links for this instance.