fix: rewrite tariff price calculation

This commit is contained in:
Skeris 2022-12-02 12:47:46 +03:00
parent c7e12e1668
commit 37c15047d4
9 changed files with 509 additions and 200 deletions

351
package-lock.json generated

@ -28,8 +28,10 @@
"@types/react-dom": "^18.0.6",
"dayjs": "^1.11.5",
"moment": "^2.29.4",
"numeral": "^2.0.6",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-numeral": "^1.1.1",
"react-router-dom": "^6.3.0",
"react-scripts": "^5.0.1",
"styled-components": "^5.3.5",
@ -6895,6 +6897,15 @@
"node": ">= 10"
}
},
"node_modules/create-react-class": {
"version": "15.7.0",
"resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz",
"integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==",
"dependencies": {
"loose-envify": "^1.3.1",
"object-assign": "^4.1.1"
}
},
"node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@ -7778,6 +7789,14 @@
"node": ">= 0.8"
}
},
"node_modules/encoding": {
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
"integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
"dependencies": {
"iconv-lite": "^0.6.2"
}
},
"node_modules/end-of-stream": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
@ -8906,6 +8925,34 @@
"bser": "2.1.1"
}
},
"node_modules/fbjs": {
"version": "0.8.18",
"resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.18.tgz",
"integrity": "sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==",
"dependencies": {
"core-js": "^1.0.0",
"isomorphic-fetch": "^2.1.1",
"loose-envify": "^1.0.0",
"object-assign": "^4.1.0",
"promise": "^7.1.1",
"setimmediate": "^1.0.5",
"ua-parser-js": "^0.7.30"
}
},
"node_modules/fbjs/node_modules/core-js": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
"integrity": "sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA==",
"deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js."
},
"node_modules/fbjs/node_modules/promise": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
"integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
"dependencies": {
"asap": "~2.0.3"
}
},
"node_modules/file-entry-cache": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
@ -10384,6 +10431,15 @@
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
},
"node_modules/isomorphic-fetch": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
"integrity": "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==",
"dependencies": {
"node-fetch": "^1.0.1",
"whatwg-fetch": ">=0.10.0"
}
},
"node_modules/istanbul-lib-coverage": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
@ -13283,6 +13339,23 @@
"tslib": "^2.0.3"
}
},
"node_modules/node-fetch": {
"version": "1.7.3",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
"integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
"dependencies": {
"encoding": "^0.1.11",
"is-stream": "^1.0.1"
}
},
"node_modules/node-fetch/node_modules/is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/node-forge": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
@ -13350,6 +13423,14 @@
"url": "https://github.com/fb55/nth-check?sponsor=1"
}
},
"node_modules/numeral": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz",
"integrity": "sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==",
"engines": {
"node": "*"
}
},
"node_modules/nwsapi": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz",
@ -13668,6 +13749,15 @@
"tslib": "^2.0.3"
}
},
"node_modules/path": {
"version": "0.12.7",
"resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
"integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==",
"dependencies": {
"process": "^0.11.1",
"util": "^0.10.3"
}
},
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@ -15095,6 +15185,14 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
"node_modules/process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
"integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
"engines": {
"node": ">= 0.6.0"
}
},
"node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@ -15449,6 +15547,37 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
},
"node_modules/react-numeral": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/react-numeral/-/react-numeral-1.1.1.tgz",
"integrity": "sha512-0s8F+kBaRiMOVgEtz45xvYgHtk2ff4FgJ4BNuXZUXRsfPGNNfrq+8zx/2NEc6jQHh2nXiz8ojng17/jNO3S38g==",
"dependencies": {
"@babel/core": "^7.14.3",
"@babel/preset-react": "^7.13.13",
"@rollup/plugin-babel": "^5.3.0",
"numeral": "^2.0.6",
"path": "^0.12.7",
"react": "^15.3.2",
"rimraf": "^3.0.2",
"rollup": "^2.50.5",
"rollup-plugin-babel": "^4.4.0"
}
},
"node_modules/react-numeral/node_modules/react": {
"version": "15.7.0",
"resolved": "https://registry.npmjs.org/react/-/react-15.7.0.tgz",
"integrity": "sha512-5/MMRYmpmM0sMTHGLossnJCrmXQIiJilD6y3YN3TzAwGFj6zdnMtFv6xmi65PHKRV+pehIHpT7oy67Sr6s9AHA==",
"dependencies": {
"create-react-class": "^15.6.0",
"fbjs": "^0.8.9",
"loose-envify": "^1.1.0",
"object-assign": "^4.1.0",
"prop-types": "^15.5.10"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/react-refresh": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz",
@ -15963,6 +16092,20 @@
"fsevents": "~2.3.2"
}
},
"node_modules/rollup-plugin-babel": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz",
"integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==",
"deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-babel.",
"dependencies": {
"@babel/helper-module-imports": "^7.0.0",
"rollup-pluginutils": "^2.8.1"
},
"peerDependencies": {
"@babel/core": "7 || ^7.0.0-rc.2",
"rollup": ">=0.60.0 <3"
}
},
"node_modules/rollup-plugin-terser": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz",
@ -16017,6 +16160,19 @@
"node": ">=8"
}
},
"node_modules/rollup-pluginutils": {
"version": "2.8.2",
"resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz",
"integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==",
"dependencies": {
"estree-walker": "^0.6.1"
}
},
"node_modules/rollup-pluginutils/node_modules/estree-walker": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz",
"integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w=="
},
"node_modules/run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@ -17310,6 +17466,24 @@
"node": ">=4.2.0"
}
},
"node_modules/ua-parser-js": {
"version": "0.7.32",
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz",
"integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==",
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/ua-parser-js"
},
{
"type": "paypal",
"url": "https://paypal.me/faisalman"
}
],
"engines": {
"node": "*"
}
},
"node_modules/unbox-primitive": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
@ -17495,6 +17669,14 @@
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
"node_modules/util": {
"version": "0.10.4",
"resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
"integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
"dependencies": {
"inherits": "2.0.3"
}
},
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@ -17514,6 +17696,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/util/node_modules/inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw=="
},
"node_modules/utila": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
@ -23272,6 +23459,15 @@
"readable-stream": "^3.4.0"
}
},
"create-react-class": {
"version": "15.7.0",
"resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.7.0.tgz",
"integrity": "sha512-QZv4sFWG9S5RUvkTYWbflxeZX+JG7Cz0Tn33rQBJ+WFQTqTfUTjMjiv9tnfXazjsO5r0KhPs+AqCjyrQX6h2ng==",
"requires": {
"loose-envify": "^1.3.1",
"object-assign": "^4.1.1"
}
},
"cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@ -23911,6 +24107,14 @@
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
},
"encoding": {
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
"integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
"requires": {
"iconv-lite": "^0.6.2"
}
},
"end-of-stream": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
@ -24747,6 +24951,35 @@
"bser": "2.1.1"
}
},
"fbjs": {
"version": "0.8.18",
"resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.18.tgz",
"integrity": "sha512-EQaWFK+fEPSoibjNy8IxUtaFOMXcWsY0JaVrQoZR9zC8N2Ygf9iDITPWjUTVIax95b6I742JFLqASHfsag/vKA==",
"requires": {
"core-js": "^1.0.0",
"isomorphic-fetch": "^2.1.1",
"loose-envify": "^1.0.0",
"object-assign": "^4.1.0",
"promise": "^7.1.1",
"setimmediate": "^1.0.5",
"ua-parser-js": "^0.7.30"
},
"dependencies": {
"core-js": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz",
"integrity": "sha512-ZiPp9pZlgxpWRu0M+YWbm6+aQ84XEfH1JRXvfOc/fILWI0VKhLC2LX13X1NYq4fULzLMq7Hfh43CSo2/aIaUPA=="
},
"promise": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
"integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
"requires": {
"asap": "~2.0.3"
}
}
}
},
"file-entry-cache": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
@ -25779,6 +26012,15 @@
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
},
"isomorphic-fetch": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz",
"integrity": "sha512-9c4TNAKYXM5PRyVcwUZrF3W09nQ+sO7+jydgs4ZGW9dhsLG2VOlISJABombdQqQRXCwuYG3sYV/puGf5rp0qmA==",
"requires": {
"node-fetch": "^1.0.1",
"whatwg-fetch": ">=0.10.0"
}
},
"istanbul-lib-coverage": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
@ -27967,6 +28209,22 @@
"tslib": "^2.0.3"
}
},
"node-fetch": {
"version": "1.7.3",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
"integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
"requires": {
"encoding": "^0.1.11",
"is-stream": "^1.0.1"
},
"dependencies": {
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ=="
}
}
},
"node-forge": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz",
@ -28013,6 +28271,11 @@
"boolbase": "^1.0.0"
}
},
"numeral": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz",
"integrity": "sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA=="
},
"nwsapi": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz",
@ -28238,6 +28501,15 @@
"tslib": "^2.0.3"
}
},
"path": {
"version": "0.12.7",
"resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
"integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==",
"requires": {
"process": "^0.11.1",
"util": "^0.10.3"
}
},
"path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@ -29079,6 +29351,11 @@
}
}
},
"process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
"integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A=="
},
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
@ -29345,6 +29622,36 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
"integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
},
"react-numeral": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/react-numeral/-/react-numeral-1.1.1.tgz",
"integrity": "sha512-0s8F+kBaRiMOVgEtz45xvYgHtk2ff4FgJ4BNuXZUXRsfPGNNfrq+8zx/2NEc6jQHh2nXiz8ojng17/jNO3S38g==",
"requires": {
"@babel/core": "^7.14.3",
"@babel/preset-react": "^7.13.13",
"@rollup/plugin-babel": "^5.3.0",
"numeral": "^2.0.6",
"path": "^0.12.7",
"react": "^15.3.2",
"rimraf": "^3.0.2",
"rollup": "^2.50.5",
"rollup-plugin-babel": "^4.4.0"
},
"dependencies": {
"react": {
"version": "15.7.0",
"resolved": "https://registry.npmjs.org/react/-/react-15.7.0.tgz",
"integrity": "sha512-5/MMRYmpmM0sMTHGLossnJCrmXQIiJilD6y3YN3TzAwGFj6zdnMtFv6xmi65PHKRV+pehIHpT7oy67Sr6s9AHA==",
"requires": {
"create-react-class": "^15.6.0",
"fbjs": "^0.8.9",
"loose-envify": "^1.1.0",
"object-assign": "^4.1.0",
"prop-types": "^15.5.10"
}
}
}
},
"react-refresh": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz",
@ -29723,6 +30030,15 @@
"fsevents": "~2.3.2"
}
},
"rollup-plugin-babel": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz",
"integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==",
"requires": {
"@babel/helper-module-imports": "^7.0.0",
"rollup-pluginutils": "^2.8.1"
}
},
"rollup-plugin-terser": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz",
@ -29767,6 +30083,21 @@
}
}
},
"rollup-pluginutils": {
"version": "2.8.2",
"resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz",
"integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==",
"requires": {
"estree-walker": "^0.6.1"
},
"dependencies": {
"estree-walker": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz",
"integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w=="
}
}
},
"run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@ -30734,6 +31065,11 @@
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz",
"integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw=="
},
"ua-parser-js": {
"version": "0.7.32",
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz",
"integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw=="
},
"unbox-primitive": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
@ -30875,6 +31211,21 @@
"integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
"requires": {}
},
"util": {
"version": "0.10.4",
"resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
"integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
"requires": {
"inherits": "2.0.3"
},
"dependencies": {
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw=="
}
}
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",

