import {
faArrowLeft,
faBoxOpen,
faLayerGroup,
faPen,
faPlus,
faTrash,
} from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { useAtomValue, useSetAtom } from "jotai";
import { Suspense, useState, useTransition } from "react";
import { Link } from "wouter";
import { type NoteType, noteTypesAtom } from "../atoms";
import { CreateNoteTypeModal } from "../components/CreateNoteTypeModal";
import { DeleteNoteTypeModal } from "../components/DeleteNoteTypeModal";
import { ErrorBoundary } from "../components/ErrorBoundary";
import { LoadingSpinner } from "../components/LoadingSpinner";
import { NoteTypeEditor } from "../components/NoteTypeEditor";
function NoteTypeList({
onEditNoteType,
onDeleteNoteType,
}: {
onEditNoteType: (id: string) => void;
onDeleteNoteType: (noteType: NoteType) => void;
}) {
const noteTypes = useAtomValue(noteTypesAtom);
if (noteTypes.length === 0) {
return (
No note types yet
Create a note type to define how your cards are structured
);
}
return (
{noteTypes.map((noteType, index) => (
{noteType.name}
Front: {noteType.frontTemplate}
Back: {noteType.backTemplate}
{noteType.isReversible && (
Reversible
)}
))}
);
}
export function NoteTypesPage() {
const reloadNoteTypes = useSetAtom(noteTypesAtom);
const [, startTransition] = useTransition();
const [isCreateModalOpen, setIsCreateModalOpen] = useState(false);
const [editingNoteTypeId, setEditingNoteTypeId] = useState(
null,
);
const [deletingNoteType, setDeletingNoteType] = useState(
null,
);
const handleNoteTypeMutation = () => {
startTransition(() => {
reloadNoteTypes();
});
};
return (
{/* Header */}
{/* Main Content */}
{/* Section Header */}
Note types define how your cards are structured
{/* Note Type List with Suspense */}
}>
{/* Modals */}
setIsCreateModalOpen(false)}
onNoteTypeCreated={handleNoteTypeMutation}
/>
setEditingNoteTypeId(null)}
onNoteTypeUpdated={handleNoteTypeMutation}
/>
setDeletingNoteType(null)}
onNoteTypeDeleted={handleNoteTypeMutation}
/>
);
}