in packages/codegen-ui-react/lib/react-studio-template-renderer.ts [950:1031]
private buildUseDataStoreBindingStatements(component: StudioComponent): Statement[] {
const statements: Statement[] = [];
// generate for single record binding
if (component.bindingProperties !== undefined) {
Object.entries(component.bindingProperties).forEach((compBindingProp) => {
const [propName, binding] = compBindingProp;
if (isDataPropertyBinding(binding)) {
const { bindingProperties } = binding;
if ('predicate' in bindingProperties && bindingProperties.predicate !== undefined) {
this.importCollection.addMappedImport(ImportValue.USE_DATA_STORE_BINDING);
/* const buttonColorFilter = {
* field: "userID",
* operand: "user@email.com",
* operator: "eq",
* }
*/
statements.push(this.buildPredicateDeclaration(propName, bindingProperties.predicate));
statements.push(this.buildCreateDataStorePredicateCall(bindingProperties.model, propName));
const { model } = bindingProperties;
this.importCollection.addImport(ImportSource.LOCAL_MODELS, model);
/* const buttonColorDataStore = useDataStoreBinding({
* type: "collection"
* ...
* }).items[0];
*/
statements.push(
factory.createVariableStatement(
undefined,
factory.createVariableDeclarationList(
[
factory.createVariableDeclaration(
factory.createIdentifier(this.getDataStoreName(propName)),
undefined,
undefined,
factory.createElementAccessExpression(
factory.createPropertyAccessExpression(
this.buildUseDataStoreBindingCall('collection', model, this.getFilterName(propName)),
factory.createIdentifier('items'),
),
factory.createNumericLiteral('0'),
),
),
],
ts.NodeFlags.Const,
),
),
);
statements.push(
factory.createVariableStatement(
undefined,
factory.createVariableDeclarationList(
[
factory.createVariableDeclaration(
factory.createIdentifier(propName),
undefined,
undefined,
factory.createConditionalExpression(
factory.createBinaryExpression(
factory.createIdentifier(`${propName}Prop`),
factory.createToken(ts.SyntaxKind.ExclamationEqualsEqualsToken),
factory.createIdentifier('undefined'),
),
factory.createToken(ts.SyntaxKind.QuestionToken),
factory.createIdentifier(`${propName}Prop`),
factory.createToken(ts.SyntaxKind.ColonToken),
factory.createIdentifier(this.getDataStoreName(propName)),
),
),
],
ts.NodeFlags.Const,
),
),
);
}
}
});
}
return statements;
}