@cubicweb/data-provider
Version:
CubicWeb data provider implementation
52 lines (47 loc) • 1.4 kB
text/typescript
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 };
};