feedback fixes (#867)

This commit is contained in:
Brendan Allan 2023-05-26 17:01:33 +08:00 committed by GitHub
parent b86a30ae8a
commit 1ad942bc95
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 47 additions and 15 deletions

View file

@ -9,32 +9,48 @@ const feedbackSchema = z.object({
required_error: 'Feedback is required',
invalid_type_error: 'Feedback must be a string'
}),
emoji: z.string({
required_error: 'Emoji is required',
invalid_type_error: 'Emoji must be a string'
})
emoji: z
.string({
required_error: 'Emoji is required',
invalid_type_error: 'Emoji must be a string'
})
.emoji()
.max(2)
.optional()
});
const CORS_HEADERS = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type, Authorization'
};
export async function POST(req: NextRequest) {
const result = feedbackSchema.safeParse(await req.json());
if (!result.success) {
if (!result.success)
return new Response(
JSON.stringify({
message: result.error.toString()
}),
{
status: 400
status: 400,
headers: {
...CORS_HEADERS
}
}
);
}
try {
const { emoji, feedback } = result.data;
const slackMessage = {
blocks: [
{
type: 'section',
text: {
type: 'mrkdwn',
text: `${result.data.feedback} ${result.data.emoji}`
text: `${feedback}${emoji !== undefined && `\n\n${result.data.emoji}`}`
}
}
]
@ -43,22 +59,37 @@ export async function POST(req: NextRequest) {
method: 'POST',
body: JSON.stringify(slackMessage)
});
return new Response(undefined, {
status: 204
status: 204,
headers: {
...CORS_HEADERS
}
});
} catch (error) {
console.error(error);
return new Response(
JSON.stringify({
message: "Something went wrong. Please try again."
message: 'Something went wrong. Please try again.'
}),
{
status: 500,
headers: {
'Content-Type': 'application/json'
'Content-Type': 'application/json',
...CORS_HEADERS
}
}
);
}
}
export async function OPTIONS() {
return new Response('', {
status: 200,
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type, Authorization'
}
});
}

View file

@ -6,8 +6,9 @@ import { showAlertDialog } from '~/components';
const schema = z.object({
feedback: z.string().min(1),
emoji: z.string().max(1)
emoji: z.string().emoji().max(2).optional()
});
const EMOJIS = ['🤩', '😀', '🙁', '😭'];
const FEEDBACK_URL = 'https://spacedrive.com/api/feedback';
@ -42,7 +43,7 @@ export default function FeedbackDialog(props: UseDialogProps) {
dialog={useDialog(props)}
form={form}
onSubmit={formSubmit}
submitDisabled={form.formState.isSubmitting || !watchForm.feedback || !watchForm.emoji}
submitDisabled={form.formState.isSubmitting || !watchForm.feedback}
ctaLabel="Submit"
closeLabel="Cancel"
buttonsSideContent={
@ -52,7 +53,7 @@ export default function FeedbackDialog(props: UseDialogProps) {
onClick={() => emojiSelectHandler(i)}
key={i.toString()}
className={clsx(
emojiSelected === emoji ? 'bg-green-600' : 'bg-app-input',
emojiSelected === emoji ? 'bg-accent' : 'bg-app-input',
'flex h-7 w-7 cursor-pointer items-center justify-center rounded-full border border-app-line transition-all duration-200 hover:scale-125'
)}
>