toast messages

This commit is contained in:
2024-08-15 04:11:57 -06:00
parent 9838324b35
commit b9b744e97f
10 changed files with 231 additions and 68 deletions

View File

@@ -12,6 +12,7 @@ import { TemplateEditor } from "./template-editor";
import { Icon } from "@/components/Icon";
import { useParams } from "next/navigation";
import { FieldTypes } from "./fieldtypes";
import { prisma } from "@/prisma/prismaClient";
export const SchemaBuilder: FC = () => {
const [schema, setSchema] = useRecoilState(SchemaEditAtom);
@@ -19,10 +20,16 @@ export const SchemaBuilder: FC = () => {
const { update: updateSchema, bindProperty: bindSchemaProperty } =
useObjectStateWrapper<Schema>(schema, setSchema);
const { schemaId } = useParams<{ schemaId: string }>();
const { schemaId, gameSystemId } = useParams<{
schemaId: string;
gameSystemId?: string;
}>();
const { value: typeName, bind: bindTypeName, reset: resetTypeName } =
useInput("");
const {
value: typeName,
bind: bindTypeName,
reset: resetTypeName,
} = useInput("");
const [pageNumber, setPageNumber] = useState(0);
@@ -30,23 +37,36 @@ export const SchemaBuilder: FC = () => {
const [selectedType, setSelectedType] = useState("");
const saveType = useCallback((name: string, type: TypeType) => {
updateSchema((e) => ({
types: {
...e.types,
[name]: type,
},
}));
resetTypeName();
setPageNumber(0);
setSelectedType("");
}, [resetTypeName, updateSchema]);
const saveType = useCallback(
(name: string, type: TypeType) => {
updateSchema((e) => ({
types: {
...e.types,
[name]: type,
},
}));
resetTypeName();
setPageNumber(0);
setSelectedType("");
},
[resetTypeName, updateSchema]
);
const saveSchema = useCallback(async () => {
setLastSaved(schema);
// const sid = await GameSystemsService.saveSchema(schema);
// if (schemaId === 'new') navigate('/schema/'+sid)
}, [schema]);
// "use server";
// setLastSaved(schema);
// await prisma.schema.upsert({
// where: { id: schema.id },
// update: { ...schema },
// create: {
// name: schema.name,
// schema: schema.schema,
// types: schema.types,
// version: 0,
// gameSystemId,
// },
// });
}, [schema, gameSystemId]);
const selectTypeForEdit = useCallback((typeKey: string) => {
setSelectedType(typeKey);
@@ -71,22 +91,28 @@ export const SchemaBuilder: FC = () => {
resetSchemaFieldName();
}, [resetSchemaFieldName, schemaFieldName, updateSchema]);
const updateSchemaField = useCallback((key: string, template: Template) => {
updateSchema((s) => ({
schema: {
...s.schema,
[key]: template,
},
}));
}, [updateSchema]);
const updateSchemaField = useCallback(
(key: string, template: Template) => {
updateSchema((s) => ({
schema: {
...s.schema,
[key]: template,
},
}));
},
[updateSchema]
);
const deleteType = useCallback((key: string) => {
updateSchema((s) => {
const types = { ...s.types };
delete types[key];
return { types };
});
}, [updateSchema]);
const deleteType = useCallback(
(key: string) => {
updateSchema((s) => {
const types = { ...s.types };
delete types[key];
return { types };
});
},
[updateSchema]
);
return (
<div className="flex gap-4 p-8">
@@ -107,16 +133,16 @@ export const SchemaBuilder: FC = () => {
</button>
</div>
<ul className="rounded-lg overflow-hidden">
{Object.entries(schema.schema).map((
[schemaFieldKey, schemaField],
) => (
<TemplateEditor
key={schemaFieldKey}
templateKey={schemaFieldKey}
template={schemaField}
update={updateSchemaField}
/>
))}
{Object.entries(schema.schema).map(
([schemaFieldKey, schemaField]) => (
<TemplateEditor
key={schemaFieldKey}
templateKey={schemaFieldKey}
template={schemaField}
update={updateSchemaField}
/>
)
)}
</ul>
</div>
<hr />
@@ -136,9 +162,11 @@ export const SchemaBuilder: FC = () => {
<TypeEditor
name={selectedType || typeName}
saveType={saveType}
type={selectedType
? schema.types[selectedType as keyof typeof schema.types]
: undefined}
type={
selectedType
? schema.types[selectedType as keyof typeof schema.types]
: undefined
}
/>
</AnimatedPageContainer>
<ul className="mt-3 w-96">