This commit is contained in:
2025-09-24 17:58:35 -07:00
parent ab323798e9
commit 625bc508aa
6 changed files with 40 additions and 37 deletions

View File

@@ -51,46 +51,54 @@ const simpleFields = <D extends DocumentType>(
export function getFieldsForType<D extends DocumentType>(
docType: D,
): DocumentField<D, FieldType>[] {
// Explicit casts are required because the getter function puts the type D in the parameters position and thus the specialized getter is not valid in the case of the more general document type.
// While the switch correctly sees that D is now "front", the _type_ could be a union and thus the getter needs to be able to accept any of them.
// I know this will only ever be called in the context of one value, but this is clearly abusing the type system.
// TODO: Fix the types
switch (docType) {
case "front":
return simpleFields<"front">({
Name: ["name", "shortText"],
Description: ["description", "longText"],
Resolved: ["resolved", "toggle"],
});
}) as unknown as DocumentField<D, FieldType>[];
case "location":
return [
simpleField("Name", "name", "shortText"),
simpleField("Description", "description", "longText"),
];
return simpleFields<"location">({
Name: ["name", "shortText"],
Description: ["description", "longText"],
}) as unknown as DocumentField<D, FieldType>[];
case "monster":
return [simpleField("Name", "name", "shortText")];
return simpleFields<"monster">({
Name: ["name", "shortText"],
}) as unknown as DocumentField<D, FieldType>[];
case "npc":
return [
simpleField("Name", "name", "shortText"),
simpleField("Description", "description", "longText"),
];
return simpleFields<"npc">({
Name: ["name", "shortText"],
Description: ["description", "longText"],
}) as unknown as DocumentField<D, FieldType>[];
case "scene":
return [simpleField("Text", "text", "longText")];
return simpleFields<"scene">({
Text: ["text", "longText"],
}) as unknown as DocumentField<D, FieldType>[];
case "secret":
return [
simpleField("Discovered", "discovered", "toggle"),
simpleField("Text", "text", "shortText"),
];
return simpleFields<"secret">({
Discovered: ["discovered", "toggle"],
Text: ["text", "shortText"],
}) as unknown as DocumentField<D, FieldType>[];
case "session":
return [
simpleField("Name", "name", "shortText"),
simpleField("Strong Start", "strongStart", "longText"),
];
return simpleFields<"session">({
Name: ["name", "shortText"],
"Strong Start": ["strongStart", "longText"],
}) as unknown as DocumentField<D, FieldType>[];
case "thread":
return [
simpleField("Resolved", "resolved", "toggle"),
simpleField("Text", "text", "shortText"),
];
return simpleFields<"thread">({
Resolved: ["resolved", "toggle"],
Text: ["text", "shortText"],
}) as unknown as DocumentField<D, FieldType>[];
case "treasure":
return [
simpleField("Discovered", "discovered", "toggle"),
simpleField("Text", "text", "shortText"),
];
return simpleFields<"treasure">({
Discovered: ["discovered", "toggle"],
Text: ["text", "shortText"],
}) as unknown as DocumentField<D, FieldType>[];
}
}