import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { generatedata } from './generatedata';
import JqxDataTable, { IDataTableProps, jqx } from 'jqwidgets-scripts/jqwidgets-react-tsx/jqxdatatable';
import JqxInput from 'jqwidgets-scripts/jqwidgets-react-tsx/jqxinput';
import 'jqwidgets-scripts/jqwidgets-react-tsx/jqxdropdownlist';
import 'jqwidgets-scripts/jqwidgets-react-tsx/jqxslider';
class App extends React.PureComponent<{}, IDataTableProps> {
constructor(props: {}) {
super(props);
const data: any[] = generatedata(200, false);
const source: any = {
dataFields: [
{ name: 'firstname', type: 'string' },
{ name: 'lastname', type: 'string' },
{ name: 'productname', type: 'string' },
{ name: 'available', type: 'bool' },
{ name: 'quantity', type: 'number' },
{ name: 'price', type: 'number' },
{ name: 'date', type: 'date' }
],
dataType: 'array',
localData: data
};
const getEditorDataAdapter = (dataField: any): any => {
const editorSource = {
dataFields: [
{ name: 'firstname', type: 'string' },
{ name: 'lastname', type: 'string' },
{ name: 'productname', type: 'string' },
{ name: 'available', type: 'bool' },
{ name: 'quantity', type: 'number' },
{ name: 'price', type: 'number' },
{ name: 'date', type: 'date' }
],
dataType: 'array',
localData: data
};
const dataAdapter = new jqx.dataAdapter(editorSource, { uniqueDataFields: [dataField] });
return dataAdapter;
};
const columns: IDataTableProps['columns'] = [
{
columnType: 'template',
createEditor: (row: any, cellvalue: any, editor: any, cellText: any, width: any, height: any): void => {
ReactDOM.render(
,
editor[0]
);
editor.find('input')[0].style.paddingLeft = '4px';
editor.find('input')[0].style.border = 'none';
},
dataField: 'firstname',
getEditorValue: (row: any, cellvalue: any, editor: any): void => {
// return the editor's value.
return editor.find('input').val();
},
initEditor: (row: any, cellvalue: any, editor: any, celltext: any, width: any, height: any): void => {
// set the editor's current value. The callback is called each time the editor is displayed.
const inputField = editor.find('input');
inputField.val(cellvalue);
},
text: 'First Name',
width: 180
},
{
columnType: 'template',
createEditor: (row: any, cellvalue: any, editor: any, cellText: any, width: any, height: any): void => {
// construct the editor.
ReactDOM.render(
,
editor[0]
);
editor.find('input')[0].style.paddingLeft = '4px';
editor.find('input')[0].style.border = 'none';
},
dataField: 'lastname',
getEditorValue: (row: any, cellvalue: any, editor: any): void => {
// return the editor's value.
return editor.find('input').val();
},
initEditor: (row: any, cellvalue: any, editor: any, celltext: any, width: any, height: any): void => {
const inputField = editor.find('input');
inputField.val(cellvalue);
},
text: 'Last Name',
width: 180
},
{
columnType: 'template',
createEditor: (row: any, cellvalue: any, editor: any, cellText: any, width: any, height: any): void => {
// construct the editor.
editor.jqxDropDownList({ source: getEditorDataAdapter('productname'), displayMember: 'productname', valueMember: 'productname', width, height });
},
dataField: 'productname',
getEditorValue: (row: any, cellvalue: any, editor: any): void => {
// return the editor's value.
return editor.val();
},
initEditor: (row: any, cellvalue: any, editor: any, celltext: any, width: any, height: any): void => {
// set the editor's current value. The callback is called each time the editor is displayed.
editor.jqxDropDownList({ width, height });
editor.val(cellvalue);
},
text: 'Products'
},
{
columnType: 'custom',
createEditor: (row: any, cellvalue: any, editor: any, cellText: any, width: any, height: any): void => {
// construct the editor.
editor.jqxSlider({ step: 1, mode: 'fixed', tooltip: true, showTicks: false, min: 0, max: 30, width, height });
},
dataField: 'quantity',
getEditorValue: (row: any, cellvalue: any, editor: any): void => {
// return the editor's value.
return editor.val();
},
initEditor: (row: any, cellvalue: any, editor: any, celltext: any, width: any, height: any): void => {
// set the editor's current value. The callback is called each time the editor is displayed.
let value = parseInt(cellvalue, 10);
if (isNaN(value)) {
value = 0;
}
editor.jqxSlider('setValue', value);
},
text: 'Quantity',
width: 200
}
];
this.state = {
columns,
source: new jqx.dataAdapter(source)
};
}
public render() {
return (
);
}
}
export default App;