79 lines
2.3 KiB
TypeScript
79 lines
2.3 KiB
TypeScript
import { LoadingOverlay } from "@mantine/core";
|
|
import { useModals } from "@mantine/modals";
|
|
import { GetServerSidePropsContext } from "next";
|
|
import { useEffect, useState } from "react";
|
|
import Meta from "../../../components/Meta";
|
|
import showErrorModal from "../../../components/share/showErrorModal";
|
|
import EditableUpload from "../../../components/upload/EditableUpload";
|
|
import useConfirmLeave from "../../../hooks/confirm-leave.hook";
|
|
import useTranslate from "../../../hooks/useTranslate.hook";
|
|
import shareService from "../../../services/share.service";
|
|
import { Share as ShareType } from "../../../types/share.type";
|
|
|
|
export function getServerSideProps(context: GetServerSidePropsContext) {
|
|
return {
|
|
props: { shareId: context.params!.shareId },
|
|
};
|
|
}
|
|
|
|
const Share = ({ shareId }: { shareId: string }) => {
|
|
const t = useTranslate();
|
|
const modals = useModals();
|
|
|
|
const [isLoading, setIsLoading] = useState(true);
|
|
const [share, setShare] = useState<ShareType>();
|
|
|
|
useConfirmLeave({
|
|
message: t("upload.notify.confirm-leave"),
|
|
enabled: isLoading,
|
|
});
|
|
|
|
useEffect(() => {
|
|
shareService
|
|
.getFromOwner(shareId)
|
|
.then((share) => {
|
|
setShare(share);
|
|
})
|
|
.catch((e) => {
|
|
const { error } = e.response.data;
|
|
if (e.response.status == 404) {
|
|
if (error == "share_removed") {
|
|
showErrorModal(
|
|
modals,
|
|
t("share.error.removed.title"),
|
|
e.response.data.message,
|
|
);
|
|
} else {
|
|
showErrorModal(
|
|
modals,
|
|
t("share.error.not-found.title"),
|
|
t("share.error.not-found.description"),
|
|
);
|
|
}
|
|
} else if (e.response.status == 403 && error == "share_removed") {
|
|
showErrorModal(
|
|
modals,
|
|
t("share.error.access-denied.title"),
|
|
t("share.error.access-denied.description"),
|
|
);
|
|
} else {
|
|
showErrorModal(modals, t("common.error"), t("common.error.unknown"));
|
|
}
|
|
})
|
|
.finally(() => {
|
|
setIsLoading(false);
|
|
});
|
|
}, []);
|
|
|
|
if (isLoading) return <LoadingOverlay visible />;
|
|
|
|
return (
|
|
<>
|
|
<Meta title={t("share.edit.title", { shareId })} />
|
|
<EditableUpload shareId={shareId} files={share?.files || []} />
|
|
</>
|
|
);
|
|
};
|
|
|
|
export default Share;
|