2022-05-04 07:30:06 +02:00
|
|
|
import { Indicator, Popover, Box, Center } from '@mantine/core';
|
2022-05-04 09:30:28 +02:00
|
|
|
import { useEffect, useState } from 'react';
|
2022-04-30 21:36:46 +02:00
|
|
|
import { Calendar } from '@mantine/dates';
|
|
|
|
|
import MediaDisplay from './MediaDisplay';
|
2022-05-02 15:09:39 +02:00
|
|
|
import { useConfig } from '../../tools/state';
|
2022-05-04 09:30:28 +02:00
|
|
|
import { serviceItem } from '../../tools/types';
|
2022-04-30 21:36:46 +02:00
|
|
|
|
|
|
|
|
export default function CalendarComponent(props: any) {
|
2022-05-04 09:30:28 +02:00
|
|
|
const { config } = useConfig();
|
2022-04-30 21:36:46 +02:00
|
|
|
const [opened, setOpened] = useState(false);
|
2022-05-04 09:30:28 +02:00
|
|
|
const [medias, setMedias] = useState([] as any);
|
|
|
|
|
if (medias === undefined) {
|
|
|
|
|
return <div>ok</div>;
|
|
|
|
|
}
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
// Filter only sonarr and radarr services
|
|
|
|
|
const filtered = config.services.filter(
|
|
|
|
|
(service) => service.type === 'Sonarr' || service.type === 'Radarr'
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
// Get the url and API key for each service
|
|
|
|
|
const serviceUrls = filtered.map((service: serviceItem) => ({
|
|
|
|
|
url: service.url,
|
|
|
|
|
apiKey: service.apiKey,
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
// Get the medias from each service
|
|
|
|
|
// With no cors
|
|
|
|
|
// const promises = serviceUrls.map((service) =>
|
|
|
|
|
// fetch('/api/getCalendar', {
|
|
|
|
|
// method: 'POST',
|
|
|
|
|
// body: JSON.stringify({
|
|
|
|
|
// apiKey: service.apiKey,
|
|
|
|
|
// remoteUrl: service.url,
|
|
|
|
|
// }),
|
|
|
|
|
// }).then((response) => console.log(response.json()))
|
|
|
|
|
// );
|
|
|
|
|
fetch('http://server:8989/api/calendar?apikey=ea736455118146fea297e6c7465205ce').then(
|
|
|
|
|
(response) => {
|
|
|
|
|
response.json().then((data) => setMedias(data));
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
}, [config.services]);
|
2022-04-30 21:36:46 +02:00
|
|
|
|
2022-05-04 09:30:28 +02:00
|
|
|
if (medias === undefined) {
|
|
|
|
|
return <div>ok</div>;
|
|
|
|
|
}
|
2022-05-01 14:47:06 +02:00
|
|
|
|
2022-04-30 21:36:46 +02:00
|
|
|
return (
|
|
|
|
|
<Calendar
|
2022-05-02 18:10:56 +02:00
|
|
|
onChange={(day: any) => {}}
|
2022-05-04 09:30:28 +02:00
|
|
|
renderDay={(renderdate) => <DayComponent renderdate={renderdate} medias={medias} />}
|
2022-04-30 21:36:46 +02:00
|
|
|
/>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function DayComponent(props: any) {
|
2022-05-04 09:30:28 +02:00
|
|
|
const { renderdate, medias }: { renderdate: Date; medias: [] } = props;
|
2022-04-30 21:36:46 +02:00
|
|
|
const [opened, setOpened] = useState(false);
|
|
|
|
|
|
|
|
|
|
const day = renderdate.getDate();
|
2022-05-04 09:30:28 +02:00
|
|
|
// Itterate over the medias and filter the ones that are on the same day
|
|
|
|
|
const filtered = medias.filter((media: any) => {
|
|
|
|
|
const date = new Date(media.airDate);
|
|
|
|
|
return date.getDate() === day;
|
|
|
|
|
});
|
|
|
|
|
if (filtered.length === 0) {
|
|
|
|
|
return <div>{day}</div>;
|
2022-04-30 21:36:46 +02:00
|
|
|
}
|
2022-05-04 09:30:28 +02:00
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<Box
|
|
|
|
|
onClick={() => {
|
|
|
|
|
setOpened(true);
|
|
|
|
|
}}
|
|
|
|
|
style={{ height: '100%', width: '100%' }}
|
|
|
|
|
>
|
|
|
|
|
<Center>
|
|
|
|
|
<Indicator size={10} color="red">
|
|
|
|
|
<Popover
|
|
|
|
|
position="left"
|
|
|
|
|
width={700}
|
|
|
|
|
onClose={() => setOpened(false)}
|
|
|
|
|
opened={opened}
|
|
|
|
|
target={day}
|
|
|
|
|
>
|
|
|
|
|
<MediaDisplay media={filtered[0]} />
|
|
|
|
|
</Popover>
|
|
|
|
|
</Indicator>
|
|
|
|
|
</Center>
|
|
|
|
|
</Box>
|
|
|
|
|
);
|
2022-04-30 21:36:46 +02:00
|
|
|
}
|