import React, {Component} from "react"; import {AgGridColumn, AgGridReact} from "ag-grid-react"; import RowDataFactory from "./RowDataFactory"; import DateComponent from "./DateComponent.jsx"; import SkillsCellRenderer from './SkillsCellRenderer.jsx'; import NameCellEditor from './NameCellEditor.jsx'; import ProficiencyCellRenderer from './ProficiencyCellRenderer.jsx'; import RefData from './RefData'; import SkillsFilter from './SkillsFilter.jsx'; import ProficiencyFilter from './ProficiencyFilter.jsx'; import HeaderGroupComponent from './HeaderGroupComponent.jsx'; import SortableHeaderComponent from './SortableHeaderComponent.jsx'; import "./RichGridDeclarativeExample.css"; import '@ag-community/client-side-row-model' // take this line out if you do not want to use ag-Grid-Enterprise // import "ag-grid-enterprise"; export default class RichGridDeclarativeExample extends Component { constructor(props) { super(props); this.state = { quickFilterText: null, sideBar: false, rowData: new RowDataFactory().createRowData(), rowCount: null, icons: { columnRemoveFromGroup: '', filter: '', sortAscending: '', sortDescending: '', groupExpanded: '', groupContracted: '' } }; } /* Grid Events we're listening to */ onGridReady = (params) => { this.api = params.api; this.columnApi = params.columnApi; this.calculateRowCount(); }; onCellClicked = (event) => { console.log('onCellClicked: ' + event.data.name + ', col ' + event.colIndex); }; onRowSelected = (event) => { console.log('onRowSelected: ' + event.node.data.name); }; /* Demo related methods */ onToggleSidebar = (event) => { this.setState({sideBar: event.target.checked}); }; deselectAll() { this.api.deselectAll(); } onQuickFilterText = (event) => { this.setState({quickFilterText: event.target.value}); }; onRefreshData = () => { this.setState({ rowData: new RowDataFactory().createRowData() }); }; invokeSkillsFilterMethod = () => { let skillsFilter = this.api.getFilterInstance('skills'); let componentInstance = skillsFilter.getFrameworkComponentInstance(); componentInstance.helloFromSkillsFilter(); }; dobFilter = () => { let dateFilterComponent = this.api.getFilterInstance('dob'); dateFilterComponent.setModel({ type: 'equals', dateFrom: '2000-01-01' }); // as the date filter is a React component, and its using setState internally, we need // to allow time for the state to be set (as setState is an async operation) // simply wait for the next tick setTimeout(() => { this.api.onFilterChanged(); }); }; calculateRowCount = () => { if (this.api && this.state.rowData) { const model = this.api.getModel(); const totalRows = this.state.rowData.length; const processedRows = model.getRowCount(); this.setState({ rowCount: processedRows.toLocaleString() + ' / ' + totalRows.toLocaleString() }); } }; static countryCellRenderer(params) { if (params.value) { return ` ${params.value}`; } else { return null; } } static dateCellRenderer(params) { return RichGridDeclarativeExample.pad(params.value.getDate(), 2) + '/' + RichGridDeclarativeExample.pad(params.value.getMonth() + 1, 2) + '/' + params.value.getFullYear(); } static pad(num, totalStringSize) { let asString = num + ""; while (asString.length < totalStringSize) asString = "0" + asString; return asString; } render() { return (

Rich Grid with Declarative Markup Example

Employees Skills and Contact Details: { this.state.rowCount }
Grid API: Column API:
Filter API:
suppressRowClickSelection="true") suppressRowClickSelection rowSelection="multiple" groupHeaders // setting grid wide date component dateComponentFramework={DateComponent} // setting default column properties defaultColDef={{ resizable: true, sortable: true, filter: true, headerComponentFramework: SortableHeaderComponent, headerComponentParams: { menuIcon: 'fa-bars' } }}>
); } }