diff --git a/package-lock.json b/package-lock.json index 2219105..8da2698 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "@emotion/styled": "^11.11.5", "@hookform/resolvers": "^3.3.4", "@reduxjs/toolkit": "^2.2.3", + "apexcharts": "^3.52.0", "axios": "^1.7.2", "bootstrap": "5.3.3", "chart.js": "^4.4.3", @@ -21,6 +22,7 @@ "framer-motion": "^11.1.5", "js-cookie": "^3.0.5", "react": "^18.2.0", + "react-apexcharts": "^1.4.1", "react-beautiful-dnd": "^13.1.1", "react-chartjs-2": "^5.2.0", "react-dom": "^18.2.0", @@ -2565,6 +2567,11 @@ "vite": "^4 || ^5" } }, + "node_modules/@yr/monotone-cubic-spline": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz", + "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==" + }, "node_modules/@zag-js/dom-query": { "version": "0.16.0", "resolved": "https://registry.npmjs.org/@zag-js/dom-query/-/dom-query-0.16.0.tgz", @@ -2652,6 +2659,20 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/apexcharts": { + "version": "3.52.0", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.52.0.tgz", + "integrity": "sha512-7dg0ADKs8AA89iYMZMe2sFDG0XK5PfqllKV9N+i3hKHm3vEtdhwz8AlXGm+/b0nJ6jKiaXsqci5LfVxNhtB+dA==", + "dependencies": { + "@yr/monotone-cubic-spline": "^1.0.3", + "svg.draggable.js": "^2.2.2", + "svg.easing.js": "^2.0.0", + "svg.filter.js": "^2.0.2", + "svg.pathmorphing.js": "^0.1.3", + "svg.resize.js": "^1.4.3", + "svg.select.js": "^3.0.1" + } + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -5130,6 +5151,18 @@ "node": ">=0.10.0" } }, + "node_modules/react-apexcharts": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/react-apexcharts/-/react-apexcharts-1.4.1.tgz", + "integrity": "sha512-G14nVaD64Bnbgy8tYxkjuXEUp/7h30Q0U33xc3AwtGFijJB9nHqOt1a6eG0WBn055RgRg+NwqbKGtqPxy15d0Q==", + "dependencies": { + "prop-types": "^15.8.1" + }, + "peerDependencies": { + "apexcharts": "^3.41.0", + "react": ">=0.13" + } + }, "node_modules/react-beautiful-dnd": { "version": "13.1.1", "resolved": "https://registry.npmjs.org/react-beautiful-dnd/-/react-beautiful-dnd-13.1.1.tgz", @@ -5888,6 +5921,89 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svg.draggable.js": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz", + "integrity": "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==", + "dependencies": { + "svg.js": "^2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.easing.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz", + "integrity": "sha512-//ctPdJMGy22YoYGV+3HEfHbm6/69LJUTAqI2/5qBvaNHZ9uUFVC82B0Pl299HzgH13rKrBgi4+XyXXyVWWthA==", + "dependencies": { + "svg.js": ">=2.3.x" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.filter.js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz", + "integrity": "sha512-xkGBwU+dKBzqg5PtilaTb0EYPqPfJ9Q6saVldX+5vCRy31P6TlRCP3U9NxH3HEufkKkpNgdTLBJnmhDHeTqAkw==", + "dependencies": { + "svg.js": "^2.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.js": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz", + "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==" + }, + "node_modules/svg.pathmorphing.js": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz", + "integrity": "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==", + "dependencies": { + "svg.js": "^2.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.resize.js": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz", + "integrity": "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==", + "dependencies": { + "svg.js": "^2.6.5", + "svg.select.js": "^2.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.resize.js/node_modules/svg.select.js": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz", + "integrity": "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==", + "dependencies": { + "svg.js": "^2.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.select.js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz", + "integrity": "sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==", + "dependencies": { + "svg.js": "^2.6.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", diff --git a/package.json b/package.json index 301f63a..1cab514 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "@emotion/styled": "^11.11.5", "@hookform/resolvers": "^3.3.4", "@reduxjs/toolkit": "^2.2.3", + "apexcharts": "^3.52.0", "axios": "^1.7.2", "bootstrap": "5.3.3", "chart.js": "^4.4.3", @@ -23,6 +24,7 @@ "framer-motion": "^11.1.5", "js-cookie": "^3.0.5", "react": "^18.2.0", + "react-apexcharts": "^1.4.1", "react-beautiful-dnd": "^13.1.1", "react-chartjs-2": "^5.2.0", "react-dom": "^18.2.0", diff --git a/src/Components/CurrencyInput.jsx b/src/Components/CurrencyInput.jsx new file mode 100644 index 0000000..45932c4 --- /dev/null +++ b/src/Components/CurrencyInput.jsx @@ -0,0 +1,39 @@ +import React, { forwardRef } from 'react'; +import { Input } from "@chakra-ui/react"; + +export const formatCurrency = (value) => { + if (!value) return ''; + const [integer, decimal] = value.split('.'); + const formattedInteger = integer.replace(/\B(?=(\d{3})+(?!\d))/g, ','); + return decimal ? `${formattedInteger}.${decimal}` : formattedInteger; +}; + +const CurrencyInput = forwardRef(({ value, onChange, ...props }, ref) => { + + const handleChange = (event) => { + let { value } = event.target; + + // Remove non-numeric characters except decimal point + value = value.replace(/[^0-9.]/g, ''); + + // Ensure only one decimal point + const parts = value.split('.'); + if (parts.length > 2) { + value = parts[0] + '.' + parts.slice(1).join(''); + } + + onChange(value); // Pass the raw value to parent or use it directly + }; + + return ( + + ); +}); + +export default CurrencyInput; diff --git a/src/Components/DataTable/DataTable.jsx b/src/Components/DataTable/DataTable.jsx index facf526..94be903 100644 --- a/src/Components/DataTable/DataTable.jsx +++ b/src/Components/DataTable/DataTable.jsx @@ -50,7 +50,7 @@ const DataTable = ({ const [removed] = reorderedItems.splice(result.source.index, 1); reorderedItems.splice(result.destination.index, 0, removed); setData(reorderedItems) - console.log("New Order:", reorderedItems.map((item, index) => ({ index, item }))); + // console.log("New Order:", reorderedItems.map((item, index) => ({ index, item }))); }; return ( diff --git a/src/Components/DataTable/NormalTable.jsx b/src/Components/DataTable/NormalTable.jsx index 832a16b..54da2e8 100644 --- a/src/Components/DataTable/NormalTable.jsx +++ b/src/Components/DataTable/NormalTable.jsx @@ -12,6 +12,7 @@ import { Tfoot, } from "@chakra-ui/react"; import EmptySearchList from "../EmptySearchList"; +import { TABLE_PAGINATION } from "../../Constants/Paginations"; const DataTable = ({ data, @@ -20,6 +21,9 @@ const DataTable = ({ emptyMessage, centered, }) => { + + console.log(data); + const columnWidth = data && data[0] ? `${(100 / Object.keys(data[0]).length).toFixed(2)}%` @@ -42,7 +46,7 @@ const DataTable = ({ } key={index} p={3} - width="120px" // Adjust width as needed + width="20px" // Adjust width as needed color={"#004118"} whiteSpace="normal" // Allow text to wrap wordBreak="normal" // Ensure long words break properly @@ -56,7 +60,7 @@ const DataTable = ({
{isLoading - ? Array.from({ length: 12 }).map((_, index) => ( + ? Array.from({ length: TABLE_PAGINATION?.size }).map((_, index) => (