/* * Copyright (C) Contributors to the Suwayomi project * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ import React, { useMemo } from 'react'; import Button from '@mui/material/Button'; import DialogTitle from '@mui/material/DialogTitle'; import DialogContent from '@mui/material/DialogContent'; import DialogActions from '@mui/material/DialogActions'; import Dialog from '@mui/material/Dialog'; import Checkbox from '@mui/material/Checkbox'; import FormControlLabel from '@mui/material/FormControlLabel'; import FormGroup from '@mui/material/FormGroup'; import client, { useQuery } from 'util/client'; import { ICategory } from 'typings'; import { useTranslation } from 'react-i18next'; interface IProps { open: boolean; setOpen: (value: boolean) => void; mangaId: number; } export default function CategorySelect(props: IProps) { const { t } = useTranslation(); const { open, setOpen, mangaId } = props; const { data: mangaCategoriesData, mutate } = useQuery(`/api/v1/manga/${mangaId}/category`); const { data: categoriesData } = useQuery('/api/v1/category'); const allCategories = useMemo(() => { const cats = [...(categoriesData ?? [])]; // make copy if (cats.length > 0 && cats[0].name === 'Default') { cats.shift(); // remove first category if it is 'Default' } return cats; }, [categoriesData]); const selectedIds = mangaCategoriesData?.map((c) => c.id) ?? []; const handleCancel = () => { setOpen(false); }; const handleOk = () => { setOpen(false); }; const handleChange = (event: React.ChangeEvent, categoryId: number) => { const { checked } = event.target as HTMLInputElement; const method = checked ? client.get : client.delete; method(`/api/v1/manga/${mangaId}/category/${categoryId}`).then(() => mutate()); }; return ( {t('category.title.set_categories')} {allCategories.length === 0 && ( {t('category.error.no_categories_found.label.info')}
{t('category.error.no_categories_found.label.hint')}
)} {allCategories.map((category) => ( handleChange(e, category.id)} color="default" /> } label={category.name} key={category.id} /> ))}
); }