'use client' import Link from "next/link"; import {FontAwesomeIcon} from "@fortawesome/react-fontawesome"; import { faBook, faGlobe, faHatWizard, faMapMarkedAlt, faPencilAlt, faTrash, faUser } from "@fortawesome/free-solid-svg-icons"; import React, {Dispatch, SetStateAction, useContext, useState} from "react"; import {IconDefinition} from "@fortawesome/fontawesome-svg-core"; import {useTranslations} from "next-intl"; import AlertBox from "@/components/AlertBox"; import {SessionContext} from "@/context/SessionContext"; import {LangContext, LangContextProps} from "@/context/LangContext"; import {AlertContext} from "@/context/AlertContext"; import System from "@/lib/models/System"; import {SeriesContext, SeriesContextProps} from "@/context/SeriesContext"; import OfflineContext, {OfflineContextType} from "@/context/OfflineContext"; import {SeriesSyncContext, SeriesSyncContextProps} from "@/context/SeriesSyncContext"; import {LocalSyncQueueContext, LocalSyncQueueContextProps} from "@/context/SyncQueueContext"; import {SyncedSeries} from "@/lib/models/SyncedSeries"; interface SeriesSettingOption { id: string; name: string; icon: IconDefinition; } interface SeriesSettingSidebarProps { selectedSetting: string; setSelectedSetting: Dispatch>; seriesId: string; onClose: () => void; } export default function SeriesSettingSidebar( { selectedSetting, setSelectedSetting, seriesId, onClose }: SeriesSettingSidebarProps) { const t = useTranslations(); const {session} = useContext(SessionContext); const {lang} = useContext(LangContext); const {errorMessage, successMessage} = useContext(AlertContext); const userToken: string = session?.accessToken ? session?.accessToken : ''; const {localSeries} = useContext(SeriesContext); const {isCurrentlyOffline} = useContext(OfflineContext); const {localSyncedSeries} = useContext(SeriesSyncContext); const {addToQueue} = useContext(LocalSyncQueueContext); const [showDeleteConfirm, setShowDeleteConfirm] = useState(false); async function handleDeleteSeries(): Promise { try { const deleteData = {seriesId: seriesId, deletedAt: System.timeStampInSeconds()}; let success: boolean; if (isCurrentlyOffline() || localSeries) { success = await window.electron.invoke('db:series:delete', deleteData); } else { success = await System.authDeleteToServer( 'series/delete', deleteData, userToken, lang ); if (localSyncedSeries.find((s: SyncedSeries): boolean => s.id === seriesId)) { addToQueue('db:series:delete', deleteData); } } if (success) { successMessage(t('seriesSetting.deleteSuccess')); onClose(); window.location.reload(); } } catch (error: unknown) { if (error instanceof Error) { errorMessage(error.message); } else { errorMessage(t('seriesSetting.deleteError')); } } } async function handleDeleteConfirm(): Promise { await handleDeleteSeries(); setShowDeleteConfirm(false); } const settings: SeriesSettingOption[] = [ { id: 'basic-information', name: 'seriesSetting.basicInformation', icon: faPencilAlt }, { id: 'books', name: 'seriesSetting.books', icon: faBook }, { id: 'characters', name: 'seriesSetting.characters', icon: faUser }, { id: 'worlds', name: 'seriesSetting.worlds', icon: faGlobe }, { id: 'locations', name: 'seriesSetting.locations', icon: faMapMarkedAlt }, { id: 'spells', name: 'seriesSetting.spells', icon: faHatWizard } ]; return (
{showDeleteConfirm && ( setShowDeleteConfirm(false)} confirmText={t('common.delete')} cancelText={t('common.cancel')} /> )}
); }