Changes all documents to have an explicit type
This commit is contained in:
@@ -1,13 +1,4 @@
|
||||
import {
|
||||
isLocation,
|
||||
isMonster,
|
||||
isNpc,
|
||||
isScene,
|
||||
isSecret,
|
||||
isSession,
|
||||
isTreasure,
|
||||
type AnyDocument,
|
||||
} from "@/lib/types";
|
||||
import { type AnyDocument } from "@/lib/types";
|
||||
import { LocationEditForm } from "./location/LocationEditForm";
|
||||
import { MonsterEditForm } from "./monsters/MonsterEditForm";
|
||||
import { NpcEditForm } from "./npc/NpcEditForm";
|
||||
@@ -16,41 +7,24 @@ import { SecretEditForm } from "./secret/SecretEditForm";
|
||||
import { SessionEditForm } from "./session/SessionEditForm";
|
||||
import { TreasureEditForm } from "./treasure/TreasureEditForm";
|
||||
|
||||
function assertUnreachable(_x: never): never {
|
||||
throw new Error("DocumentForm switch is not exhaustive");
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders a form for any document type depending on the relationship.
|
||||
*/
|
||||
export const DocumentEditForm = ({ document }: { document: AnyDocument }) => {
|
||||
if (isLocation(document)) {
|
||||
return <LocationEditForm location={document} />;
|
||||
switch (document.type) {
|
||||
case "location":
|
||||
return <LocationEditForm location={document} />;
|
||||
case "monster":
|
||||
return <MonsterEditForm monster={document} />;
|
||||
case "npc":
|
||||
return <NpcEditForm npc={document} />;
|
||||
case "scene":
|
||||
return <SceneEditForm scene={document} />;
|
||||
case "secret":
|
||||
return <SecretEditForm secret={document} />;
|
||||
case "session":
|
||||
return <SessionEditForm session={document} />;
|
||||
case "treasure":
|
||||
return <TreasureEditForm treasure={document} />;
|
||||
}
|
||||
|
||||
if (isMonster(document)) {
|
||||
return <MonsterEditForm monster={document} />;
|
||||
}
|
||||
|
||||
if (isNpc(document)) {
|
||||
return <NpcEditForm npc={document} />;
|
||||
}
|
||||
|
||||
if (isScene(document)) {
|
||||
return <SceneEditForm scene={document} />;
|
||||
}
|
||||
|
||||
if (isSecret(document)) {
|
||||
return <SecretEditForm secret={document} />;
|
||||
}
|
||||
|
||||
if (isSession(document)) {
|
||||
return <SessionEditForm session={document} />;
|
||||
}
|
||||
|
||||
if (isTreasure(document)) {
|
||||
return <TreasureEditForm treasure={document} />;
|
||||
}
|
||||
|
||||
return assertUnreachable(document);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user