toast messages
This commit is contained in:
@@ -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">
|
||||
|
Reference in New Issue
Block a user