import { Link, Typography } from "@mui/material";
import { memo, useCallback, useMemo } from "react";
import { Trans, useTranslation } from "react-i18next";
import { Task } from "../../../api/dashboard";
import { TaskSummary, TaskType } from "../../../api/workflow";
import CrUri, { Filesystem } from "../../../util/uri";
import TaskSummaryTitle from "../../Pages/Tasks/TaskSummaryTitle";
export const userTaskTypes: string[] = [
TaskType.relocate,
TaskType.create_archive,
TaskType.extract_archive,
TaskType.remote_download,
TaskType.import,
];
export interface TaskContentProps {
task: Task;
openEntity?: (entityID: number) => void;
}
const processUrl = (url: string, userHashId: string) => {
const crUrl = new CrUri(url);
if (crUrl.fs() == Filesystem.my && !crUrl.id()) {
crUrl.setUsername(userHashId);
}
return crUrl.toString();
};
export const processTaskContent = (summary: TaskSummary, userHashId: string): TaskSummary => {
if (summary.props?.src) {
summary.props.src = processUrl(summary.props.src, userHashId);
}
if (summary.props?.dst) {
summary.props.dst = processUrl(summary.props.dst, userHashId);
}
if (summary.props?.src_multiple) {
summary.props.src_multiple = summary.props.src_multiple.map((url) => processUrl(url, userHashId));
}
return summary;
};
export const TaskContent = memo(({ task, openEntity }: TaskContentProps) => {
const { t } = useTranslation("dashboard");
if (userTaskTypes.includes(task.type ?? "")) {
const processedSummary = processTaskContent({ ...task.summary } as TaskSummary, task?.user_hash_id ?? "");
return (
);
}
const entityLinkClick = useCallback(
(entityID: number) => (e: React.MouseEvent) => {
e.preventDefault();
e.stopPropagation();
if (openEntity) {
openEntity(entityID);
}
},
[openEntity],
);
const content = useMemo(() => {
var privateState: any = {};
try {
privateState = JSON.parse(task.private_state ?? "{}");
} catch (error) {
console.error(error);
}
switch (task.type) {
case TaskType.upload_sentinel_check:
return t("task.uploadSentinelCheck", { uploadSessionID: privateState?.session?.Props?.UploadSessionID });
case TaskType.media_metadata:
return (
]}
/>
);
case TaskType.entity_recycle_routine:
return t("task.entityRecycleRoutine");
case TaskType.explicit_entity_recycle:
return t("task.explicitEntityRecycle", {
blobs: privateState?.entity_ids?.map((id: number) => `#${id}`).join(", "),
});
default:
return "";
}
}, [task, t]);
return {content};
});