From e0b309f6514a1eb5bcf8322d22002d2b7e60dba9 Mon Sep 17 00:00:00 2001 From: Bart Tadych Date: Wed, 5 Feb 2025 23:31:31 +0100 Subject: [PATCH] 0.14.6. (#51) --- CHANGELOG.md | 4 ++++ demos/webpack-app/package.json | 4 ++-- editor/package.json | 6 +++--- model/package.json | 2 +- .../builders/branched-step-model-builder.ts | 4 ++++ model/src/builders/root-model-builder.ts | 9 +++++++++ .../builders/sequential-step-model-builder.ts | 4 ++++ .../choice-value-model-configuration.ts | 18 +++++++++++++++++ .../choice-value-model-validator.spec.ts | 20 +++++++++++++++++++ .../choice/choice-value-model-validator.ts | 12 +++++++++++ .../value-models/choice/choice-value-model.ts | 20 ++++--------------- model/src/value-models/choice/index.ts | 1 + 12 files changed, 82 insertions(+), 22 deletions(-) create mode 100644 model/src/value-models/choice/choice-value-model-configuration.ts create mode 100644 model/src/value-models/choice/choice-value-model-validator.spec.ts create mode 100644 model/src/value-models/choice/choice-value-model-validator.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 1826c91..99627b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## O.14.6 + +Added comments to describe the `BranchedStepModelBuilder`, `SequentialStepModelBuilder` and `RootModelBuilder` classes. + ## O.14.5 Added comments to describe the `EditorProvider` class. diff --git a/demos/webpack-app/package.json b/demos/webpack-app/package.json index fa91bb6..56b5092 100644 --- a/demos/webpack-app/package.json +++ b/demos/webpack-app/package.json @@ -18,8 +18,8 @@ "sequential-workflow-model": "^0.2.0", "sequential-workflow-designer": "^0.21.2", "sequential-workflow-machine": "^0.4.0", - "sequential-workflow-editor-model": "^0.14.5", - "sequential-workflow-editor": "^0.14.5" + "sequential-workflow-editor-model": "^0.14.6", + "sequential-workflow-editor": "^0.14.6" }, "devDependencies": { "ts-loader": "^9.4.2", diff --git a/editor/package.json b/editor/package.json index 6d6bdbd..2c0a550 100644 --- a/editor/package.json +++ b/editor/package.json @@ -1,6 +1,6 @@ { "name": "sequential-workflow-editor", - "version": "0.14.5", + "version": "0.14.6", "type": "module", "main": "./lib/esm/index.js", "types": "./lib/index.d.ts", @@ -46,11 +46,11 @@ "prettier:fix": "prettier --write ./src ./css" }, "dependencies": { - "sequential-workflow-editor-model": "^0.14.5", + "sequential-workflow-editor-model": "^0.14.6", "sequential-workflow-model": "^0.2.0" }, "peerDependencies": { - "sequential-workflow-editor-model": "^0.14.5", + "sequential-workflow-editor-model": "^0.14.6", "sequential-workflow-model": "^0.2.0" }, "devDependencies": { diff --git a/model/package.json b/model/package.json index 2b2b60a..b0a4614 100644 --- a/model/package.json +++ b/model/package.json @@ -1,6 +1,6 @@ { "name": "sequential-workflow-editor-model", - "version": "0.14.5", + "version": "0.14.6", "homepage": "https://nocode-js.com/", "author": { "name": "NoCode JS", diff --git a/model/src/builders/branched-step-model-builder.ts b/model/src/builders/branched-step-model-builder.ts index 211df5d..b1eddde 100644 --- a/model/src/builders/branched-step-model-builder.ts +++ b/model/src/builders/branched-step-model-builder.ts @@ -9,6 +9,10 @@ const branchesPath = Path.create('branches'); export class BranchedStepModelBuilder extends StepModelBuilder { private readonly branchesBuilder = new PropertyModelBuilder(branchesPath, this.circularDependencyDetector); + /** + * @returns the builder for the branches property. + * @example `builder.branches().value(createBranchesValueModel(...));` + */ public branches(): PropertyModelBuilder { return this.branchesBuilder; } diff --git a/model/src/builders/root-model-builder.ts b/model/src/builders/root-model-builder.ts index 502871c..9ee8c34 100644 --- a/model/src/builders/root-model-builder.ts +++ b/model/src/builders/root-model-builder.ts @@ -12,6 +12,11 @@ export class RootModelBuilder { private readonly propertyBuilders: PropertyModelBuilder[] = []; private readonly sequenceBuilder = new PropertyModelBuilder(sequencePath, this.circularDependencyDetector); + /** + * @param propertyName Name of the property. + * @returns The builder for the property. + * @example `builder.property('foo').value(createStringValueModel({ defaultValue: 'Some value' })).label('Foo');` + */ public property(propertyName: Key): PropertyModelBuilder { const path = Path.create(['properties', String(propertyName)]); const builder = new PropertyModelBuilder(path, this.circularDependencyDetector); @@ -19,6 +24,10 @@ export class RootModelBuilder { return builder; } + /** + * @returns the builder for the sequence property. + * @example `builder.sequence().value(createSequenceValueModel(...));` + */ public sequence(): PropertyModelBuilder { return this.sequenceBuilder; } diff --git a/model/src/builders/sequential-step-model-builder.ts b/model/src/builders/sequential-step-model-builder.ts index 37bd1fe..45a61ba 100644 --- a/model/src/builders/sequential-step-model-builder.ts +++ b/model/src/builders/sequential-step-model-builder.ts @@ -13,6 +13,10 @@ export class SequentialStepModelBuilder extends St this.circularDependencyDetector ); + /** + * @returns the builder for the sequence property. + * @example `builder.sequence().value(createSequenceValueModel(...));` + */ public sequence(): PropertyModelBuilder { return this.sequenceBuilder; } diff --git a/model/src/value-models/choice/choice-value-model-configuration.ts b/model/src/value-models/choice/choice-value-model-configuration.ts new file mode 100644 index 0000000..34a047a --- /dev/null +++ b/model/src/value-models/choice/choice-value-model-configuration.ts @@ -0,0 +1,18 @@ +export interface ChoiceValueModelConfiguration { + /** + * Label. If not provided, the label is generated from the property name. + */ + label?: string; + /** + * Supported choices. + */ + choices: TValue[]; + /** + * Default value. + */ + defaultValue?: TValue; + /** + * Custom editor ID. + */ + editorId?: string; +} diff --git a/model/src/value-models/choice/choice-value-model-validator.spec.ts b/model/src/value-models/choice/choice-value-model-validator.spec.ts new file mode 100644 index 0000000..28fffb0 --- /dev/null +++ b/model/src/value-models/choice/choice-value-model-validator.spec.ts @@ -0,0 +1,20 @@ +import { createValueContextStub } from '../../test-tools/value-context-stub'; +import { ChoiceValueModel } from './choice-value-model'; +import { ChoiceValueModelConfiguration } from './choice-value-model-configuration'; +import { choiceValueModelValidator } from './choice-value-model-validator'; + +describe('choiceValueModelValidator', () => { + it('returns correct response', () => { + const configuration: ChoiceValueModelConfiguration = { + choices: ['x', 'y'] + }; + + const context1 = createValueContextStub('z', configuration); + const error1 = choiceValueModelValidator(context1); + expect(error1?.$).toBe('Value is not supported'); + + const context2 = createValueContextStub('x', configuration); + const error2 = choiceValueModelValidator(context2); + expect(error2).toBe(null); + }); +}); diff --git a/model/src/value-models/choice/choice-value-model-validator.ts b/model/src/value-models/choice/choice-value-model-validator.ts new file mode 100644 index 0000000..2ffb05c --- /dev/null +++ b/model/src/value-models/choice/choice-value-model-validator.ts @@ -0,0 +1,12 @@ +import { ValueContext } from '../../context'; +import { createValidationSingleError, ValidationResult } from '../../model'; +import { ChoiceValueModel } from './choice-value-model'; + +export function choiceValueModelValidator(context: ValueContext): ValidationResult { + const value = context.getValue(); + const configuration = context.model.configuration; + if (!configuration.choices.includes(value)) { + return createValidationSingleError(context.i18n('choice.notSupportedValue', 'Value is not supported')); + } + return null; +} diff --git a/model/src/value-models/choice/choice-value-model.ts b/model/src/value-models/choice/choice-value-model.ts index 69dabc6..cecf94a 100644 --- a/model/src/value-models/choice/choice-value-model.ts +++ b/model/src/value-models/choice/choice-value-model.ts @@ -1,13 +1,7 @@ -import { ValueModel, ValidationResult, createValidationSingleError, ValueModelFactory } from '../../model'; +import { ValueModel, ValueModelFactory } from '../../model'; import { Path } from '../../core/path'; -import { ValueContext } from '../../context'; - -export interface ChoiceValueModelConfiguration { - label?: string; - choices: TValue[]; - defaultValue?: TValue; - editorId?: string; -} +import { ChoiceValueModelConfiguration } from './choice-value-model-configuration'; +import { choiceValueModelValidator } from './choice-value-model-validator'; export type ChoiceValueModel = ValueModel>; @@ -37,13 +31,7 @@ export function createChoiceValueModel( return configuration.choices[0]; }, getVariableDefinitions: () => null, - validate(context: ValueContext>): ValidationResult { - const value = context.getValue(); - if (!configuration.choices.includes(value)) { - return createValidationSingleError(context.i18n('choice.notSupportedValue', 'Value is not supported')); - } - return null; - } + validate: choiceValueModelValidator }) }; } diff --git a/model/src/value-models/choice/index.ts b/model/src/value-models/choice/index.ts index 3df4ad8..30b1982 100644 --- a/model/src/value-models/choice/index.ts +++ b/model/src/value-models/choice/index.ts @@ -1 +1,2 @@ +export * from './choice-value-model-configuration'; export * from './choice-value-model';