const handleSubmit = useCallback(async () => {
if (!projectProducts) return
setSaving(true)
const session = getSession()
const request = Http.request.patch(
`/projects/${id}`,
Schema.to(RequestBodySchema)({
product_model_dict: Object.fromEntries(projectProducts)
}),
{
headers: {
Authorization: `Bearer ${session?.accessToken}`
}
}
)
const program = Effect.gen(function* (_) {
const response = yield* _(Http.client.fetchOk(request))
const body = yield* _(Http.response.schemaBody(ResponseSchema)(response))
return body
})
try {
await Effect.runPromise(program)
revalidator.revalidate()
toggleDialog((prev) => !prev)
toast.success("Products and models were mapped", {
dismissible: true,
duration: 3000,
})
} catch (error) {
if (error instanceof Http.HttpError) {
if (error.response.status === 401) {
navigate("/login")
return
}
toast.error(error.message, { dismissible: true, duration: 3000 })
} else {
toast.error("Unknown error occurred", {
dismissible: true,
duration: 3000,
})
}
} finally {
setSaving(false)
}
}, [id, projectProducts, revalidator, toggleDialog, navigate])
const handleSubmit = useCallback(async () => {
if (!projectProducts) return
setSaving(true)
const session = getSession()
const request = Http.request.patch(
`/projects/${id}`,
Schema.to(RequestBodySchema)({
product_model_dict: Object.fromEntries(projectProducts)
}),
{
headers: {
Authorization: `Bearer ${session?.accessToken}`
}
}
)
const program = Effect.gen(function* (_) {
const response = yield* _(Http.client.fetchOk(request))
const body = yield* _(Http.response.schemaBody(ResponseSchema)(response))
return body
})
try {
await Effect.runPromise(program)
revalidator.revalidate()
toggleDialog((prev) => !prev)
toast.success("Products and models were mapped", {
dismissible: true,
duration: 3000,
})
} catch (error) {
if (error instanceof Http.HttpError) {
if (error.response.status === 401) {
navigate("/login")
return
}
toast.error(error.message, { dismissible: true, duration: 3000 })
} else {
toast.error("Unknown error occurred", {
dismissible: true,
duration: 3000,
})
}
} finally {
setSaving(false)
}
}, [id, projectProducts, revalidator, toggleDialog, navigate])