feat: adding add models lock according to prcing plan

This commit is contained in:
bennykok 2024-01-28 00:51:44 +08:00
parent fbb7b18273
commit cb01c896a0
3 changed files with 37 additions and 15 deletions

View File

@ -2,6 +2,7 @@ import { AccessType } from "../../../lib/AccessType";
import { MachineList } from "@/components/MachineList";
import { db } from "@/db/db";
import { machinesTable } from "@/db/schema";
import { getCurrentPlanWithAuth } from "@/server/getCurrentPlan";
import { auth } from "@clerk/nextjs";
import { clerkClient } from "@clerk/nextjs/server";
import { desc, eq, isNull, and } from "drizzle-orm";
@ -19,6 +20,8 @@ async function MachineListServer() {
const user = await clerkClient.users.getUser(userId);
const sub = await getCurrentPlanWithAuth();
const machines = await db.query.machinesTable.findMany({
orderBy: desc(machinesTable.updated_at),
where:
@ -31,6 +34,7 @@ async function MachineListServer() {
<div className="w-full">
{/* <div>Machines</div> */}
<MachineList
sub={sub}
data={machines}
userMetadata={AccessType.parse(user.privateMetadata ?? {})}
/>

View File

@ -26,11 +26,11 @@ import type { UnknownKeysParam, ZodObject, ZodRawShape, z } from "zod";
export function InsertModal<
K extends ZodRawShape,
Y extends UnknownKeysParam,
Z extends ZodObject<K, Y>
Z extends ZodObject<K, Y>,
>(props: {
tooltip?: string;
disabled?: boolean;
title: string;
title: React.ReactNode;
description: string;
dialogClassName?: string;
serverAction: (data: z.infer<Z>) => Promise<unknown>;
@ -105,7 +105,7 @@ export function InsertModal<
export function UpdateModal<
K extends ZodRawShape,
Y extends UnknownKeysParam,
Z extends ZodObject<K, Y>
Z extends ZodObject<K, Y>,
>(props: {
open?: boolean;
setOpen?: (open: boolean) => void;
@ -118,7 +118,7 @@ export function UpdateModal<
serverAction: (
data: z.infer<Z> & {
id: string;
}
},
) => Promise<unknown>;
formSchema: Z;
fieldConfig?: FieldConfig<z.infer<Z>>;
@ -165,7 +165,7 @@ export function UpdateModal<
props.serverAction({
...data,
id: props.data.id,
})
}),
);
setIsLoading(false);
setOpen(false);

View File

@ -41,6 +41,7 @@ import {
updateMachine,
} from "@/server/curdMachine";
import { editWorkflowOnMachine } from "@/server/editWorkflowOnMachine";
import { getCurrentPlanWithAuth } from "@/server/getCurrentPlan";
import type {
ColumnDef,
ColumnFiltersState,
@ -55,7 +56,7 @@ import {
getSortedRowModel,
useReactTable,
} from "@tanstack/react-table";
import { ArrowUpDown, MoreHorizontal } from "lucide-react";
import { ArrowUpDown, Lock, MoreHorizontal, Plus } from "lucide-react";
import * as React from "react";
import { useState } from "react";
import { toast } from "sonner";
@ -321,9 +322,11 @@ export const columns: ColumnDef<Machine>[] = [
export function MachineList({
data,
userMetadata,
sub,
}: {
data: Machine[];
userMetadata: z.infer<typeof AccessType>;
sub: Awaited<ReturnType<typeof getCurrentPlanWithAuth>>;
}) {
const [sorting, setSorting] = React.useState<SortingState>([]);
const [columnFilters, setColumnFilters] = React.useState<ColumnFiltersState>(
@ -352,6 +355,21 @@ export function MachineList({
},
});
let machineMaxCount = 2;
// Temp fixes for machine count
if (userMetadata.betaFeaturesAccess) machineMaxCount = 5;
if (sub?.plan == "pro") {
machineMaxCount = 10;
} else if (sub?.plan == "enterprise") {
machineMaxCount = 99;
}
const locked =
data.some((machine) => machine.type === "modal-serverless") &&
data.length >= machineMaxCount;
return (
<div className="w-full">
<div className="flex items-center py-4">
@ -366,17 +384,17 @@ export function MachineList({
<div className="ml-auto flex gap-2">
<InsertModal
dialogClassName="sm:max-w-[600px]"
disabled={
data.some(
(machine) => machine.type === "comfy-deploy-serverless",
) && !userMetadata.betaFeaturesAccess
}
disabled={locked}
tooltip={
data.some((machine) => machine.type === "comfy-deploy-serverless")
? "Only one hosted machine at preview stage"
: undefined
locked
? `Max ${machineMaxCount} ComfyUI machine for your account, upgrade to unlock more cnfiguration.`
: `Max ${machineMaxCount} ComfyUI machine for your account`
}
title={
<>
New Machine {locked ? <Lock size={14} /> : <Plus size={14} />}
</>
}
title="New Machine"
description="Add custom ComfyUI machines to your account."
serverAction={addCustomMachine}
formSchema={addCustomMachineSchema}