Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit29ef3a8

Browse files
feat: redirect to the task page after creation (#18626)
Close#18184
1 parent1c87796 commit29ef3a8

File tree

2 files changed

+40
-24
lines changed

2 files changed

+40
-24
lines changed

‎site/src/pages/TasksPage/TasksPage.stories.tsx

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { Meta, StoryObj } from "@storybook/react";
22
import{expect,spyOn,userEvent,waitFor,within}from"@storybook/test";
33
import{API}from"api/api";
44
import{MockUsers}from"pages/UsersPage/storybookData/users";
5+
import{reactRouterParameters}from"storybook-addon-remix-react-router";
56
import{
67
MockTemplate,
78
MockTemplateVersionExternalAuthGithub,
@@ -132,6 +133,23 @@ const newTaskData = {
132133

133134
exportconstCreateTaskSuccessfully:Story={
134135
decorators:[withProxyProvider()],
136+
parameters:{
137+
reactRouter:reactRouterParameters({
138+
location:{
139+
path:"/tasks",
140+
},
141+
routing:[
142+
{
143+
path:"/tasks",
144+
useStoryElement:true,
145+
},
146+
{
147+
path:"/tasks/:ownerName/:workspaceName",
148+
element:<h1>Task page</h1>,
149+
},
150+
],
151+
}),
152+
},
135153
beforeEach:()=>{
136154
spyOn(data,"fetchAITemplates").mockResolvedValue([MockTemplate]);
137155
spyOn(data,"fetchTasks")
@@ -150,10 +168,8 @@ export const CreateTaskSuccessfully: Story = {
150168
awaituserEvent.click(submitButton);
151169
});
152170

153-
awaitstep("Verify task in the table",async()=>{
154-
awaitcanvas.findByRole("row",{
155-
name:newRegExp(newTaskData.prompt,"i"),
156-
});
171+
awaitstep("Redirects to the task page",async()=>{
172+
awaitcanvas.findByText(/taskpage/i);
157173
});
158174
},
159175
};
@@ -187,7 +203,7 @@ export const CreateTaskError: Story = {
187203
},
188204
};
189205

190-
exportconstWithExternalAuth:Story={
206+
exportconstWithAuthenticatedExternalAuth:Story={
191207
decorators:[withProxyProvider()],
192208
beforeEach:()=>{
193209
spyOn(data,"fetchTasks")
@@ -201,26 +217,17 @@ export const WithExternalAuth: Story = {
201217
play:async({ canvasElement, step})=>{
202218
constcanvas=within(canvasElement);
203219

204-
awaitstep("Run task",async()=>{
205-
constprompt=awaitcanvas.findByLabelText(/prompt/i);
206-
awaituserEvent.type(prompt,newTaskData.prompt);
207-
constsubmitButton=canvas.getByRole("button",{name:/runtask/i});
208-
awaitwaitFor(()=>expect(submitButton).toBeEnabled());
209-
awaituserEvent.click(submitButton);
210-
});
211-
212-
awaitstep("Verify task in the table",async()=>{
213-
awaitcanvas.findByRole("row",{
214-
name:newRegExp(newTaskData.prompt,"i"),
215-
});
216-
});
217-
218220
awaitstep("Does not render external auth",async()=>{
219221
expect(
220222
canvas.queryByText(/externalauthentication/),
221223
).not.toBeInTheDocument();
222224
});
223225
},
226+
parameters:{
227+
chromatic:{
228+
disableSnapshot:true,
229+
},
230+
},
224231
};
225232

226233
exportconstMissingExternalAuth:Story={

‎site/src/pages/TasksPage/TasksPage.tsx

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ import { generateWorkspaceName } from "modules/workspaces/generateWorkspaceName"
5252
import{typeFC,typeReactNode,useState}from"react";
5353
import{Helmet}from"react-helmet-async";
5454
import{useMutation,useQuery,useQueryClient}from"react-query";
55-
import{LinkasRouterLink}from"react-router-dom";
55+
import{LinkasRouterLink,useNavigate}from"react-router-dom";
5656
importTextareaAutosizefrom"react-textarea-autosize";
5757
import{pageTitle}from"utils/page";
5858
import{relativeTime}from"utils/time";
@@ -163,6 +163,7 @@ const TaskFormSection: FC<{
163163
filter:TasksFilter;
164164
onFilterChange:(filter:TasksFilter)=>void;
165165
}>=({ showFilter, filter, onFilterChange})=>{
166+
constnavigate=useNavigate();
166167
const{
167168
data:templates,
168169
error,
@@ -190,7 +191,14 @@ const TaskFormSection: FC<{
190191
}
191192
return(
192193
<>
193-
<TaskFormtemplates={templates}/>
194+
<TaskForm
195+
templates={templates}
196+
onSuccess={(task)=>{
197+
navigate(
198+
`/tasks/${task.workspace.owner_name}/${task.workspace.name}`,
199+
);
200+
}}
201+
/>
194202
{showFilter&&(
195203
<TasksFilterfilter={filter}onFilterChange={onFilterChange}/>
196204
)}
@@ -202,9 +210,10 @@ type CreateTaskMutationFnProps = { prompt: string; templateId: string };
202210

203211
typeTaskFormProps={
204212
templates:Template[];
213+
onSuccess:(task:Task)=>void;
205214
};
206215

207-
constTaskForm:FC<TaskFormProps>=({ templates})=>{
216+
constTaskForm:FC<TaskFormProps>=({ templates, onSuccess})=>{
208217
const{ user}=useAuthenticated();
209218
constqueryClient=useQueryClient();
210219
const[selectedTemplateId,setSelectedTemplateId]=useState<string>(
@@ -229,10 +238,11 @@ const TaskForm: FC<TaskFormProps> = ({ templates }) => {
229238
constcreateTaskMutation=useMutation({
230239
mutationFn:async({ prompt, templateId}:CreateTaskMutationFnProps)=>
231240
data.createTask(prompt,user.id,templateId),
232-
onSuccess:async()=>{
241+
onSuccess:async(task)=>{
233242
awaitqueryClient.invalidateQueries({
234243
queryKey:["tasks"],
235244
});
245+
onSuccess(task);
236246
},
237247
});
238248

@@ -249,7 +259,6 @@ const TaskForm: FC<TaskFormProps> = ({ templates }) => {
249259
prompt,
250260
templateId:templateID,
251261
});
252-
form.reset();
253262
}catch(error){
254263
constmessage=getErrorMessage(error,"Error creating task");
255264
constdetail=getErrorDetail(error)??"Please try again";

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp