diff --git a/lerna.json b/lerna.json index 7f7882f3..2f00216d 100644 --- a/lerna.json +++ b/lerna.json @@ -2,7 +2,7 @@ "packages": [ "packages/*" ], - "version": "0.10.4", + "version": "0.11.0", "npmClient": "yarn", "command": { "publish": { diff --git a/packages/atlas-theme/package.json b/packages/atlas-theme/package.json index 1c590826..af3291d0 100644 --- a/packages/atlas-theme/package.json +++ b/packages/atlas-theme/package.json @@ -1,6 +1,6 @@ { "name": "@iq-firebolt/atlas-theme", - "version": "0.10.4", + "version": "0.11.0", "description": "> ATLAS Theme", "author": "iq team", "homepage": "https://github.com/IQ-tech/firebolt#readme", diff --git a/packages/aurora-theme/package.json b/packages/aurora-theme/package.json index 6000f1f6..f8ac0aa7 100644 --- a/packages/aurora-theme/package.json +++ b/packages/aurora-theme/package.json @@ -1,6 +1,6 @@ { "name": "@iq-firebolt/aurora-theme", - "version": "0.10.4", + "version": "0.11.0", "description": "> AURORA Theme", "author": "iq team", "homepage": "https://github.com/IQ-tech/firebolt#readme", diff --git a/packages/blueberry/package.json b/packages/blueberry/package.json index 10ead585..33e66ecf 100644 --- a/packages/blueberry/package.json +++ b/packages/blueberry/package.json @@ -1,6 +1,6 @@ { "name": "@iq-firebolt/blueberry-theme", - "version": "0.10.4", + "version": "0.11.0", "description": "> TODO: description", "author": "iq team", "homepage": "https://github.com/IQ-tech/firebolt#readme", diff --git a/packages/br-addons/package.json b/packages/br-addons/package.json index 7b116f31..19cb7d6d 100644 --- a/packages/br-addons/package.json +++ b/packages/br-addons/package.json @@ -1,6 +1,6 @@ { "name": "@iq-firebolt/br-addons", - "version": "0.10.4", + "version": "0.11.0", "description": "> TODO: description", "author": "iq team", "homepage": "https://github.com/IQ-tech/firebolt#readme", diff --git a/packages/client-core/lib/types.ts b/packages/client-core/lib/types.ts index 95cd2678..fd94907a 100644 --- a/packages/client-core/lib/types.ts +++ b/packages/client-core/lib/types.ts @@ -7,21 +7,17 @@ export interface IFormAccess { formName: string } -// ----------- V2-todo ------------ - export interface RemoteFormConfig { access: IFormAccess debug: boolean - requestMetadata: any + requestMetadata: Record } export interface LocalFormConfig { - schema: Object + schema: Record debug: boolean } -// --------- end v2 - export interface IApiService { formAccess: IFormAccess debug?: boolean @@ -47,42 +43,51 @@ export interface IUrlParams { export interface IPropsPresetCollection { name: string presets: { - [key: string]: any + [key: string]: unknown } } export interface IAddonsConfig { uiPropsPresets?: IPropsPresetCollection[] } + +export interface WebhookResult> { + preventContinue?: boolean + errorSlugField?: string + errorMessage?: string + newTrackSlug?: string + processedData?: T + inputFieldErrors?: Array<{ + slug: string + message: string + }> + [key: string]: unknown +} + export interface IFormEngineOptions { - requestsMetadata?: Object + requestsMetadata?: Record debug?: boolean addons?: IAddonsConfig enforceNewSession?: boolean - mockStep?: IStepData // provisional way to mock step response - remove on albus version + mockStep?: IStepData } export interface IDefaultStep { - data: { - slug: string - type: string - friendlyName: string - fields: IStepConfigField[] - } + data: IStepData position: number - webhookResult: Object + webhookResult: WebhookResult } export interface IFormResponseData { auth: string meta: IFormMetadata capturedData: { - [key: string]: any + [key: string]: unknown } step: IFormStep } export interface IFormStep { data: IStepData - webhookResult: Object + webhookResult: WebhookResult position: number } @@ -97,45 +102,90 @@ export interface IFormMetadata { steps: IFormStepBasicInfo[] } -export interface IStepData { +export interface IStepData> { slug: string type: string friendlyName: string + stepName: string fields: IStepConfigField[] + extraInfo?: string + position?: number + webhookResult?: WebhookResult } export interface IStepConfigFieldUiProps { label?: string + sublabel?: string placeholder?: string - [key: string]: any + htmlType?: string + options?: { + value: string + label: string + }[] + [key: string]: unknown } + export interface IStepConfigFieldValidator { type: string + context?: 'server' | 'client' + properties?: { + [key: string]: unknown + } } export interface IStepConfigField { slug: string "ui:widget": string "ui:props": IStepConfigFieldUiProps - validators: IStepConfigFieldValidator[] - conditional?: string - "ui:props-conditional"?: { + "ui:props-preset"?: string + "ui:props-conditional"?: Array<{ conditional: string props: { - [propKey: string]: any + [propKey: string]: unknown } - }[] + }> "ui:styles"?: { size: "full" | "half" grow?: "1" | "2" | "3" - } - meta: Object + validators: IStepConfigFieldValidator[] + conditional?: string + meta: Record component: string - value?: any + value?: unknown } export interface IRequestMetadata { - extraRequestsMetaData?: Object - [key: string]: any + extraRequestsMetaData?: Record + [key: string]: unknown +} + +export interface ICustomField { + clearManuallySetError: () => void + errorMessage: string + fieldId: string + fieldValidators: IStepConfigFieldValidator[] + hasError: boolean + inputRef: { current: HTMLElement | null } + isOptional: boolean + isRequired: boolean + isValid: boolean + label: string + manuallySetFieldError: (message: string) => void + meta: Record + modifyPayloadKeys: (newData?: Record) => void + onBlur: (value: string) => void + onChange: (value: string) => void + onFocus: () => void + payload: Record + placeholder: string + slug: string + sublabel: string + value: string + options?: Array<{ label: string; value: string }> + uploadLabels?: { + button: string + description: string + sentButton: string + } } diff --git a/packages/client-core/package.json b/packages/client-core/package.json index aee17416..a2d3949c 100644 --- a/packages/client-core/package.json +++ b/packages/client-core/package.json @@ -1,6 +1,6 @@ { "name": "@iq-firebolt/client-core", - "version": "0.10.4", + "version": "0.11.0", "description": "> TODO: description", "author": "iq team", "homepage": "https://github.com/IQ-tech/firebolt#readme", diff --git a/packages/client/package.json b/packages/client/package.json index ee4090ed..b5f0a156 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@iq-firebolt/client", - "version": "0.10.4", + "version": "0.11.0", "description": "> TODO: description", "author": "iq team", "homepage": "https://github.com/IQ-tech/firebolt#readme", @@ -36,8 +36,8 @@ }, "dependencies": { "@babel/runtime": "^7.16.3", - "@iq-firebolt/client-core": "0.9.9", - "@iq-firebolt/validators": "0.9.9", + "@iq-firebolt/client-core": "^0.11.0", + "@iq-firebolt/validators": "^0.11.0", "classnames": "^2.3.1", "fast-levenshtein": "^3.0.0", "regex-parser": "^2.2.11", diff --git a/packages/client/src/components/FireboltProvider/hook/index.ts b/packages/client/src/components/FireboltProvider/hook/index.ts index 2407be10..e01cda34 100644 --- a/packages/client/src/components/FireboltProvider/hook/index.ts +++ b/packages/client/src/components/FireboltProvider/hook/index.ts @@ -107,7 +107,7 @@ function useFireboltProvider({ function goNextStep( stepFieldsPayload?: IFieldsObject, { extraRequestsMetaData = {} }: IRequestMetadata = {} - ): Promise { + ): Promise> { setIsFormLoading(true) setBeforeProceedPayload(stepFieldsPayload) setLastSentPayload(stepFieldsPayload) @@ -136,7 +136,7 @@ function useFireboltProvider({ .catch((err) => _handleTransitionError(err, stepFieldsPayload)) } - function goPreviousStep(): Promise { + function goPreviousStep(): Promise> { setIsFormLoading(true) return formEngine.current .previousStep(currentStep.data.slug) @@ -163,7 +163,7 @@ function useFireboltProvider({ formEngine.current.removeRequestMetadataItem(key) } - function getRequestsMetadata(): Object { + function getRequestsMetadata(): Record { return formEngine.current.requestsMetadata } diff --git a/packages/client/src/components/FireboltProvider/hook/useData.ts b/packages/client/src/components/FireboltProvider/hook/useData.ts index 93ff54f2..30b16116 100644 --- a/packages/client/src/components/FireboltProvider/hook/useData.ts +++ b/packages/client/src/components/FireboltProvider/hook/useData.ts @@ -11,6 +11,7 @@ const defaultStep: IDefaultStep = { slug: "", type: "", friendlyName: "", + stepName: "", fields: [], }, position: 0, diff --git a/packages/client/src/components/Wizard/helpers.ts b/packages/client/src/components/Wizard/helpers.ts index 2a9a1155..37d1b0ed 100644 --- a/packages/client/src/components/Wizard/helpers.ts +++ b/packages/client/src/components/Wizard/helpers.ts @@ -1,9 +1,9 @@ import React from "react" export function filterChildren( - children: React.ReactElement, + children: React.ReactElement | React.ReactElement[], currentStepSlug: string -) { +): React.ReactElement | null { if (!children) return null const childrenArray = React.Children.toArray(children) @@ -18,5 +18,6 @@ export function filterChildren( return !childMatch || childMatch === "*" }) - return exactMatch ? exactMatch : getFirstGeneralCaseItem() + const result = exactMatch ? exactMatch : getFirstGeneralCaseItem() + return result as React.ReactElement | null } diff --git a/packages/client/src/context.ts b/packages/client/src/context.ts index 22d16403..4f7ae0c8 100644 --- a/packages/client/src/context.ts +++ b/packages/client/src/context.ts @@ -4,7 +4,7 @@ import { IFormStep, IFormMetadata, } from "@iq-firebolt/client-core" -import { IFieldsObject, INextStepFunction } from "./types" +import { IFieldsObject, INextStepFunction, ThemeConfig, IFormEndPayload } from "./types" export interface IFireboltContext { //states diff --git a/packages/client/src/types.ts b/packages/client/src/types.ts index 48609df5..65acf36b 100644 --- a/packages/client/src/types.ts +++ b/packages/client/src/types.ts @@ -6,24 +6,31 @@ import { IFormMetadata, IRequestMetadata, IStepData, + IFormStep, } from "@iq-firebolt/client-core" +import { WebhookResult } from "@iq-firebolt/client-core/lib/types" import React from "react" +// Utility types +export type ThemeConfig = Record +export type FormPayload = Record +export type ClassesConfig = Record + export interface IFireboltProvider { formAccess: IFormAccess debug?: boolean - requestsMetadata?: Object + requestsMetadata?: Record stepQueryParam?: string children?: React.ReactElement withHistory?: boolean - theme?: Object + theme?: ThemeConfig addons?: IAddonsConfig mockStep?: IStepData enforceNewSession?: boolean } export interface IFieldsObject { - [key: string]: string + [key: string]: string | number | boolean | null | undefined } export interface IActionsChildData { @@ -37,7 +44,7 @@ export interface INextStepFunction { ( stepFieldsPayload?: IFieldsObject, extraMetadata?: IRequestMetadata - ): Promise + ): Promise> } export interface IStepProps { @@ -51,45 +58,40 @@ export interface IWizardHook { onBeforeProceed?(sendingStep, formPayload): void } -export interface IWizardComponent { - children: React.ReactElement +export interface IWizardComponent extends IWizardHook { + children: React.ReactElement | React.ReactElement[] fallback?: React.ReactElement - onChangeStep?(arg0: IStepProps): void - onConnectionError?(arg0?: object): void - onFinishForm?(arg0?: object): void - onBeforeChangeStep?(arg0?: Function, arg1?: IStepProps): void - onBeforeProceed?(sendingStep, formPayload): void } export interface IUseFireboltForm { schema: Array - children?: Object[] + children?: React.ReactElement[] onChange?: (formPayload: IFieldsObject) => void onSubmit?(): void - theme?: Object + theme?: ThemeConfig autoFill?: IFieldsObject remoteErrors?: Array onGoBack?(): void - classes: Object - onFocusField?: (field: IStepConfigField, formPayload?: Object) => void + classes: ClassesConfig + onFocusField?: (field: IStepConfigField, formPayload?: FormPayload) => void onBlurField?: ( field: IStepConfigField, value: string, - formPayload?: Object + formPayload?: FormPayload ) => void onChangeField?: ( field: IStepConfigField, - values: { value: any; previousValue: any }, - formPayload?: Object + values: { value: unknown; previousValue: unknown }, + formPayload?: FormPayload ) => void addons?: IAddonsConfig clearRemoteFieldError?: (fieldSlug: string) => void - orderFields?: Object[] + orderFields?: Array> } export interface IFormState { schema: Array - autoFill?: object + autoFill?: IFieldsObject addons?: IAddonsConfig remoteErrors?: Array } @@ -104,11 +106,11 @@ export interface IBrowserNavigation { stepQueryParam?: string } -export interface IFormEndPayload { - webhookResult?: object +export interface IFormEndPayload { + webhookResult?: WebhookResult metadata?: IFormMetadata capturedData?: { - [key: string]: any + [key: string]: unknown } } @@ -123,24 +125,36 @@ export interface IFireboltForm { className?: string addons?: IAddonsConfig schema: Array - children?: Object[] + children?: React.ReactElement[] onChange?: (formPayload: IFieldsObject) => void onSubmit?(): void - theme?: Object + theme?: ThemeConfig autoFill?: IFieldsObject remoteErrors?: Array onGoBack?(): void - onFocusField?: (field: IStepConfigField, formPayload?: Object) => void + onFocusField?: (field: IStepConfigField, formPayload?: FormPayload) => void onBlurField?: ( field: IStepConfigField, value: string, - formPayload?: Object + formPayload?: FormPayload ) => void onChangeField?: ( field: IStepConfigField, - values: { value: any; previousValue: any }, - formPayload?: Object + values: { value: unknown; previousValue: unknown }, + formPayload?: FormPayload ) => void clearRemoteFieldError?: (fieldSlug: string) => void - orderFields?: Object[] + orderFields?: Array> +} + +export interface IFireboltStep< + T extends Record = Record +> extends IStepData { + clearSession?(): void + clearRemoteFieldError(fieldSlug: string): void + goNextStep: INextStepFunction + goPreviousStep?(): Promise> + capturedData: Record + remoteErrors: Array + formflowMetadata: IFormMetadata } diff --git a/packages/entities/package.json b/packages/entities/package.json index 9b7fedfa..864321fd 100644 --- a/packages/entities/package.json +++ b/packages/entities/package.json @@ -1,6 +1,6 @@ { "name": "@iq-firebolt/entities", - "version": "0.10.4", + "version": "0.11.0", "description": "> TODO: description", "author": "iq team", "private": true, diff --git a/packages/json-schema/package.json b/packages/json-schema/package.json index 2c76c940..28f5963c 100644 --- a/packages/json-schema/package.json +++ b/packages/json-schema/package.json @@ -1,6 +1,6 @@ { "name": "@iq-firebolt/json-schema", - "version": "0.10.4", + "version": "0.11.0", "description": "json schema lib", "author": "iq team", "homepage": "https://github.com/IQ-tech/firebolt#readme", diff --git a/packages/lab/package.json b/packages/lab/package.json index 5a5c8b4d..10fc1385 100644 --- a/packages/lab/package.json +++ b/packages/lab/package.json @@ -1,14 +1,14 @@ { "name": "@iq-firebolt/lab", - "version": "0.10.3", + "version": "0.11.0", "private": true, "license": "Apache-2.0", "dependencies": { - "@iq-firebolt/blueberry-theme": "0.9.9", - "@iq-firebolt/br-addons": "0.9.9", - "@iq-firebolt/client": "0.9.9", - "@iq-firebolt/client-core": "0.9.9", - "@iq-firebolt/material-theme": "0.9.9", + "@iq-firebolt/blueberry-theme": "^0.11.0", + "@iq-firebolt/br-addons": "^0.11.0", + "@iq-firebolt/client": "^0.11.0", + "@iq-firebolt/client-core": "^0.11.0", + "@iq-firebolt/material-theme": "^0.11.0", "iq-blueberry": "^0.0.88", "react": "18.2.0", "react-dom": "18.2.0", diff --git a/packages/material-theme/package.json b/packages/material-theme/package.json index 9d90e19e..a4e7f988 100644 --- a/packages/material-theme/package.json +++ b/packages/material-theme/package.json @@ -1,6 +1,6 @@ { "name": "@iq-firebolt/material-theme", - "version": "0.10.4", + "version": "0.11.0", "description": "> TODO: description", "author": "iq team", "homepage": "https://github.com/IQ-tech/firebolt#readme", diff --git a/packages/validators/package.json b/packages/validators/package.json index b4d0dfda..58793686 100644 --- a/packages/validators/package.json +++ b/packages/validators/package.json @@ -1,6 +1,6 @@ { "name": "@iq-firebolt/validators", - "version": "0.10.4", + "version": "0.11.0", "description": "> TODO: description", "author": "iq team", "homepage": "https://github.com/IQ-tech/firebolt#readme", diff --git a/yarn.lock b/yarn.lock index cc4628ac..472888fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1810,12 +1810,25 @@ dependencies: "@swc/helpers" "^0.5.0" -"@iq-firebolt/br-addons@0.8.3-next.148": - version "0.8.3-next.148" - resolved "https://registry.yarnpkg.com/@iq-firebolt/br-addons/-/br-addons-0.8.3-next.148.tgz#0037cb1cd13de185239010071ab60699d76364b7" - integrity sha512-3fi8Av9dxotk6GchUsMFSTxK5f3kSdFudOWxxGfAYl5Bquzd72l0gkRWSxUwiScNzBHguffCr+GcSX/yWaayAw== - dependencies: - text-mask-addons "^3.8.0" +"@iq-firebolt/material-theme@0.9.9": + version "0.9.9" + resolved "https://registry.yarnpkg.com/@iq-firebolt/material-theme/-/material-theme-0.9.9.tgz#f9812b7e6bd0d6214327f16f22acda29ebc012e0" + integrity sha512-i53XSmAiZde18Q+AeDBiwwKAwnJ5OMOqlLj9//TaeUCnie9jw+7XSkUff9IAHtoLCFdhDYVf1T1vivcnCrzNnQ== + dependencies: + "@emotion/react" "^11.14.0" + "@emotion/styled" "^11.14.0" + "@mui/icons-material" "^6.0.0" + "@mui/lab" "^6.0.0-beta.12" + "@mui/material" "^6.0.0" + +"@iq-firebolt/validators@0.9.9": + version "0.9.9" + resolved "https://registry.yarnpkg.com/@iq-firebolt/validators/-/validators-0.9.9.tgz#b9401736c2d1cd3826ba17ed2100347eef03b36a" + integrity sha512-+LKjBsP7Pt7VMgWvSldxzdn/0qGauVHNwEo4oxWmYVmZuQOXkKEcXl9ijobcsIzQg9Rgoc9rLuCNmeH4DaGOqA== + dependencies: + "@faker-js/faker" "^9.3.0" + cpf-cnpj-validator "^1.0.3" + simple-evaluate "^1.4.3" "@isaacs/balanced-match@^4.0.1": version "4.0.1"