diff --git a/mybookmark.ui/src/App.tsx b/mybookmark.ui/src/App.tsx index 1cde86d..cb24996 100644 --- a/mybookmark.ui/src/App.tsx +++ b/mybookmark.ui/src/App.tsx @@ -61,10 +61,10 @@ function App() { }> } /> - } /> - } /> - } /> - } /> + } /> + } /> + } /> + } /> {/* } /> */} {/* } /> */} diff --git a/mybookmark.ui/src/api/AnimeTitleApi.tsx b/mybookmark.ui/src/api/AnimeTitleApi.tsx index 2e76ea0..ac4a5bf 100644 --- a/mybookmark.ui/src/api/AnimeTitleApi.tsx +++ b/mybookmark.ui/src/api/AnimeTitleApi.tsx @@ -10,7 +10,7 @@ const controllerUrl = 'http://localhost:5198/MediaContent/Anime/Title/'; function FillMediaInfoUrl(mediaInfo: MediaInfo | null | undefined){ if (mediaInfo != null){ mediaInfo.url = `${controllerUrl}GetMedia?objectId=${mediaInfo.objectId}`; - // console.log(`mediaInfo.url: ${mediaInfo.url}`); + // console.log(`mediaInfo.objectId${mediaInfo.objectId}\r\nmediaInfo.url: ${mediaInfo.url}`); } } @@ -60,12 +60,17 @@ export async function GetAnimeTitleDetail(id: string, client?: AxiosInstance | n }, ); - //console.log(JSON.stringify(data, null, 4)); - // 👇️ "response status is: 200" // console.log('response status is: ', status); FillMediaInfoUrl(data.commonProperties.preview); + // console.log('items count: ', data.items.length); + data.items.forEach(item => FillMediaInfoUrl(item.commonProperties.preview)); + // data.items.forEach(item => { console.log('aa'); FillMediaInfoUrl(item.commonProperties.preview);}); data.commonProperties.relatedContent.forEach(relatedContent => FillMediaInfoUrl(relatedContent)); + + // console.log('data'); + // console.log(JSON.stringify(data, null, 4)); + return data; } catch (error) @@ -91,6 +96,7 @@ export async function GetAnimeTitle(id: string, client?: AxiosInstance | null) { // 👇️ "response status is: 200" // console.log('response status is: ', status); FillMediaInfoUrl(data.commonProperties.preview); + data.items.forEach(item => FillMediaInfoUrl(item.commonProperties.preview)); data.commonProperties.relatedContent.forEach(relatedContent => FillMediaInfoUrl(relatedContent)); return data; } diff --git a/mybookmark.ui/src/api/CommonPropertiesHelper.tsx b/mybookmark.ui/src/api/CommonPropertiesHelper.tsx index e69de29..6b9911f 100644 --- a/mybookmark.ui/src/api/CommonPropertiesHelper.tsx +++ b/mybookmark.ui/src/api/CommonPropertiesHelper.tsx @@ -0,0 +1,91 @@ +import {NameItem, NameType} from "./models/Types.tsx"; + +export type CommonPropertiesName = { + nameInUserLanguage: string | null, + languageCodeIso3: string | null, + nameOriginal: string | null, + namesUsed: Array, +} + +export function GetName(names: Array | null | undefined, primaryLanguageId?: string | null | undefined) : CommonPropertiesName | null { + if (names != null) { + const nameOriginal = names!.find(q => q.type == NameType.Original) + if ((primaryLanguageId == null || primaryLanguageId == '') || nameOriginal?.language.id == primaryLanguageId) { + if (nameOriginal != null) { + // namesUsed.push(nameOriginal); + // titleNames.titleString = `${nameOriginal.value} [${nameOriginal.language.codeIso3}]`; + return GetCommonPropertiesName(null, nameOriginal); + } + } + else { + let result = null as CommonPropertiesName | null; + const namesUsed = new Array(); + + if (nameOriginal != null) { + namesUsed.push(nameOriginal); + // titleNames.titleString = `${nameOriginal.value} [${nameOriginal.language.codeIso3}]`; + result = GetCommonPropertiesName(null, nameOriginal); + } + + const originalNameInAnotherLanguage = names!.find(q => q.type == NameType.OriginalInAnotherLanguage && q.language.id == primaryLanguageId); + if (originalNameInAnotherLanguage != null) { + namesUsed.push(originalNameInAnotherLanguage); + // titleNames.titleString = `${originalNameInAnotherLanguage.value}${nameOriginal != null ? ` / ${titleNames.titleString}` : ''}`; + result = GetCommonPropertiesName(originalNameInAnotherLanguage, nameOriginal ?? null); + } + else { + const translatedName = names!.find(q => q.type == NameType.Translation && q.language.id == primaryLanguageId); + if (translatedName != null) { + namesUsed.push(translatedName); + result = GetCommonPropertiesName(translatedName, nameOriginal ?? null); + } + } + + if (result != null){ + result.namesUsed = namesUsed; + } + + return result; + } + } + + return null; +} + +function GetCommonPropertiesName(nameInUserLanguage?: NameItem | null, nameOriginal?: NameItem | null) : CommonPropertiesName | null { + if (nameInUserLanguage != null){ + if (nameOriginal != null){ + return { + nameInUserLanguage: nameInUserLanguage.value, + nameOriginal: nameOriginal.value, + languageCodeIso3: nameOriginal!.language.codeIso3, + } as CommonPropertiesName; + // return `${nameInUserLanguage.value} / ${nameOriginal.value} [${nameOriginal!.language.codeIso3}]`; + } + else{ + return { + nameInUserLanguage: nameInUserLanguage.value, + nameOriginal: null, + languageCodeIso3: null, + } as CommonPropertiesName; + } + } + else if (nameOriginal != null){ + return { + nameInUserLanguage: null, + nameOriginal: nameOriginal.value, + languageCodeIso3: nameOriginal!.language.codeIso3, + } as CommonPropertiesName; + // return ( + // <> + // {nameOriginal.value} [{nameOriginal!.language.codeIso3}] + // + // ) + } + else{ + return null; + // return ( + // NO NAME + // ) + } +} \ No newline at end of file diff --git a/mybookmark.ui/src/common/Helper.tsx b/mybookmark.ui/src/common/Helper.tsx index f5bd903..89e8543 100644 --- a/mybookmark.ui/src/common/Helper.tsx +++ b/mybookmark.ui/src/common/Helper.tsx @@ -91,14 +91,6 @@ export function DateToString(date: Date | undefined | null): string { } } -export function GetDuration(durationString: string | null | undefined) : Date | null{ - -} - -export function DurationToString(){ - -} - export function GetNumericValue(percentage: number | null | undefined, valueMax: number) : number | undefined{ // if (!(percentage != undefined && percentage != null && percentage > 0)) return undefined; if (!IsNumericValueDefined(percentage)) return undefined; diff --git a/mybookmark.ui/src/components/MediaContent/edit/Anime/AddAnimeSeasonOrEpisodeModalWindowComponent.tsx b/mybookmark.ui/src/components/MediaContent/edit/Anime/AddAnimeSeasonOrEpisodeModalWindowComponent.tsx index 61c77c8..d5da38a 100644 --- a/mybookmark.ui/src/components/MediaContent/edit/Anime/AddAnimeSeasonOrEpisodeModalWindowComponent.tsx +++ b/mybookmark.ui/src/components/MediaContent/edit/Anime/AddAnimeSeasonOrEpisodeModalWindowComponent.tsx @@ -96,12 +96,6 @@ export default function AddAnimeSeasonOrEpisodeModalWindowComponent(props: IAddA - {/*{addItemType == ItemType.Season &&*/} - {/* <>*/} - {/* Добавить сезон */} - {/* */} - {/*}*/} - {addItemType == ItemType.Episode && <>
diff --git a/mybookmark.ui/src/components/MediaContent/edit/Anime/season/AnimeItemAddComponent.tsx b/mybookmark.ui/src/components/MediaContent/edit/Anime/season/AnimeItemAddComponent.tsx index ec5be7a..7671eed 100644 --- a/mybookmark.ui/src/components/MediaContent/edit/Anime/season/AnimeItemAddComponent.tsx +++ b/mybookmark.ui/src/components/MediaContent/edit/Anime/season/AnimeItemAddComponent.tsx @@ -99,7 +99,7 @@ export default function AnimeItemAddComponent(props : IAnimeItemAddComponentProp >
  • {/**/} -
    Добавить сезон
    @@ -109,7 +109,7 @@ export default function AnimeItemAddComponent(props : IAnimeItemAddComponentProp
  • {/**/} -
    Добавить эпизод
    diff --git a/mybookmark.ui/src/components/MediaContent/edit/Anime/season/AnimeItemShortComponent.tsx b/mybookmark.ui/src/components/MediaContent/edit/Anime/season/AnimeItemShortComponent.tsx index 90fdd33..a17285c 100644 --- a/mybookmark.ui/src/components/MediaContent/edit/Anime/season/AnimeItemShortComponent.tsx +++ b/mybookmark.ui/src/components/MediaContent/edit/Anime/season/AnimeItemShortComponent.tsx @@ -30,6 +30,7 @@ export default function AnimeItemShortComponent(props: IAnimeSeasonsShortCompone {props.animeItem.number} ({props.animeItem.order}).
    + sdfsdf {Name(props.animeItem.commonProperties.names, props.user?.languageId)} - id: [{props.animeItem.id}] df
    season.hasViews: {props.animeItem.completed ? 'TRUE' : 'FALSE'} @@ -89,6 +89,7 @@ function AnimeItemShort(animeItem: Season | Episode, goToDetailPage: () => void,
    {animeItem.commonProperties.preview != null &&
    + animeItem.commonProperties.preview?.url: {animeItem.commonProperties.preview?.url} Promise, deleteRate: () => Promise, forceRefresh?: () => void, @@ -25,7 +25,7 @@ export default function AnimeTitleDetailComponent(props: IAnimeTitleDetailCompon const { data: user } = useQuery(userQueryKey, getUser); const titleNames = GetTitleNames(props.animeTitle.commonProperties.names, props.user?.languageId); const navigate = useNavigate(); - const goToEditPage = () => navigate(`/admin/library/anime/title/${props.animeTitle.id}/edit`); + const goToEditPage = () => navigate(`/admin/library/anime/${props.animeTitle.id}/edit`); const canUserEdit = user != null; // const canUserEdit = true; return ( @@ -102,7 +102,7 @@ export default function AnimeTitleDetailComponent(props: IAnimeTitleDetailCompon {/*

    Оценка

    */} - */}
    - , -}; - export interface IGetTitleNamesProps { - titleNames: Array, - titleId: string, + titleId: string | null | undefined, + titleNames: Array | null | undefined, seasonNames?: Array | null | undefined, seasonId?: string | null | undefined, episodeNames?: Array | null | undefined, @@ -22,11 +16,13 @@ export interface IGetTitleNamesProps { returnToEdit?: boolean | null | undefined, } -export function NameBreadcrumpsComponent(props: IGetTitleNamesProps){ +export function NameBreadcrumbsComponent(props: IGetTitleNamesProps){ + const [titleExists, setTitleExists] = useState(false); const [seasonExists, setSeasonExists] = useState(false); const [episodeExists, setEpisodeExists] = useState(false); useEffect(() => { + setTitleExists(props.titleNames != null && props.titleId != null && props.titleId != ''); setSeasonExists(props.seasonNames != null && props.seasonId != null && props.seasonId != ''); setEpisodeExists(props.episodeNames != null && props.episodeId != null && props.episodeId != ''); }, [props]) @@ -40,15 +36,21 @@ export function NameBreadcrumpsComponent(props: IGetTitleNamesProps){
  • -
  • - - {GetItemName(props.titleNames, props.userLanguageId)} - -
  • + {titleExists && +
  • + + {GetItemName(props.titleNames ?? [], props.userLanguageId)} + +
  • + } {seasonExists &&
  • - + {GetItemName(props.seasonNames ?? [], props.userLanguageId)}
  • diff --git a/mybookmark.ui/src/components/common/view/NameComponent.tsx b/mybookmark.ui/src/components/common/view/NameComponent.tsx index 220bfc9..96d86a5 100644 --- a/mybookmark.ui/src/components/common/view/NameComponent.tsx +++ b/mybookmark.ui/src/components/common/view/NameComponent.tsx @@ -1,5 +1,7 @@ import { ReactNode } from "react"; -import { NameItem, NameType } from "../../../api/models/Types"; +// import { NameItem, NameType } from "../../../api/models/Types"; +import { NameItem } from "../../../api/models/Types"; +import {GetName} from "../../../api/CommonPropertiesHelper.tsx"; export type TitleNames = { titleElement: ReactNode | null @@ -8,7 +10,54 @@ export type TitleNames = { }; export function GetTitleNames(names: Array | null | undefined, primaryLanguageId?: string | null | undefined){ - const titleNames = names == undefined || names == null + const titleNames = GetName(names, primaryLanguageId); + + if (titleNames != null){ + if (titleNames.nameInUserLanguage != null){ + if (titleNames.nameOriginal != null){ + return { + titleElement: ( + <> + {titleNames.nameInUserLanguage} / {titleNames.nameOriginal} [{titleNames.languageCodeIso3}] + + ), + namesUsed: titleNames.namesUsed, + } as TitleNames; + } + else{ + return { + titleElement: ( + <> + {titleNames.nameInUserLanguage} + + ), + namesUsed: titleNames.namesUsed, + } as TitleNames + } + } + else if (titleNames.nameOriginal != null){ + return { + titleElement: ( + <> + {titleNames.nameOriginal} [{titleNames.languageCodeIso3}] + + ), + namesUsed: titleNames.namesUsed, + } as TitleNames + } + } + + return { + titleElement: ( + NO NAME + ), + namesUsed: [], + } as TitleNames +} + +/* +export function GetTitleNames(names: Array | null | undefined, primaryLanguageId?: string | null | undefined){ + const titleNames = names == null ? null : { titleElement: NameComponent(null, null), @@ -16,7 +65,7 @@ export function GetTitleNames(names: Array | null | undefined, primary } as TitleNames; if (titleNames != null){ const nameOriginal = names!.find(q => q.type == NameType.Original) - if ((primaryLanguageId == undefined || primaryLanguageId == null) || nameOriginal?.language.id == primaryLanguageId){ + if ((primaryLanguageId == null || primaryLanguageId == '') || nameOriginal?.language.id == primaryLanguageId){ if (nameOriginal != null){ titleNames.namesUsed.push(nameOriginal); // titleNames.titleString = `${nameOriginal.value} [${nameOriginal.language.codeIso3}]`; @@ -43,7 +92,7 @@ export function GetTitleNames(names: Array | null | undefined, primary titleNames.titleElement = NameComponent(translatedName, nameOriginal ?? null); } } - } + } } return titleNames == null @@ -83,4 +132,5 @@ function NameComponent(nameInUserLanguage?: NameItem | null, nameOriginal?: Name NO NAME ) } - } \ No newline at end of file + } + */ \ No newline at end of file diff --git a/mybookmark.ui/src/components/common/view/RatingComponent.tsx b/mybookmark.ui/src/components/common/view/RatingComponent.tsx index 2c05bf1..e3fde2a 100644 --- a/mybookmark.ui/src/components/common/view/RatingComponent.tsx +++ b/mybookmark.ui/src/components/common/view/RatingComponent.tsx @@ -23,7 +23,7 @@ export interface IRateComponentProps{ forceRefresh?: () => void | null | undefined, } -export default function RateComponent(props: IRateComponentProps) { +export default function RatingComponent(props: IRateComponentProps) { const [ratePercentage, setRatePercentage] = useState(null); const [userRatePercentage, setUserRatePercentage] = useState(null); const [rateEditId, setRateEditId] = useAtom(expandedRatingAtom); diff --git a/mybookmark.ui/src/pages/library/anime/AnimeTitleDetail.tsx b/mybookmark.ui/src/pages/library/anime/AnimeTitleDetail.tsx index 5d0e10f..9970d59 100644 --- a/mybookmark.ui/src/pages/library/anime/AnimeTitleDetail.tsx +++ b/mybookmark.ui/src/pages/library/anime/AnimeTitleDetail.tsx @@ -2,7 +2,7 @@ import { useParams } from 'react-router-dom' import { GetAnimeTitleDetail, VoteAnimeTitle, UnvoteAnimeTitle } from '../../../api/AnimeTitleApi'; import { QueryClient, useQuery, useQueryClient } from 'react-query'; import AnimeTitleDetailComponent from '../../../components/MediaContent/view/AnimeTitleDetailComponent'; -import { VoteDeleteModel, VoteEditModel } from '../../../api/models/Types'; +import { VoteDeleteModel, VoteEditModel} from '../../../api/models/Types'; import { libraryClient } from '../../../api/axios'; import useUser from '../../../api/hooks/useUser'; import { userQueryKey } from '../../../components/common/UserShortComponent'; @@ -64,4 +64,6 @@ export default function AnimeTitleDetail() { } -function InvalidateGenres(queryClient: QueryClient) { queryClient.invalidateQueries({ queryKey: [queryKey] }); } \ No newline at end of file +function InvalidateGenres(queryClient: QueryClient) { + return queryClient.invalidateQueries({ queryKey: [queryKey] }); +} \ No newline at end of file diff --git a/mybookmark.ui/src/pages/library/edit/AnimeSeasonCreate.tsx b/mybookmark.ui/src/pages/library/edit/AnimeSeasonCreate.tsx index 45fa31a..9c200fe 100644 --- a/mybookmark.ui/src/pages/library/edit/AnimeSeasonCreate.tsx +++ b/mybookmark.ui/src/pages/library/edit/AnimeSeasonCreate.tsx @@ -1,11 +1,489 @@ -import {useParams} from "react-router-dom"; +import {useNavigate, useParams} from "react-router-dom"; +import {useEffect, useState} from "react"; +import { + AnimeSeasonCreateModel, + AnimeTitleCreateModel, + CreateDescriptionModel, CreateGenreProportionModel, + CreateMediaInfoModel, + CreateNameModel, + Description, + GenreProportion, + Language, MediaInfoType, + NameItem +} from "../../../api/models/Types.tsx"; +import {MediaInfoEditModel} from "../../../components/common/edit/MediaInfoTypes.tsx"; +import {AddSeason, CreateAnimeTitle, GetAnimeTitle} from "../../../api/AnimeTitleApi.tsx"; +import MediaInfoEditComponent from "../../../components/common/edit/MediaInfoEditComponent.tsx"; +import DateEditComponent from "../../../components/common/edit/DateEditComponent.tsx"; +import {GetDate} from "../../../common/Helper.tsx"; +import NamesEditComponent from "../../../components/MediaContent/edit/Names/NamesEditComponent.tsx"; +import DescriptionsEditComponent + from "../../../components/MediaContent/edit/Descriptions/DescriptionsEditComponent.tsx"; +import GenreProportionEditComponent + from "../../../components/MediaContent/edit/Genres/GenreProportionEditComponent.tsx"; +import {TfiSave} from "react-icons/tfi"; +import useUser from "../../../api/hooks/useUser.tsx"; +import {useQuery} from "react-query"; +import {userQueryKey} from "../../../components/common/UserShortComponent.tsx"; +import {NameBreadcrumbsComponent} from "../../../components/common/view/NameBreadcrumbsComponent.tsx"; export default function AnimeSeasonCreate(){ - const { id } = useParams(); + const client = null; + const navigate = useNavigate(); + const { getUser } = useUser(); + const { data: user } = useQuery(userQueryKey, getUser); + + const { titleId } = useParams(); + const [ titleNames, setTitleNames ] = useState | null>(null); + + const [ names, setNames ] = useState>([]); + const [ preview, setPreview ] = useState(null); + const [ descriptions, setDescriptions ] = useState>([]); + const [ genres, setGenres ] = useState>([]); + // const [ relatedContent, setRelatedContent ] = useState>([]); + const [ announcementDate, setAnnouncementDate ] = useState(null); + const [ estimatedReleaseDate, setEstimatedReleaseDate ] = useState(null); + const [ releaseDate, setReleaseDate ] = useState(null); + + // const [duration, setDuration] = useState(null); + + const AddName = (nameItem: NameItem) => { + if (names.find(q => q.language.id == nameItem.language.id && q.type == nameItem.type && q.value == nameItem.value)){ + return 'Name already exists'; + } + else { + const obj = names; + names.push(nameItem); + setNames(obj); + return ''; + } + }; + const EditName = (nameItem: NameItem, newValue: string | null, newLanguage: Language | null) => { + const obj = names; + const name = obj.find(q => q.language == nameItem.language && q.type == nameItem.type && q.value == nameItem.value); + if (name != null){ + if (newValue != null) name.value = newValue; + if (newLanguage != null) name.language = newLanguage; + setNames(obj); + } + }; + const DeleteName = (nameItem: NameItem) => { + const obj = names; + setNames(obj.filter(q => !(q.language == nameItem.language && q.type == nameItem.type && q.value == nameItem.value))); + }; + + const AddDescription = (description: Description) => { + if (descriptions.find(q => q.language.id == description.language.id && q.isOriginal == description.isOriginal && q.value == description.value)){ + return 'Description already exists'; + } + else { + const obj = descriptions + obj.push(description); + setDescriptions(obj); + return ''; + } + }; + const EditDescription = (descriptionItem: Description, newValue: string | null, newLanguage: Language | null) => { + const obj = descriptions; + const description = obj.find(q => q.language == descriptionItem.language && q.isOriginal == descriptionItem.isOriginal && q.value == descriptionItem.value); + if (description != null){ + if (newValue != null) description.value = newValue; + if (newLanguage != null) description.language = newLanguage; + setDescriptions(obj); + } + }; + const DeleteDescription = (description: Description) => { + const obj = descriptions; + setDescriptions(obj.filter(q => !(q.language == description.language && q.isOriginal == description.isOriginal && q.value == description.value))); + }; + + const AddGenre = (genreProportionItem: GenreProportion) => { + if (genres.find(q => q.genre.id == genreProportionItem.genre.id && q.proportion == genreProportionItem.proportion)){ + return 'Genre already exists'; + } + else { + const obj = genres; + obj.push(genreProportionItem); + setGenres(obj); + return ''; + } + }; + const EditGenre = (genreProportionItem: GenreProportion, proportionPercentage: number | null) => { + const obj = genres; + const genreProportion = obj.find(q => q.genre == genreProportionItem.genre && q.proportion == genreProportionItem.proportion); + if (genreProportion != null){ + if (proportionPercentage != null) genreProportion.proportion = proportionPercentage; + setGenres(obj); + } + }; + const DeleteGenre = (genreProportionItem: GenreProportion) => { + const obj = genres; + setGenres(obj.filter(q => !(q.genre == genreProportionItem.genre && q.proportion == genreProportionItem.proportion))); + }; + + const SetAnnouncementDate = (date: Date | null) => setAnnouncementDate(date == null ? null : date.toISOString()); + const SetEstimatedReleaseDate = (date: Date | null) => setEstimatedReleaseDate(date == null ? null : date.toISOString()); + const SetReleaseDate = (date: Date | null) => setReleaseDate(date == null ? null : date.toISOString()); + + // const SetPreview = (preview: MediaInfoEditModel | null) => setPreview(preview); + + const [ isEditing, setIsEditingValue ] = useState>([]); + const setEditing = (elementName: string, value: boolean) => { + const alreadyEditing = isEditing.find(q => q == elementName) != null; + if (value){ + if (!alreadyEditing){ + setIsEditingValue(isEditing.concat([elementName])) + } + } + else{ + if (alreadyEditing){ + setIsEditingValue(isEditing.filter(q => q != elementName)) + } + } + }; + + const [ isDeleting, setIsDeletingValue ] = useState>([]); + const setDeleting = (elementName: string, value: boolean) => { + const alreadyDeleting = isDeleting.find(q => q == elementName) != null; + if (value){ + // console.log('a'); + // console.log('alreadyDeleting'); + // console.log(alreadyDeleting ? 'TR' : 'FA'); + if (!alreadyDeleting){ + setIsDeletingValue(isDeleting.concat([elementName])) + } + } + else{ + if (alreadyDeleting){ + setIsDeletingValue(isDeleting.filter(q => q != elementName)) + } + } + }; + + const Save = () =>{ + const model = { + animeTitleId: titleId, + preview: preview == null ? null : { + newType: preview.type, + // newUrl: preview.objectId, + newUrl: preview.url, + newFile: preview.data + } as CreateMediaInfoModel, + names: names.map(q => { + return { + languageId: q.language.id, + value: q.value, + type: q.type, + } as CreateNameModel + }), + descriptions: descriptions.map(q => { + return { + languageId: q.language.id, + isOriginal: q.isOriginal, + value: q.value, + } as CreateDescriptionModel + }), + // relatedContent: relatedContent.map(q => { + // return { + // type: q.type, + // contentType: q.contentType, + // url: q.url, + // } as CreateMediaInfoModel + // }), + relatedContent: [], + genres: genres.map(q => { + return { + genreId: q.genre.id, + proportion: q.proportion, + } as CreateGenreProportionModel + }), + announcementDate: announcementDate, + estimatedReleaseDate: estimatedReleaseDate, + releaseDate: releaseDate, + } as AnimeSeasonCreateModel; + + AddSeason(model) + .then(() => navigate(`/admin/library/anime/${titleId}/edit`)) + // .then(() => navigate(`/admin/library/anime/${titleId}/season/${seasonId}/edit`)) + .catch((err) => { console.error(err);}); + }; + + useEffect(() =>{ + if (titleId == null || titleId == ''){ + setTitleNames(null); + } + else{ + GetAnimeTitle(titleId ?? '', client) + .then((data) =>{ + if (data == null){ + setTitleNames(null); + } + else{ + // const name = GetTitleNames(names, user?.languageId)?.titleElement; + setTitleNames(data.commonProperties.names); + } + // setDataLoadingError(null); + }) + .catch((error) => { + setTitleNames(null); + console.log(error); + // setDataLoadingError(error); + }); + } + }, [ titleId ]); return ( <> - title id: { id } - + + + номер сезона + вариант сезона + +
    +
    + q == 'preview') != null} + setEditing={(_, value) => setEditing('preview', value)} + // editMediaInfo={(mediaInfo, newUrl, newFile) =>{ + editMediaInfo={(_, newUrl, newFile) => { + // console.log(`new url: ${newUrl}`) + // SetPreview(mediaInfo == null ? null : + setPreview((newUrl == null && newFile == null) ? null : + { + // type: mediaInfo?.type ?? MediaInfoType.Image, + type: MediaInfoType.Image, + url: newUrl, + data: newFile, + objectId: null, + // isNew: false, + } as MediaInfoEditModel); + return Promise.resolve(''); + }} + + isDeleting={isDeleting.find(q => q == 'preview') != null} + setDeleting={(_, value) => setDeleting('preview', value)} + + deleteMediaInfo={() => { + setPreview(null); + return Promise.resolve(''); + }} + dataLoadingError={null} + forceRefresh={Plug} + /> + +
    +
    +
    + {/* */} +
    + {/* + + + + + + + */} + + + {/* + */} + + + + + {/* + */} + + + + + {/* + */} + + + + {/**/} + {/* */} + {/* */} + {/**/} + +
    #FirstLastHandle
    Дата анонса{data.commonProperties.announcementDate?.toString() ?? '—//—'}Дата анонса + q == 'announcementDate') != null} + enabled={true} + date={GetDate(announcementDate)} + editDate={(value: Date | null) => { + SetAnnouncementDate(value); + return Promise.resolve(); + }} + setEditing={(value: boolean) => setEditing('announcementDate', value)} + // setDeleting: (genreId: string, value: boolean) => void, + dataLoadingError={null} + forceRefresh={Plug} + /> + {/* {props.animeTitle.commonProperties.announcementDate?.toString() ?? '—//—'} */} +
    Предполагаемая дата выхода{data.commonProperties.estimatedReleaseDate?.toString() ?? '—//—'}Предполагаемая дата выхода + q == 'estimatedReleaseDate') != null} + enabled={true} + + date={estimatedReleaseDate != null ? new Date(estimatedReleaseDate) : null} + editDate={(value: Date | null) => { + SetEstimatedReleaseDate(value); + return Promise.resolve(); + }} + setEditing={(value: boolean) => setEditing('estimatedReleaseDate', value)} + // setDeleting: (genreId: string, value: boolean) => void, + dataLoadingError={null} + forceRefresh={Plug} + /> + {/* {props.animeTitle.commonProperties.estimatedReleaseDate?.toString() ?? '—//—'} */} +
    Предполагаемая дата выхода{data.commonProperties.estimatedReleaseDate?.toString() ?? '—//—'}Дата выхода + q == 'releaseDate') != null} + enabled={true} + date={releaseDate != null ? new Date(releaseDate) : null} + editDate={(value: Date | null) => { + SetReleaseDate(value); + return Promise.resolve(); + }} + setEditing={(value: boolean) => setEditing('releaseDate', value)} + // setDeleting: (genreId: string, value: boolean) => void, + dataLoadingError={null} + forceRefresh={Plug} + /> + {/* {props.animeTitle.commonProperties.estimatedReleaseDate?.toString() ?? '—//—'} */} +
    Продолжительность*/} + {/* setAddEpisodeDuration(TimespanToTicks(ts))}*/} + {/* />*/} + {/*
    +
    +
    +
    + +
    +
    + { + const error = AddName({ + language: name.language, + value: name.value, + type: name.type + } as NameItem); + return error.length == 0 ? Promise.resolve('') : Promise.reject({message: error} as Error); + }} + + editName={(name, newValue, newLanguage) => { + EditName({ + language: name.language, + value: name.value, + type: name.type + } as NameItem, newValue, newLanguage); + return Promise.resolve(''); + }} + + deleteName={(name) => { + DeleteName({ + language: name.language, + value: name.value, + type: name.type + } as NameItem); + return Promise.resolve(''); + }} + dataLoadingError={null} + forceRefresh={Plug} + /> + {/* */} + { + const error = AddDescription({ + language: description.language, + value: description.value, + isOriginal: description.isOriginal + } as Description); + return error.length == 0 ? Promise.resolve('') : Promise.reject({message: error} as Error); + }} + + editDescription={(description, newValue, newLanguage) => { + EditDescription({ + language: description.language, + value: description.value, + isOriginal: description.isOriginal + } as Description, newValue, newLanguage); + return Promise.resolve(''); + }} + + deleteDescription={(description) => { + DeleteDescription({ + language: description.language, + value: description.value, + isOriginal: description.isOriginal + } as Description); + return Promise.resolve(''); + }} + dataLoadingError={null} + forceRefresh={Plug} + /> + +
    +
    +

    Жанры

    +
    +
    + { + const error = AddGenre(genreProportionItem); + return error.length == 0 ? Promise.resolve('') : Promise.reject({message: error} as Error); + }} + editGenreProportionPercentage={(genreProportionItem, proportionPercentage) => { + EditGenre(genreProportionItem, proportionPercentage); + return Promise.resolve(''); + }} + deleteGenreProportionPercentage={(genreProportionItem) => { + DeleteGenre(genreProportionItem); + return Promise.resolve(''); + }} + dataLoadingError={null} + forceRefresh={Plug} + /> +
    +
    + + +
    +
    + {/*
    +
    Содержимое
    +
    сезоны
    +
    эпизоды
    +
    */} +
    +
    +
    +
    Save
    +
    +
    + ); +} + +function Plug() { + } \ No newline at end of file diff --git a/mybookmark.ui/src/pages/library/edit/AnimeTitleEdit.tsx b/mybookmark.ui/src/pages/library/edit/AnimeTitleEdit.tsx index f85244a..f69af9d 100644 --- a/mybookmark.ui/src/pages/library/edit/AnimeTitleEdit.tsx +++ b/mybookmark.ui/src/pages/library/edit/AnimeTitleEdit.tsx @@ -57,8 +57,6 @@ export default function AnimeTitleEdit() { const fetchData = () => { GetAnimeTitle(id ?? '', client) .then((data) =>{ - console.log('data'); - console.log(data); setData(data ?? null); setDataLoadingError(null); })