diff --git a/package-lock.json b/package-lock.json index dff7457..d886940 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", - "antd": "^4.15.2", + "antd": "^4.24.16", "react": "^18.3.1", "react-dom": "^18.3.1", "react-redux": "^9.1.1", @@ -94,15 +94,15 @@ "integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==" }, "node_modules/@ant-design/react-slick": { - "version": "0.28.4", - "resolved": "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-0.28.4.tgz", - "integrity": "sha512-j9eAHTn7GxbXUFNknJoHS2ceAsqrQi2j8XykjZE1IXCD8kJF+t28EvhBLniDpbOsBk/3kjalnhriTfZcjBHNqg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-1.0.2.tgz", + "integrity": "sha512-Wj8onxL/T8KQLFFiCA4t8eIRGpRR+UPgOdac2sYzonv+i0n3kXHmvHLLiOYL655DQx2Umii9Y9nNgL7ssu5haQ==", "dependencies": { "@babel/runtime": "^7.10.4", "classnames": "^2.2.5", "json2mq": "^0.2.0", - "lodash": "^4.17.21", - "resize-observer-polyfill": "^1.5.0" + "resize-observer-polyfill": "^1.5.1", + "throttle-debounce": "^5.0.0" }, "peerDependencies": { "react": ">=16.9.0" @@ -3657,6 +3657,23 @@ } } }, + "node_modules/@rc-component/portal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rc-component/portal/-/portal-1.1.2.tgz", + "integrity": "sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==", + "dependencies": { + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "rc-util": "^5.24.4" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, "node_modules/@rollup/plugin-babel": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", @@ -5462,52 +5479,53 @@ } }, "node_modules/antd": { - "version": "4.15.2", - "resolved": "https://registry.npmjs.org/antd/-/antd-4.15.2.tgz", - "integrity": "sha512-9IwlR022xSQrG+iJG8d7adSo9gy4n7AuS5x0/OxDi/V3CYSTTfaE24jp1wnmgmXOVAT/77Llg9OEbKcSyFim2g==", + "version": "4.24.16", + "resolved": "https://registry.npmjs.org/antd/-/antd-4.24.16.tgz", + "integrity": "sha512-zZrK4UYxHtU6tGOOf0uG/kBRx1kTvypfuSB3GqE/SBQxFhZ/TZ+yj7Z1qwI8vGfMtUUJdLeuoCAqGDa1zPsXnQ==", "dependencies": { "@ant-design/colors": "^6.0.0", - "@ant-design/icons": "^4.6.2", - "@ant-design/react-slick": "~0.28.1", - "@babel/runtime": "^7.12.5", - "array-tree-filter": "^2.1.0", + "@ant-design/icons": "^4.8.2", + "@ant-design/react-slick": "~1.0.2", + "@babel/runtime": "^7.18.3", + "@ctrl/tinycolor": "^3.6.1", "classnames": "^2.2.6", "copy-to-clipboard": "^3.2.0", "lodash": "^4.17.21", - "moment": "^2.25.3", - "rc-cascader": "~1.4.0", - "rc-checkbox": "~2.3.0", - "rc-collapse": "~3.1.0", - "rc-dialog": "~8.5.1", - "rc-drawer": "~4.3.0", - "rc-dropdown": "~3.2.0", - "rc-field-form": "~1.20.0", - "rc-image": "~5.2.4", - "rc-input-number": "~7.0.1", - "rc-mentions": "~1.5.0", - "rc-menu": "~8.10.0", - "rc-motion": "^2.4.0", - "rc-notification": "~4.5.2", - "rc-pagination": "~3.1.6", - "rc-picker": "~2.5.10", - "rc-progress": "~3.1.0", - "rc-rate": "~2.9.0", - "rc-resize-observer": "^1.0.0", - "rc-select": "~12.1.6", - "rc-slider": "~9.7.1", - "rc-steps": "~4.1.0", - "rc-switch": "~3.2.0", - "rc-table": "~7.13.0", - "rc-tabs": "~11.7.0", - "rc-textarea": "~0.3.0", - "rc-tooltip": "~5.1.0", - "rc-tree": "~4.1.0", - "rc-tree-select": "~4.3.0", - "rc-trigger": "^5.2.1", - "rc-upload": "~4.2.0-alpha.0", - "rc-util": "^5.9.4", - "scroll-into-view-if-needed": "^2.2.25", - "warning": "^4.0.3" + "moment": "^2.29.2", + "rc-cascader": "~3.7.3", + "rc-checkbox": "~3.0.1", + "rc-collapse": "~3.4.2", + "rc-dialog": "~9.0.2", + "rc-drawer": "~6.3.0", + "rc-dropdown": "~4.0.1", + "rc-field-form": "~1.38.2", + "rc-image": "~5.13.0", + "rc-input": "~0.1.4", + "rc-input-number": "~7.3.11", + "rc-mentions": "~1.13.1", + "rc-menu": "~9.8.4", + "rc-motion": "^2.9.0", + "rc-notification": "~4.6.1", + "rc-pagination": "~3.2.0", + "rc-picker": "~2.7.6", + "rc-progress": "~3.4.2", + "rc-rate": "~2.9.3", + "rc-resize-observer": "^1.3.1", + "rc-segmented": "~2.3.0", + "rc-select": "~14.1.18", + "rc-slider": "~10.0.1", + "rc-steps": "~5.0.0", + "rc-switch": "~3.2.2", + "rc-table": "~7.26.0", + "rc-tabs": "~12.5.10", + "rc-textarea": "~0.4.7", + "rc-tooltip": "~5.2.2", + "rc-tree": "~5.7.12", + "rc-tree-select": "~5.5.5", + "rc-trigger": "^5.3.4", + "rc-upload": "~4.3.6", + "rc-util": "^5.37.0", + "scroll-into-view-if-needed": "^2.2.25" }, "funding": { "type": "opencollective", @@ -5760,9 +5778,9 @@ "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" }, "node_modules/async-validator": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-3.5.2.tgz", - "integrity": "sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ==" + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" }, "node_modules/asynckit": { "version": "0.4.0", @@ -7323,9 +7341,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + "version": "1.11.11", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", + "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==" }, "node_modules/debug": { "version": "4.3.4", @@ -9665,19 +9683,6 @@ "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==", "dev": true }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/hoopy": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", @@ -13225,19 +13230,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/mini-store": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/mini-store/-/mini-store-3.0.6.tgz", - "integrity": "sha512-YzffKHbYsMQGUWQRKdsearR79QsMzzJcDDmZKlJBqt5JNkqpyJHYlK6gP61O36X+sLf76sO9G6mhKBe83gIZIQ==", - "dependencies": { - "hoist-non-react-statics": "^3.3.2", - "shallowequal": "^1.0.2" - }, - "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" - } - }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -15649,15 +15641,16 @@ } }, "node_modules/rc-cascader": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-1.4.3.tgz", - "integrity": "sha512-Q4l9Mv8aaISJ+giVnM9IaXxDeMqHUGLvi4F+LksS6pHlaKlN4awop/L+IMjIXpL+ug/ojaCyv/ixcVopJYYCVA==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.7.3.tgz", + "integrity": "sha512-KBpT+kzhxDW+hxPiNk4zaKa99+Lie2/8nnI11XF+FIOPl4Bj9VlFZi61GrnWzhLGA7VEN+dTxAkNOjkySDa0dA==", "dependencies": { "@babel/runtime": "^7.12.5", "array-tree-filter": "^2.1.0", - "rc-trigger": "^5.0.4", - "rc-util": "^5.0.1", - "warning": "^4.0.1" + "classnames": "^2.3.1", + "rc-select": "~14.1.0", + "rc-tree": "~5.7.0", + "rc-util": "^5.6.1" }, "peerDependencies": { "react": ">=16.9.0", @@ -15665,12 +15658,13 @@ } }, "node_modules/rc-checkbox": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-2.3.2.tgz", - "integrity": "sha512-afVi1FYiGv1U0JlpNH/UaEXdh6WUJjcWokj/nUN2TgG80bfG+MDdbfHKlLcNNba94mbjy2/SXJ1HDgrOkXGAjg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-3.0.1.tgz", + "integrity": "sha512-k7nxDWxYF+jDI0ZcCvuvj71xONmWRVe5+1MKcERRR9MRyP3tZ69b+yUCSXXh+sik4/Hc9P5wHr2nnUoGS2zBjA==", "dependencies": { "@babel/runtime": "^7.10.1", - "classnames": "^2.2.1" + "classnames": "^2.3.2", + "rc-util": "^5.25.2" }, "peerDependencies": { "react": ">=16.9.0", @@ -15678,9 +15672,9 @@ } }, "node_modules/rc-collapse": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-3.1.4.tgz", - "integrity": "sha512-WayrhswKMwuJab9xbqFxXTgV0m6X8uOPEO6zm/GJ5YJiJ/wIh/Dd2VtWeI06HYUEnTFv0HNcYv+zWbB+p6OD2A==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-3.4.2.tgz", + "integrity": "sha512-jpTwLgJzkhAgp2Wpi3xmbTbbYExg6fkptL67Uu5LCRVEj6wqmy0DHTjjeynsjOLsppHGHu41t1ELntZ0lEvS/Q==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", @@ -15694,14 +15688,15 @@ } }, "node_modules/rc-dialog": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-8.5.3.tgz", - "integrity": "sha512-zoamT8L6+rBwnwjPlrZRxiHCHQXrTcWZD3a6ruoqEdUKP1KgO0eSjMDH9WlF3WEPYMVnb2G5SrjHrhnwgPDu5w==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-9.0.2.tgz", + "integrity": "sha512-s3U+24xWUuB6Bn2Lk/Qt6rufy+uT+QvWkiFhNBcO9APLxcFFczWamaq7x9h8SCuhfc1nHcW4y8NbMsnAjNnWyg==", "dependencies": { "@babel/runtime": "^7.10.1", + "@rc-component/portal": "^1.0.0-8", "classnames": "^2.2.6", "rc-motion": "^2.3.0", - "rc-util": "^5.6.1" + "rc-util": "^5.21.0" }, "peerDependencies": { "react": ">=16.9.0", @@ -15709,13 +15704,15 @@ } }, "node_modules/rc-drawer": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-4.3.1.tgz", - "integrity": "sha512-GMfFy4maqxS9faYXEhQ+0cA1xtkddEQzraf6SAdzWbn444DrrLogwYPk1NXSpdXjLCLxgxOj9MYtyYG42JsfXg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-6.3.0.tgz", + "integrity": "sha512-uBZVb3xTAR+dBV53d/bUhTctCw3pwcwJoM7g5aX+7vgwt2zzVzoJ6aqFjYJpBlZ9zp0dVYN8fV+hykFE7c4lig==", "dependencies": { "@babel/runtime": "^7.10.1", + "@rc-component/portal": "^1.1.1", "classnames": "^2.2.6", - "rc-util": "^5.7.0" + "rc-motion": "^2.6.1", + "rc-util": "^5.21.2" }, "peerDependencies": { "react": ">=16.9.0", @@ -15723,44 +15720,47 @@ } }, "node_modules/rc-dropdown": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-3.2.5.tgz", - "integrity": "sha512-dVO2eulOSbEf+F4OyhCY5iGiMVhUYY/qeXxL7Ex2jDBt/xc89jU07mNoowV6aWxwVOc70pxEINff0oM2ogjluA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-4.0.1.tgz", + "integrity": "sha512-OdpXuOcme1rm45cR0Jzgfl1otzmU4vuBVb+etXM8vcaULGokAKVpKlw8p6xzspG7jGd/XxShvq+N3VNEfk/l5g==", "dependencies": { - "@babel/runtime": "^7.10.1", + "@babel/runtime": "^7.18.3", "classnames": "^2.2.6", - "rc-trigger": "^5.0.4" + "rc-trigger": "^5.3.1", + "rc-util": "^5.17.0" }, "peerDependencies": { - "react": "*", - "react-dom": "*" + "react": ">=16.11.0", + "react-dom": ">=16.11.0" } }, "node_modules/rc-field-form": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-1.20.1.tgz", - "integrity": "sha512-f64KEZop7zSlrG4ef/PLlH12SLn6iHDQ3sTG+RfKBM45hikwV1i8qMf53xoX12NvXXWg1VwchggX/FSso4bWaA==", + "version": "1.38.2", + "resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-1.38.2.tgz", + "integrity": "sha512-O83Oi1qPyEv31Sg+Jwvsj6pXc8uQI2BtIAkURr5lvEYHVggXJhdU/nynK8wY1gbw0qR48k731sN5ON4egRCROA==", "dependencies": { - "@babel/runtime": "^7.8.4", - "async-validator": "^3.0.3", - "rc-util": "^5.8.0" + "@babel/runtime": "^7.18.0", + "async-validator": "^4.1.0", + "rc-util": "^5.32.2" }, "engines": { "node": ">=8.x" }, "peerDependencies": { - "react": ">= 16.9.0", - "react-dom": ">= 16.9.0" + "react": ">=16.9.0", + "react-dom": ">=16.9.0" } }, "node_modules/rc-image": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-5.2.5.tgz", - "integrity": "sha512-qUfZjYIODxO0c8a8P5GeuclYXZjzW4hV/5hyo27XqSFo1DmTCs2HkVeQObkcIk5kNsJtgsj1KoPThVsSc/PXOw==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-5.13.0.tgz", + "integrity": "sha512-iZTOmw5eWo2+gcrJMMcnd7SsxVHl3w5xlyCgsULUdJhJbnuI8i/AL0tVOsE7aLn9VfOh1qgDT3mC2G75/c7mqg==", "dependencies": { "@babel/runtime": "^7.11.2", + "@rc-component/portal": "^1.0.2", "classnames": "^2.2.6", - "rc-dialog": "~8.6.0", + "rc-dialog": "~9.0.0", + "rc-motion": "^2.6.2", "rc-util": "^5.0.6" }, "peerDependencies": { @@ -15768,29 +15768,28 @@ "react-dom": ">=16.9.0" } }, - "node_modules/rc-image/node_modules/rc-dialog": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-8.6.0.tgz", - "integrity": "sha512-GSbkfqjqxpZC5/zc+8H332+q5l/DKUhpQr0vdX2uDsxo5K0PhvaMEVjyoJUTkZ3+JstEADQji1PVLVb/2bJeOQ==", + "node_modules/rc-input": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/rc-input/-/rc-input-0.1.4.tgz", + "integrity": "sha512-FqDdNz+fV2dKNgfXzcSLKvC+jEs1709t7nD+WdfjrdSaOcefpgc7BUJYadc3usaING+b7ediMTfKxuJBsEFbXA==", "dependencies": { - "@babel/runtime": "^7.10.1", - "classnames": "^2.2.6", - "rc-motion": "^2.3.0", - "rc-util": "^5.6.1" + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-util": "^5.18.1" }, "peerDependencies": { - "react": ">=16.9.0", - "react-dom": ">=16.9.0" + "react": ">=16.0.0", + "react-dom": ">=16.0.0" } }, "node_modules/rc-input-number": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-7.0.6.tgz", - "integrity": "sha512-J5DIoCKIunoPb16FEghaEOyNDuZXD5F9LxLNcqd31z/0e37XtuHgo4QF/TonKLsESwdg7UAzWhiD0K6PPrN3YQ==", + "version": "7.3.11", + "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-7.3.11.tgz", + "integrity": "sha512-aMWPEjFeles6PQnMqP5eWpxzsvHm9rh1jQOWXExUEIxhX62Fyl/ptifLHOn17+waDG1T/YUb6flfJbvwRhHrbA==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.5", - "rc-util": "^5.9.8" + "rc-util": "^5.23.0" }, "peerDependencies": { "react": ">=16.9.0", @@ -15798,16 +15797,16 @@ } }, "node_modules/rc-mentions": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-1.5.3.tgz", - "integrity": "sha512-NG/KB8YiKBCJPHHvr/QapAb4f9YzLJn7kDHtmI1K6t7ZMM5YgrjIxNNhoRKKP9zJvb9PdPts69Hbg4ZMvLVIFQ==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-1.13.1.tgz", + "integrity": "sha512-FCkaWw6JQygtOz0+Vxz/M/NWqrWHB9LwqlY2RtcuFqWJNFK9njijOOzTSsBGANliGufVUzx/xuPHmZPBV0+Hgw==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.6", - "rc-menu": "^8.0.1", - "rc-textarea": "^0.3.0", + "rc-menu": "~9.8.0", + "rc-textarea": "^0.4.0", "rc-trigger": "^5.0.4", - "rc-util": "^5.0.1" + "rc-util": "^5.22.5" }, "peerDependencies": { "react": ">=16.9.0", @@ -15815,18 +15814,16 @@ } }, "node_modules/rc-menu": { - "version": "8.10.8", - "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-8.10.8.tgz", - "integrity": "sha512-0gnSR0nmR/60NnK+72EGd+QheHyPSQ3wYg1TwX1zl0JJ9Gm0purFFykCXVv/G0Jynpt0QySPAos+bpHpjMZdoQ==", + "version": "9.8.4", + "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.8.4.tgz", + "integrity": "sha512-lmw2j8I2fhdIzHmC9ajfImfckt0WDb2KVJJBBRIsxPEw2kGkEfjLMUoB1NgiNT/Q5cC8PdjGOGQjHJIJMwyNMw==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", - "mini-store": "^3.0.1", - "rc-motion": "^2.0.1", + "rc-motion": "^2.4.3", + "rc-overflow": "^1.2.8", "rc-trigger": "^5.1.2", - "rc-util": "^5.7.0", - "resize-observer-polyfill": "^1.5.0", - "shallowequal": "^1.1.0" + "rc-util": "^5.27.0" }, "peerDependencies": { "react": ">=16.9.0", @@ -15834,13 +15831,13 @@ } }, "node_modules/rc-motion": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-2.9.0.tgz", - "integrity": "sha512-XIU2+xLkdIr1/h6ohPZXyPBMvOmuyFZQ/T0xnawz+Rh+gh4FINcnZmMT5UTIj6hgI0VLDjTaPeRd+smJeSPqiQ==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-2.9.2.tgz", + "integrity": "sha512-fUAhHKLDdkAXIDLH0GYwof3raS58dtNUmzLF2MeiR8o6n4thNpSDQhOqQzWE4WfFZDCi9VEN8n7tiB7czREcyw==", "dependencies": { "@babel/runtime": "^7.11.1", "classnames": "^2.2.1", - "rc-util": "^5.21.0" + "rc-util": "^5.43.0" }, "peerDependencies": { "react": ">=16.9.0", @@ -15848,14 +15845,14 @@ } }, "node_modules/rc-notification": { - "version": "4.5.7", - "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-4.5.7.tgz", - "integrity": "sha512-zhTGUjBIItbx96SiRu3KVURcLOydLUHZCPpYEn1zvh+re//Tnq/wSxN4FKgp38n4HOgHSVxcLEeSxBMTeBBDdw==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-4.6.1.tgz", + "integrity": "sha512-NSmFYwrrdY3+un1GvDAJQw62Xi9LNMSsoQyo95tuaYrcad5Bn9gJUL8AREufRxSQAQnr64u3LtP3EUyLYT6bhw==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", "rc-motion": "^2.2.0", - "rc-util": "^5.0.1" + "rc-util": "^5.20.1" }, "engines": { "node": ">=8.x" @@ -15881,9 +15878,9 @@ } }, "node_modules/rc-pagination": { - "version": "3.1.17", - "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-3.1.17.tgz", - "integrity": "sha512-/BQ5UxcBnW28vFAcP2hfh+Xg15W0QZn8TWYwdCApchMH1H0CxiaUUcULP8uXcFM1TygcdKWdt3JqsL9cTAfdkQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-3.2.0.tgz", + "integrity": "sha512-5tIXjB670WwwcAJzAqp2J+cOBS9W3cH/WU1EiYwXljuZ4vtZXKlY2Idq8FZrnYBz8KhN3vwPo9CoV/SJS6SL1w==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.1" @@ -15894,9 +15891,9 @@ } }, "node_modules/rc-picker": { - "version": "2.5.19", - "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-2.5.19.tgz", - "integrity": "sha512-u6myoCu/qiQ0vLbNzSzNrzTQhs7mldArCpPHrEI6OUiifs+IPXmbesqSm0zilJjfzrZJLgYeyyOMSznSlh0GKA==", + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-2.7.6.tgz", + "integrity": "sha512-H9if/BUJUZBOhPfWcPeT15JUI3/ntrG9muzERrXDkSoWmDj4yzmBvumozpxYrHwjcKnjyDGAke68d+whWwvhHA==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.1", @@ -15904,7 +15901,7 @@ "dayjs": "1.x", "moment": "^2.24.0", "rc-trigger": "^5.0.4", - "rc-util": "^5.4.0", + "rc-util": "^5.37.0", "shallowequal": "^1.1.0" }, "engines": { @@ -15916,12 +15913,13 @@ } }, "node_modules/rc-progress": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-3.1.4.tgz", - "integrity": "sha512-XBAif08eunHssGeIdxMXOmRQRULdHaDdIFENQ578CMb4dyewahmmfJRyab+hw4KH4XssEzzYOkAInTLS7JJG+Q==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-3.4.2.tgz", + "integrity": "sha512-iAGhwWU+tsayP+Jkl9T4+6rHeQTG9kDz8JAHZk4XtQOcYN5fj9H34NXNEdRdZx94VUDHMqCb1yOIvi8eJRh67w==", "dependencies": { "@babel/runtime": "^7.10.1", - "classnames": "^2.2.6" + "classnames": "^2.2.6", + "rc-util": "^5.16.1" }, "peerDependencies": { "react": ">=16.9.0", @@ -15960,17 +15958,32 @@ "react-dom": ">=16.9.0" } }, + "node_modules/rc-segmented": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/rc-segmented/-/rc-segmented-2.3.0.tgz", + "integrity": "sha512-I3FtM5Smua/ESXutFfb8gJ8ZPcvFR+qUgeeGFQHBOvRiRKyAk4aBE5nfqrxXx+h8/vn60DQjOt6i4RNtrbOobg==", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-motion": "^2.4.4", + "rc-util": "^5.17.0" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, "node_modules/rc-select": { - "version": "12.1.13", - "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-12.1.13.tgz", - "integrity": "sha512-cPI+aesP6dgCAaey4t4upDbEukJe+XN0DK6oO/6flcCX5o28o7KNZD7JAiVtC/6fCwqwI/kSs7S/43dvHmBl+A==", + "version": "14.1.18", + "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-14.1.18.tgz", + "integrity": "sha512-4JgY3oG2Yz68ECMUSCON7mtxuJvCSj+LJpHEg/AONaaVBxIIrmI/ZTuMJkyojall/X50YdBe5oMKqHHPNiPzEg==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", "rc-motion": "^2.0.1", "rc-overflow": "^1.0.0", "rc-trigger": "^5.0.4", - "rc-util": "^5.9.8", + "rc-util": "^5.16.1", "rc-virtual-list": "^3.2.0" }, "engines": { @@ -15982,14 +15995,13 @@ } }, "node_modules/rc-slider": { - "version": "9.7.5", - "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-9.7.5.tgz", - "integrity": "sha512-LV/MWcXFjco1epPbdw1JlLXlTgmWpB9/Y/P2yinf8Pg3wElHxA9uajN21lJiWtZjf5SCUekfSP6QMJfDo4t1hg==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-10.0.1.tgz", + "integrity": "sha512-igTKF3zBet7oS/3yNiIlmU8KnZ45npmrmHlUUio8PNbIhzMcsh+oE/r2UD42Y6YD2D/s+kzCQkzQrPD6RY435Q==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.5", - "rc-tooltip": "^5.0.1", - "rc-util": "^5.16.1", + "rc-util": "^5.18.1", "shallowequal": "^1.1.0" }, "engines": { @@ -16001,13 +16013,13 @@ } }, "node_modules/rc-steps": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/rc-steps/-/rc-steps-4.1.4.tgz", - "integrity": "sha512-qoCqKZWSpkh/b03ASGx1WhpKnuZcRWmvuW+ZUu4mvMdfvFzVxblTwUM+9aBd0mlEUFmt6GW8FXhMpHkK3Uzp3w==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/rc-steps/-/rc-steps-5.0.0.tgz", + "integrity": "sha512-9TgRvnVYirdhbV0C3syJFj9EhCRqoJAsxt4i1rED5o8/ZcSv5TLIYyo4H8MCjLPvbe2R+oBAm/IYBEtC+OS1Rw==", "dependencies": { - "@babel/runtime": "^7.10.2", + "@babel/runtime": "^7.16.7", "classnames": "^2.2.3", - "rc-util": "^5.0.1" + "rc-util": "^5.16.1" }, "engines": { "node": ">=8.x" @@ -16032,14 +16044,14 @@ } }, "node_modules/rc-table": { - "version": "7.13.3", - "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.13.3.tgz", - "integrity": "sha512-oP4fknjvKCZAaiDnvj+yzBaWcg+JYjkASbeWonU1BbrLcomkpKvMUgPODNEzg0QdXA9OGW0PO86h4goDSW06Kg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.26.0.tgz", + "integrity": "sha512-0cD8e6S+DTGAt5nBZQIPFYEaIukn17sfa5uFL98faHlH/whZzD8ii3dbFL4wmUDEL4BLybhYop+QUfZJ4CPvNQ==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.5", - "rc-resize-observer": "^1.0.0", - "rc-util": "^5.4.0", + "rc-resize-observer": "^1.1.0", + "rc-util": "^5.22.5", "shallowequal": "^1.1.0" }, "engines": { @@ -16051,16 +16063,17 @@ } }, "node_modules/rc-tabs": { - "version": "11.7.3", - "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-11.7.3.tgz", - "integrity": "sha512-5nd2NVss9TprPRV9r8N05SjQyAE7zDrLejxFLcbJ+BdLxSwnGnk3ws/Iq0smqKZUnPQC0XEvnpF3+zlllUUT2w==", + "version": "12.5.10", + "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-12.5.10.tgz", + "integrity": "sha512-Ay0l0jtd4eXepFH9vWBvinBjqOpqzcsJTerBGwJy435P2S90Uu38q8U/mvc1sxUEVOXX5ZCFbxcWPnfG3dH+tQ==", "dependencies": { "@babel/runtime": "^7.11.2", "classnames": "2.x", - "rc-dropdown": "^3.1.3", - "rc-menu": "^8.6.1", + "rc-dropdown": "~4.0.0", + "rc-menu": "~9.8.0", + "rc-motion": "^2.6.2", "rc-resize-observer": "^1.0.0", - "rc-util": "^5.5.0" + "rc-util": "^5.16.0" }, "engines": { "node": ">=8.x" @@ -16071,14 +16084,14 @@ } }, "node_modules/rc-textarea": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/rc-textarea/-/rc-textarea-0.3.7.tgz", - "integrity": "sha512-yCdZ6binKmAQB13hc/oehh0E/QRwoPP1pjF21aHBxlgXO3RzPF6dUu4LG2R4FZ1zx/fQd2L1faktulrXOM/2rw==", + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/rc-textarea/-/rc-textarea-0.4.7.tgz", + "integrity": "sha512-IQPd1CDI3mnMlkFyzt2O4gQ2lxUsnBAeJEoZGJnkkXgORNqyM9qovdrCj9NzcRfpHgLdzaEbU3AmobNFGUznwQ==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "^2.2.1", "rc-resize-observer": "^1.0.0", - "rc-util": "^5.7.0", + "rc-util": "^5.24.4", "shallowequal": "^1.1.0" }, "peerDependencies": { @@ -16087,11 +16100,12 @@ } }, "node_modules/rc-tooltip": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-5.1.1.tgz", - "integrity": "sha512-alt8eGMJulio6+4/uDm7nvV+rJq9bsfxFDCI0ljPdbuoygUscbsMYb6EQgwib/uqsXQUvzk+S7A59uYHmEgmDA==", + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-5.2.2.tgz", + "integrity": "sha512-jtQzU/18S6EI3lhSGoDYhPqNpWajMtS5VV/ld1LwyfrDByQpYmw/LW6U7oFXXLukjfDHQ7Ju705A82PRNFWYhg==", "dependencies": { "@babel/runtime": "^7.11.2", + "classnames": "^2.3.1", "rc-trigger": "^5.0.0" }, "peerDependencies": { @@ -16100,18 +16114,18 @@ } }, "node_modules/rc-tree": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-4.1.5.tgz", - "integrity": "sha512-q2vjcmnBDylGZ9/ZW4F9oZMKMJdbFWC7um+DAQhZG1nqyg1iwoowbBggUDUaUOEryJP+08bpliEAYnzJXbI5xQ==", + "version": "5.7.12", + "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-5.7.12.tgz", + "integrity": "sha512-LXA5nY2hG5koIAlHW5sgXgLpOMz+bFRbnZZ+cCg0tQs4Wv1AmY7EDi1SK7iFXhslYockbqUerQan82jljoaItg==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", "rc-motion": "^2.0.1", - "rc-util": "^5.0.0", - "rc-virtual-list": "^3.0.1" + "rc-util": "^5.16.1", + "rc-virtual-list": "^3.5.1" }, "engines": { - "node": ">=8.x" + "node": ">=10.x" }, "peerDependencies": { "react": "*", @@ -16119,15 +16133,15 @@ } }, "node_modules/rc-tree-select": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-4.3.3.tgz", - "integrity": "sha512-0tilOHLJA6p+TNg4kD559XnDX3PTEYuoSF7m7ryzFLAYvdEEPtjn0QZc5z6L0sMKBiBlj8a2kf0auw8XyHU3lA==", + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-5.5.5.tgz", + "integrity": "sha512-k2av7jF6tW9bIO4mQhaVdV4kJ1c54oxV3/hHVU+oD251Gb5JN+m1RbJFTMf1o0rAFqkvto33rxMdpafaGKQRJw==", "dependencies": { "@babel/runtime": "^7.10.1", "classnames": "2.x", - "rc-select": "^12.0.0", - "rc-tree": "^4.0.0", - "rc-util": "^5.0.5" + "rc-select": "~14.1.0", + "rc-tree": "~5.7.0", + "rc-util": "^5.16.1" }, "peerDependencies": { "react": "*", @@ -16154,11 +16168,11 @@ } }, "node_modules/rc-upload": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-4.2.1.tgz", - "integrity": "sha512-ylCwyzKjCFpD2ZrTe49adxnyo/bJIhoydWRg9y6LwYM0eRT/GDYvkLauXR0MKWVVmCtp+x6pOjTXqd3b0Z3KzA==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-4.3.6.tgz", + "integrity": "sha512-Bt7ESeG5tT3IY82fZcP+s0tQU2xmo1W6P3S8NboUUliquJLQYLkUcsaExi3IlBVr43GQMCjo30RA2o0i70+NjA==", "dependencies": { - "@babel/runtime": "^7.10.1", + "@babel/runtime": "^7.18.3", "classnames": "^2.2.5", "rc-util": "^5.2.0" }, @@ -16168,9 +16182,9 @@ } }, "node_modules/rc-util": { - "version": "5.39.1", - "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.39.1.tgz", - "integrity": "sha512-OW/ERynNDgNr4y0oiFmtes3rbEamXw7GHGbkbNd9iRr7kgT03T6fT0b9WpJ3mbxKhyOcAHnGcIoh5u/cjrC2OQ==", + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.43.0.tgz", + "integrity": "sha512-AzC7KKOXFqAdIBqdGWepL9Xn7cm3vnAmjlHqUnoQaTMZYhM4VlXGLkkHHxj/BZ7Td0+SOPKB4RGPboBVKT9htw==", "dependencies": { "@babel/runtime": "^7.18.3", "react-is": "^18.2.0" @@ -16186,9 +16200,9 @@ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, "node_modules/rc-virtual-list": { - "version": "3.11.5", - "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.11.5.tgz", - "integrity": "sha512-iZRW99m5jAxtwKNPLwUrPryurcnKpXBdTyhuBp6ythf7kg/otKO5cCiIvL55GQwU0QGSlouQS0tnkciRMJUwRQ==", + "version": "3.14.4", + "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.14.4.tgz", + "integrity": "sha512-WDnwmEls+JImUGHxF0g05ffYQqQH3+is/vzBROj87MiA5op6OwUGNjDT9gbLkkq43XAu6QN7YA8sRmCwnCgh5A==", "dependencies": { "@babel/runtime": "^7.20.0", "classnames": "^2.2.6", @@ -18268,6 +18282,14 @@ "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==" }, + "node_modules/throttle-debounce": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.2.tgz", + "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==", + "engines": { + "node": ">=12.22" + } + }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -18788,14 +18810,6 @@ "makeerror": "1.0.12" } }, - "node_modules/warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, "node_modules/watchpack": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", diff --git a/package.json b/package.json index b3ee3cf..2e0ca6a 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", - "antd": "^4.15.2", + "antd": "^4.24.16", "react": "^18.3.1", "react-dom": "^18.3.1", "react-redux": "^9.1.1", @@ -47,4 +47,4 @@ "public" ] } -} \ No newline at end of file +} diff --git a/src/App.js b/src/App.js index 97d8cad..b756731 100644 --- a/src/App.js +++ b/src/App.js @@ -3,7 +3,9 @@ import "./assets/css/style.css"; import { connect } from "react-redux"; import "../node_modules/antd/dist/antd.css"; import MainComponent from "./components/mainComponent"; -import { addUser, getUsers } from "./actions/userActions"; +import { addUser, getUsers, deleteUser, updateUser } from "./actions/userActions"; +import 'antd/dist/antd.css'; + function App(props) { return ( @@ -20,6 +22,10 @@ const mapStateToProps = (state) => ({ const mapDispatchToProps = { getUsers, addUser, + deleteUser, + updateUser, + + }; export default connect(mapStateToProps, mapDispatchToProps)(App); diff --git a/src/actions/userActions.js b/src/actions/userActions.js index dfbd544..2a81527 100644 --- a/src/actions/userActions.js +++ b/src/actions/userActions.js @@ -1,18 +1,18 @@ export const getUsers = () => async dispatch => { - try{ + try { const response = await fetch('http://example.com/users') const parsedResponse = await response.json() dispatch({ type: 'LIST_USERS', payload: parsedResponse }); - }catch(e){ + } catch(e) { console.log(e); } }; export const addUser = (payload) => async dispatch => { - try{ + try { const response = await fetch("http://example.com/user", { method: "POST", body: JSON.stringify(payload), @@ -21,10 +21,42 @@ export const addUser = (payload) => async dispatch => { } }); const parsedResponse = await response.json() - if(parsedResponse.success){ + if(parsedResponse.success) { dispatch(getUsers()); } - }catch(e){ + } catch(e) { console.log(e); } }; + +export const deleteUser = (id) => async dispatch => { + try { + const response = await fetch(`http://example.com/user/${id}`, { + method: "DELETE" + }); + const parsedResponse = await response.json(); + if(parsedResponse.success) { + dispatch(getUsers()); + } + } catch(e) { + console.log(e); + } +}; + +export const updateUser = (id, payload) => async dispatch => { + try { + const response = await fetch(`http://example.com/user/${id}`, { + method: "PUT", + body: JSON.stringify(payload), + headers: { + "Content-type": "application/json; charset=UTF-8" + } + }); + const parsedResponse = await response.json(); + if(parsedResponse.success) { + dispatch(getUsers()); + } + } catch(e) { + console.log(e); + } +}; \ No newline at end of file diff --git a/src/assets/css/style.css b/src/assets/css/style.css index e69de29..fc92e6e 100644 --- a/src/assets/css/style.css +++ b/src/assets/css/style.css @@ -0,0 +1,55 @@ +.table-container { + margin-top: 20px; + } + + .user-table { + width: 100%; + border-collapse: collapse; + } + + .user-table th, + .user-table td { + border: 1px solid #ddd; + padding: 12px; + text-align: left; + } + + .user-table th { + background-color: #f2f2f2; + font-weight: bold; + } + + .user-table tr:nth-child(even) { + background-color: #f9f9f9; + } + + .header-box { + display: flex; + gap: 10px; + margin-bottom: 20px; + } + + .header-box input { + padding: 8px; + border: 1px solid #ddd; + border-radius: 4px; + } + + .header-box button { + padding: 8px 16px; + background-color: #4CAF50; + color: white; + border: none; + border-radius: 4px; + cursor: pointer; + } + + .header-box button:hover { + background-color: #45a049; + } + + .error-message { + color: red; + font-size: 14px; + margin-top: 5px; + } \ No newline at end of file diff --git a/src/components/commonInput.js b/src/components/commonInput.js index c4962d3..4bf4922 100644 --- a/src/components/commonInput.js +++ b/src/components/commonInput.js @@ -3,34 +3,51 @@ import React, { useState } from "react"; const InputHandler = ({ onSubmit, editMode = false }) => { const [name, setName] = useState(""); const [email, setEmail] = useState(""); + const [errors, setErrors] = useState({}); + + const validateForm = () => { + const newErrors = {}; + if (!name.trim()) newErrors.name = "Name is required"; + if (!email.trim()) newErrors.email = "Email is required"; + else if (!/\S+@\S+\.\S+/.test(email)) newErrors.email = "Email is invalid"; + setErrors(newErrors); + return Object.keys(newErrors).length === 0; + }; const handleSubmit = (e) => { e.preventDefault(); - if (!name || !email) return; - onSubmit({ name, email }); + if (validateForm()) { + onSubmit({ name, email }); + setName(""); + setEmail(""); + } }; return ( -
- { - setName(e.target.value); - }} - /> - { - setEmail(e.target.value); - }} - /> - -
+ ); }; -export default InputHandler; +export default InputHandler; \ No newline at end of file diff --git a/src/components/mainComponent.js b/src/components/mainComponent.js index cfeb197..e1caaae 100644 --- a/src/components/mainComponent.js +++ b/src/components/mainComponent.js @@ -1,23 +1,132 @@ -import React, { useEffect } from "react"; -import InputHandler from "./commonInput"; -import SimpleTable from "./simpleTable"; +import React, { useEffect, useState } from "react"; +import { Table, Button, Input, Form, Modal } from 'antd'; +import { EditOutlined, DeleteOutlined } from '@ant-design/icons'; function MainComponent(props) { - const { getUsers, userState, addUser } = props; + const { getUsers, userState, addUser, deleteUser, updateUser } = props; + const [form] = Form.useForm(); + const [editForm] = Form.useForm(); + const [editingUser, setEditingUser] = useState(null); - const handleSubmit = ({ name, email }) => { - addUser({ name, email }); - }; useEffect(() => { getUsers(); - }, []); + }, [getUsers]); + + const handleSubmit = (values) => { + addUser(values); + form.resetFields(); + }; + + const handleDelete = (id) => { + deleteUser(id); + }; + + const handleEdit = (record) => { + setEditingUser(record); + editForm.setFieldsValue(record); + }; + + const handleUpdate = (values) => { + updateUser(editingUser.id, values); + setEditingUser(null); + }; + + const columns = [ + { + title: 'Id', + dataIndex: 'id', + key: 'id', + }, + { + title: 'Name', + dataIndex: 'name', + key: 'name', + }, + { + title: 'Email', + dataIndex: 'email', + key: 'email', + }, + { + title: 'Actions', + key: 'actions', + render: (_, record) => ( + <> + + + + ), + }, + ]; return ( -
- - +
+
+ + + + + + + + + +
+ + + + editForm.submit()} + onCancel={() => setEditingUser(null)} + > +
+ + + + + + + +
); } -export default MainComponent; +export default MainComponent; \ No newline at end of file diff --git a/src/components/simpleTable.js b/src/components/simpleTable.js index 788474a..5e76f9f 100644 --- a/src/components/simpleTable.js +++ b/src/components/simpleTable.js @@ -1,25 +1,36 @@ -import { React } from "react"; - -const SimpleTable = ({ dataSource }) => { +import React from "react"; +const SimpleTable = ({ dataSource, onDelete, onEdit }) => { return ( -
+
{dataSource.length ? ( - <> - {dataSource.map((item, index) => { - return ( -
-
Id: {item.id}
-
Name: {item.name}
-
Email: {item.email}
-
- ); - })} - +
+ + + + + + + + + + {dataSource.map((item) => ( + + + + + + + ))} + +
IdNameEmailAction
{item.id}{item.name}{item.email} + + +
) : ( - "No user data" +

No user data

)}
); }; -export default SimpleTable; +export default SimpleTable; \ No newline at end of file diff --git a/src/index.js b/src/index.js index 56ebbb8..640681a 100644 --- a/src/index.js +++ b/src/index.js @@ -1,4 +1,3 @@ -// src/index.js import React from "react"; import { Provider } from "react-redux"; import App from "./App"; diff --git a/src/mocks/handlers.js b/src/mocks/handlers.js index 21c901a..eca7e38 100644 --- a/src/mocks/handlers.js +++ b/src/mocks/handlers.js @@ -1,4 +1,3 @@ -// src/mocks/handlers.js import { http, HttpResponse } from "msw"; import initiateDB from "../db/initDB"; diff --git a/src/reducers/index.js b/src/reducers/index.js index 004588f..12b080c 100644 --- a/src/reducers/index.js +++ b/src/reducers/index.js @@ -1,10 +1,8 @@ -// src/reducers/index.js import { combineReducers } from "redux"; -// Import other reducers here import userReducer from "./userReducer"; const rootReducer = combineReducers({ - userState: userReducer, // Use your actual reducers here + userState: userReducer, }); export default rootReducer; diff --git a/src/store.js b/src/store.js index d246d49..b8f8fb3 100644 --- a/src/store.js +++ b/src/store.js @@ -1,7 +1,6 @@ -// src/store.js import { createStore, applyMiddleware } from 'redux'; -import { thunk } from 'redux-thunk'; // Corrected import -import rootReducer from './reducers'; // Import your root reducer +import { thunk } from 'redux-thunk'; +import rootReducer from './reducers'; const initialState = {}; const middleware = [thunk];