feat: refresh create new machine ui
This commit is contained in:
parent
8628480362
commit
b6be0bd462
@ -357,9 +357,15 @@ export function MachineList({
|
|||||||
},
|
},
|
||||||
snapshot: {
|
snapshot: {
|
||||||
fieldType: "snapshot",
|
fieldType: "snapshot",
|
||||||
|
inputProps: {
|
||||||
|
showLabel: false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
models: {
|
models: {
|
||||||
fieldType: "models",
|
fieldType: "models",
|
||||||
|
inputProps: {
|
||||||
|
showLabel: false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
gpu: {
|
gpu: {
|
||||||
fieldType: !userMetadata.betaFeaturesAccess
|
fieldType: !userMetadata.betaFeaturesAccess
|
||||||
|
@ -2,6 +2,12 @@
|
|||||||
|
|
||||||
import type { AutoFormInputComponentProps } from "../ui/auto-form/types";
|
import type { AutoFormInputComponentProps } from "../ui/auto-form/types";
|
||||||
import { LoadingIcon } from "@/components/LoadingIcon";
|
import { LoadingIcon } from "@/components/LoadingIcon";
|
||||||
|
import {
|
||||||
|
Accordion,
|
||||||
|
AccordionContent,
|
||||||
|
AccordionItem,
|
||||||
|
AccordionTrigger,
|
||||||
|
} from "@/components/ui/accordion";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import {
|
import {
|
||||||
Command,
|
Command,
|
||||||
@ -154,22 +160,31 @@ export function ModelPickerView({
|
|||||||
field,
|
field,
|
||||||
}: Pick<AutoFormInputComponentProps, "field">) {
|
}: Pick<AutoFormInputComponentProps, "field">) {
|
||||||
return (
|
return (
|
||||||
<div className="flex gap-2 flex-col">
|
<Accordion type="single" collapsible>
|
||||||
<ComfyUIManagerModelRegistry field={field} />
|
<AccordionItem value="item-1">
|
||||||
<CivitaiModelRegistry field={field} />
|
<AccordionTrigger className="text-sm">
|
||||||
{/* <span>{field.value.length} selected</span> */}
|
Models (ComfyUI Manager & Civitai)
|
||||||
{field.value && (
|
</AccordionTrigger>
|
||||||
<ScrollArea className="w-full bg-gray-100 mx-auto rounded-lg mt-2">
|
<AccordionContent>
|
||||||
<Textarea
|
<div className="flex gap-2 flex-col px-1">
|
||||||
className="min-h-[150px] max-h-[300px] p-2 rounded-lg text-xs w-full"
|
<ComfyUIManagerModelRegistry field={field} />
|
||||||
value={JSON.stringify(field.value, null, 2)}
|
<CivitaiModelRegistry field={field} />
|
||||||
onChange={(e) => {
|
{/* <span>{field.value.length} selected</span> */}
|
||||||
field.onChange(JSON.parse(e.target.value));
|
{field.value && (
|
||||||
}}
|
<ScrollArea className="w-full bg-gray-100 mx-auto rounded-lg mt-2">
|
||||||
/>
|
<Textarea
|
||||||
</ScrollArea>
|
className="min-h-[150px] max-h-[300px] p-2 rounded-lg text-xs w-full"
|
||||||
)}
|
value={JSON.stringify(field.value, null, 2)}
|
||||||
</div>
|
onChange={(e) => {
|
||||||
|
field.onChange(JSON.parse(e.target.value));
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</ScrollArea>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</AccordionContent>
|
||||||
|
</AccordionItem>
|
||||||
|
</Accordion>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -307,7 +322,13 @@ export function ComfyUIManagerModelRegistry({
|
|||||||
};
|
};
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
return <ModelSelector field={field} modelList={modelList} label="common" />;
|
return (
|
||||||
|
<ModelSelector
|
||||||
|
field={field}
|
||||||
|
modelList={modelList}
|
||||||
|
label="ComfyUI Manager"
|
||||||
|
/>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function ModelSelector({
|
export function ModelSelector({
|
||||||
@ -358,7 +379,7 @@ export function ModelSelector({
|
|||||||
aria-expanded={open}
|
aria-expanded={open}
|
||||||
className="w-full justify-between flex"
|
className="w-full justify-between flex"
|
||||||
>
|
>
|
||||||
Select {label}
|
Add from {label}
|
||||||
<ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />
|
<ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />
|
||||||
</Button>
|
</Button>
|
||||||
</PopoverTrigger>
|
</PopoverTrigger>
|
||||||
@ -371,7 +392,7 @@ export function ModelSelector({
|
|||||||
>
|
>
|
||||||
{isLoading && <LoadingIcon />}
|
{isLoading && <LoadingIcon />}
|
||||||
</CommandInput>
|
</CommandInput>
|
||||||
<CommandEmpty>No framework found.</CommandEmpty>
|
<CommandEmpty>No models found.</CommandEmpty>
|
||||||
<CommandList className="pointer-events-auto">
|
<CommandList className="pointer-events-auto">
|
||||||
<CommandGroup>
|
<CommandGroup>
|
||||||
{modelList?.models.map((model) => (
|
{modelList?.models.map((model) => (
|
||||||
|
@ -2,6 +2,12 @@
|
|||||||
|
|
||||||
import type { AutoFormInputComponentProps } from "../ui/auto-form/types";
|
import type { AutoFormInputComponentProps } from "../ui/auto-form/types";
|
||||||
import fetcher from "@/components/fetcher";
|
import fetcher from "@/components/fetcher";
|
||||||
|
import {
|
||||||
|
Accordion,
|
||||||
|
AccordionContent,
|
||||||
|
AccordionItem,
|
||||||
|
AccordionTrigger,
|
||||||
|
} from "@/components/ui/accordion";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import {
|
import {
|
||||||
Command,
|
Command,
|
||||||
@ -27,22 +33,27 @@ export function SnapshotPickerView({
|
|||||||
field,
|
field,
|
||||||
}: Pick<AutoFormInputComponentProps, "field">) {
|
}: Pick<AutoFormInputComponentProps, "field">) {
|
||||||
return (
|
return (
|
||||||
<div className="flex gap-2 flex-col">
|
<Accordion type="single" collapsible>
|
||||||
<SnapshotPresetPicker field={field} />
|
<AccordionItem value="item-1">
|
||||||
<CustomNodesSelector field={field} />
|
<AccordionTrigger className="text-sm">Custom Nodes</AccordionTrigger>
|
||||||
{field.value && (
|
<AccordionContent className="flex gap-2 flex-col px-1">
|
||||||
// <ScrollArea className="w-full bg-gray-100 mx-auto max-w-[500px] rounded-lg">
|
<SnapshotPresetPicker field={field} />
|
||||||
<Textarea
|
<CustomNodesSelector field={field} />
|
||||||
className="min-h-[150px] max-h-[300px] p-2 rounded-md text-xs w-full"
|
{field.value && (
|
||||||
value={JSON.stringify(field.value, null, 2)}
|
// <ScrollArea className="w-full bg-gray-100 mx-auto max-w-[500px] rounded-lg">
|
||||||
onChange={(e) => {
|
<Textarea
|
||||||
// Update field.onChange to pass the array of selected models
|
className="min-h-[150px] max-h-[300px] p-2 rounded-md text-xs w-full"
|
||||||
field.onChange(JSON.parse(e.target.value));
|
value={JSON.stringify(field.value, null, 2)}
|
||||||
}}
|
onChange={(e) => {
|
||||||
/>
|
// Update field.onChange to pass the array of selected models
|
||||||
// </ScrollArea>
|
field.onChange(JSON.parse(e.target.value));
|
||||||
)}
|
}}
|
||||||
</div>
|
/>
|
||||||
|
// </ScrollArea>
|
||||||
|
)}
|
||||||
|
</AccordionContent>
|
||||||
|
</AccordionItem>
|
||||||
|
</Accordion>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,14 +108,16 @@ function SnapshotPresetPicker({
|
|||||||
aria-expanded={open}
|
aria-expanded={open}
|
||||||
className="w-full justify-between flex"
|
className="w-full justify-between flex"
|
||||||
>
|
>
|
||||||
{selected ? findItem(selected)?.label : "Select snapshot..."}
|
{selected
|
||||||
|
? findItem(selected)?.label
|
||||||
|
: "Select snapshot (From deployments)"}
|
||||||
<ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />
|
<ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />
|
||||||
</Button>
|
</Button>
|
||||||
</PopoverTrigger>
|
</PopoverTrigger>
|
||||||
<PopoverContent className="w-[375px] p-0">
|
<PopoverContent className="w-[375px] p-0">
|
||||||
<Command>
|
<Command>
|
||||||
<CommandInput placeholder="Search framework..." className="h-9" />
|
<CommandInput placeholder="Search snapshot..." className="h-9" />
|
||||||
<CommandEmpty>No framework found.</CommandEmpty>
|
<CommandEmpty>No snapshot found.</CommandEmpty>
|
||||||
<CommandGroup>
|
<CommandGroup>
|
||||||
{frameworks?.map((framework) => (
|
{frameworks?.map((framework) => (
|
||||||
<CommandItem
|
<CommandItem
|
||||||
@ -188,7 +201,7 @@ function CustomNodesSelector({
|
|||||||
aria-expanded={open}
|
aria-expanded={open}
|
||||||
className="w-full justify-between flex"
|
className="w-full justify-between flex"
|
||||||
>
|
>
|
||||||
Select custom nodes... {keys.length} selected
|
Add custom nodes - {keys.length} selected
|
||||||
<ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />
|
<ChevronsUpDown className="ml-2 h-4 w-4 shrink-0 opacity-50" />
|
||||||
</Button>
|
</Button>
|
||||||
</PopoverTrigger>
|
</PopoverTrigger>
|
||||||
|
@ -21,10 +21,12 @@ export default function AutoFormModelsPicker({
|
|||||||
}: AutoFormInputComponentProps) {
|
}: AutoFormInputComponentProps) {
|
||||||
return (
|
return (
|
||||||
<FormItem>
|
<FormItem>
|
||||||
<FormLabel>
|
{fieldConfigItem.inputProps?.showLabel && (
|
||||||
{label}
|
<FormLabel>
|
||||||
{isRequired && <span className="text-destructive"> *</span>}
|
{label}
|
||||||
</FormLabel>
|
{isRequired && <span className="text-destructive"> *</span>}
|
||||||
|
</FormLabel>
|
||||||
|
)}
|
||||||
<FormControl>
|
<FormControl>
|
||||||
<Suspense fallback={<LoadingIcon />}>
|
<Suspense fallback={<LoadingIcon />}>
|
||||||
<ModelPickerView field={field} />
|
<ModelPickerView field={field} />
|
||||||
|
@ -21,10 +21,12 @@ export default function AutoFormSnapshotPicker({
|
|||||||
}: AutoFormInputComponentProps) {
|
}: AutoFormInputComponentProps) {
|
||||||
return (
|
return (
|
||||||
<FormItem>
|
<FormItem>
|
||||||
<FormLabel>
|
{fieldConfigItem.inputProps?.showLabel && (
|
||||||
{label}
|
<FormLabel>
|
||||||
{isRequired && <span className="text-destructive"> *</span>}
|
{label}
|
||||||
</FormLabel>
|
{isRequired && <span className="text-destructive"> *</span>}
|
||||||
|
</FormLabel>
|
||||||
|
)}
|
||||||
<FormControl>
|
<FormControl>
|
||||||
<Suspense fallback={<LoadingIcon />}>
|
<Suspense fallback={<LoadingIcon />}>
|
||||||
<SnapshotPickerView field={field} />
|
<SnapshotPickerView field={field} />
|
||||||
|
Loading…
x
Reference in New Issue
Block a user