UNPKG

@cubicweb/data-provider

Version:

CubicWeb data provider implementation

52 lines (47 loc) 1.4 kB
import { EntityRawSchemaArray, RelationDefinitionRawSchemaArray, Client, Schema, Transaction, } from "@cubicweb/client"; import { getGet } from "./get.js"; import { CreateParams, CreateResult, RaRecord } from "./types.js"; import { executeApiTransaction } from "./utils/requests.js"; import { generateCreateEntityRQL } from "@cubicweb/rql-generator"; export const getCreate = < E extends EntityRawSchemaArray, R extends RelationDefinitionRawSchemaArray<E> >( client: Client, schema: Schema<E, R> ) => { const create = async ( resource: string, createParams: CreateParams ): Promise<CreateResult<RaRecord>> => { const transaction = new Transaction(); const queries = generateCreateEntityRQL(schema, resource, { data: createParams.data, }); transaction.push(...queries); const output = await executeApiTransaction(client, transaction); const eid = output.getCell(queries[0].cellRef(0, 0)); const meta: | { getAfterCreate?: { enabled?: boolean; meta?: unknown; }; } | undefined = createParams.meta; if (meta?.getAfterCreate?.enabled !== false) { return await getGet(client, schema).getOne(resource, { id: eid, meta: meta?.getAfterCreate?.meta, }); } return { data: { ...createParams.data, eid } }; }; return { create }; };