diff --git a/package.json b/package.json
index f72defd..9025fb2 100644
--- a/package.json
+++ b/package.json
@@ -16,6 +16,10 @@
"prepare": "husky"
},
"dependencies": {
+ "@ag-grid-community/client-side-row-model": "^31.3.2",
+ "@ag-grid-community/core": "^31.3.2",
+ "@ag-grid-community/react": "^31.3.2",
+ "@ag-grid-community/styles": "^31.3.2",
"@tanstack/react-table": "^8",
"next": "^14",
"react": "^18",
diff --git a/src/app/page.tsx b/src/app/page.tsx
index eadd59a..e01da68 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -7,6 +7,7 @@ import { ThemeContext } from "../context/ThemeContext";
import Buttons from "../components/Buttons";
import Progress from "../components/Progress";
import ThemeSwitcher from "../components/ThemeSwitcher";
+import AgGrid from "../components/AgGrid";
// disabled SSR render because the table data is randomly generated
const Grid = dynamic(() => import("../components/Grid"), {
@@ -38,6 +39,8 @@ export default function Home() {
+
+
diff --git a/src/components/AgGrid.tsx b/src/components/AgGrid.tsx
new file mode 100644
index 0000000..6856f60
--- /dev/null
+++ b/src/components/AgGrid.tsx
@@ -0,0 +1,124 @@
+import * as React from "react";
+import { AgGridReact } from "@ag-grid-community/react";
+import { ModuleRegistry, ColDef } from "@ag-grid-community/core";
+import { ClientSideRowModelModule } from "@ag-grid-community/client-side-row-model";
+import "@ag-grid-community/styles/ag-grid.css";
+import "@ag-grid-community/styles/ag-theme-quartz.css";
+
+ModuleRegistry.registerModules([ClientSideRowModelModule]);
+
+interface Props {
+ [rest: string]: any;
+}
+
+export default function AgGrid({ ...rest }: Props): React.JSX.Element {
+ // setRowData
+ const [rowData] = React.useState([
+ { make: "Tesla", model: "Model Y", price: 64950, electric: true, month: "June" },
+ { make: "Ford", model: "F-Series", price: 33850, electric: false, month: "October" },
+ { make: "Toyota", model: "Corolla", price: 29600, electric: false, month: "August" },
+ { make: "Mercedes", model: "EQA", price: 48890, electric: true, month: "February" },
+ { make: "Fiat", model: "500", price: 15774, electric: false, month: "January" },
+ { make: "Nissan", model: "Juke", price: 20675, electric: false, month: "March" },
+ { make: "Vauxhall", model: "Corsa", price: 18460, electric: false, month: "July" },
+ { make: "Volvo", model: "EX30", price: 33795, electric: true, month: "September" },
+ { make: "Mercedes", model: "Maybach", price: 175720, electric: false, month: "December" },
+ { make: "Vauxhall", model: "Astra", price: 25795, electric: false, month: "April" },
+ { make: "Fiat", model: "Panda", price: 13724, electric: false, month: "November" },
+ { make: "Jaguar", model: "I-PACE", price: 69425, electric: true, month: "May" },
+ { make: "Tesla", model: "Model Y", price: 64950, electric: true, month: "June" },
+ { make: "Ford", model: "F-Series", price: 33850, electric: false, month: "October" },
+ { make: "Toyota", model: "Corolla", price: 29600, electric: false, month: "August" },
+ { make: "Mercedes", model: "EQA", price: 48890, electric: true, month: "February" },
+ { make: "Fiat", model: "500", price: 15774, electric: false, month: "January" },
+ { make: "Nissan", model: "Juke", price: 20675, electric: false, month: "March" },
+ { make: "Vauxhall", model: "Corsa", price: 18460, electric: false, month: "July" },
+ { make: "Volvo", model: "EX30", price: 33795, electric: true, month: "September" },
+ { make: "Mercedes", model: "Maybach", price: 175720, electric: false, month: "December" },
+ { make: "Vauxhall", model: "Astra", price: 25795, electric: false, month: "April" },
+ { make: "Fiat", model: "Panda", price: 13724, electric: false, month: "November" },
+ { make: "Jaguar", model: "I-PACE", price: 69425, electric: true, month: "May" },
+ { make: "Tesla", model: "Model Y", price: 64950, electric: true, month: "June" },
+ { make: "Ford", model: "F-Series", price: 33850, electric: false, month: "October" },
+ { make: "Toyota", model: "Corolla", price: 29600, electric: false, month: "August" },
+ { make: "Mercedes", model: "EQA", price: 48890, electric: true, month: "February" },
+ { make: "Fiat", model: "500", price: 15774, electric: false, month: "January" },
+ { make: "Nissan", model: "Juke", price: 20675, electric: false, month: "March" },
+ { make: "Vauxhall", model: "Corsa", price: 18460, electric: false, month: "July" },
+ { make: "Volvo", model: "EX30", price: 33795, electric: true, month: "September" },
+ { make: "Mercedes", model: "Maybach", price: 175720, electric: false, month: "December" },
+ { make: "Vauxhall", model: "Astra", price: 25795, electric: false, month: "April" },
+ { make: "Fiat", model: "Panda", price: 13724, electric: false, month: "November" },
+ { make: "Jaguar", model: "I-PACE", price: 69425, electric: true, month: "May" }
+ ]);
+
+ // setColumnDefs
+ const [columnDefs] = React.useState([
+ {
+ field: "make",
+ checkboxSelection: true,
+ editable: true,
+ cellEditor: "agSelectCellEditor",
+ cellEditorParams: {
+ values: [
+ "Tesla",
+ "Ford",
+ "Toyota",
+ "Mercedes",
+ "Fiat",
+ "Nissan",
+ "Vauxhall",
+ "Volvo",
+ "Jaguar"
+ ]
+ }
+ },
+ { field: "model" },
+ { field: "price", filter: "agNumberColumnFilter" },
+ { field: "electric" },
+ {
+ field: "month",
+ comparator: (valueA: string, valueB: string) => {
+ const months = [
+ "January",
+ "February",
+ "March",
+ "April",
+ "May",
+ "June",
+ "July",
+ "August",
+ "September",
+ "October",
+ "November",
+ "December"
+ ];
+ const idxA = months.indexOf(valueA);
+ const idxB = months.indexOf(valueB);
+ return idxA - idxB;
+ }
+ }
+ ]);
+
+ const defaultColDef = React.useMemo(() => {
+ return {
+ filter: "agTextColumnFilter",
+ floatingFilter: true
+ };
+ }, []);
+
+ return (
+
+ );
+}
diff --git a/yarn.lock b/yarn.lock
index 3b54109..62fda6d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -12,6 +12,45 @@ __metadata:
languageName: node
linkType: hard
+"@ag-grid-community/client-side-row-model@npm:^31.3.2":
+ version: 31.3.2
+ resolution: "@ag-grid-community/client-side-row-model@npm:31.3.2"
+ dependencies:
+ "@ag-grid-community/core": "npm:31.3.2"
+ tslib: "npm:^2.3.0"
+ checksum: 10c0/a00df8a32c4487ad9ea7c293056b1a1108e4c05a618e9d873ae9291c13e61d08720a8b2688f69d2157271647c41f3ff6efd9248ca537e3e432e2230b67c128ee
+ languageName: node
+ linkType: hard
+
+"@ag-grid-community/core@npm:31.3.2, @ag-grid-community/core@npm:^31.3.2":
+ version: 31.3.2
+ resolution: "@ag-grid-community/core@npm:31.3.2"
+ dependencies:
+ tslib: "npm:^2.3.0"
+ checksum: 10c0/dc06409584d52bf77f0c4d7e27da8b0c5feecac10089baaacde7c3d89fb07f0478d605c9f050ab87f524ae046b7fa803ac6f60d5dd74c44213856322e8832f5a
+ languageName: node
+ linkType: hard
+
+"@ag-grid-community/react@npm:^31.3.2":
+ version: 31.3.2
+ resolution: "@ag-grid-community/react@npm:31.3.2"
+ dependencies:
+ prop-types: "npm:^15.8.1"
+ peerDependencies:
+ "@ag-grid-community/core": 31.3.2
+ react: ^16.3.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.3.0 || ^17.0.0 || ^18.0.0
+ checksum: 10c0/4c9c5abcb37f7ecc42844c4d83ec1bb55981e4362ec4feae251b2b3795040be0e113ebeaff9e97d7f3cf79600aa75969847ec9617b355448c84a11935fff3309
+ languageName: node
+ linkType: hard
+
+"@ag-grid-community/styles@npm:^31.3.2":
+ version: 31.3.2
+ resolution: "@ag-grid-community/styles@npm:31.3.2"
+ checksum: 10c0/65ad498da1d5275c38fa4f123ffe1ce9e871038cd842ff4a34ca316727b6a354650761bd803887f4e614eaf73a4e1bf65a5d541c7cac13a5d080bfbbedbccc09
+ languageName: node
+ linkType: hard
+
"@alloc/quick-lru@npm:^5.2.0":
version: 5.2.0
resolution: "@alloc/quick-lru@npm:5.2.0"
@@ -7194,7 +7233,7 @@ __metadata:
languageName: node
linkType: hard
-"tslib@npm:^2.4.0, tslib@npm:^2.6.2":
+"tslib@npm:^2.3.0, tslib@npm:^2.4.0, tslib@npm:^2.6.2":
version: 2.6.3
resolution: "tslib@npm:2.6.3"
checksum: 10c0/2598aef53d9dbe711af75522464b2104724d6467b26a60f2bdac8297d2b5f1f6b86a71f61717384aa8fd897240467aaa7bcc36a0700a0faf751293d1331db39a
@@ -7287,6 +7326,10 @@ __metadata:
version: 0.0.0-use.local
resolution: "typescript-nextjs-tailwind-daisyui-starter@workspace:."
dependencies:
+ "@ag-grid-community/client-side-row-model": "npm:^31.3.2"
+ "@ag-grid-community/core": "npm:^31.3.2"
+ "@ag-grid-community/react": "npm:^31.3.2"
+ "@ag-grid-community/styles": "npm:^31.3.2"
"@jest/globals": "npm:^29"
"@next/bundle-analyzer": "npm:^14"
"@tailwindcss/typography": "npm:latest"