Skip to content
Merged
Show file tree
Hide file tree
Changes from 75 commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
75d4a34
feat: added initial validator boilerplate & utilities & tests
chesterkmr Dec 2, 2024
b2c7a44
feat: implmeneted validate method & tests
chesterkmr Dec 3, 2024
e471f81
fix: test
chesterkmr Dec 3, 2024
7cb51fe
feat: implemented conditional validation rule apply & custom validators
chesterkmr Dec 4, 2024
4d2c708
feat: implemented useValidate & tests
chesterkmr Dec 4, 2024
c2987da
feat: finalized validator component
chesterkmr Dec 4, 2024
ce18a0c
feat: added story for validator
chesterkmr Dec 5, 2024
33544c6
feat: added renderer & tests & dynamic form boilerplate
chesterkmr Dec 10, 2024
4375b7d
feat: added rule engine
chesterkmr Dec 10, 2024
86b9afe
feat: implemented dynamic form context logic & tests & types
chesterkmr Dec 11, 2024
d8d4b25
feat: finalized core form logic & finalized field list & tests
chesterkmr Dec 13, 2024
5b175fe
fix: tests
chesterkmr Dec 13, 2024
0d94cb0
fix: build
chesterkmr Dec 13, 2024
b631eff
feat: added input boilerplates(unfinished) & field layout & tests
chesterkmr Dec 13, 2024
7be92c9
feat: added fields (wip)
chesterkmr Dec 16, 2024
e74241b
fix: fixed build & tests
chesterkmr Dec 17, 2024
32857eb
Merge branch 'dev' into bal-3139
chesterkmr Dec 17, 2024
a550b96
feat: implemented events & fixed tests
chesterkmr Dec 17, 2024
babea18
feat: implemented fields extend & removed elementsMap
chesterkmr Dec 18, 2024
7f07d19
feat: added select field & fixed types & tests
chesterkmr Dec 18, 2024
fbc135a
feat: added initial demo & bugfixes & updated tests
chesterkmr Dec 18, 2024
f4a885e
feat: added phone field & tests & updated storybook
chesterkmr Dec 18, 2024
8996991
feat: added file field & added tests & minor fixes
chesterkmr Dec 18, 2024
a8e111a
feat: added clear value on input hide & updates tests
chesterkmr Dec 19, 2024
e9e155f
feat: fixed onMount & onUnmount events & updated tests
chesterkmr Dec 19, 2024
7ebe91b
feat: added configurable file upload
chesterkmr Dec 19, 2024
93eec1e
feat: added task runner & tests
chesterkmr Dec 19, 2024
949373a
feat: implemented file upload on submit & tests
chesterkmr Dec 19, 2024
12534dc
feat: added more form stories & tests update
chesterkmr Dec 20, 2024
b633bcb
feat: added custom validators & custom inputs examples
chesterkmr Dec 20, 2024
695e0bd
feat: added radio field & tests
chesterkmr Dec 27, 2024
13bb76a
feat: added tags input & tests & config fixes
chesterkmr Dec 27, 2024
b34891c
Merge branch 'dev' into bal-3139
chesterkmr Dec 27, 2024
49869ff
feat: added v2 adapters for custom fields & updated exports from ui &…
chesterkmr Dec 27, 2024
82d8388
feat: added field descriptions & updated tests (#2914)
chesterkmr Dec 27, 2024
be6480d
Merge branch 'dev' into bal-3137
chesterkmr Jan 2, 2025
64a72fb
Merge branch 'dev' into bal-3137
alonp99 Jan 4, 2025
63020d1
feat: reworked ui elements for v2 & added tests (#2930)
chesterkmr Jan 6, 2025
1fdbda4
fix: better violation names on statistics page (BAL-3294) (#2932)
r4zendev Jan 5, 2025
d485660
fix: renamed property in applyWhen rule
chesterkmr Jan 7, 2025
a30f028
feat: added url format & refactor
chesterkmr Jan 7, 2025
8019fd8
Bal 3242 (#2939)
chesterkmr Jan 7, 2025
4ae6b95
feat: updated en translations
chesterkmr Jan 7, 2025
c62019a
fix: fixed kyb tests
chesterkmr Jan 7, 2025
6fc4c45
Bal 2977 (#2942)
chesterkmr Jan 7, 2025
76bd2d2
feat: added classnames to row & column
chesterkmr Jan 8, 2025
61ef477
fix: submit button styles
chesterkmr Jan 8, 2025
f5f1959
Bal 3330 (#2949)
chesterkmr Jan 8, 2025
be4e1b6
feat: implemented priority fields & bug fixes & tests (#2950)
chesterkmr Jan 9, 2025
85ff80d
fix: fixed build
chesterkmr Jan 9, 2025
7d49aa0
feat: implemented default data insertion on field list (#2951)
chesterkmr Jan 9, 2025
8b553a8
feat: added support of html tags in descriptions
chesterkmr Jan 9, 2025
11f078a
feat: added useControl hook
chesterkmr Jan 10, 2025
f79ee95
fix: reworked revision
chesterkmr Jan 10, 2025
2d20835
fix: fixed renderer stories
chesterkmr Jan 10, 2025
eeda079
Merge branch 'dev' into bal-3137
chesterkmr Jan 13, 2025
7e55313
Merge branch 'dev' into bal-3137
chesterkmr Jan 15, 2025
f5de88f
Bal 3356 (WIP) (#2967)
chesterkmr Jan 16, 2025
eb2d918
fix: fixed fieldlist
chesterkmr Jan 16, 2025
f96b888
feat: updated tests
chesterkmr Jan 16, 2025
93e33da
feat: added clear value for edge cases as documents
chesterkmr Jan 18, 2025
2712806
fix: fixed tests & plugins
chesterkmr Jan 20, 2025
b9f8c7c
fix: fixed fields extraction from definition
chesterkmr Jan 20, 2025
5ef9151
fix: fixed infinite call of useRules due to default array value
chesterkmr Jan 20, 2025
50829ad
feat: enabled sync rules execution for controls disable and elements …
chesterkmr Jan 20, 2025
4426708
feat: reworked cleanup
chesterkmr Jan 21, 2025
5db5214
feat: updated tests
chesterkmr Jan 21, 2025
4ceb67a
Merge branch 'dev' into bal-3137
chesterkmr Jan 24, 2025
5c19483
fix: added handling of dynamic indexes for useRquired & bugfixes
chesterkmr Jan 24, 2025
51a19ac
fix: fixed types
chesterkmr Jan 24, 2025
59ca5d0
feat: added version to ui definition & added version resolving to kyb
chesterkmr Jan 27, 2025
9753753
feat: reorganize
chesterkmr Jan 27, 2025
7e1764f
feat: removed v1
chesterkmr Jan 27, 2025
89c6910
Merge branch 'bal-3137' into bal-3478
chesterkmr Jan 27, 2025
9df1645
fix: post merge fixes & tests & reorganized folders
chesterkmr Jan 27, 2025
2555e21
fix: fixed state step tracking on submit
chesterkmr Jan 27, 2025
ff56d90
fix: state sync fix
chesterkmr Jan 28, 2025
33ddab2
fix: fixed tests
chesterkmr Jan 28, 2025
83bdd83
feat: ui bump
chesterkmr Jan 28, 2025
d25a46f
fix: fixed bug where dynamic indexes was not resolved in validation
chesterkmr Jan 28, 2025
c623561
fix: bugfixes
chesterkmr Jan 28, 2025
bdab45c
fix: cleanup
chesterkmr Jan 28, 2025
dfe5698
Merge branch 'dev' into bal-3478
chesterkmr Jan 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// vite.config.ts
import react from 'file:///Users/ilyarudnev/Documents/Backend/ballerine/node_modules/.pnpm/@[email protected][email protected]/node_modules/@vitejs/plugin-react-swc/index.mjs';
import { defineConfig } from 'file:///Users/ilyarudnev/Documents/Backend/ballerine/node_modules/.pnpm/[email protected]_@[email protected][email protected]/node_modules/vitest/dist/config.js';
import terminal from 'file:///Users/ilyarudnev/Documents/Backend/ballerine/node_modules/.pnpm/[email protected][email protected]/node_modules/vite-plugin-terminal/dist/index.mjs';
import tsconfigPaths from 'file:///Users/ilyarudnev/Documents/Backend/ballerine/node_modules/.pnpm/[email protected][email protected][email protected]/node_modules/vite-tsconfig-paths/dist/index.js';
import topLevelAwait from 'file:///Users/ilyarudnev/Documents/Backend/ballerine/node_modules/.pnpm/[email protected][email protected]/node_modules/vite-plugin-top-level-await/exports/import.mjs';
var vite_config_default = defineConfig(configEnv => {
const isDevelopment = configEnv.mode === 'development';
return {
server: {
open: true,
host: true,
port: 5137,
// port: 443,
// https: true,
},
preview: {
port: 5137,
},
plugins: [
topLevelAwait({
promiseExportName: '__tla',
promiseImportName: i => `__tla_${i}`,
}),
terminal({
output: ['console', 'terminal'],
strip: false,
}),
react(),
tsconfigPaths(),
// mkcert(),
],
css: {
modules: {
generateScopedName: isDevelopment ? '[name]__[local]__[hash:base64:5]' : '[hash:base64:5]',
},
},
test: {
exclude: ['e2e', 'node_modules'],
environment: 'jsdom',
setupFiles: ['./src/tests-setup.ts'],
},
build: {
sourcemap: true,
},
};
});
export { vite_config_default as default };
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCIvVXNlcnMvaWx5YXJ1ZG5ldi9Eb2N1bWVudHMvQmFja2VuZC9iYWxsZXJpbmUvYXBwcy9iYWNrb2ZmaWNlLXYyXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCIvVXNlcnMvaWx5YXJ1ZG5ldi9Eb2N1bWVudHMvQmFja2VuZC9iYWxsZXJpbmUvYXBwcy9iYWNrb2ZmaWNlLXYyL3ZpdGUuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9pbHlhcnVkbmV2L0RvY3VtZW50cy9CYWNrZW5kL2JhbGxlcmluZS9hcHBzL2JhY2tvZmZpY2UtdjIvdml0ZS5jb25maWcudHNcIjtpbXBvcnQgcmVhY3QgZnJvbSAnQHZpdGVqcy9wbHVnaW4tcmVhY3Qtc3djJztcbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gJ3ZpdGVzdC9jb25maWcnO1xuaW1wb3J0IHRlcm1pbmFsIGZyb20gJ3ZpdGUtcGx1Z2luLXRlcm1pbmFsJztcbmltcG9ydCB0c2NvbmZpZ1BhdGhzIGZyb20gJ3ZpdGUtdHNjb25maWctcGF0aHMnO1xuaW1wb3J0IHRvcExldmVsQXdhaXQgZnJvbSAndml0ZS1wbHVnaW4tdG9wLWxldmVsLWF3YWl0JztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKGNvbmZpZ0VudiA9PiB7XG4gIGNvbnN0IGlzRGV2ZWxvcG1lbnQgPSBjb25maWdFbnYubW9kZSA9PT0gJ2RldmVsb3BtZW50JztcblxuICByZXR1cm4ge1xuICAgIHNlcnZlcjoge1xuICAgICAgb3BlbjogdHJ1ZSxcbiAgICAgIGhvc3Q6IHRydWUsXG4gICAgICBwb3J0OiA1MTM3LFxuICAgICAgLy8gcG9ydDogNDQzLFxuICAgICAgLy8gaHR0cHM6IHRydWUsXG4gICAgfSxcbiAgICBwcmV2aWV3OiB7XG4gICAgICBwb3J0OiA1MTM3LFxuICAgIH0sXG4gICAgcGx1Z2luczogW1xuICAgICAgdG9wTGV2ZWxBd2FpdCh7XG4gICAgICAgIHByb21pc2VFeHBvcnROYW1lOiAnX190bGEnLFxuICAgICAgICBwcm9taXNlSW1wb3J0TmFtZTogaSA9PiBgX190bGFfJHtpfWAsXG4gICAgICB9KSxcbiAgICAgIHRlcm1pbmFsKHtcbiAgICAgICAgb3V0cHV0OiBbJ2NvbnNvbGUnLCAndGVybWluYWwnXSxcbiAgICAgICAgc3RyaXA6IGZhbHNlLFxuICAgICAgfSksXG4gICAgICByZWFjdCgpLFxuICAgICAgdHNjb25maWdQYXRocygpLFxuICAgICAgLy8gbWtjZXJ0KCksXG4gICAgXSxcbiAgICBjc3M6IHtcbiAgICAgIG1vZHVsZXM6IHtcbiAgICAgICAgZ2VuZXJhdGVTY29wZWROYW1lOiBpc0RldmVsb3BtZW50ID8gJ1tuYW1lXV9fW2xvY2FsXV9fW2hhc2g6YmFzZTY0OjVdJyA6ICdbaGFzaDpiYXNlNjQ6NV0nLFxuICAgICAgfSxcbiAgICB9LFxuICAgIHRlc3Q6IHtcbiAgICAgIGV4Y2x1ZGU6IFsnZTJlJywgJ25vZGVfbW9kdWxlcyddLFxuICAgICAgZW52aXJvbm1lbnQ6ICdqc2RvbScsXG4gICAgICBzZXR1cEZpbGVzOiBbJy4vc3JjL3Rlc3RzLXNldHVwLnRzJ10sXG4gICAgfSxcbiAgICBidWlsZDoge1xuICAgICAgc291cmNlbWFwOiB0cnVlLFxuICAgIH0sXG4gIH07XG59KTtcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBa1gsT0FBTyxXQUFXO0FBQ3BZLFNBQVMsb0JBQW9CO0FBQzdCLE9BQU8sY0FBYztBQUNyQixPQUFPLG1CQUFtQjtBQUMxQixPQUFPLG1CQUFtQjtBQUUxQixJQUFPLHNCQUFRLGFBQWEsZUFBYTtBQUN2QyxRQUFNLGdCQUFnQixVQUFVLFNBQVM7QUFFekMsU0FBTztBQUFBLElBQ0wsUUFBUTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sTUFBTTtBQUFBO0FBQUE7QUFBQSxJQUdSO0FBQUEsSUFDQSxTQUFTO0FBQUEsTUFDUCxNQUFNO0FBQUEsSUFDUjtBQUFBLElBQ0EsU0FBUztBQUFBLE1BQ1AsY0FBYztBQUFBLFFBQ1osbUJBQW1CO0FBQUEsUUFDbkIsbUJBQW1CLE9BQUssU0FBUyxDQUFDO0FBQUEsTUFDcEMsQ0FBQztBQUFBLE1BQ0QsU0FBUztBQUFBLFFBQ1AsUUFBUSxDQUFDLFdBQVcsVUFBVTtBQUFBLFFBQzlCLE9BQU87QUFBQSxNQUNULENBQUM7QUFBQSxNQUNELE1BQU07QUFBQSxNQUNOLGNBQWM7QUFBQTtBQUFBLElBRWhCO0FBQUEsSUFDQSxLQUFLO0FBQUEsTUFDSCxTQUFTO0FBQUEsUUFDUCxvQkFBb0IsZ0JBQWdCLHFDQUFxQztBQUFBLE1BQzNFO0FBQUEsSUFDRjtBQUFBLElBQ0EsTUFBTTtBQUFBLE1BQ0osU0FBUyxDQUFDLE9BQU8sY0FBYztBQUFBLE1BQy9CLGFBQWE7QUFBQSxNQUNiLFlBQVksQ0FBQyxzQkFBc0I7QUFBQSxJQUNyQztBQUFBLElBQ0EsT0FBTztBQUFBLE1BQ0wsV0FBVztBQUFBLElBQ2I7QUFBQSxFQUNGO0FBQ0YsQ0FBQzsiLAogICJuYW1lcyI6IFtdCn0K
1 change: 1 addition & 0 deletions apps/kyb-app/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
"i18next-http-backend": "^2.1.1",
"jmespath": "^0.16.0",
"json-logic-js": "^2.0.2",
"jsonata": "^2.0.6",
"ky": "^0.33.3",
"lodash": "^4.17.21",
"lucide-react": "^0.144.0",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { LoadingScreen } from '@/common/components/molecules/LoadingScreen';
import { InvalidAccessTokenError } from '@/common/errors/invalid-access-token';
import { useCustomerQuery } from '@/hooks/useCustomerQuery';
import { useFlowContextQuery } from '@/hooks/useFlowContextQuery';
import { LoadingScreen } from '@/pages/CollectionFlow/components/atoms/LoadingScreen';
import { HTTPError } from 'ky';
import { FunctionComponent, useEffect, useMemo, useState } from 'react';
import { getJsonErrors, isShouldIgnoreErrors } from './helpers';
Expand Down
10 changes: 5 additions & 5 deletions apps/kyb-app/src/components/organisms/DynamicUI/DynamicUI.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { PageResolver } from '@/components/organisms/DynamicUI/PageResolver';
import { StateManager } from '@/components/organisms/DynamicUI/StateManager/StateManager';
import { AnyChildren } from '@ballerine/ui';
import { dynamicUIContext } from './dynamic-ui.context';
import { useDynamicUIContextComposer } from '@/components/organisms/DynamicUI/hooks/useDynamicUIContextComposer';
import { TransitionListener } from '@/components/organisms/DynamicUI/TransitionListener';
import { UIState } from '@/components/organisms/DynamicUI/hooks/useUIStateLogic/types';
import { Page } from '@/components/organisms/DynamicUI/Page';
import { PageResolver } from '@/components/organisms/DynamicUI/PageResolver';
import { ActionsHandler } from '@/components/organisms/DynamicUI/StateManager/components/ActionsHandler';
import { StateManager } from '@/components/organisms/DynamicUI/StateManager/StateManager';
import { TransitionListener } from '@/components/organisms/DynamicUI/TransitionListener';
import { AnyChildren } from '@ballerine/ui';
import { dynamicUIContext } from './dynamic-ui.context';

const { Provider } = dynamicUIContext;

Expand Down
6 changes: 3 additions & 3 deletions apps/kyb-app/src/components/organisms/DynamicUI/Page/Page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@ export const Page = ({ page, children }: PageProps) => {
[page],
);

const { payload } = useStateManagerContext();
const { state } = useDynamicUIContext();
const rulesResult = useRuleExecutor(payload, rules, definition, state);
const { payload, state } = useStateManagerContext();
const { state: _uiState } = useDynamicUIContext();
const rulesResult = useRuleExecutor(payload, rules, definition, _uiState);
const fieldErrors = useMemo(
() =>
rulesResult.reduce(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// @ts-nocheck

import { ErrorField } from '@/components/organisms/DynamicUI/rule-engines';
import { findDocumentDefinitionById } from '@/components/organisms/UIRenderer/elements/JSONForm/helpers/findDefinitionByName';
import { Document, UIElement, UIPage } from '@/domains/collection-flow';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,21 @@ import { useStateManagerContext } from '@/components/organisms/DynamicUI/StateMa
import { useDynamicUIContext } from '@/components/organisms/DynamicUI/hooks/useDynamicUIContext';
import { useUIElementToolsLogic } from '@/components/organisms/DynamicUI/hooks/useUIStateLogic/hooks/useUIElementsStateLogic/hooks/useUIElementToolsLogic';
import { ErrorField } from '@/components/organisms/DynamicUI/rule-engines';
import { DocumentValueDestinationParser } from '@/components/organisms/UIRenderer/elements/JSONForm/components/DocumentField/helpers/document-value-destination-parser';
import { serializeDocumentId } from '@/components/organisms/UIRenderer/elements/JSONForm/components/DocumentField/helpers/serialize-document-id';
import { FileUploaderField } from '@/components/organisms/UIRenderer/elements/JSONForm/components/FileUploaderField';
import { useFileRepository } from '@/components/organisms/UIRenderer/elements/JSONForm/components/FileUploaderField/hooks/useFileRepository';
import { UploadFileFn } from '@/components/organisms/UIRenderer/elements/JSONForm/components/FileUploaderField/hooks/useFileUploading/types';
import { useUIElementErrors } from '@/components/organisms/UIRenderer/hooks/useUIElementErrors/useUIElementErrors';
import { useUIElementState } from '@/components/organisms/UIRenderer/hooks/useUIElementState';
import { Document, UIElement } from '@/domains/collection-flow';
import { fetchFile, uploadFile } from '@/domains/storage/storage.api';
import { collectionFlowFileStorage } from '@/pages/CollectionFlow/collection-flow.file-storage';
import { collectionFlowFileStorage } from '@/pages/CollectionFlow/versions/v1/collection-flow.file-storage';
import { findDocumentSchemaByTypeAndCategory } from '@ballerine/common';
import { AnyObject, ErrorsList, RJSFInputProps } from '@ballerine/ui';
import { HTTPError } from 'ky';
import get from 'lodash/get';
import set from 'lodash/set';
import { useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';
import { serializeDocumentId } from './helpers/serialize-document-id';

export interface DocumentFieldParams {
documentData: Partial<Document>;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,69 @@ describe('DocumentValueDestinationParser', () => {
});
});
});
describe('DocumentValueDestinationParser', () => {
describe('.extractRootPath', () => {
describe('when path is valid', () => {
describe.each([
['some.root.path.documents[0].pages[0]', 'some.root.path.documents'],
['documents[0].pages[0]', 'documents'],
])('will extract root path from %s', (input, expected) => {
test(`returns ${expected}`, () => {
const parser = new DocumentValueDestinationParser(input);

expect(parser.extractRootPath()).toBe(expected);
});
});
});

describe('otherwise', () => {
it('will be null', () => {
const parser = new DocumentValueDestinationParser(
'some.random.broken.path[3433434].test.99.1221',
);

expect(parser.extractRootPath()).toBe(null);
});
});
});

describe('.extractPagePath', () => {
describe('when path is valid', () => {
it('will extract path to document page', () => {
const parser = new DocumentValueDestinationParser(
'some.path.to.documents[0].page.nested.pages[1].file.id',
);

expect(parser.extractPagePath()).toBe('page.nested.pages[1]');
});
});

describe('otherwise', () => {
it('will be null', () => {
const parser = new DocumentValueDestinationParser('brokenpath');

expect(parser.extractPagePath()).toBe(null);
});
});
});

describe('.extractFileIdPath', () => {
describe('when path is valid', () => {
it('will extract path to fileId', () => {
const parser = new DocumentValueDestinationParser(
'context.documents[1].additionalInfo.pages[0].path.to.file.id',
);

expect(parser.extractFileIdPath()).toBe('path.to.file.id');
});
});

describe('otherwise', () => {
it('will be null', () => {
const parser = new DocumentValueDestinationParser('some-broken.path-pages[1121]');

expect(parser.extractFileIdPath()).toBe(null);
});
});
});
});
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { serializeDocumentId } from '@/components/organisms/UIRenderer/elements/JSONForm/components/DocumentField/helpers/serialize-document-id';
import { serializeDocumentId } from './serialize-document-id';

describe('serializeDocumentId', () => {
it('will populate INDEX placeholder with index', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@ export const serializeDocumentId = (baseId: string, index: number): string => {

export const deserializeDocumentId = (id: string): string => {
const result = id.replace(/\[index:\d+\]/g, '[{INDEX}]');

return result;
};
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
//@ts-nocheck
import { UIElement } from '@/domains/collection-flow';
import {
Chip,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import { deserializeDocumentId } from '@/components/organisms/UIRenderer/elements/JSONForm/components/DocumentField/helpers/serialize-document-id';
import { UIElement } from '@/domains/collection-flow';
import { AnyObject } from '@ballerine/ui';

const deserializeDocumentId = (id: string) => {
return id;
};

export const findDefinitionByName = (
name: string,
elements: Array<UIElement<AnyObject>>,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
//@ts-nocheck
import { CheckboxList } from '@/components/organisms/UIRenderer/elements/JSONForm/components/CheckboxList';
import { CountryPicker } from '@/components/organisms/UIRenderer/elements/JSONForm/components/CountryPicker';
import { DocumentField } from '@/components/organisms/UIRenderer/elements/JSONForm/components/DocumentField';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import {
Breadcrumbs,
} from '@/components/atoms/Stepper/components/atoms/Breadcrumbs';
import { VerticalLayout } from '@/components/atoms/Stepper/layouts/Vertical';
import { usePageContext } from '@/components/organisms/DynamicUI/Page';
import { usePageResolverContext } from '@/components/organisms/DynamicUI/PageResolver/hooks/usePageResolverContext';
import { useStateManagerContext } from '@/components/organisms/DynamicUI/StateManager/components/StateProvider';
import { useDynamicUIContext } from '@/components/organisms/DynamicUI/hooks/useDynamicUIContext';
Expand All @@ -14,16 +13,18 @@ import { UIPage } from '@/domains/collection-flow';
import { CollectionFlowContext } from '@/domains/collection-flow/types/flow-context.types';
import { isPageCompleted } from '@/helpers/prepareInitialUIState';
import { ScrollArea, ScrollBar } from '@ballerine/ui';
import { useEffect, useMemo, useState } from 'react';
import { FunctionComponent, useEffect, useMemo, useState } from 'react';

export const StepperUI = () => {
interface IStepperUIProps {
revisionStateNames: string[];
}

export const StepperUI: FunctionComponent<IStepperUIProps> = ({ revisionStateNames }) => {
const { state: uiState } = useDynamicUIContext();
const { pages, currentPage } = usePageResolverContext();
const { payload } = useStateManagerContext();
const { pageErrors } = usePageContext();

const computeStepStatus = ({
pageError,
page,
context,
uiElementState,
Expand All @@ -34,7 +35,7 @@ export const StepperUI = () => {
currentPage: UIPage;
context: CollectionFlowContext;
}) => {
if (Object.values(pageError || {}).some(error => error.type === 'warning')) return 'warning';
if (revisionStateNames?.includes(page.stateName)) return 'warning';

if (isPageCompleted(page, context) || uiElementState?.isCompleted) return 'completed';

Expand All @@ -48,8 +49,6 @@ export const StepperUI = () => {
const stepStatus = computeStepStatus({
// @ts-ignore
uiElementState: uiState.elements[page.stateName],
// @ts-ignore
pageError: pageErrors?.[page.stateName],
page,
context: initialContext,
currentPage: currentPage as UIPage,
Expand All @@ -63,7 +62,7 @@ export const StepperUI = () => {

return step;
});
}, [pages, uiState, pageErrors, initialContext, currentPage]);
}, [pages, uiState, initialContext, currentPage]);

const activeStep = useMemo(() => {
const activeStep = steps.find(step => step.id === currentPage?.stateName);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// @ts-nocheck

import { ARRAY_VALUE_INDEX_PLACEHOLDER } from '@/common/consts/consts';
import { DocumentFieldParams } from '@/components/organisms/UIRenderer/elements/JSONForm/components/DocumentField';
import { UIElement, UIPage } from '@/domains/collection-flow';
Expand All @@ -12,7 +14,7 @@ export const getElementByValueDestination = (

const findByElementDefinitionByDestination = (
targetDestination: string,
elements: UIElement<AnyObject>[],
elements: Array<UIElement<AnyObject>>,
): UIElement<AnyObject> | null => {
for (const element of elements) {
if (element.valueDestination === targetDestination) return element;
Expand All @@ -22,6 +24,7 @@ export const getElementByValueDestination = (
targetDestination,
element.elements,
);

if (foundElement) return foundElement;
}
}
Expand All @@ -36,26 +39,25 @@ export const getElementByValueDestination = (
);

const element = findByElementDefinitionByDestination(originArrayDestinationPath, page.elements);

return element;
}

return findByElementDefinitionByDestination(destination, page.elements);
};

export const getDocumentElementByDocumentError = (
id: string,
page: UIPage,
): UIElement<AnyObject> | null => {
export const getDocumentElementByDocumentError = (id: string, page: any): any => {
const findElement = (
id: string,
elements: UIElement<AnyObject>[],
elements: Array<UIElement<AnyObject>>,
): UIElement<DocumentFieldParams> | null => {
for (const element of elements) {
//@ts-ignore
if (element.options?.documentData?.id === id.replace('document-error-', '')) return element;

if (element.elements) {
const foundInElements = findElement(id, element.elements);

if (foundInElements) return foundInElements;
}
}
Expand Down
16 changes: 16 additions & 0 deletions apps/kyb-app/src/domains/collection-flow/collection-flow.api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import {
CollectionFlowConfig,
CollectionFlowContext,
} from '@/domains/collection-flow/types/flow-context.types';
import get from 'lodash/get';
import posthog from 'posthog-js';

export const fetchUser = async (): Promise<TUser> => {
Expand Down Expand Up @@ -121,3 +122,18 @@ export const createEndUserRequest = async ({
json: { email, firstName, lastName, additionalInfo },
});
};

export const syncContext = async (context: CollectionFlowContext) => {
const result = await request.put('collection-flow/sync', {
json: {
data: {
context,
endUser: get(context, 'entity.data.additionalInfo.mainRepresentative'),
business: get(context, 'entity.data'),
ballerineEntityId: get(context, 'entity.ballerineEntityId'),
},
},
});

return result.json();
};
Loading
Loading