Telerik Forums
KendoReact Forum
6 answers
515 views

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'));
Stefan
Telerik team
 answered on 17 Oct 2018
3 answers
115 views

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?


Stefan
Telerik team
 answered on 17 Oct 2018
3 answers
203 views
I am using Kendo DatePicker control in React Bootstrap. It seems to be working fine, but when I try to change the year it is not working. I am using React 16+ and Bootstrap 3.3.
below is the scrrenshot for same
Garry
Top achievements
Rank 1
 answered on 14 Oct 2018
1 answer
123 views

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?

 

 

Stefan
Telerik team
 answered on 12 Oct 2018
3 answers
135 views

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

Stefan
Telerik team
 answered on 12 Oct 2018
7 answers
272 views

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.

Stefan
Telerik team
 answered on 11 Oct 2018
1 answer
197 views
Has anybody been able to make a static row either at the top or the bottom of their grid? I am working on a time entry application and would like to have a static row in order to show totals for each day of the week. Is something like this possible?
Stefan
Telerik team
 answered on 08 Oct 2018
8 answers
221 views

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
    });
  }
public render(): React.ReactElement<IGanttViewProps> {
    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!

thanik
Top achievements
Rank 1
 answered on 05 Oct 2018
4 answers
218 views

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.

Pavel
Top achievements
Rank 1
 answered on 04 Oct 2018
2 answers
375 views

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)

IT Dept
Top achievements
Rank 1
 answered on 26 Sep 2018
Narrow your results
Selected tags
Tags
General Discussions
Grid
Wrappers for React
Charts
Scheduler
Filter 
DropDownList
Form
DatePicker
Styling / Themes
Editor
TreeList
Styling
PDF Processing
ComboBox
Excel Export
Dialog
Input
TreeView
Upload
Drawer
Button
Drag and Drop
MultiSelect
Tooltip
Accessibility
NumericTextBox
Checkbox
Menu
Gantt
DateTimePicker
PDF Viewer
Popup
Window
AutoComplete
DateInput
Sortable
Data Query
Licensing
TabStrip
Drawing
Calendar
Pager 
Labels 
Localization
TimePicker
GridLayout
FontIcon
Animation
PanelBar
TaskBoard
PivotGrid
Card
DropDownButton
Conversational UI 
DateRangePicker
Splitter
Badge 
Security
Slider
Spreadsheet
ContextMenu
MultiViewCalendar
Stepper
MultiColumnComboBox
MultiSelectTree
TextBox
AppBar
File Saver
ListView
MaskedTextBox
RadioButton
Switch
TextArea
Toolbar
DropDownTree
TileLayout
Map
Avatar
Date Math
Gauge
RadioGroup
RangeSlider
Rating
Loader
ExpansionPanel
SvgIcon
Typography
ProgressBar
ScrollView
Popover
StockChart
RadialGauge
Server Components
AIPrompt
Page Templates / Building Blocks
AI Coding Assistant
Chat
ColorGradient
ColorPalette
ColorPicker
Notification
Ripple
Skeleton
ButtonGroup
Chip
ChipList
FloatingActionButton
SplitButton
ActionSheet
Barcode
QR Code
FlatColorPicker
Signature
BottomNavigation
BreadCrumb
StackLayout
Timeline
ListBox
ChunkProgressBar
Sparkline
FileManager
ArcGauge
CircularGauge
LinearGauge
ExternalDropZone
OrgChart
Sankey
VS Code Extension
InlineAIPrompt
SpeechToTextButton
Chart Wizard
Agentic UI Generator
SmartPasteButton
PromptBox
SegmentedControl
LLM Kit
OTP Input
+? more
Top users last month
Simon
Top achievements
Rank 2
Iron
Iron
Bob
Top achievements
Rank 3
Iron
Iron
Veteran
Marco
Top achievements
Rank 4
Iron
Iron
Iron
Grant
Top achievements
Rank 3
Iron
Iron
Iron
Kao Hung
Top achievements
Rank 1
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Simon
Top achievements
Rank 2
Iron
Iron
Bob
Top achievements
Rank 3
Iron
Iron
Veteran
Marco
Top achievements
Rank 4
Iron
Iron
Iron
Grant
Top achievements
Rank 3
Iron
Iron
Iron
Kao Hung
Top achievements
Rank 1
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?