feat(TEAMMSBMOB-21008): connect business-cards service with toogle

This commit is contained in:
Yasich217
2025-12-05 06:31:30 +03:00
parent abe915e2d2
commit cee3892749
15 changed files with 599 additions and 14 deletions
+1
View File
@@ -5,6 +5,7 @@ COPY msb-main-page /opt/site/msb-main-page
COPY msb-operations-history /opt/site/msb-operations-history
COPY msb-deposits /opt/site/msb-deposits
COPY msb-payments /opt/site/msb-payments
COPY msb-business-cards /opt/site/msb-business-cards
COPY msb-statements-and-inquiries /opt/site/msb-statements-and-inquiries
COPY msb-treasury-deals /opt/site/msb-treasury-deals
COPY nginx.conf /etc/nginx/nginx.conf
+3
View File
@@ -33,6 +33,9 @@ http {
location /msb-payments/ {
try_files $uri $uri/ =404;
}
location /msb-business-cards/ {
try_files $uri $uri/ =404;
}
location /msb-statements-and-inquiries/ {
try_files $uri $uri/ =404;
}
+516
View File
@@ -26603,6 +26603,10 @@
"resolved": "services/msb-accounts",
"link": true
},
"node_modules/msb-business-cards": {
"resolved": "services/msb-business-cards",
"link": true
},
"node_modules/msb-deposits": {
"resolved": "services/msb-deposits",
"link": true
@@ -37388,6 +37392,518 @@
"dev": true,
"license": "Apache-2.0"
},
"services/msb-business-cards": {
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"@emotion/react": "11.8.1",
"@emotion/styled": "11.8.1",
"@fractal-ui/core": "30.15.0",
"@fractal-ui/extended": "30.15.0",
"@fractal-ui/form": "30.15.0",
"@fractal-ui/layout": "30.15.0",
"@fractal-ui/library": "31.4.0",
"@fractal-ui/overlays": "30.15.0",
"@fractal-ui/styling": "30.18.0",
"@fractal-ui/table": "30.15.0",
"@fractal-ui/visualization": "30.15.0",
"@msb/fractal-ui-composites": "30.15.1",
"@msb/http": "^1.0.0",
"@msb/mf-utils": "^1.0.0",
"@msb/shared": "^1.0.0",
"@styled-system/css": "^5.1.5",
"dayjs": "^1.11.3",
"react": "17.0.2",
"react-animate-height": "^2.0.23",
"react-dnd": "^11.1.3",
"react-dnd-html5-backend": "^11.1.3",
"react-dom": "17.0.2",
"react-final-form": "6.5.3",
"react-router-dom": "5.2.0",
"react-test-renderer": "17.0.2",
"styled-system": "5.1.5",
"virtua": "^0.31.0"
},
"devDependencies": {
"@eco/lint-staged-config": "21.10.0",
"@fractal-ui/layout": "30.15.0",
"@msb/mf-builder": "1.0.0",
"@testing-library/jest-dom": "5.16.2",
"@testing-library/react": "12.1.3",
"@testing-library/react-hooks": "7.0.2",
"@testing-library/user-event": "13.5.0",
"@types/jest": "^27.4.0",
"@types/react": "17.0.36",
"@types/react-dom": "17.0.2",
"@types/react-router-dom": "5.1.7",
"@types/react-test-renderer": "17.0.2",
"@types/react-transition-group": "4.4.1",
"@types/styled-system": "5.1.15",
"@types/styled-system__css": "5.0.16",
"jest": "^27.0.6",
"jest-environment-jsdom": "^27.5.1",
"json-server": "^0.16.3",
"lint-staged": "^12.3.4",
"react-test-renderer": "17.0.2"
}
},
"services/msb-business-cards/node_modules/@fractal-ui/styling": {
"version": "30.18.0",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/@fractal-ui/styling/-/styling-30.18.0.tgz",
"integrity": "sha512-mwKcZ6OvcAt4jCMtGS/Q3xZcdAxc57/JH/2k+RyxBQLqgKg37HJUK+g44uVTsZjIHFwVyUd2JpZFu64VtvxA4g==",
"engines": {
"node": ">=16"
},
"peerDependencies": {
"@emotion/react": "11.8.1",
"@emotion/styled": "11.8.1",
"@styled-system/css": "5.1.5",
"@types/styled-system": "5.1.15",
"dayjs": "1.11.3",
"final-form": "4.20.10",
"react": "17.0.2",
"react-animate-height": "2.0.23",
"react-dnd": "11.1.3",
"react-dnd-html5-backend": "11.1.3",
"react-dom": "17.0.2",
"react-final-form": "6.5.3",
"react-router-dom": "5.2.0",
"react-table": "7.7.0",
"styled-system": "5.1.5"
}
},
"services/msb-business-cards/node_modules/@testing-library/dom": {
"version": "8.20.1",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/@testing-library/dom/-/dom-8.20.1.tgz",
"integrity": "sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.10.4",
"@babel/runtime": "^7.12.5",
"@types/aria-query": "^5.0.1",
"aria-query": "5.1.3",
"chalk": "^4.1.0",
"dom-accessibility-api": "^0.5.9",
"lz-string": "^1.5.0",
"pretty-format": "^27.0.2"
},
"engines": {
"node": ">=12"
}
},
"services/msb-business-cards/node_modules/@testing-library/dom/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
"services/msb-business-cards/node_modules/@testing-library/jest-dom": {
"version": "5.16.2",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/@testing-library/jest-dom/-/jest-dom-5.16.2.tgz",
"integrity": "sha512-6ewxs1MXWwsBFZXIk4nKKskWANelkdUehchEOokHsN8X7c2eKXGw+77aRV63UU8f/DTSVUPLaGxdrj4lN7D/ug==",
"dev": true,
"dependencies": {
"@babel/runtime": "^7.9.2",
"@types/testing-library__jest-dom": "^5.9.1",
"aria-query": "^5.0.0",
"chalk": "^3.0.0",
"css": "^3.0.0",
"css.escape": "^1.5.1",
"dom-accessibility-api": "^0.5.6",
"lodash": "^4.17.15",
"redent": "^3.0.0"
},
"engines": {
"node": ">=8",
"npm": ">=6",
"yarn": ">=1"
}
},
"services/msb-business-cards/node_modules/@testing-library/react": {
"version": "12.1.3",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/@testing-library/react/-/react-12.1.3.tgz",
"integrity": "sha512-oCULRXWRrBtC9m6G/WohPo1GLcLesH7T4fuKzRAKn1CWVu9BzXtqLXDDTA6KhFNNtRwLtfSMr20HFl+Qrdrvmg==",
"dev": true,
"dependencies": {
"@babel/runtime": "^7.12.5",
"@testing-library/dom": "^8.0.0",
"@types/react-dom": "*"
},
"engines": {
"node": ">=12"
},
"peerDependencies": {
"react": "*",
"react-dom": "*"
}
},
"services/msb-business-cards/node_modules/@testing-library/react-hooks": {
"version": "7.0.2",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/@testing-library/react-hooks/-/react-hooks-7.0.2.tgz",
"integrity": "sha512-dYxpz8u9m4q1TuzfcUApqi8iFfR6R0FaMbr2hjZJy1uC8z+bO/K4v8Gs9eogGKYQop7QsrBTFkv/BCF7MzD2Cg==",
"dev": true,
"dependencies": {
"@babel/runtime": "^7.12.5",
"@types/react": ">=16.9.0",
"@types/react-dom": ">=16.9.0",
"@types/react-test-renderer": ">=16.9.0",
"react-error-boundary": "^3.1.0"
},
"engines": {
"node": ">=12"
},
"peerDependencies": {
"react": ">=16.9.0",
"react-dom": ">=16.9.0",
"react-test-renderer": ">=16.9.0"
},
"peerDependenciesMeta": {
"react-dom": {
"optional": true
},
"react-test-renderer": {
"optional": true
}
}
},
"services/msb-business-cards/node_modules/@tootallnate/once": {
"version": "1.1.2",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/@tootallnate/once/-/once-1.1.2.tgz",
"integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
"dev": true,
"engines": {
"node": ">= 6"
}
},
"services/msb-business-cards/node_modules/acorn-globals": {
"version": "6.0.0",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/acorn-globals/-/acorn-globals-6.0.0.tgz",
"integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
"dev": true,
"dependencies": {
"acorn": "^7.1.1",
"acorn-walk": "^7.1.1"
}
},
"services/msb-business-cards/node_modules/acorn-globals/node_modules/acorn": {
"version": "7.4.1",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/acorn/-/acorn-7.4.1.tgz",
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
},
"engines": {
"node": ">=0.4.0"
}
},
"services/msb-business-cards/node_modules/acorn-walk": {
"version": "7.2.0",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/acorn-walk/-/acorn-walk-7.2.0.tgz",
"integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
"dev": true,
"engines": {
"node": ">=0.4.0"
}
},
"services/msb-business-cards/node_modules/aria-query": {
"version": "5.1.3",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/aria-query/-/aria-query-5.1.3.tgz",
"integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==",
"dev": true,
"dependencies": {
"deep-equal": "^2.0.5"
}
},
"services/msb-business-cards/node_modules/chalk": {
"version": "3.0.0",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/chalk/-/chalk-3.0.0.tgz",
"integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
},
"engines": {
"node": ">=8"
}
},
"services/msb-business-cards/node_modules/cssom": {
"version": "0.4.4",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/cssom/-/cssom-0.4.4.tgz",
"integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
"dev": true
},
"services/msb-business-cards/node_modules/data-urls": {
"version": "2.0.0",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/data-urls/-/data-urls-2.0.0.tgz",
"integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
"dev": true,
"dependencies": {
"abab": "^2.0.3",
"whatwg-mimetype": "^2.3.0",
"whatwg-url": "^8.0.0"
},
"engines": {
"node": ">=10"
}
},
"services/msb-business-cards/node_modules/domexception": {
"version": "2.0.1",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/domexception/-/domexception-2.0.1.tgz",
"integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
"deprecated": "Use your platform's native DOMException instead",
"dev": true,
"dependencies": {
"webidl-conversions": "^5.0.0"
},
"engines": {
"node": ">=8"
}
},
"services/msb-business-cards/node_modules/domexception/node_modules/webidl-conversions": {
"version": "5.0.0",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
"integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
"dev": true,
"engines": {
"node": ">=8"
}
},
"services/msb-business-cards/node_modules/form-data": {
"version": "3.0.3",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/form-data/-/form-data-3.0.3.tgz",
"integrity": "sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w==",
"dev": true,
"dependencies": {
"asynckit": "^0.4.0",
"combined-stream": "^1.0.8",
"es-set-tostringtag": "^2.1.0",
"mime-types": "^2.1.35"
},
"engines": {
"node": ">= 6"
}
},
"services/msb-business-cards/node_modules/html-encoding-sniffer": {
"version": "2.0.1",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
"integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
"dev": true,
"dependencies": {
"whatwg-encoding": "^1.0.5"
},
"engines": {
"node": ">=10"
}
},
"services/msb-business-cards/node_modules/http-proxy-agent": {
"version": "4.0.1",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
"integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
"dev": true,
"dependencies": {
"@tootallnate/once": "1",
"agent-base": "6",
"debug": "4"
},
"engines": {
"node": ">= 6"
}
},
"services/msb-business-cards/node_modules/iconv-lite": {
"version": "0.4.24",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
"engines": {
"node": ">=0.10.0"
}
},
"services/msb-business-cards/node_modules/jest-environment-jsdom": {
"version": "27.5.1",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz",
"integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==",
"dev": true,
"dependencies": {
"@jest/environment": "^27.5.1",
"@jest/fake-timers": "^27.5.1",
"@jest/types": "^27.5.1",
"@types/node": "*",
"jest-mock": "^27.5.1",
"jest-util": "^27.5.1",
"jsdom": "^16.6.0"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"services/msb-business-cards/node_modules/jsdom": {
"version": "16.7.0",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/jsdom/-/jsdom-16.7.0.tgz",
"integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
"dev": true,
"dependencies": {
"abab": "^2.0.5",
"acorn": "^8.2.4",
"acorn-globals": "^6.0.0",
"cssom": "^0.4.4",
"cssstyle": "^2.3.0",
"data-urls": "^2.0.0",
"decimal.js": "^10.2.1",
"domexception": "^2.0.1",
"escodegen": "^2.0.0",
"form-data": "^3.0.0",
"html-encoding-sniffer": "^2.0.1",
"http-proxy-agent": "^4.0.1",
"https-proxy-agent": "^5.0.0",
"is-potential-custom-element-name": "^1.0.1",
"nwsapi": "^2.2.0",
"parse5": "6.0.1",
"saxes": "^5.0.1",
"symbol-tree": "^3.2.4",
"tough-cookie": "^4.0.0",
"w3c-hr-time": "^1.0.2",
"w3c-xmlserializer": "^2.0.0",
"webidl-conversions": "^6.1.0",
"whatwg-encoding": "^1.0.5",
"whatwg-mimetype": "^2.3.0",
"whatwg-url": "^8.5.0",
"ws": "^7.4.6",
"xml-name-validator": "^3.0.0"
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
"canvas": "^2.5.0"
},
"peerDependenciesMeta": {
"canvas": {
"optional": true
}
}
},
"services/msb-business-cards/node_modules/parse5": {
"version": "6.0.1",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/parse5/-/parse5-6.0.1.tgz",
"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
"dev": true
},
"services/msb-business-cards/node_modules/saxes": {
"version": "5.0.1",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/saxes/-/saxes-5.0.1.tgz",
"integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
"dev": true,
"dependencies": {
"xmlchars": "^2.2.0"
},
"engines": {
"node": ">=10"
}
},
"services/msb-business-cards/node_modules/tr46": {
"version": "2.1.0",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/tr46/-/tr46-2.1.0.tgz",
"integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
"dev": true,
"dependencies": {
"punycode": "^2.1.1"
},
"engines": {
"node": ">=8"
}
},
"services/msb-business-cards/node_modules/w3c-xmlserializer": {
"version": "2.0.0",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
"integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
"dev": true,
"dependencies": {
"xml-name-validator": "^3.0.0"
},
"engines": {
"node": ">=10"
}
},
"services/msb-business-cards/node_modules/webidl-conversions": {
"version": "6.1.0",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
"integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
"dev": true,
"engines": {
"node": ">=10.4"
}
},
"services/msb-business-cards/node_modules/whatwg-encoding": {
"version": "1.0.5",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
"integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
"dev": true,
"dependencies": {
"iconv-lite": "0.4.24"
}
},
"services/msb-business-cards/node_modules/whatwg-mimetype": {
"version": "2.3.0",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
"integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
"dev": true
},
"services/msb-business-cards/node_modules/whatwg-url": {
"version": "8.7.0",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/whatwg-url/-/whatwg-url-8.7.0.tgz",
"integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
"dev": true,
"dependencies": {
"lodash": "^4.7.0",
"tr46": "^2.1.0",
"webidl-conversions": "^6.1.0"
},
"engines": {
"node": ">=10"
}
},
"services/msb-business-cards/node_modules/ws": {
"version": "7.5.10",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/ws/-/ws-7.5.10.tgz",
"integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
"dev": true,
"engines": {
"node": ">=8.3.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
"utf-8-validate": "^5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
"optional": true
},
"utf-8-validate": {
"optional": true
}
}
},
"services/msb-business-cards/node_modules/xml-name-validator": {
"version": "3.0.0",
"resolved": "https://nexus.gboteam.ru/repository/npm-eco-group/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
"integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
"dev": true
},
"services/msb-deposits": {
"version": "1.7.0",
"license": "ISC",
+3
View File
@@ -9,6 +9,7 @@
"msb-payments",
"msb-statements-and-inquiries",
"msb-accounts",
"msb-business-cards",
"msb-fea",
"msb-partner-check",
"msb-treasury-deals"
@@ -31,7 +32,9 @@
"start:payments": "lerna run start --scope=msb-host --scope=msb-payments --stream",
"start:stage:payments": "lerna run start:stage --scope=msb-host --stream & lerna run start --scope=msb-payments --stream",
"start:accounts": "lerna run start --scope=msb-host --scope=msb-accounts --stream",
"start:business-cards": "lerna run start --scope=msb-host --scope=msb-business-cards --stream",
"start:stage:accounts": "lerna run start:stage --stream & lerna run start --scope=msb-host --scope=msb-accounts --stream",
"start:stage:business-cards": "lerna run start:stage --stream & lerna run start --scope=msb-host --scope=msb-business-cards --stream",
"start:stage:treasury-deals": "lerna run start:stage --scope=msb-host --stream & lerna run start --scope=msb-treasury-deals --stream",
"start:stage:treasury-deals:win": "npx concurrently \"lerna run start:stage --scope=msb-host --stream\" \"lerna run start --scope=msb-treasury-deals --stream\"",
"start:host": "lerna run start --scope=msb-host --stream",
+1
View File
@@ -16,6 +16,7 @@ interface FeatureToggleResponse {
}
enum FEATURE_TOGGLE_NAMES {
BUSINESS_CARDS_IBMSB = 'businessCardsIBMSB',
MAIN_PAGE_AVAILABLE_BALANCE = 'mainpageAvailablebalanceIBMSB',
MAIN_PAGE_ACCOUNT = 'mainpageAccountsIBMSB',
PAYMENT_THIRD_PARTY_SWITCH = 'Payment3RdPartyIBMSB',
+4
View File
@@ -6,6 +6,10 @@ const FEATURE_TOGGLE_MOCK: FeatureToggleResponse = {
actualTimestamp: Date.now(),
data: {
features: [
{
featureCode: FEATURE_TOGGLE_NAMES.BUSINESS_CARDS_IBMSB,
isEnabled: true,
},
{
featureCode: FEATURE_TOGGLE_NAMES.MAIN_PAGE_AVAILABLE_BALANCE,
isEnabled: true,
+6
View File
@@ -64,6 +64,11 @@ const ACCOUNTS_PATHS = {
OPEN_ACCOUNT_ORDERS_LIST: `${PATHS.ACCOUNTS}/open-account`,
} as const;
const BUSINESS_CARDS_PATHS = {
HOME: `${PATHS.BUSINESS_CARDS}/cards`,
DETAILS: `${PATHS.BUSINESS_CARDS}/cards-view/:id`,
} as const;
const ECO_CLIENT_ENDPOINT = process.env.ECO_CLIENT_ENDPOINT || '';
const EXTERNAL_PATHS = {
@@ -158,6 +163,7 @@ export {
CROSS_SELLING_JSON,
CROSS_BORDER_AB_PAYMENTS,
ACCOUNTS_PATHS,
BUSINESS_CARDS_PATHS,
CROSS_SALE_PATHS,
EXTERNAL_LINKS,
queryStringVersion,
+5
View File
@@ -4,6 +4,11 @@
"version": "1.6.0",
"private": false
},
{
"name": "msb-business-cards",
"version": "1.0.0",
"private": false
},
{
"name": "msb-deposits",
"version": "1.7.0",
@@ -3,6 +3,10 @@
"actualTimestamp": 1718901234567,
"data": {
"features": [
{
"featureCode": "businessCardsIBMSB",
"isEnabled": false
},
{
"featureCode": "mainpageAvailablebalanceIBMSB",
"isEnabled": true
@@ -1,6 +1,7 @@
import { lightTheme } from '@fractal-ui/styling';
import {
ACCOUNTS_PATHS,
BUSINESS_CARDS_PATHS,
CROSS_BORDER_AB_PAYMENTS,
ECO_SERVICES_PATHS,
EXTERNAL_LINKS,
@@ -13,10 +14,11 @@ import type { ServicesGroup } from '../model';
import LOCALIZATION from './localization';
interface EnabledServices {
isBusinessCardsEnabled: boolean;
isSecondAccountEnabled: boolean;
}
function getServicesForYou({ isSecondAccountEnabled }: EnabledServices): ServicesGroup[] {
function getServicesForYou({ isBusinessCardsEnabled, isSecondAccountEnabled }: EnabledServices): ServicesGroup[] {
return [
{
title: LOCALIZATION.OPENING_MAINTAINING_ACCOUNT,
@@ -108,7 +110,7 @@ function getServicesForYou({ isSecondAccountEnabled }: EnabledServices): Service
description: LOCALIZATION.TOOL_FOR_PAYING_BUSINESS_EXPENSES,
iconBackground: lightTheme.gradients.sapphire,
icon: icons.businessCards,
navigateUrl: ECO_SERVICES_PATHS.BUSINESS_CARDS,
navigateUrl: isBusinessCardsEnabled ? BUSINESS_CARDS_PATHS.HOME : ECO_SERVICES_PATHS.BUSINESS_CARDS,
ymCode: 'business_cards',
},
{
@@ -37,11 +37,12 @@ const ServicesPage = () => {
const { handleReachGoal } = useYaMetrika();
const { isEnabled: isSecondAccountEnabled } = useFeatureToggles(FEATURE_TOGGLE_NAMES.OPEN_SECOND_ACCOUNT);
const { isEnabled: isBusinessCardsEnabled } = useFeatureToggles(FEATURE_TOGGLE_NAMES.BUSINESS_CARDS_IBMSB);
const tabsComponents: Record<ServicesChipValue, ReactElement> = {
forYou: (
<S.ServicesList>
{getServicesForYou({ isSecondAccountEnabled }).map(blockServices => (
{getServicesForYou({ isBusinessCardsEnabled, isSecondAccountEnabled }).map(blockServices => (
<BankingServices key={blockServices.title} services={blockServices.services} title={blockServices.title} />
))}
</S.ServicesList>
@@ -3,7 +3,6 @@ import { EXTERNAL_PATHS, PATHS } from '@msb/shared';
const LIST_OF_REDIRECTS: Partial<Record<PATHS, typeof EXTERNAL_PATHS[keyof typeof EXTERNAL_PATHS]>> = {
[PATHS.SALARY_PROJECT]: EXTERNAL_PATHS.SALARY_PROJECT,
[PATHS.CREDIT_ACCOUNT]: EXTERNAL_PATHS.CREDIT_ACCOUNT,
[PATHS.BUSINESS_CARDS]: EXTERNAL_PATHS.BUSINESS_CARDS,
[PATHS.ACQUIRING]: EXTERNAL_PATHS.ACQUIRING,
};
@@ -1,6 +1,7 @@
import type { FC } from 'react';
import type { RemoteRouteConfigVisibleOnMobile } from '@msb/http';
import { PATHS, useYaMetrika, YM_GOALS } from '@msb/shared';
import { FEATURE_TOGGLE_NAMES } from '@msb/http';
import { BUSINESS_CARDS_PATHS, EXTERNAL_PATHS, PATHS, useFeatureToggles, useYaMetrika, YM_GOALS } from '@msb/shared';
import { useHistory } from 'react-router-dom';
import { LOCALIZATION, LIST_OF_REDIRECTS } from '../constants';
import * as S from './Sidebar.styles';
@@ -13,6 +14,8 @@ const MobileMenu: FC<Props> = ({ modules = [] }) => {
const { handleReachGoal } = useYaMetrika();
const history = useHistory();
const { isEnabled: isBusinessCardsEnabled } = useFeatureToggles(FEATURE_TOGGLE_NAMES.BUSINESS_CARDS_IBMSB);
const onClickLink = (event: React.MouseEvent, path: PATHS, ymCode: string) => {
event.preventDefault();
@@ -26,9 +29,20 @@ const MobileMenu: FC<Props> = ({ modules = [] }) => {
const renderLink = (item: RemoteRouteConfigVisibleOnMobile) => {
const icon = item.path in SIDEBAR_ICONS ? SIDEBAR_ICONS[item.path as keyof typeof SIDEBAR_ICONS] : null;
if (item.path in LIST_OF_REDIRECTS) {
/** Заменяем путь на полный(с /cards на конце) при включенном флаге. */
const itemPath = isBusinessCardsEnabled && item.path === PATHS.BUSINESS_CARDS ? BUSINESS_CARDS_PATHS.HOME : item.path;
/** Если флаг выключен, добавляем во внешний редирект, вместо внутреннего роута. */
const listOfRedirects = isBusinessCardsEnabled
? LIST_OF_REDIRECTS
: {
...LIST_OF_REDIRECTS,
[PATHS.BUSINESS_CARDS]: EXTERNAL_PATHS.BUSINESS_CARDS,
};
if (item.path in listOfRedirects) {
return (
<S.StyledExternalLink key={item.title} href={LIST_OF_REDIRECTS[item.path as PATHS]} rel="noopener noreferrer" target="_blank">
<S.StyledExternalLink key={item.title} href={listOfRedirects[item.path as PATHS]} rel="noopener noreferrer" target="_blank">
<MobileMenuItem icon={icon}>{item.shortTitle}</MobileMenuItem>
</S.StyledExternalLink>
);
@@ -38,8 +52,8 @@ const MobileMenu: FC<Props> = ({ modules = [] }) => {
<S.StyledNavLink
key={item.title}
exact={item.exact}
to={item.path}
onClick={event => onClickLink(event, item.path as PATHS, item.ymCode)}
to={itemPath}
onClick={event => onClickLink(event, itemPath as PATHS, item.ymCode)}
>
<MobileMenuItem icon={icon}>{item.shortTitle}</MobileMenuItem>
</S.StyledNavLink>
@@ -1,6 +1,18 @@
import type { FC } from 'react';
import type { RemoteRouteConfigDto } from '@msb/http';
import { MEDIA, PATHS, useAccountsPermissions, useMediaQuery, useUnauthorizedModal, useYaMetrika, YM_GOALS } from '@msb/shared';
import { FEATURE_TOGGLE_NAMES } from '@msb/http';
import {
BUSINESS_CARDS_PATHS,
EXTERNAL_PATHS,
MEDIA,
PATHS,
useAccountsPermissions,
useFeatureToggles,
useMediaQuery,
useUnauthorizedModal,
useYaMetrika,
YM_GOALS,
} from '@msb/shared';
import { useHistory } from 'react-router-dom';
import { LOCALIZATION, LIST_OF_REDIRECTS } from '../constants';
import * as S from './Sidebar.styles';
@@ -13,6 +25,8 @@ const Sidebar: FC<Props> = ({ modules = [] }) => {
const isDesktop = useMediaQuery(MEDIA.desktop);
const { handleReachGoal } = useYaMetrika();
const { isEnabled: isBusinessCardsEnabled } = useFeatureToggles(FEATURE_TOGGLE_NAMES.BUSINESS_CARDS_IBMSB);
const history = useHistory();
const { haveAccountsPermission } = useAccountsPermissions();
@@ -45,11 +59,22 @@ const Sidebar: FC<Props> = ({ modules = [] }) => {
const icon = item.path in SIDEBAR_ICONS ? SIDEBAR_ICONS[item.path as keyof typeof SIDEBAR_ICONS] : null;
if (item.path in LIST_OF_REDIRECTS) {
/** Заменяем путь на полный(с /cards на конце) при включенном флаге. */
const itemPath = isBusinessCardsEnabled && item.path === PATHS.BUSINESS_CARDS ? BUSINESS_CARDS_PATHS.HOME : item.path;
/** Если флаг выключен, добавляем во внешний редирект, вместо внутреннего роута. */
const listOfRedirects = isBusinessCardsEnabled
? LIST_OF_REDIRECTS
: {
...LIST_OF_REDIRECTS,
[PATHS.BUSINESS_CARDS]: EXTERNAL_PATHS.BUSINESS_CARDS,
};
if (item.path in listOfRedirects) {
return (
<S.StyledExternalLink
key={item.title}
href={LIST_OF_REDIRECTS[item.path as PATHS]}
href={listOfRedirects[item.path as PATHS]}
rel="noopener noreferrer"
target="_blank"
onClick={() =>
@@ -69,8 +94,8 @@ const Sidebar: FC<Props> = ({ modules = [] }) => {
<S.StyledNavLink
key={item.title}
exact={item.exact}
to={item.path}
onClick={event => onClickLink(event, item.path as PATHS, item.ymCode)}
to={itemPath}
onClick={event => onClickLink(event, itemPath as PATHS, item.ymCode)}
>
<SidebarItem icon={icon} isDesktop={isDesktop}>
{item.title}
+1
View File
@@ -66,6 +66,7 @@ const config: IWebpackAppConfig = {
pathRewrite: { '/msb-partner-check': '' },
},
{ context: ['/msb-accounts'], target: 'http://localhost:3006', changeOrigin: true, pathRewrite: { '/msb-accounts': '' } },
{ context: ['/msb-business-cards'], target: 'http://localhost:3011', changeOrigin: true, pathRewrite: { '/msb-business-cards': '' } },
{ context: ['/msb-treasury-deals'], target: 'http://localhost:3010', changeOrigin: true, pathRewrite: { '/msb-treasury-deals': '' } },
{
context: ['/api', '/.well-known'],