-
- {map(tabs, (value, key) => (
-
setActiveTab(key)}
- >
- {value}
-
- ))}
+ return (!seriesId)
+ ? null
+ : (
+
+
+
+
+ {map(tabs, (value, key) => (
+
setActiveTab(key)}
+ >
+ {value}
+
+ ))}
+
+
+
+
+ {renderTab(activeTab, seriesId)}
-
-
- {renderTab(activeTab, seriesId)}
-
-
-
- );
+
+ );
};
export default EditSeriesModal;
diff --git a/src/components/Collection/Series/EditSeriesTabs/NameTab.tsx b/src/components/Collection/Series/EditSeriesTabs/NameTab.tsx
index de3a71cef..36c02558b 100644
--- a/src/components/Collection/Series/EditSeriesTabs/NameTab.tsx
+++ b/src/components/Collection/Series/EditSeriesTabs/NameTab.tsx
@@ -1,7 +1,6 @@
import React, { useEffect, useMemo, useState } from 'react';
import { mdiCheckUnderlineCircleOutline, mdiCloseCircleOutline, mdiPencilCircleOutline } from '@mdi/js';
import cx from 'classnames';
-import { map } from 'lodash';
import { useToggle } from 'usehooks-ts';
import Input from '@/components/Input/Input';
@@ -9,8 +8,6 @@ import toast from '@/components/Toast';
import { useOverrideSeriesTitleMutation } from '@/core/react-query/series/mutations';
import { useSeriesQuery } from '@/core/react-query/series/queries';
-import type { SeriesType } from '@/core/types/api/series';
-
type Props = {
seriesId: number;
};
@@ -19,17 +16,16 @@ const NameTab = ({ seriesId }: Props) => {
const [name, setName] = useState('');
const [nameEditable, toggleNameEditable] = useToggle(false);
- const seriesQuery = useSeriesQuery(seriesId, { includeDataFrom: ['AniDB'] });
- const series = useMemo(() => seriesQuery?.data ?? {} as SeriesType, [seriesQuery.data]);
+ const { data: seriesData, isError, isFetching, isSuccess } = useSeriesQuery(seriesId, { includeDataFrom: ['AniDB'] });
const { mutate: overrideTitle } = useOverrideSeriesTitleMutation();
useEffect(() => {
- setName(series.Name ?? '');
- }, [series.Name]);
+ setName(seriesData?.Name ?? '');
+ }, [seriesData?.Name]);
const nameInputIcons = useMemo(() => {
- if (!nameEditable || seriesQuery.isFetching) {
+ if (!nameEditable || isFetching) {
return [{
icon: mdiPencilCircleOutline,
className: 'text-panel-text-primary',
@@ -37,12 +33,14 @@ const NameTab = ({ seriesId }: Props) => {
}];
}
+ if (!isSuccess) return [];
+
return [
{
icon: mdiCloseCircleOutline,
className: 'text-panel-text-danger',
onClick: () => {
- setName(series.Name);
+ setName(seriesData.Name ?? '');
toggleNameEditable();
},
},
@@ -50,7 +48,7 @@ const NameTab = ({ seriesId }: Props) => {
icon: mdiCheckUnderlineCircleOutline,
className: 'text-panel-text-primary',
onClick: () =>
- overrideTitle({ seriesId: series.IDs.ID, Title: name }, {
+ overrideTitle({ seriesId: seriesData.IDs.ID, Title: name }, {
onSuccess: () => {
toast.success('Name updated successfully!');
toggleNameEditable();
@@ -59,11 +57,20 @@ const NameTab = ({ seriesId }: Props) => {
}),
},
];
- }, [name, nameEditable, overrideTitle, series.IDs.ID, series.Name, seriesQuery.isFetching, toggleNameEditable]);
+ }, [
+ isFetching,
+ isSuccess,
+ name,
+ nameEditable,
+ overrideTitle,
+ seriesData?.IDs.ID,
+ seriesData?.Name,
+ toggleNameEditable,
+ ]);
return (
- {seriesQuery.isError && (
+ {isError && (
Series data could not be loaded!
@@ -74,6 +81,7 @@ const NameTab = ({ seriesId }: Props) => {
type="text"
onChange={e => setName(e.target.value)}
value={name}
+ placeholder="Loading..."
label="Name"
className="mb-4"
inputClassName={cx(nameInputIcons.length > 1 ? 'pr-[4.5rem]' : 'pr-10', 'truncate')}
@@ -83,7 +91,7 @@ const NameTab = ({ seriesId }: Props) => {
{nameEditable && (
- {map(series.AniDB?.Titles, title => (
+ {seriesData?.AniDB?.Titles.map(title => (
();
+ const openEditModalWithSeriesId = useEventCallback((seriesId: number) => {
+ setEditSeriesModalId(() => {
+ toggleEditSeriesModal();
+ return seriesId;
+ });
+ });
+
const { mutate: patchSettings } = usePatchSettingsMutation();
useEffect(() => {
@@ -230,6 +240,7 @@ function Collection() {
items={items}
mode={mode}
total={total}
+ setEditSeriesModalId={openEditModalWithSeriesId}
/>
{isSeries && }
+
);
}