fix: resolve type errors
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user