Due to business requirement, I need to include more than 30 Kendo Editor components in my React project, but the it is too slow to complete loading the page.
In my below testing code, it takes more than 10 seconds to load 50 empty Editors. I'm suspecting it is due to loading the the font icon of the toolbar of editor.
in Chrome dev tool, loading the embedded 'WebconponentsIcons.ttf' file takes 7 seconds. The font file is used to render the icons in toolbar of Editors as documented in https://docs.telerik.com/kendo-ui/styles-and-layout/icons-web
Searching in the forum, there is a similar thread on it for JQuery https://www.telerik.com/forums/editor-is-slow-with-toolbar-enabled. in test code of that thread https://dojo.telerik.com/aMUcArob/7, but the font file is get by separate HTTP request, rather than embedded in other resources.
Editor inline mode has the problem as well.
Any idea on how to resolve it?
Kendo UI version:
"@progress/kendo-editor-react-wrapper": "2018.2.620",
"@progress/kendo-theme-bootstrap": "^2.13.6",
"@progress/kendo-theme-default": "^2.54.0",
"@progress/kendo-ui": "2018.2.620",
RichTextEditor
import * as React from 'react';import '@progress/kendo-ui';import { Editor } from '@progress/kendo-editor-react-wrapper';interface IProps { onChanged?: Function; // this function will be called when editor losing focus (on blur) initialValue?: string; // a html string, such as '<strong>Hello World!</strong>'}export class RichTextEditor extends React.Component<IProps> { private initialValue: string; constructor(props: IProps) { super(props); this.initialValue = 'This is a simple sample to show initial value in the rich text editor.' } public render() { return ( <div> <Editor> <textarea> {this.initialValue} </textarea> </Editor> </div > ); }}
App
class App extends React.Component<{}, {}> { public render() { return ( <div> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> <RichTextEditor /> </div> ); }}ReactDOM.render( <App />, document.getElementById('react-app'));
I've found that it doesn't seem to be possible to create a Container GridColumn component. For example:
https://stackblitz.com/edit/react-5wjdz4?file=app/main.js
Here I want to create a column which has a button that pops up an alert when clicked. When I do so with the following code, it works fine:
<Column title="Alert" width="75px" cell={(props) => <td><button onClick={() => alert('This is a message')}>Alert</button></td>} />However, I don't want to include the cell, etc. props every time I want to include a column like this in a grid. I'd much rather create a container component I can just pass the message to:
<AlertColumn message="This is a message from a container component" />
With the component class code being:
class AlertColumn extends React.Component { render() { <Column title="Alert2" width="75px" cell={() => <td><button onClick={() => alert(this.props.message)}>Alert</button></td>} /> }}
However, as you can see from my posted StackBlitz, the column returned by the container component does not render. I've also tried inheriting from the GridColumn component. Is there any way around this?

Hi,
i have a button in a main window. Click on a button opening a kendo pop up. In a Pop up i am drawing signature using kendo.drawing.drawDOM.
When i resize the popup window drawn signature is not resizing(not responsive). Is there any solution?

is there any sample how to build responsive menu ? I've added a few menu items but responsive does not work - it is mess
thanks

Two specific questions:
1. Does react kendo grid support a filter button in the same cell as the header cell? As in the jquery demo here: https://demos.telerik.com/kendo-ui/grid/filter-menu-customization. I could not find a filterable.mode property in the kendo components.
2. Does the react kendo grid support multi-column support? As in the jquery demo here: https://demos.telerik.com/kendo-ui/grid/multicolumnheaders
A more general question:
3. Are there other known limitations between the different implementations? I realize that's a complicated question.


Hello,
Straight to the problem:
My parent component prepares the data for the Gantt
async componentDidMount() { const items = await this.utility.GetListItems(); const taskDataSourceWithInformation = await this.utility.GetKendoGanttDataSource(items); this.setState({ data: taskDataSourceWithInformation, allProjects: items }); } const result = this.state.data ? ( <div> <IconButton onClick={() => this.setState({showPanel: true})} /> <GanttContainer data={this.state.data} /> </div> ) : null; return result; }
First problem: When I click the button, that sets the showPanel variable to true (it does only that), the Gantt loses all its data, then when I click one of the Gantt view buttons, the data shows back.
However, i managed to workaround that with this method (i am not proud of it). I will appreciate it, if you give me better solution.
private onFilterButtonClick = async () => { this.selected = $("li.k-state-selected"); this.setState( { showPanel:true }, () => { $("li." + this.selected[0].classList[1]).click(); } );};
Ok. Now i want to filter my Gantt data. When i pass different, filtered data source to the "GanttContainer" components (which contains the Gantt), it does not update.
I tried to set it with setDataSource, but i dont know where that must happen and how to do it.
Can you help me with both my problems please.
Best Regards!
Hello,
Is it possible to use functional HOC for CustomGridDetailRow like the one provided in the documentation (below) which is not leading to extra rendering of GridDetailRow?
Or it's a must to use only an instance of React.Component class/GridDetailRow class?
class CustomGridDetailRow extends GridDetailRow {
render() {
const detailData = this.props.dataItem.MasterField2;
return (
<div> This is detail template with another grid inside it <Grid scrollable="none" data={detailData} /></div>
);
}
}
<Grid data={this.state.data} detail={CustomGridDetailRow} >
<GridColumn field="MasterField1" />
</Grid>
The point is that if I try to use functional HOC inside detail prop (or just a function returning CustomGridComponent) there're some issues with rendering DetailRow (like additional re-rendering during scrolling). It seems that this variable inside detail property should be an instance of React.Component/GridDetailRow class, otherwise Grid component can't perform some internal logic based on lifecycle hooks.
Thanks in advance for any response.
I'm using the Kendo React Grid and Kendo React DateInput in an application and both, upon replacing the wrapped grid/DateInput components began causing my Jest tests to fail, not even rendering the mounted component.
Every test suite that mounts a component with a DateInput or Grid in the component tree fails with this error:
TypeError: _this.element.setCustomValidity is not a function 124 | ...passedProps, 125 | } as any; > 126 | wrapper = Enzyme.mount( | ^ 127 | <Provider store={store}> 128 | <MyComponent {...props} /> 129 | </Provider> at DateInput._this.setValidity (node_modules/@progress/kendo-react-dateinputs/src/dateinput/DateInput.tsx:387:26) at DateInput.Object.<anonymous>.DateInput.componentDidMount (node_modules/@progress/kendo-react-dateinputs/src/dateinput/DateInput.tsx:150:14) at commitLifeCycles (node_modules/react-dom/cjs/react-dom.development.js:14685:22) at commitAllLifeCycles (node_modules/react-dom/cjs/react-dom.development.js:15905:7) at HTMLUnknownElement.callCallback (node_modules/react-dom/cjs/react-dom.development.js:145:14) at invokeEventListeners (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:193:27) at HTMLUnknownElementImpl._dispatch (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:119:9) at HTMLUnknownElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:82:17) at HTMLUnknownElementImpl.dispatchEvent (node_modules/jsdom/lib/jsdom/living/nodes/HTMLElement-impl.js:30:27) at HTMLUnknownElement.dispatchEvent (node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js:157:21) at Object.invokeGuardedCallbackDev (node_modules/react-dom/cjs/react-dom.development.js:195:16) at invokeGuardedCallback (node_modules/react-dom/cjs/react-dom.development.js:248:31) at commitRoot (node_modules/react-dom/cjs/react-dom.development.js:16075:7) at completeRoot (node_modules/react-dom/cjs/react-dom.development.js:17463:3) at performWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:17391:9) at performWork (node_modules/react-dom/cjs/react-dom.development.js:17295:7) at performSyncWork (node_modules/react-dom/cjs/react-dom.development.js:17267:3) at requestWork (node_modules/react-dom/cjs/react-dom.development.js:17155:5) at scheduleWork (node_modules/react-dom/cjs/react-dom.development.js:16949:5) at scheduleRootUpdate (node_modules/react-dom/cjs/react-dom.development.js:17637:3) at updateContainerAtExpirationTime (node_modules/react-dom/cjs/react-dom.development.js:17664:10) at updateContainer (node_modules/react-dom/cjs/react-dom.development.js:17691:10) at ReactRoot.Object.<anonymous>.ReactRoot.render (node_modules/react-dom/cjs/react-dom.development.js:17957:3) at node_modules/react-dom/cjs/react-dom.development.js:18097:14 at unbatchedUpdates (node_modules/react-dom/cjs/react-dom.development.js:17518:10) at legacyRenderSubtreeIntoContainer (node_modules/react-dom/cjs/react-dom.development.js:18093:5) at Object.render (node_modules/react-dom/cjs/react-dom.development.js:18152:12) at Object.render (node_modules/enzyme-adapter-react-16/build/ReactSixteenAdapter.js:314:114) at new ReactWrapper (node_modules/enzyme/build/ReactWrapper.js:119:16) at Object.mount (node_modules/enzyme/build/mount.js:21:10) at generateMountedWrapper (ts/apps/myApp/components/MyComponent.test.tsx:126:20) at Object.<anonymous> (ts/apps/myApp/components/MyComponent.test.tsx:330:5)