@ -23,8 +23,10 @@
"@types/react-dom": "^18.0.6",
"dayjs": "^1.11.5",
"moment": "^2.29.4",
"numeral": "^2.0.6",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-numeral": "^1.1.1",
"react-router-dom": "^6.3.0",
"react-scripts": "^5.0.1",
"styled-components": "^5.3.5",

@ -92,7 +92,7 @@ const rows:Array<DiscountProps> = [
good: "Товар 2",
discount: 0.2
}
], active: false, basketMore: 10, toTime: 20, toCapacity: 30 },
], active: false,incomeMore:1, basketMore: 10, toTime: 20, toCapacity: 30 },
{ id: 2, name: "Скидка 2", endless: false, from: "", dueTo: "", privileges: [
{
good: "Товар 3",
@ -102,7 +102,7 @@ const rows:Array<DiscountProps> = [
good: "Товар 4",
discount: 0.2
}
], active: true, basketMore: 10, toTime: 20, toCapacity: 30 },
], active: true,incomeMore:1, basketMore: 10, toTime: 20, toCapacity: 30 },
{ id: 3, name: "Скидка 3", endless: false, from: "", dueTo: "", privileges: [
{
good: "Товар 5",
@ -112,7 +112,7 @@ const rows:Array<DiscountProps> = [
good: "Товар 6",
discount: 0.2
}
], active: false, basketMore: 10, toTime: 20, toCapacity: 30 },
], active: false, incomeMore: 1, basketMore: 10, toTime: 20, toCapacity: 30 },
];
const Discounts: React.FC = () => {
@ -193,6 +193,7 @@ const Discounts: React.FC = () => {
id: new Date().getTime(),
name,
endless: checkboxState,
incomeMore: addedMore,
from: checkboxState ? "" : new Date( value1 ).getTime() +"",
dueTo: checkboxState ? "" : new Date( value2 ).getTime() +"",
privileges: [{
@ -690,4 +691,4 @@ const Discounts: React.FC = () => {
}
export default Discounts;
export default Discounts;

@ -12,6 +12,7 @@ export interface DiscountProps {
privileges: Array<PrivilegesProps>
active: boolean
basketMore: number
incomeMore: number
toTime: number
toCapacity: number
}
}

@ -243,7 +243,7 @@ const Promocode: React.FC = () => {
}
}}
>
<MenuItem value={"Шаблонизатор"}>Шаблонизатор</MenuItem>
<MenuItem value={"Шаблонизатор документов"}>Шаблонизатор</MenuItem>
<MenuItem value={"Опросник"}>Опросник</MenuItem>
<MenuItem value={"Аналитика сокращателя"}>Аналитика сокращателя</MenuItem>
<MenuItem value={"АБ тесты"}>АБ тесты</MenuItem>
@ -448,4 +448,4 @@ const Promocode: React.FC = () => {
}
export default Promocode;
export default Promocode;

@ -3,7 +3,7 @@ import { Box, Button, Typography, TextField } from "@mui/material";
import { DataGrid, GridColDef, GridSelectionModel, GridToolbar } from "@mui/x-data-grid";
import { useDemoData } from "@mui/x-data-grid-generator";
import useStore, { StoreState } from "../../../../../store";
import { ArrayProps } from "../types";
import { ArrayProps, CartSummary } from "../types";
import List from "@mui/material/List";
import ListItem from "@mui/material/ListItem";
import ListItemAvatar from "@mui/material/ListItemAvatar";
@ -18,7 +18,6 @@ import { PrivilegesProps, PromocodeProps } from "../../Promocode/types";
import { DiscountProps } from "../../Discounts/types";
import theme from "../../../../../theme";
export interface MWProps {
openModal: () => void
}
@ -119,13 +118,7 @@ const DataGridElement: React.FC<MWProps> = ({ openModal }) => {
const { discountsArray, discountsArraySet } = useStore<StoreState>((state) => state);
const { discountsActiveArray, discountsActiveArraySet } = useStore<StoreState>((state) => state);
const [checkboxStates, setCheckboxStates] = React.useState(1);
const checkboxToggle = () => {
checkboxStates == 1
? setCheckboxStates( 0.2 )
: setCheckboxStates( 1 )
}
const [nonCommercial, setNonCommercial] = React.useState(false);
const { data } = useDemoData({
dataSet: "Commodity",
@ -138,9 +131,9 @@ const DataGridElement: React.FC<MWProps> = ({ openModal }) => {
if( item.type === "package" && item.tariffs ) {
const result = item.tariffs.reduce( (acc, tariff) => {
acc.service = acc.service? `${acc.service}, ${tariff.service}` : tariff.service;
acc.disk = acc.disk? `${acc.disk}, ${tariff.disk}` : tariff.disk;
acc.time = acc.time? `${acc.time}, ${tariff.time}` : tariff.time;
acc.points = acc.points? `${acc.points}, ${tariff.points}` : tariff.points;
acc.disk = acc.disk+ tariff.disk;
acc.time = acc.time+ tariff.time;
acc.points = acc.points + tariff.points;
acc.price = acc.price + tariff.price;
return acc;
@ -205,28 +198,9 @@ const DataGridElement: React.FC<MWProps> = ({ openModal }) => {
}
};
const discountTime = ( days:string ) => {
if( parseInt(days) > 30 ) { return 0.01; }
if( parseInt(days) > 60 ) { return 0.03; }
if( parseInt(days) > 90 ) { return 0.05; }
return 0;
}
const discountCapacity = ( generations:string ) => {
if( parseInt(generations) > 100 ) { return 0.01; }
if( parseInt(generations) > 300 ) { return 0.03; }
if( parseInt(generations) > 600 ) { return 0.06; }
return 0;
}
const discountProduct = ( days:string, generations:string ) => {
if( parseInt(days) > 30 && parseInt(generations) > 100 ) { return 0.02; }
if( parseInt(days) > 60 && parseInt(generations) > 300 ) { return 0.03; }
if( parseInt(days) > 90 && parseInt(generations) > 600 ) { return 0.04; }
return 0;
}
const separator = (amount: number) => {
console.log(amount)
if( String(amount).length < 4 ) { return amount; }
let result:Array<string> = [];
@ -243,45 +217,85 @@ const DataGridElement: React.FC<MWProps> = ({ openModal }) => {
}
const cartSummary = new Map()
cartRowsData.forEach((row) => {
const svcName = row.service.split(" ")[0]
const prev = cartSummary.get(svcName)
console.log(row)
console.log(prev)
if (!prev) {
cartSummary.set(svcName, {
mbs: row.disk,
points: row.points,
days: row.time,
})
} else {
cartSummary.set(svcName, {
mbs: row.disk+prev.mbs,
points: row.points+prev.points,
days: row.time+prev.days,
})
}
})
console.log(cartSummary)
const fitDiscounts = discountsActiveArray.filter(e => {
const d = discountsArray[e]
const summary = cartSummary.get(d.privileges[0].good.split(' ')[0])
return d.incomeMore*100 < parseInt(fieldAddedValue) && d.incomeMore > 0 ||
d.toTime < (summary ? summary.days : 0) && d.toTime > 0 && d.toCapacity === 0 ||
d.toCapacity > 0 && d.toCapacity < (summary ? summary.points : 0) && d.toTime === 0 ||
d.toCapacity > 0 && d.toTime > 0 && d.toCapacity < (summary ? summary.points : 0) && d.toTime < (summary ? summary.days : 0) ||
!d.toCapacity && !d.toTime && !d.incomeMore && !d.basketMore ||
d.basketMore
}).filter((e,i,a)=>{
const d = discountsArray[e]
if (d.incomeMore) {
return d.incomeMore === a.reduce((a, e) => Math.max(a, discountsArray[e].incomeMore || 0), 0 )
}
if (d.toTime && d.toCapacity) {
return d.toTime === a.reduce((a, e) => Math.max(a, (discountsArray[e].toTime && discountsArray[e].toCapacity) ? discountsArray[e].toTime:0 ), 0 ) && d.toCapacity === a.reduce((a, e) => Math.max(a, (discountsArray[e].toCapacity && discountsArray[e].toTime) ? discountsArray[e].toCapacity : 0 ), 0 )
}
if (d.toTime && !d.toCapacity) {
return d.toTime === a.reduce((a, e) => Math.max(a, discountsArray[e].toTime && !discountsArray[e].toCapacity ? discountsArray[e].toTime : 0), 0 )
}
if (!d.toTime && d.toCapacity) {
return d.toCapacity === a.reduce((a, e) => Math.max(a, discountsArray[e].toCapacity && !discountsArray[e].toTime ? discountsArray[e].toCapacity : 0), 0 )
}
return true
})
console.log(fitDiscounts)
const discountsAfter = ( getPrice:number ) => {
discountsSum = "";
const discounts:Array<number> = [];
priceBefore = getPrice;
// применяем активные скидки за объем корзины
let more = 0;
let moreI = -1;
prices = getPrice;
console.log(getPrice)
if( discountsActiveArray.length >= 0 && checkboxStates == 1 && selectedPromocode < 0 ) {
discountsActiveArray.forEach( (activeDiscount) => {
discountsArray.forEach( (discount, i) => {
if( i == activeDiscount && discount.basketMore ) {
if( more <= discount.basketMore ) {
more = discount.basketMore;
moreI = i;
}
}
});
// применяем активные скидки за объем корзины
if( fitDiscounts.length >= 0 && !nonCommercial && selectedPromocode < 0 ) {
fitDiscounts.forEach( (activeDiscount) => {
const d = discountsArray[activeDiscount]
console.log(d)
console.log(fieldAddedValue)
if (d.basketMore > 0 && getPrice > d.basketMore && d.basketMore === fitDiscounts.reduce((a,e) => Math.max(a, discountsArray[e].basketMore), 0) ||
d.incomeMore > 0 && parseInt(fieldAddedValue) > d.incomeMore) {
prices *= (1-d.privileges[0].discount)
discounts.push(d.privileges[0].discount)
}
});
}
if( moreI >= 0 ) {
getPrice = getPrice - getPrice * discountsArray[ moreI ].basketMore;
if( discountsSum ) { discountsSum += " × "; }
discountsSum += `${ Math.round(discountsArray[ moreI ].basketMore * 100) }%`;
if( nonCommercial ) {
prices *= 0.2
return `80%`;
}
if( checkboxStates != 1 ) {
getPrice = getPrice - getPrice * checkboxStates;
discountsSum += `${ Math.round(checkboxStates * 100) }%`;
}
prices = getPrice;
if(discountsSum) discountsSum += " = " + Math.round(prices / priceBefore * 100) +"%";
return discountsSum;
return discounts.map(e => `${(e*100).toFixed(2)}%`).join(' × ') + ` = ${(100 - discounts.reduce((a : number,cv : number) => a*(1-cv), 100)) .toFixed(2)}%`;
}
return (
<Box style={{ width: "100%" }}>
<Box style={{ height: 400 }}>
@ -475,7 +489,7 @@ const DataGridElement: React.FC<MWProps> = ({ openModal }) => {
"&.Mui-checked": {
color: theme.palette.secondary.main,
},
}} onClick={ () => checkboxToggle() } />
}} onClick={ () => setNonCommercial(!nonCommercial) } />
} label="НКО" />
<TextField
@ -535,7 +549,11 @@ const DataGridElement: React.FC<MWProps> = ({ openModal }) => {
</IconButton>
</ListItem>
{ cartRowsData.map( (item) => {
{ cartRowsData.map( (item) => {
price = item.price
const appliedDscnts: number[] = [];
if (!nonCommercial) {
if( item.type == "package" ) {
// считаем цену в ПАКЕТАХ
price = 0;
@ -548,7 +566,7 @@ const DataGridElement: React.FC<MWProps> = ({ openModal }) => {
percents = 0;
// применяем скидки по промокоду
if( selectedPromocode >= 0 && checkboxStates == 1 ) {
if( selectedPromocode >= 0 ) {
promocodeArray[ selectedPromocode ].privileges.forEach( (privilege) => {
if( tariff.service == privilege.good ) {
percents = percents + privilege.discount;
@ -560,7 +578,7 @@ const DataGridElement: React.FC<MWProps> = ({ openModal }) => {
}
// применяем активные скидки
if( discountsActiveArray.length >= 0 && checkboxStates == 1 && selectedPromocode < 0 ) {
if( discountsActiveArray.length >= 0 && selectedPromocode < 0 ) {
discountsActiveArray.forEach( (activeDiscount) => {
discountsArray.forEach( (discount, i) => {
if( i == activeDiscount ) {
@ -596,7 +614,7 @@ const DataGridElement: React.FC<MWProps> = ({ openModal }) => {
percents = percents + privilege.discount;
if( discounts ) { discounts += " × "; }
discounts += `${ Math.round(privilege.discount * 100) }%`;
discounts += `${ Math.round(privilege.discount * 100) }% `;
}
}
@ -607,25 +625,25 @@ const DataGridElement: React.FC<MWProps> = ({ openModal }) => {
});
}
// применяем активные скидки по времени / объему
if( discountsActiveArray.length >= 0 && checkboxStates == 1 && selectedPromocode < 0 ) {
// применяем активные скидки по времени объему
if( discountsActiveArray.length >= 0 && selectedPromocode < 0 ) {
discountsActiveArray.forEach( (activeDiscount) => {
discountsArray.forEach( (discount, i) => {
if( i == activeDiscount ) {
if( tariff.time ) {
const dTime = discountTime( tariff.time );
const dTime = 0.1;
percents = percents + dTime;
if( discounts ) discounts += " × ";
if( dTime != 0 ) discounts += `${ Math.round(dTime * 100) }%`;
//if( dTime != 0.0 ) discounts += `${ Math.round(dTime * 100) }%`;
}
if( tariff.points ) {
const cTime = discountCapacity( tariff.points );
percents = percents + cTime;
//const cTime = discountCapacity( tariff.points );
//percents = percents + cTime;
if( discounts ) discounts += " × ";
if( cTime != 0 ) discounts += `${ Math.round(cTime * 100) }%`;
//if( discounts ) discounts += " × ";
//if( cTime != 0 ) discounts += `${ Math.round(cTime * 100) }%`;
}
}
});
@ -633,16 +651,16 @@ const DataGridElement: React.FC<MWProps> = ({ openModal }) => {
}
// применяем активные скидки на продукт
if( discountsActiveArray.length >= 0 && checkboxStates == 1 && selectedPromocode < 0 ) {
if( discountsActiveArray.length >= 0 && selectedPromocode < 0 ) {
discountsActiveArray.forEach( (activeDiscount) => {
discountsArray.forEach( (discount, i) => {
if( i == activeDiscount ) {
if( tariff.time && tariff.points ) {
const dProduct = discountProduct( tariff.time, tariff.points );
percents = percents + dProduct;
//const dProduct = discountProduct( tariff.time, tariff.points );
//percents = percents + dProduct;
if( discounts ) discounts += " × ";
if( dProduct != 0 ) discounts += `${ Math.round(dProduct * 100) }%`;
//if( discounts ) discounts += " × ";
//if( dProduct != 0 ) discounts += `${ Math.round(dProduct * 100) }%`;
}
}
});
@ -664,118 +682,48 @@ const DataGridElement: React.FC<MWProps> = ({ openModal }) => {
discounts = "";
// применяем скидки по промокоду
if( selectedPromocode >= 0 && checkboxStates == 1 ) {
if( selectedPromocode >= 0 ) {
promocodeArray[ selectedPromocode ].privileges.forEach( (privilege) => {
console.log(item.service)
console.log(privilege.good)
if( item.service == privilege.good ) {
percents = percents + privilege.discount
if( discounts ) { discounts += " × "; }
discounts += `${ Math.round(privilege.discount * 100) }%`;
}
appliedDscnts.push(privilege.discount)
price *= (1 - privilege.discount)
}
} )
}
} else {
// применяем активные скидки
if( fitDiscounts.length >= 0 ) {
fitDiscounts.forEach( (activeDiscount) => {
const discount = discountsArray[activeDiscount]
discount.privileges.forEach((p) => {
const svcName = item.service.split(' ')[0]
if (p.good == svcName) {
const summary = cartSummary.get(svcName) || {mbs:0,points:0,days:0}
if (discount.toCapacity === 0 && discount.toTime === 0 && discount.basketMore === 0 && !(discount.incomeMore) ||
discount.toCapacity > 0 && summary.points > discount.toCapacity && item.points > 0 && discount.toTime == 0
|| discount.toTime >0 && summary.days > discount.toTime*100 && item.time > 0 && discount.toCapacity == 0 ||
discount.toTime > 0 && discount.toCapacity > 0 && summary.days > discount.toTime*100 && summary.points > discount.toCapacity ){
price *= (1-p.discount)
appliedDscnts.push(p.discount)
}
// применяем активные скидки
if( discountsActiveArray.length >= 0 && checkboxStates == 1 && selectedPromocode < 0 ) {
discountsActiveArray.forEach( (activeDiscount) => {
discountsArray.forEach( (discount, i) => {
if( i == activeDiscount ) {
discount.privileges.forEach( (privilege) => {
if( privilege.discount != 0 ) {
if( fieldAddedValue ) { // внесено
const f = Number(fieldAddedValue);
let minDiscount = 100;
let minI = -1;
discountsArray.forEach( (x, ii) => {
x.privileges.forEach( (y) => {
if( x.active && f - y.discount * 100 < minDiscount
&& f - y.discount * 100 > 0 ) {
minDiscount = f - Math.round(y.discount * 100);
minI = ii;
}
});
});
if( minI >= 0 ) {
discountsArray[ minI ].privileges.forEach( (y) => {
percents = percents + y.discount / discountsActiveArray.length; // костыль
if( discounts ) { discounts += " × "; }
discounts += `${ Math.round(y.discount / discountsActiveArray.length * 100) }%`;
});
}
} else { // не внесено
if( item.service == privilege.good ) {
percents = percents + privilege.discount;
if( discounts ) { discounts += " × "; }
discounts += `${ Math.round(privilege.discount * 100) }%`;
}
}
}
});
}
});
});
}
// применяем активные скидки по времени / объему
if( discountsActiveArray.length >= 0 && checkboxStates == 1 && selectedPromocode < 0 ) {
discountsActiveArray.forEach( (activeDiscount) => {
discountsArray.forEach( (discount, i) => {
if( i == activeDiscount ) {
if( item.time ) {
const dTime = discountTime( item.time );
percents = percents + dTime;
if( discounts ) discounts += " × ";
if( dTime != 0 ) discounts += `${ Math.round(dTime * 100) }%`;
}
if( item.points ) {
const cTime = discountCapacity( item.points );
percents = percents + cTime;
if( discounts ) discounts += " × ";
if( cTime != 0 ) discounts += `${ Math.round(cTime * 100) }%`;
}
}
})
});
});
}
}
// применяем активные скидки на продукт
if( discountsActiveArray.length >= 0 && checkboxStates == 1 && selectedPromocode < 0 ) {
discountsActiveArray.forEach( (activeDiscount) => {
discountsArray.forEach( (discount, i) => {
if( i == activeDiscount ) {
if( item.time && item.points ) {
const dProduct = discountProduct( item.time, item.points );
percents = percents + dProduct;
if( discounts ) discounts += " × ";
if( dProduct != 0 ) discounts += `${ Math.round(dProduct * 100) }%`;
}
}
});
});
}
percents = Number( percents.toFixed(2) );
priceBefore = price;
price = price - (price * percents);
}
}
prices += price;
if(discounts) discounts += " = " + Math.round(price / priceBefore * 100) +"%";
return(
<ListItem key={ item.id }>
<ListItemAvatar>
@ -794,7 +742,7 @@ const DataGridElement: React.FC<MWProps> = ({ openModal }) => {
sx={{ textAlign: "center", minWidth: "200px", maxWidth: "200px" }}
/>
<ListItemText
primary={ discounts }
primary={ `${(appliedDscnts.map(e=>(e*100).toFixed(2)).join(' × '))} = ${(100 - appliedDscnts.reduce((a : number,cv : number) => a*(1-cv), 100)).toFixed(2)}%` }
sx={{ textAlign: "center", minWidth: "400px", maxWidth: "400px" }}
/>
<IconButton edge="end" aria-label="delete" onClick={ () => handleRemoveBasket( item.id ) }>
@ -831,4 +779,4 @@ const DataGridElement: React.FC<MWProps> = ({ openModal }) => {
);
}
export default DataGridElement;
export default DataGridElement;

@ -30,11 +30,11 @@ const ModalMini = ({open, type, variant, close}: MWProps ) => {
if( getData != null ) { tariffsArray = JSON.parse(getData); }
const data = [ "", "", "" ];
const data = [ 0, 0, 0 ];
if( variant == 0 ) { data[ 0 ] = fieldTime.current.value; }
if( variant == 1 ) { data[ 1 ] = fieldTime.current.value; }
if( variant == 2 ) { data[ 2 ] = fieldTime.current.value; }
if( variant == 0 ) { data[ 0 ] = parseInt(fieldTime.current.value); }
if( variant == 1 ) { data[ 1 ] = parseInt(fieldTime.current.value); }
if( variant == 2 ) { data[ 2 ] = parseInt(fieldTime.current.value); }
const tariffsArrayNew = [...tariffsArray, {
"id": new Date().getTime(),

@ -62,9 +62,9 @@ const Tariffs: React.FC = () => {
type: "package",
tariffs: uniqueArray,
service: "",
disk: "",
time: "",
points: "",
disk: 0,
time: 0,
points: 0,
price: 0
}
@ -94,4 +94,4 @@ const Tariffs: React.FC = () => {
}
export default Tariffs;
export default Tariffs;

@ -3,9 +3,9 @@ export interface Tariff {
name: string
type: string
service: string
disk: string
time: string
points: string
disk: number
time: number
points: number
price: number
}
@ -14,9 +14,15 @@ export interface ArrayProps {
name: string
type: string
service: string
disk: string
time: string
points: string
disk: number
time: number
points: number
price: number
tariffs?: Array<Tariff>
}
}
export interface CartSummary {
mbs: number
points: number
days: number
}