123 lines
4.2 KiB
TypeScript
Raw Normal View History

2023-11-04 18:59:39 +00:00
import { LoadTemplate } from "../LoadTemplate";
import { useReminder } from "../ReminderContext";
import { useMutation, useQueryClient } from "react-query";
2023-11-06 18:11:18 +00:00
import { postGuildReminder, postGuildTemplate } from "../../../api";
2023-11-04 18:59:39 +00:00
import { useParams } from "wouter";
import { useState } from "preact/hooks";
import { ICON_FLASH_TIME } from "../../../consts";
import { useFlash } from "../../App/FlashContext";
2023-11-04 18:59:39 +00:00
export const CreateButtonRow = () => {
const { guild } = useParams();
const [reminder] = useReminder();
const [recentlyCreated, setRecentlyCreated] = useState(false);
2023-11-06 18:11:18 +00:00
const [templateRecentlyCreated, setTemplateRecentlyCreated] = useState(false);
2023-11-04 18:59:39 +00:00
const flash = useFlash();
2023-11-04 18:59:39 +00:00
const queryClient = useQueryClient();
const mutation = useMutation({
...postGuildReminder(guild),
onSuccess: (data) => {
if (data.error) {
2023-11-05 17:01:47 +00:00
flash({
message: data.error,
type: "error",
});
} else {
2023-11-05 17:01:47 +00:00
flash({
message: "Reminder created",
type: "success",
});
queryClient.invalidateQueries({
queryKey: ["GUILD_REMINDERS", guild],
});
setRecentlyCreated(true);
setTimeout(() => {
setRecentlyCreated(false);
}, ICON_FLASH_TIME);
}
2023-11-04 18:59:39 +00:00
},
});
2023-11-06 18:11:18 +00:00
const templateMutation = useMutation({
...postGuildTemplate(guild),
onSuccess: (data) => {
if (data.error) {
flash({
message: data.error,
type: "error",
});
} else {
flash({
message: "Template created",
type: "success",
});
queryClient.invalidateQueries({
queryKey: ["GUILD_TEMPLATES", guild],
});
setTemplateRecentlyCreated(true);
setTimeout(() => {
setTemplateRecentlyCreated(false);
}, ICON_FLASH_TIME);
}
},
});
2023-11-04 18:59:39 +00:00
return (
<div class="button-row">
<div class="button-row-reminder">
<button
class="button is-success"
onClick={() => {
mutation.mutate(reminder);
}}
>
<span>Create Reminder</span>{" "}
{mutation.isLoading ? (
<span class="icon">
<i class="fas fa-spin fa-cog"></i>
</span>
) : recentlyCreated ? (
<span class="icon">
<i class="fas fa-check"></i>
</span>
) : (
<span class="icon">
<i class="fas fa-sparkles"></i>
</span>
)}
</button>
</div>
<div class="button-row-template">
<div>
2023-11-06 18:11:18 +00:00
<button
class="button is-success is-outlined"
onClick={() => {
templateMutation.mutate(reminder);
}}
>
2023-11-04 18:59:39 +00:00
<span>Create Template</span>{" "}
2023-11-06 18:11:18 +00:00
{templateMutation.isLoading ? (
<span class="icon">
<i class="fas fa-spin fa-cog"></i>
</span>
) : templateRecentlyCreated ? (
<span class="icon">
<i class="fas fa-check"></i>
</span>
) : (
<span class="icon">
<i class="fas fa-file-spreadsheet"></i>
</span>
)}
2023-11-04 18:59:39 +00:00
</button>
</div>
<div>
<LoadTemplate />
</div>
</div>
</div>
);
};