feat: frontend support for release date

This commit is contained in:
2025-12-07 18:54:01 +08:00
parent 78f6130b23
commit 6cabff8f8d
2 changed files with 32 additions and 1 deletions

View File

@@ -25,6 +25,7 @@ import CharacterEditer, { FetchVndbCharactersButton } from "../components/charac
export default function EditResourcePage() { export default function EditResourcePage() {
const [title, setTitle] = useState<string>(""); const [title, setTitle] = useState<string>("");
const [altTitles, setAltTitles] = useState<string[]>([]); const [altTitles, setAltTitles] = useState<string[]>([]);
const [releaseDate, setReleaseDate] = useState<string | undefined>(undefined);
const [tags, setTags] = useState<Tag[]>([]); const [tags, setTags] = useState<Tag[]>([]);
const [article, setArticle] = useState<string>(""); const [article, setArticle] = useState<string>("");
const [images, setImages] = useState<number[]>([]); const [images, setImages] = useState<number[]>([]);
@@ -61,6 +62,7 @@ export default function EditResourcePage() {
setLinks(data.links ?? []); setLinks(data.links ?? []);
setGalleryImages(data.gallery ?? []); setGalleryImages(data.gallery ?? []);
setGalleryNsfw(data.galleryNsfw ?? []); setGalleryNsfw(data.galleryNsfw ?? []);
setReleaseDate(data.releaseDate ?? undefined);
setCharacters(data.characters ?? []); setCharacters(data.characters ?? []);
setLoading(false); setLoading(false);
} else { } else {
@@ -108,6 +110,7 @@ export default function EditResourcePage() {
gallery: galleryImages, gallery: galleryImages,
gallery_nsfw: galleryNsfw, gallery_nsfw: galleryNsfw,
characters: characters, characters: characters,
release_date: releaseDate,
}); });
if (res.success) { if (res.success) {
setSubmitting(false); setSubmitting(false);
@@ -194,6 +197,14 @@ export default function EditResourcePage() {
{t("Add Alternative Title")} {t("Add Alternative Title")}
</button> </button>
<div className={"h-2"}></div> <div className={"h-2"}></div>
<p className={"my-1"}>{t("Release Date")}</p>
<input
type="date"
className="input"
value={releaseDate || ""}
onChange={(e) => setReleaseDate(e.target.value || undefined)}
/>
<div className={"h-4"}></div>
<p className={"my-1"}>{t("Links")}</p> <p className={"my-1"}>{t("Links")}</p>
<div className={"flex flex-col"}> <div className={"flex flex-col"}>
{links.map((link, index) => { {links.map((link, index) => {

View File

@@ -24,6 +24,7 @@ import CharacterEditer, { FetchVndbCharactersButton } from "../components/charac
export default function PublishPage() { export default function PublishPage() {
const [title, setTitle] = useState<string>(""); const [title, setTitle] = useState<string>("");
const [altTitles, setAltTitles] = useState<string[]>([]); const [altTitles, setAltTitles] = useState<string[]>([]);
const [releaseDate, setReleaseDate] = useState<string | undefined>(undefined);
const [tags, setTags] = useState<Tag[]>([]); const [tags, setTags] = useState<Tag[]>([]);
const [article, setArticle] = useState<string>(""); const [article, setArticle] = useState<string>("");
const [images, setImages] = useState<number[]>([]); const [images, setImages] = useState<number[]>([]);
@@ -43,9 +44,14 @@ export default function PublishPage() {
const data = JSON.parse(oldData); const data = JSON.parse(oldData);
setTitle(data.title || ""); setTitle(data.title || "");
setAltTitles(data.alternative_titles || []); setAltTitles(data.alternative_titles || []);
setReleaseDate(data.release_date || undefined);
setTags(data.tags || []); setTags(data.tags || []);
setArticle(data.article || ""); setArticle(data.article || "");
setImages(data.images || []); setImages(data.images || []);
setLinks(data.links || []);
setGalleryImages(data.gallery || []);
setGalleryNsfw(data.gallery_nsfw || []);
setCharacters(data.characters || []);
} catch (e) { } catch (e) {
console.error("Failed to parse publish_data from localStorage", e); console.error("Failed to parse publish_data from localStorage", e);
} }
@@ -58,11 +64,16 @@ export default function PublishPage() {
tags: tags, tags: tags,
article: article, article: article,
images: images, images: images,
links: links,
gallery: galleryImages,
gallery_nsfw: galleryNsfw,
characters: characters,
release_date: releaseDate,
}; };
const dataString = JSON.stringify(data); const dataString = JSON.stringify(data);
localStorage.setItem("publish_data", dataString); localStorage.setItem("publish_data", dataString);
} }
}, [altTitles, article, images, tags, title]); }, [altTitles, article, images, tags, title, links, galleryImages, galleryNsfw, characters, releaseDate]);
const navigate = useNavigate(); const navigate = useNavigate();
const { t } = useTranslation(); const { t } = useTranslation();
@@ -105,6 +116,7 @@ export default function PublishPage() {
const res = await network.createResource({ const res = await network.createResource({
title: title, title: title,
alternative_titles: altTitles, alternative_titles: altTitles,
release_date: releaseDate,
tags: tags.map((tag) => tag.id), tags: tags.map((tag) => tag.id),
article: article, article: article,
images: images, images: images,
@@ -201,6 +213,14 @@ export default function PublishPage() {
{t("Add Alternative Title")} {t("Add Alternative Title")}
</button> </button>
<div className={"h-2"}></div> <div className={"h-2"}></div>
<p className={"my-1"}>{t("Release Date")}</p>
<input
type="date"
className="input"
value={releaseDate || ""}
onChange={(e) => setReleaseDate(e.target.value || undefined)}
/>
<div className={"h-4"}></div>
<p className={"my-1"}>{t("Links")}</p> <p className={"my-1"}>{t("Links")}</p>
<div className={"flex flex-col"}> <div className={"flex flex-col"}>
{links.map((link, index) => { {links.map((link, index) => {