+
+
+
+
+
+
+
+ {isLoadingPresets ? (
+
+ ) : (
+
+ )}
+
+
{missedExternalAuth && (
@@ -608,13 +726,22 @@ export const data = {
prompt: string,
userId: string,
templateVersionId: string,
+ presetId: string | null = null,
): Promise
{
- const presets = await API.getTemplateVersionPresets(templateVersionId);
- const defaultPreset = presets?.find((p) => p.Default);
+ // If no preset is selected, get the default preset
+ let preset_id = presetId;
+ if (!preset_id) {
+ const presets = await API.getTemplateVersionPresets(templateVersionId);
+ const defaultPreset = presets?.find((p) => p.Default);
+ if (defaultPreset) {
+ preset_id = defaultPreset.ID;
+ }
+ }
+
const workspace = await API.createWorkspace(userId, {
name: `task-${generateWorkspaceName()}`,
template_version_id: templateVersionId,
- template_version_preset_id: defaultPreset?.ID,
+ template_version_preset_id: preset_id || undefined,
rich_parameter_values: [
{ name: AI_PROMPT_PARAMETER_NAME, value: prompt },
],
@@ -627,4 +754,16 @@ export const data = {
},
};
+// sortedPresets sorts presets with the default preset first,
+// followed by the rest sorted alphabetically by name ascending.
+const sortedPresets = (presets: Preset[]): Preset[] => {
+ return presets.sort((a, b) => {
+ // Default preset should come first
+ if (a.Default && !b.Default) return -1;
+ if (!a.Default && b.Default) return 1;
+ // Otherwise, sort alphabetically by name
+ return a.Name.localeCompare(b.Name);
+ });
+};
+
export default TasksPage;
diff --git a/site/src/testHelpers/entities.ts b/site/src/testHelpers/entities.ts
index 045d6ad06ddeb..14fbb2d2913af 100644
--- a/site/src/testHelpers/entities.ts
+++ b/site/src/testHelpers/entities.ts
@@ -4571,3 +4571,106 @@ export function createTimestamp(minuteOffset: number, secondOffset: number) {
baseDate.setSeconds(baseDate.getSeconds() + secondOffset);
return baseDate.toISOString();
}
+
+// Mock Presets for AI Tasks
+export const MockPresets: TypesGen.Preset[] = [
+ {
+ ID: "preset-1",
+ Name: "Development",
+ Parameters: [
+ { Name: "cpu", Value: "4" },
+ { Name: "memory", Value: "8GB" },
+ ],
+ Default: true,
+ DesiredPrebuildInstances: 0,
+ },
+ {
+ ID: "preset-2",
+ Name: "Testing",
+ Parameters: [
+ { Name: "cpu", Value: "2" },
+ { Name: "memory", Value: "4GB" },
+ ],
+ Default: false,
+ DesiredPrebuildInstances: 0,
+ },
+ {
+ ID: "preset-3",
+ Name: "Production",
+ Parameters: [
+ { Name: "cpu", Value: "8" },
+ { Name: "memory", Value: "16GB" },
+ ],
+ Default: false,
+ DesiredPrebuildInstances: 0,
+ },
+];
+
+export const MockAIPromptPresets: TypesGen.Preset[] = [
+ {
+ ID: "ai-preset-1",
+ Name: "Code Review",
+ Parameters: [
+ { Name: "AI Prompt", Value: "Review the code for best practices" },
+ { Name: "cpu", Value: "4" },
+ { Name: "memory", Value: "8GB" },
+ ],
+ Default: true,
+ DesiredPrebuildInstances: 0,
+ },
+ {
+ ID: "ai-preset-2",
+ Name: "Custom Prompt",
+ Parameters: [
+ { Name: "cpu", Value: "4" },
+ { Name: "memory", Value: "8GB" },
+ ],
+ Default: false,
+ DesiredPrebuildInstances: 0,
+ },
+];
+
+// Mock Tasks for AI Tasks page
+export const MockTasks = [
+ {
+ workspace: {
+ ...MockWorkspace,
+ latest_app_status: MockWorkspaceAppStatus,
+ },
+ prompt: "Create competitors page",
+ },
+ {
+ workspace: {
+ ...MockWorkspace,
+ id: "workspace-2",
+ latest_app_status: {
+ ...MockWorkspaceAppStatus,
+ message: "Avatar size fixed!",
+ },
+ },
+ prompt: "Fix user avatar size",
+ },
+ {
+ workspace: {
+ ...MockWorkspace,
+ id: "workspace-3",
+ latest_app_status: {
+ ...MockWorkspaceAppStatus,
+ message: "Accessibility issues fixed!",
+ },
+ },
+ prompt: "Fix accessibility issues",
+ },
+];
+
+export const MockNewTaskData = {
+ prompt: "Create a new task",
+ workspace: {
+ ...MockWorkspace,
+ id: "workspace-4",
+ latest_app_status: {
+ ...MockWorkspaceAppStatus,
+ message: "Task created successfully!",
+ },
+ },
+};
--- a PPN by Garber Painting Akron. With Image Size Reduction included!Fetched URL: http://github.com/coder/coder/pull/19012.diff
Alternative Proxies:
Alternative Proxy
pFad Proxy
pFad v3 Proxy
pFad v4 Proxy