fix: resolve type errors

This commit is contained in:
Gauthier
2024-08-26 12:19:00 +02:00
parent aa3670322d
commit 6ee96604ec
3 changed files with 171 additions and 160 deletions

View File

@@ -7,7 +7,9 @@ import defineMessages from '@app/utils/defineMessages';
import type { TvResult } from '@server/models/Search'; import type { TvResult } from '@server/models/Search';
import { useIntl } from 'react-intl'; import { useIntl } from 'react-intl';
const messages = defineMessages('components.DiscoverTvUpcoming', {}); const messages = defineMessages('components.DiscoverTvUpcoming', {
upcomingtv: 'Upcoming Series',
});
const DiscoverTvUpcoming = () => { const DiscoverTvUpcoming = () => {
const intl = useIntl(); const intl = useIntl();

View File

@@ -89,171 +89,179 @@ const OverrideRuleTile = ({
})(); })();
}, [rules]); }, [rules]);
return rules return (
?.filter( <>
(rule) => {rules
(rule.radarrServiceId !== null && .filter(
rule.radarrServiceId === radarr?.id) || (rule) =>
(rule.sonarrServiceId !== null && rule.sonarrServiceId === sonarr?.id) (rule.radarrServiceId !== null &&
) rule.radarrServiceId === radarr?.id) ||
.map((rule) => ( (rule.sonarrServiceId !== null &&
<li className="flex h-full flex-col rounded-lg bg-gray-800 text-left shadow ring-1 ring-gray-500"> rule.sonarrServiceId === sonarr?.id)
<div className="flex w-full flex-1 items-center justify-between space-x-6 p-6"> )
<div className="flex-1 truncate"> .map((rule) => (
<span className="text-lg"> <li className="flex h-full flex-col rounded-lg bg-gray-800 text-left shadow ring-1 ring-gray-500">
{intl.formatMessage(messages.conditions)} <div className="flex w-full flex-1 items-center justify-between space-x-6 p-6">
</span> <div className="flex-1 truncate">
{rule.users && ( <span className="text-lg">
<p className="truncate text-sm leading-5 text-gray-300"> {intl.formatMessage(messages.conditions)}
<span className="mr-2 font-bold">
{intl.formatMessage(messages.users)}
</span> </span>
<div className="inline-flex gap-2"> {rule.users && (
{rule.users.split(',').map((userId) => { <p className="truncate text-sm leading-5 text-gray-300">
return ( <span className="mr-2 font-bold">
<span> {intl.formatMessage(messages.users)}
{
users?.find((user) => user.id === Number(userId))
?.displayName
}
</span>
);
})}
</div>
</p>
)}
{rule.genre && (
<p className="truncate text-sm leading-5 text-gray-300">
<span className="mr-2 font-bold">
{intl.formatMessage(messages.genre)}
</span>
<div className="inline-flex gap-2">
{rule.genre.split(',').map((genreId) => (
<span>
{genres?.find((g) => g.id === Number(genreId))?.name}
</span> </span>
))} <div className="inline-flex gap-2">
</div> {rule.users.split(',').map((userId) => {
</p> return (
)} <span>
{rule.language && ( {
<p className="truncate text-sm leading-5 text-gray-300"> users?.find((user) => user.id === Number(userId))
<span className="mr-2 font-bold"> ?.displayName
{intl.formatMessage(messages.language)} }
</span>
);
})}
</div>
</p>
)}
{rule.genre && (
<p className="truncate text-sm leading-5 text-gray-300">
<span className="mr-2 font-bold">
{intl.formatMessage(messages.genre)}
</span>
<div className="inline-flex gap-2">
{rule.genre.split(',').map((genreId) => (
<span>
{genres?.find((g) => g.id === Number(genreId))?.name}
</span>
))}
</div>
</p>
)}
{rule.language && (
<p className="truncate text-sm leading-5 text-gray-300">
<span className="mr-2 font-bold">
{intl.formatMessage(messages.language)}
</span>
<div className="inline-flex gap-2">
{rule.language
.split('|')
.filter((languageId) => languageId !== 'server')
.map((languageId) => {
const language = languages?.find(
(language) => language.iso_639_1 === languageId
);
if (!language) return null;
const languageName =
intl.formatDisplayName(language.iso_639_1, {
type: 'language',
fallback: 'none',
}) ?? language.english_name;
return <span>{languageName}</span>;
})}
</div>
</p>
)}
{rule.keywords && (
<p className="truncate text-sm leading-5 text-gray-300">
<span className="mr-2 font-bold">
{intl.formatMessage(messages.keywords)}
</span>
<div className="inline-flex gap-2">
{rule.keywords.split(',').map((keywordId) => {
return (
<span>
{
keywords?.find(
(keyword) => keyword.id === Number(keywordId)
)?.name
}
</span>
);
})}
</div>
</p>
)}
<span className="text-lg">
{intl.formatMessage(messages.settings)}
</span> </span>
<div className="inline-flex gap-2"> {rule.profileId && (
{rule.language <p className="runcate text-sm leading-5 text-gray-300">
.split('|') <span className="mr-2 font-bold">
.filter((languageId) => languageId !== 'server') {intl.formatMessage(messages.qualityprofile)}
.map((languageId) => { </span>
const language = languages?.find( {
(language) => language.iso_639_1 === languageId testResponse.profiles.find(
(profile) => rule.profileId === profile.id
)?.name
}
</p>
)}
{rule.rootFolder && (
<p className="truncate text-sm leading-5 text-gray-300">
<span className="mr-2 font-bold">
{intl.formatMessage(messages.rootfolder)}
</span>
{rule.rootFolder}
</p>
)}
{rule.tags && rule.tags.length > 0 && (
<p className="truncate text-sm leading-5 text-gray-300">
<span className="mr-2 font-bold">
{intl.formatMessage(messages.tags)}
</span>
<div className="inline-flex gap-2">
{rule.tags.split(',').map((tag) => (
<span>
{
testResponse.tags?.find((t) => t.id === Number(tag))
?.label
}
</span>
))}
</div>
</p>
)}
</div>
</div>
<div className="border-t border-gray-500">
<div className="-mt-px flex">
<div className="flex w-0 flex-1 border-r border-gray-500">
<button
onClick={() =>
setOverrideRuleModal({ open: true, rule, testResponse })
}
className="focus:ring-blue relative -mr-px inline-flex w-0 flex-1 items-center justify-center rounded-bl-lg border border-transparent py-4 text-sm font-medium leading-5 text-gray-200 transition duration-150 ease-in-out hover:text-white focus:z-10 focus:border-gray-500 focus:outline-none"
>
<PencilIcon className="mr-2 h-5 w-5" />
<span>{intl.formatMessage(globalMessages.edit)}</span>
</button>
</div>
<div className="-ml-px flex w-0 flex-1">
<button
onClick={async () => {
const res = await fetch(
`/api/v1/overrideRule/${rule.id}`,
{
method: 'DELETE',
}
); );
if (!language) return null; if (!res.ok) throw new Error();
const languageName = revalidate();
intl.formatDisplayName(language.iso_639_1, { }}
type: 'language', className="focus:ring-blue relative inline-flex w-0 flex-1 items-center justify-center rounded-br-lg border border-transparent py-4 text-sm font-medium leading-5 text-gray-200 transition duration-150 ease-in-out hover:text-white focus:z-10 focus:border-gray-500 focus:outline-none"
fallback: 'none', >
}) ?? language.english_name; <TrashIcon className="mr-2 h-5 w-5" />
return <span>{languageName}</span>; <span>{intl.formatMessage(globalMessages.delete)}</span>
})} </button>
</div> </div>
</p> </div>
)}
{rule.keywords && (
<p className="truncate text-sm leading-5 text-gray-300">
<span className="mr-2 font-bold">
{intl.formatMessage(messages.keywords)}
</span>
<div className="inline-flex gap-2">
{rule.keywords.split(',').map((keywordId) => {
return (
<span>
{
keywords?.find(
(keyword) => keyword.id === Number(keywordId)
)?.name
}
</span>
);
})}
</div>
</p>
)}
<span className="text-lg">
{intl.formatMessage(messages.settings)}
</span>
{rule.profileId && (
<p className="runcate text-sm leading-5 text-gray-300">
<span className="mr-2 font-bold">
{intl.formatMessage(messages.qualityprofile)}
</span>
{
testResponse.profiles.find(
(profile) => rule.profileId === profile.id
)?.name
}
</p>
)}
{rule.rootFolder && (
<p className="truncate text-sm leading-5 text-gray-300">
<span className="mr-2 font-bold">
{intl.formatMessage(messages.rootfolder)}
</span>
{rule.rootFolder}
</p>
)}
{rule.tags && rule.tags.length > 0 && (
<p className="truncate text-sm leading-5 text-gray-300">
<span className="mr-2 font-bold">
{intl.formatMessage(messages.tags)}
</span>
<div className="inline-flex gap-2">
{rule.tags.split(',').map((tag) => (
<span>
{
testResponse.tags?.find((t) => t.id === Number(tag))
?.label
}
</span>
))}
</div>
</p>
)}
</div>
</div>
<div className="border-t border-gray-500">
<div className="-mt-px flex">
<div className="flex w-0 flex-1 border-r border-gray-500">
<button
onClick={() =>
setOverrideRuleModal({ open: true, rule, testResponse })
}
className="focus:ring-blue relative -mr-px inline-flex w-0 flex-1 items-center justify-center rounded-bl-lg border border-transparent py-4 text-sm font-medium leading-5 text-gray-200 transition duration-150 ease-in-out hover:text-white focus:z-10 focus:border-gray-500 focus:outline-none"
>
<PencilIcon className="mr-2 h-5 w-5" />
<span>{intl.formatMessage(globalMessages.edit)}</span>
</button>
</div> </div>
<div className="-ml-px flex w-0 flex-1"> </li>
<button ))}
onClick={async () => { </>
const res = await fetch(`/api/v1/overrideRule/${rule.id}`, { );
method: 'DELETE',
});
if (!res.ok) throw new Error();
revalidate();
}}
className="focus:ring-blue relative inline-flex w-0 flex-1 items-center justify-center rounded-br-lg border border-transparent py-4 text-sm font-medium leading-5 text-gray-200 transition duration-150 ease-in-out hover:text-white focus:z-10 focus:border-gray-500 focus:outline-none"
>
<TrashIcon className="mr-2 h-5 w-5" />
<span>{intl.formatMessage(globalMessages.delete)}</span>
</button>
</div>
</div>
</div>
</li>
));
}; };
export default OverrideRuleTile; export default OverrideRuleTile;

View File

@@ -100,6 +100,7 @@
"components.Discover.StudioSlider.studios": "Studios", "components.Discover.StudioSlider.studios": "Studios",
"components.Discover.TvGenreList.seriesgenres": "Series Genres", "components.Discover.TvGenreList.seriesgenres": "Series Genres",
"components.Discover.TvGenreSlider.tvgenres": "Series Genres", "components.Discover.TvGenreSlider.tvgenres": "Series Genres",
"components.DiscoverTvUpcoming.upcomingtv": "Upcoming Series",
"components.Discover.createnewslider": "Create New Slider", "components.Discover.createnewslider": "Create New Slider",
"components.Discover.customizediscover": "Customize Discover", "components.Discover.customizediscover": "Customize Discover",
"components.Discover.discover": "Discover", "components.Discover.discover": "Discover",