43 lines
1.1 KiB
TypeScript
43 lines
1.1 KiB
TypeScript
import React from "react";
|
|
import axios from "axios";
|
|
import {toast} from "react-toastify";
|
|
import {BsDoorOpen} from "react-icons/bs";
|
|
|
|
export const useAssignmentRelease = (assignmentId: string, reload?: Function) => {
|
|
const [loading, setLoading] = React.useState(false);
|
|
const archive = () => {
|
|
// archive assignment
|
|
setLoading(true);
|
|
axios
|
|
.post(`/api/assignments/${assignmentId}/release`)
|
|
.then((res) => {
|
|
toast.success("Assignment released!");
|
|
if (reload) reload();
|
|
setLoading(false);
|
|
})
|
|
.catch((err) => {
|
|
toast.error("Failed to release the assignment!");
|
|
setLoading(false);
|
|
});
|
|
};
|
|
|
|
const renderIcon = (downloadClasses: string, loadingClasses: string) => {
|
|
if (loading) {
|
|
return <span className={`${loadingClasses} loading loading-infinity w-6`} />;
|
|
}
|
|
return (
|
|
<div
|
|
className="tooltip flex items-center justify-center w-fit h-fit"
|
|
data-tip="Release assignment"
|
|
onClick={(e) => {
|
|
e.stopPropagation();
|
|
archive();
|
|
}}>
|
|
<BsDoorOpen className={`${downloadClasses} text-2xl cursor-pointer tooltip`} />
|
|
</div>
|
|
);
|
|
};
|
|
|
|
return renderIcon;
|
|
};
|