1- import React from 'react' ;
1+ import React , { useState , useCallback , useRef , useEffect } from 'react' ;
22import ReactDOM from 'react-dom/client' ;
33import { GridLiteDataService , ProductInfo } from './GridLiteDataService' ;
44
5- // Import the web component
6- import { IgcGridLite } from 'igniteui-grid-lite' ;
7- import {
8- defineComponents ,
9- IgcRatingComponent
10- } from 'igniteui-webcomponents' ;
5+ import { IgrGridLite , IgrGridLiteColumn } from 'igniteui-react/grid-lite' ;
6+ import { IgrRating } from 'igniteui-react' ;
117import "igniteui-webcomponents/themes/light/bootstrap.css" ;
128import "./index.css" ;
139
14- // Register components
15- IgcGridLite . register ( ) ;
16- defineComponents ( IgcRatingComponent ) ;
17-
1810const getTimeStamp = ( ) : string => `[${ new Date ( ) . toLocaleTimeString ( ) } ]` ;
1911
2012// Define cellTemplate function outside component
21- const ratingCellTemplate = ( params : any ) => {
22- const rating = document . createElement ( 'igc-rating' ) ;
23- rating . setAttribute ( 'readonly' , '' ) ;
24- rating . setAttribute ( 'step' , '0.01' ) ;
25- rating . setAttribute ( 'value' , params . value . toString ( ) ) ;
26- return rating ;
13+ const ratingCellTemplate = ( ctx : any ) => {
14+ return (
15+ < IgrRating readonly = { true } step = { 0.01 } value = { ctx . value } > </ IgrRating >
16+ ) ;
2717} ;
2818
29- export default function Sample ( ) {
30- const gridRef = React . useRef < any > ( null ) ;
31- const logRef = React . useRef < HTMLDivElement > ( null ) ;
32- const [ log , setLog ] = React . useState < string [ ] > ( [ ] ) ;
19+ export default function GridLiteSortConfigEvents ( ) {
20+ const gridRef = useRef < IgrGridLite > ( null ) ;
21+ const logRef = useRef < HTMLDivElement > ( null ) ;
22+ const [ data , setData ] = useState < ProductInfo [ ] > ( [ ] ) ;
23+ const [ log , setLog ] = useState < string [ ] > ( [ ] ) ;
3324
34- const updateLog = React . useCallback ( ( message : string ) => {
25+ const updateLog = useCallback ( ( message : string ) => {
3526 setLog ( prevLog => {
3627 const newLog = [ ...prevLog ] ;
3728 if ( newLog . length > 10 ) {
@@ -42,74 +33,60 @@ export default function Sample() {
4233 } ) ;
4334 } , [ ] ) ;
4435
45- React . useEffect ( ( ) => {
36+ useEffect ( ( ) => {
4637 if ( logRef . current ) {
4738 logRef . current . scrollTop = logRef . current . scrollHeight ;
4839 }
4940 } , [ log ] ) ;
5041
51- const handleSorting = React . useCallback ( ( event : any ) => {
52- const { detail, type } = event ;
42+ const handleSorting = useCallback ( ( event : CustomEvent < any > ) => {
43+ const { detail } = event ;
5344 const allowedColumns = [ 'price' , 'total' , 'sold' ] ;
5445
5546 if ( ! allowedColumns . includes ( detail . key ) ) {
5647 event . preventDefault ( ) ;
5748 updateLog (
58- `${ getTimeStamp ( ) } :: Event '${ type } ' :: Sort operation was prevented for column '${ detail . key } '`
49+ `${ getTimeStamp ( ) } :: Event 'sorting ' :: Sort operation was prevented for column '${ detail . key } '`
5950 ) ;
6051 } else {
6152 updateLog (
62- `${ getTimeStamp ( ) } :: Event '${ type } ' :: Column '${ detail . key } ' is being sorted with expression: ${ JSON . stringify ( detail ) } `
53+ `${ getTimeStamp ( ) } :: Event 'sorting ' :: Column '${ detail . key } ' is being sorted with expression: ${ JSON . stringify ( detail ) } `
6354 ) ;
6455 }
6556 } , [ updateLog ] ) ;
6657
67- const handleSorted = React . useCallback ( ( event : any ) => {
68- const { detail, type } = event ;
58+ const handleSorted = useCallback ( ( event : CustomEvent < any > ) => {
59+ const { detail } = event ;
6960 updateLog (
70- `${ getTimeStamp ( ) } :: Event '${ type } ' :: Column '${ detail . key } ' was sorted with expression: ${ JSON . stringify ( detail ) } `
61+ `${ getTimeStamp ( ) } :: Event 'sorted ' :: Column '${ detail . key } ' was sorted with expression: ${ JSON . stringify ( detail ) } `
7162 ) ;
7263 } , [ updateLog ] ) ;
7364
74- React . useEffect ( ( ) => {
75- if ( gridRef . current ) {
76- const dataService = new GridLiteDataService ( ) ;
77- const data : ProductInfo [ ] = dataService . generateProducts ( 100 ) ;
78- gridRef . current . data = data ;
79-
80- // Listen to sorting events
81- gridRef . current . addEventListener ( 'sorting' , handleSorting ) ;
82- gridRef . current . addEventListener ( 'sorted' , handleSorted ) ;
83-
84- return ( ) => {
85- if ( gridRef . current ) {
86- gridRef . current . removeEventListener ( 'sorting' , handleSorting ) ;
87- gridRef . current . removeEventListener ( 'sorted' , handleSorted ) ;
88- }
89- } ;
90- }
91- } , [ handleSorting , handleSorted ] ) ;
92-
93- const logContent = log
94- . map ( entry => `<p><code>${ entry } </code></p>` )
95- . join ( '' ) ;
65+ useEffect ( ( ) => {
66+ const dataService = new GridLiteDataService ( ) ;
67+ setData ( dataService . generateProducts ( 100 ) ) ;
68+ } , [ ] ) ;
9669
9770 return (
9871 < div className = "container sample ig-typography" >
9972 < div className = "grid-lite-wrapper" >
100- < igc-grid-lite ref = { gridRef } id = "grid-lite" >
101- < igc-grid-lite-column field = "name" header = "Name" sortable > </ igc-grid-lite-column >
102- < igc-grid-lite-column field = "price" data-type = "number" header = "Price" sortable > </ igc-grid-lite-column >
103- < igc-grid-lite-column field = "rating" data-type = "number" header = "Rating" sortable cellTemplate = { ratingCellTemplate } > </ igc-grid-lite-column >
104- < igc-grid-lite-column field = "sold" data-type = "number" header = "Sold" sortable > </ igc-grid-lite-column >
105- < igc-grid-lite-column field = "total" data-type = "number" header = "Total" sortable > </ igc-grid-lite-column >
106- </ igc-grid-lite >
107- < div ref = { logRef } className = "log" id = "log" dangerouslySetInnerHTML = { { __html : logContent } } > </ div >
73+ < IgrGridLite ref = { gridRef } id = "grid-lite" data = { data } onSorting = { handleSorting } onSorted = { handleSorted } >
74+ < IgrGridLiteColumn field = "name" header = "Name" sortable = { true } > </ IgrGridLiteColumn >
75+ < IgrGridLiteColumn field = "price" dataType = "number" header = "Price" sortable = { true } > </ IgrGridLiteColumn >
76+ < IgrGridLiteColumn field = "rating" dataType = "number" header = "Rating" sortable = { true } cellTemplate = { ratingCellTemplate } > </ IgrGridLiteColumn >
77+ < IgrGridLiteColumn field = "sold" dataType = "number" header = "Sold" sortable = { true } > </ IgrGridLiteColumn >
78+ < IgrGridLiteColumn field = "total" dataType = "number" header = "Total" sortable = { true } > </ IgrGridLiteColumn >
79+ </ IgrGridLite >
80+ < div ref = { logRef } className = "log" id = "log" >
81+ { log . map ( ( entry , index ) => (
82+ < p key = { index } > < code > { entry } </ code > </ p >
83+ ) ) }
84+ </ div >
10885 </ div >
10986 </ div >
11087 ) ;
11188}
11289
11390// rendering above component in the React DOM
11491const root = ReactDOM . createRoot ( document . getElementById ( 'root' ) ) ;
115- root . render ( < Sample /> ) ;
92+ root . render ( < GridLiteSortConfigEvents /> ) ;
0 commit comments