Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
653 changes: 253 additions & 400 deletions packages/web/src/actions.ts

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion packages/web/src/app/[domain]/chat/[id]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ export default async function Page(props: PageProps) {

const languageModels = await getConfiguredLanguageModelsInfo();
const repos = await getRepos();
const searchContexts = await getSearchContexts(params.domain);
const searchContexts = await getSearchContexts();
const chatInfo = await getChatInfo({ chatId: params.id });
const chatHistory = session ? await getUserChatHistory() : [];

Expand Down
2 changes: 1 addition & 1 deletion packages/web/src/app/[domain]/chat/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ interface PageProps {
export default async function Page(props: PageProps) {
const params = await props.params;
const languageModels = await getConfiguredLanguageModelsInfo();
const searchContexts = await getSearchContexts(params.domain);
const searchContexts = await getSearchContexts();
const allRepos = await getRepos();
const session = await auth();
const chatHistory = session ? await getUserChatHistory() : [];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export const NavigationMenu = async ({
throw new ServiceErrorException(repoStats);
}

const role = isAuthenticated ? await getCurrentUserRole(domain) : null;
const role = isAuthenticated ? await getCurrentUserRole() : null;
if (isServiceError(role)) {
throw new ServiceErrorException(role);
}
Expand All @@ -43,7 +43,7 @@ export const NavigationMenu = async ({
return null;
}

const joinRequests = await getOrgAccountRequests(domain);
const joinRequests = await getOrgAccountRequests();
if (isServiceError(joinRequests)) {
throw new ServiceErrorException(joinRequests);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ export const useSuggestionsData = ({

const { data: searchContextSuggestions, isLoading: _isLoadingSearchContexts } = useQuery({
queryKey: ["searchContexts", domain],
queryFn: () => getSearchContexts(domain),
queryFn: () => getSearchContexts(),
select: (data): Suggestion[] => {
if (isServiceError(data)) {
return [];
Expand Down
2 changes: 1 addition & 1 deletion packages/web/src/app/[domain]/repos/[id]/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ export default async function RepoDetailPage({ params }: { params: Promise<{ id:

const repoMetadata = repoMetadataSchema.parse(repo.metadata);

const userRole = await getCurrentUserRole(SINGLE_TENANT_ORG_DOMAIN);
const userRole = await getCurrentUserRole();
if (isServiceError(userRole)) {
throw new ServiceErrorException(userRole);
}
Expand Down
2 changes: 1 addition & 1 deletion packages/web/src/app/[domain]/repos/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export default async function Layout(
throw new ServiceErrorException(repoStats);
}

const userRoleInOrg = await getCurrentUserRole(domain);
const userRoleInOrg = await getCurrentUserRole();

return (
<div className="min-h-screen flex flex-col">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import { Input } from "@/components/ui/input";
import { isServiceError } from "@/lib/utils";
import { Copy, Check, AlertTriangle, Loader2, Plus } from "lucide-react";
import { useCallback, useEffect, useMemo, useState } from "react";
import { useDomain } from "@/hooks/useDomain";
import { useToast } from "@/components/hooks/use-toast";
import useCaptureEvent from "@/hooks/useCaptureEvent";
import { DataTable } from "@/components/ui/data-table";
Expand All @@ -16,7 +15,6 @@ import { Skeleton } from "@/components/ui/skeleton";
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip";

export function ApiKeysPage({ canCreateApiKey }: { canCreateApiKey: boolean }) {
const domain = useDomain();
const { toast } = useToast();
const captureEvent = useCaptureEvent();

Expand All @@ -33,7 +31,7 @@ export function ApiKeysPage({ canCreateApiKey }: { canCreateApiKey: boolean }) {
setIsLoading(true);
setError(null);
try {
const keys = await getUserApiKeys(domain);
const keys = await getUserApiKeys();
if (isServiceError(keys)) {
setError("Failed to load API keys");
toast({
Expand All @@ -55,7 +53,7 @@ export function ApiKeysPage({ canCreateApiKey }: { canCreateApiKey: boolean }) {
} finally {
setIsLoading(false);
}
}, [domain, toast]);
}, [toast]);

useEffect(() => {
loadApiKeys();
Expand All @@ -73,7 +71,7 @@ export function ApiKeysPage({ canCreateApiKey }: { canCreateApiKey: boolean }) {

setIsCreatingKey(true);
try {
const result = await createApiKey(newKeyName.trim(), domain);
const result = await createApiKey(newKeyName.trim());
if (isServiceError(result)) {
toast({
title: "Error",
Expand Down
4 changes: 1 addition & 3 deletions packages/web/src/app/[domain]/settings/apiKeys/columns.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import { ColumnDef } from "@tanstack/react-table"
import { ArrowUpDown, Key, Trash2 } from "lucide-react"
import { Button } from "@/components/ui/button"
import { deleteApiKey } from "@/actions"
import { useParams } from "next/navigation"
import {
AlertDialog,
AlertDialogAction,
Expand All @@ -27,14 +26,13 @@ export type ApiKeyColumnInfo = {

// Component for the actions cell to properly use React hooks
function ApiKeyActions({ apiKey }: { apiKey: ApiKeyColumnInfo }) {
const params = useParams<{ domain: string }>()
const [isPending, setIsPending] = useState(false)
const { toast } = useToast()

const handleDelete = async () => {
setIsPending(true)
try {
await deleteApiKey(apiKey.name, params.domain)
await deleteApiKey(apiKey.name)
window.location.reload()
} catch (error) {
console.error("Failed to delete API key", error)
Expand Down
2 changes: 1 addition & 1 deletion packages/web/src/app/[domain]/settings/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ export const getSidebarNavItems = async () =>
withAuthV2(async ({ role }) => {
let numJoinRequests: number | undefined;
if (role === OrgRole.OWNER) {
const requests = await getOrgAccountRequests(SINGLE_TENANT_ORG_DOMAIN);
const requests = await getOrgAccountRequests();
if (isServiceError(requests)) {
throw new ServiceErrorException(requests);
}
Expand Down
2 changes: 1 addition & 1 deletion packages/web/src/app/[domain]/settings/license/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ export default async function LicensePage(props: LicensePageProps) {
)
}

const members = await getOrgMembers(domain);
const members = await getOrgMembers();
if (isServiceError(members)) {
throw new ServiceErrorException(members);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import { PlusCircleIcon, Loader2, AlertCircle } from "lucide-react";
import { OrgRole } from "@prisma/client";
import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from "@/components/ui/alert-dialog";
import { createInvites } from "@/actions";
import { useDomain } from "@/hooks/useDomain";
import { isServiceError } from "@/lib/utils";
import { useToast } from "@/components/hooks/use-toast";
import { useRouter } from "next/navigation";
Expand All @@ -35,8 +34,7 @@ interface InviteMemberCardProps {
export const InviteMemberCard = ({ currentUserRole, seatsAvailable = true }: InviteMemberCardProps) => {
const [isInviteDialogOpen, setIsInviteDialogOpen] = useState(false);
const [isLoading, setIsLoading] = useState(false);
const domain = useDomain();
const { toast } = useToast();
const { toast } = useToast();
const router = useRouter();
const captureEvent = useCaptureEvent();

Expand All @@ -54,7 +52,7 @@ export const InviteMemberCard = ({ currentUserRole, seatsAvailable = true }: Inv

const onSubmit = useCallback((data: z.infer<typeof inviteMemberFormSchema>) => {
setIsLoading(true);
createInvites(data.emails.map(e => e.email), domain)
createInvites(data.emails.map(e => e.email))
.then((res) => {
if (isServiceError(res)) {
toast({
Expand All @@ -78,7 +76,7 @@ export const InviteMemberCard = ({ currentUserRole, seatsAvailable = true }: Inv
.finally(() => {
setIsLoading(false);
});
}, [domain, form, toast, router, captureEvent]);
}, [form, toast, router, captureEvent]);

const isDisabled = !seatsAvailable || currentUserRole !== OrgRole.OWNER || isLoading;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import { Copy, MoreVertical, Search } from "lucide-react";
import { useCallback, useMemo, useState } from "react";
import { cancelInvite } from "@/actions";
import { useRouter } from "next/navigation";
import { useDomain } from "@/hooks/useDomain";
import useCaptureEvent from "@/hooks/useCaptureEvent";
interface Invite {
id: string;
Expand All @@ -34,7 +33,6 @@ export const InvitesList = ({ invites, currentUserRole }: InviteListProps) => {
const [inviteToCancel, setInviteToCancel] = useState<Invite | null>(null)
const { toast } = useToast();
const router = useRouter();
const domain = useDomain();
const captureEvent = useCaptureEvent();

const filteredInvites = useMemo(() => {
Expand All @@ -53,7 +51,7 @@ export const InvitesList = ({ invites, currentUserRole }: InviteListProps) => {
}, [invites, searchQuery, dateSort]);

const onCancelInvite = useCallback((inviteId: string) => {
cancelInvite(inviteId, domain)
cancelInvite(inviteId)
.then((response) => {
if (isServiceError(response)) {
toast({
Expand All @@ -70,7 +68,7 @@ export const InvitesList = ({ invites, currentUserRole }: InviteListProps) => {
router.refresh();
}
});
}, [domain, toast, router, captureEvent]);
}, [toast, router, captureEvent]);

return (
<div className="w-full mx-auto space-y-6">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import { CheckCircle, Search, XCircle } from "lucide-react";
import { useCallback, useMemo, useState } from "react";
import { approveAccountRequest, rejectAccountRequest } from "@/actions";
import { useRouter } from "next/navigation";
import { useDomain } from "@/hooks/useDomain";
import useCaptureEvent from "@/hooks/useCaptureEvent";

interface Request {
Expand All @@ -36,7 +35,6 @@ export const RequestsList = ({ requests, currentUserRole }: RequestsListProps) =
const [requestToAction, setRequestToAction] = useState<Request | null>(null)
const { toast } = useToast();
const router = useRouter();
const domain = useDomain();
const captureEvent = useCaptureEvent();

const filteredRequests = useMemo(() => {
Expand All @@ -56,7 +54,7 @@ export const RequestsList = ({ requests, currentUserRole }: RequestsListProps) =
}, [requests, searchQuery, dateSort]);

const onApproveRequest = useCallback((requestId: string) => {
approveAccountRequest(requestId, domain)
approveAccountRequest(requestId)
.then((response) => {
if (isServiceError(response)) {
toast({
Expand All @@ -73,10 +71,10 @@ export const RequestsList = ({ requests, currentUserRole }: RequestsListProps) =
router.refresh();
}
});
}, [domain, toast, router, captureEvent]);
}, [toast, router, captureEvent]);

const onRejectRequest = useCallback((requestId: string) => {
rejectAccountRequest(requestId, domain)
rejectAccountRequest(requestId)
.then((response) => {
if (isServiceError(response)) {
toast({
Expand All @@ -93,7 +91,7 @@ export const RequestsList = ({ requests, currentUserRole }: RequestsListProps) =
router.refresh();
}
});
}, [domain, toast, router, captureEvent]);
}, [toast, router, captureEvent]);

return (
<div className="w-full mx-auto space-y-6">
Expand Down
6 changes: 3 additions & 3 deletions packages/web/src/app/[domain]/settings/members/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -56,17 +56,17 @@ export default async function MembersSettingsPage(props: MembersSettingsPageProp
redirect(`/${domain}/settings`);
}

const members = await getOrgMembers(domain);
const members = await getOrgMembers();
if (isServiceError(members)) {
throw new ServiceErrorException(members);
}

const invites = await getOrgInvites(domain);
const invites = await getOrgInvites();
if (isServiceError(invites)) {
throw new ServiceErrorException(invites);
}

const requests = await getOrgAccountRequests(domain);
const requests = await getOrgAccountRequests();
if (isServiceError(requests)) {
throw new ServiceErrorException(requests);
}
Expand Down
3 changes: 1 addition & 2 deletions packages/web/src/app/components/anonymousAccessToggle.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import { useState } from "react"
import { Switch } from "@/components/ui/switch"
import { setAnonymousAccessStatus } from "@/actions"
import { SINGLE_TENANT_ORG_DOMAIN } from "@/lib/constants"
import { isServiceError } from "@/lib/utils"
import { useToast } from "@/components/hooks/use-toast"

Expand All @@ -22,7 +21,7 @@ export function AnonymousAccessToggle({ hasAnonymousAccessEntitlement, anonymous
const handleToggle = async (checked: boolean) => {
setIsLoading(true)
try {
const result = await setAnonymousAccessStatus(SINGLE_TENANT_ORG_DOMAIN, checked)
const result = await setAnonymousAccessStatus(checked)

if (isServiceError(result)) {
toast({
Expand Down
3 changes: 1 addition & 2 deletions packages/web/src/app/components/inviteLinkToggle.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import { Input } from "@/components/ui/input"
import { Switch } from "@/components/ui/switch"
import { Copy, Check } from "lucide-react"
import { useToast } from "@/components/hooks/use-toast"
import { SINGLE_TENANT_ORG_DOMAIN } from "@/lib/constants"
import { setInviteLinkEnabled } from "@/actions"
import { isServiceError } from "@/lib/utils"

Expand All @@ -25,7 +24,7 @@ export function InviteLinkToggle({ inviteLinkEnabled, inviteLink }: InviteLinkTo
const handleToggle = async (checked: boolean) => {
setIsLoading(true)
try {
const result = await setInviteLinkEnabled(SINGLE_TENANT_ORG_DOMAIN, checked)
const result = await setInviteLinkEnabled(checked)

if (isServiceError(result)) {
toast({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import { useState } from "react"
import { Switch } from "@/components/ui/switch"
import { setMemberApprovalRequired } from "@/actions"
import { SINGLE_TENANT_ORG_DOMAIN } from "@/lib/constants"
import { isServiceError } from "@/lib/utils"
import { useToast } from "@/components/hooks/use-toast"

Expand All @@ -21,7 +20,7 @@ export function MemberApprovalRequiredToggle({ memberApprovalRequired, onToggleC
const handleToggle = async (checked: boolean) => {
setIsLoading(true)
try {
const result = await setMemberApprovalRequired(SINGLE_TENANT_ORG_DOMAIN, checked)
const result = await setMemberApprovalRequired(checked)

if (isServiceError(result)) {
toast({
Expand Down
9 changes: 4 additions & 5 deletions packages/web/src/app/invite/actions.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,21 @@
"use server";

import { withAuth } from "@/actions";
import { isServiceError } from "@/lib/utils";
import { orgNotFound, ServiceError } from "@/lib/serviceError";
import { sew } from "@/actions";
import { addUserToOrganization } from "@/lib/authUtils";
import { prisma } from "@/prisma";
import { withAuthV2_skipOrgMembershipCheck } from "@/withAuthV2";
import { StatusCodes } from "http-status-codes";
import { ErrorCode } from "@/lib/errorCodes";

export const joinOrganization = async (orgId: number, inviteLinkId?: string) => sew(async () =>
withAuth(async (userId) => {
withAuthV2_skipOrgMembershipCheck(async ({ user, prisma }) => {
const org = await prisma.org.findUnique({
where: {
id: orgId,
},
});

if (!org) {
return orgNotFound();
}
Expand All @@ -40,7 +39,7 @@ export const joinOrganization = async (orgId: number, inviteLinkId?: string) =>
}
}

const addUserToOrgRes = await addUserToOrganization(userId, org.id);
const addUserToOrgRes = await addUserToOrganization(user.id, org.id);
if (isServiceError(addUserToOrgRes)) {
return addUserToOrgRes;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import { useState } from "react"
import { useRouter } from "next/navigation"
import { Button } from "@/components/ui/button"
import { completeOnboarding } from "@/actions"
import { SINGLE_TENANT_ORG_DOMAIN } from "@/lib/constants"
import { isServiceError } from "@/lib/utils"
import { useToast } from "@/components/hooks/use-toast"

Expand All @@ -17,7 +16,7 @@ export function CompleteOnboardingButton() {
setIsLoading(true)

try {
const result = await completeOnboarding(SINGLE_TENANT_ORG_DOMAIN)
const result = await completeOnboarding()

if (isServiceError(result)) {
toast({
Expand Down
Loading
Loading