import * as React from "react";
import styled from "styled-components";
import { NormContext } from "./Spirhal";
import { normRenderedGroups } from "./Group";
import { EHESSNotice } from "./norms/EHESS/EHESS";
import { APANotice } from "./norms/APA/APA";
import { MLANotice } from "./norms/MLA/MLA";
import pdfImg from "../images/file-pdf-solid.svg";
export interface Notice {
docid: string;
citationFull_s: string;
authFirstName_s: string[];
authLastName_s: string[];
title_s: string;
bookTitle_s: string | undefined;
journalTitle_s: string | undefined;
conferenceTitle_s: string | undefined;
scientificEditor_s: string | undefined;
volume_s: string | undefined;
issue_s: string | undefined;
authorityInstitution_s: string | undefined;
publicationLocation_s: string | undefined;
city_s: string | undefined;
country_s: string | undefined;
publisher_s: string | undefined;
producedDateY_i: string | undefined;
page_s: string | undefined;
inPress_bool: boolean | undefined;
proceedings_s: string | undefined;
conferenceStartDateY_i: string | undefined;
subTitle_s: string | undefined;
otherType_s: string | undefined;
files_s: string[] | undefined;
fileAnnexes_s: string[] | undefined;
uri_s: string | undefined;
halId_s: string;
docType_s: string;
doiId_s: string;
isbn_s: string;
}
const HALNoticeContainer = styled.div`
display: flex;
justify-content: space-between;
`;
const GenericNoticeContainer = styled.div`
display: initial;
width: 95%;
padding-right: 20px;
`;
const IntegralTextContainer = styled.div`
width: 5%;
& img {
width: 2rem;
}
`;
export const EmptyNotice = () => Aucune notice présente sur HAL;
export enum Norm {
EHESS = "EHESS",
APA = "APA",
MLA = "MLA",
DEFAULT = "default",
}
const HALNotice: React.FC<{ citationFull_s: string }> = ({ citationFull_s }) => {
return ;
};
export const GenericNoticeComponent: React.FC = (notice) => {
const norm = React.useContext(NormContext);
let noticeComponent = <>>;
switch (norm) {
case Norm.EHESS:
noticeComponent = ;
break;
case Norm.APA:
noticeComponent = ;
break;
case Norm.MLA:
noticeComponent = ;
break;
default:
noticeComponent = ;
break;
}
return noticeComponent;
};
export function useFilteredNotice(notice: Notice) {
const norm = React.useContext(NormContext);
const groupId = normRenderedGroups[norm]?.includes(notice.docType_s) ? notice.docType_s : "DEFAULT";
const filteredNotice = { ...notice };
if (filteredNotice.inPress_bool) {
filteredNotice["producedDateY_i"] = "À paraître";
} else if (groupId === "COMM" && filteredNotice.proceedings_s === "0") {
filteredNotice["producedDateY_i"] = filteredNotice.conferenceStartDateY_i;
}
if (Array.isArray(filteredNotice.title_s)) {
filteredNotice["title_s"] = filteredNotice.title_s[0]; // we consider the first element to be the french one
}
if (filteredNotice.subTitle_s !== undefined) {
filteredNotice["title_s"] = `${filteredNotice.title_s} : ${filteredNotice.subTitle_s}`;
}
return filteredNotice;
}
export const NoticeComponent: React.FunctionComponent = (notice) => {
const filteredNotice = useFilteredNotice(notice);
let urlFile = null;
if (filteredNotice.files_s !== undefined && filteredNotice.files_s.length > 0) {
urlFile = filteredNotice.files_s[0];
} else if (filteredNotice.fileAnnexes_s !== undefined && filteredNotice.fileAnnexes_s.length > 0) {
urlFile = filteredNotice.fileAnnexes_s[0];
}
return (
{urlFile !== null && (
)}
);
};
export const NoticeTypeContext = React.createContext<{ noticeType: string }>({ noticeType: "" });