feat(workspace): refactor search space handling to workspace

This commit is contained in:
Anish Sarkar 2026-07-06 10:04:17 +05:30
parent e92b7a34ed
commit c379ab1155
53 changed files with 268 additions and 169 deletions

View file

@ -15,6 +15,7 @@ import { Spinner } from "@/components/ui/spinner";
import { Switch } from "@/components/ui/switch";
import { stripeApiService } from "@/lib/apis/stripe-api.service";
import { AppError } from "@/lib/error";
import { getWorkspaceIdNumber } from "@/lib/route-params";
import { queries } from "@/zero/queries";
const microsToDollars = (micros: number | null | undefined): string => {
@ -38,7 +39,7 @@ export function AutoReloadSettings() {
const pathname = usePathname();
const searchParams = useSearchParams();
const queryClient = useQueryClient();
const searchSpaceId = Number(params?.search_space_id);
const searchSpaceId = getWorkspaceIdNumber(params) ?? 0;
const [enabled, setEnabled] = useState(false);
const [thresholdInput, setThresholdInput] = useState("");

View file

@ -10,6 +10,7 @@ import { Button } from "@/components/ui/button";
import { Spinner } from "@/components/ui/spinner";
import { stripeApiService } from "@/lib/apis/stripe-api.service";
import { AppError } from "@/lib/error";
import { getWorkspaceIdNumber } from "@/lib/route-params";
import { cn } from "@/lib/utils";
import { queries } from "@/zero/queries";
@ -37,7 +38,7 @@ const formatUsd = (micros: number) => {
export function BuyCreditsContent() {
const params = useParams();
const searchSpaceId = Number(params?.search_space_id);
const searchSpaceId = getWorkspaceIdNumber(params) ?? 0;
const [quantity, setQuantity] = useState(1);
// Raw text of the amount field so the user can clear it while typing;
// committed back to a clamped integer on blur.

View file

@ -20,6 +20,7 @@ import {
trackIncentiveTaskClicked,
trackIncentiveTaskCompleted,
} from "@/lib/posthog/events";
import { getWorkspaceIdParam } from "@/lib/route-params";
import { cn } from "@/lib/utils";
// Compact dollar label for a task's reward (e.g. "+$0.03").
@ -32,7 +33,7 @@ const formatRewardUsd = (micros: number) => {
export function EarnCreditsContent() {
const params = useParams();
const queryClient = useQueryClient();
const searchSpaceId = params?.search_space_id ?? "";
const searchSpaceId = getWorkspaceIdParam(params) ?? "";
useEffect(() => {
trackIncentivePageViewed();

View file

@ -126,6 +126,11 @@ export function ModelProviderConnectionsPanel({
// Each provider connect form builds its own credential payload; the backend
// resolver (`to_litellm`) forwards `extra.litellm_params` straight to LiteLLM.
function handleCreate(draft: ConnectionDraft) {
if (!Number.isFinite(searchSpaceId) || searchSpaceId <= 0) {
toast.error("Workspace is still loading. Please try again.");
return;
}
const models = connectionModelsForDraft(draft);
const testModel = representativeTestModel(models);
if (!testModel) {
@ -165,6 +170,11 @@ export function ModelProviderConnectionsPanel({
setProvider(providerId);
setIsAddProviderOpen(true);
if (providerId === "vertex_ai") {
if (!Number.isFinite(searchSpaceId) || searchSpaceId <= 0) {
toast.error("Workspace is still loading. Please try again.");
return;
}
previewModels.mutate(
{
provider: providerId,
@ -184,6 +194,11 @@ export function ModelProviderConnectionsPanel({
}
function refreshConnectModels(draft: ConnectionDraft) {
if (!Number.isFinite(searchSpaceId) || searchSpaceId <= 0) {
toast.error("Workspace is still loading. Please try again.");
return;
}
previewModels.mutate(
{
provider,