Under Review
Last Updated: 20 May 2022 08:33 by ADMIN

In our unit tests, we sometimes want to be able to use the ByTestId methods of the React Testing Library to find bits of DOM created by a Kendo component.  However, setting a data-testid attribute (or really any data- attribute) on a Kendo component does not always result in the attribute appearing anywhere in the final DOM.

To demonstrate, below is a test suite (also included in the zip) where I tried putting a data-testid attribute on the Kendo components Input, TextArea, Checkbox, Slider, SliderLabel, MultiSelect, and DatePicker, then checked if the attribute appeared in the rendered DOM.  The tests for Input, TextArea, and Checkbox are successful.  The ones for Slider, SliderLabel, MultiSelect, and DatePicker are not.

import { render, screen } from '@testing-library/react';
import { Input, TextArea, Checkbox, Slider, SliderLabel } from '@progress/kendo-react-inputs';
import { MultiSelect } from '@progress/kendo-react-dropdowns';
import { DatePicker } from '@progress/kendo-react-dateinputs';

// SUCCEEDS
describe('Kendo Input', () => {
    it('supports data attributes', () => {
        render(
            <Input data-testid="the-input" />
        );

        const input = screen.queryByTestId('the-input');
        expect(input).toBeTruthy();
    });
});

// SUCCEEDS
describe('Kendo TextArea', () => {
    it('supports data attributes', () => {
        render(
            <TextArea data-testid="the-text-area" />
        );

        const textarea = screen.queryByTestId('the-text-area');
        expect(textarea).toBeTruthy();
    });
});

// SUCCEEDS
describe('Kendo Checkbox', () => {
    it('supports data attributes', () => {
        render(
            <Checkbox label={"Chad"} data-testid="the-checkbox" />
        );

        const checkbox = screen.queryByTestId('the-checkbox');
        expect(checkbox).toBeTruthy();
    });
});

// FAILS
describe('Kendo Slider & SliderLabel', () => {
    it('supports data attributes', () => {
        render(
            <Slider min={1} max={2} data-testid="slider-root">
                <SliderLabel position={1} data-testid="slider-label-1">One Fish</SliderLabel>
                <SliderLabel position={2} data-testid="slider-label-2">Two Fish</SliderLabel>
            </Slider>
        );

        const sliderRoot = screen.queryByTestId('slider-root');
        const sliderLabel1 = screen.queryByTestId('slider-label-1');
        const sliderLabel2 = screen.queryByTestId('slider-label-2');

        // test them all at once so we can know the full scope of our failure/success
        expect({
            sliderRoot,
            sliderLabel1,
            sliderLabel2
        }).toMatchObject({
            sliderRoot:   expect.anything(), // don't be null or undefined
            sliderLabel1: expect.anything(), // don't be null or undefined
            sliderLabel2: expect.anything()  // don't be null or undefined
        });
    });
});

// FAILS
describe('Kendo MultiSelect', () => {
    it('supports data attributes', () => {
        render(
            <MultiSelect data-testid="the-multi-select" />
        );

        const multiselect = screen.queryByTestId('the-multi-select');
        expect(multiselect).toBeTruthy();
    });
});

// FAILS
describe('Kendo DatePicker', () => {
    it('supports data attributes', () => {
        render(
            <DatePicker data-testid="the-date-picker" />
        );

        const datepicker = screen.queryByTestId('the-date-picker');
        expect(datepicker).toBeTruthy();
    });
});
While it is theoretically possible the problem is limited to just Slider, SliderLabel, MultiSelect, and DatePicker, I highly doubt it.
Under Review
Last Updated: 17 May 2022 13:08 by Kate

A little thing, but users remember position of UI elements more than anything else. The filter buttons on the grid by default are not in the same place though for all filter types.

It would be preferable if the filter buttons were all on the same side, regardless of the filter type (e.g., some types put it on the left, while others put it on the right). Pictures below for context.

 

 

Under Review
Last Updated: 09 May 2022 10:10 by ADMIN

The feature request:

Kendo react scheduler: in a week/work week view if an event created with start time at 01:00 and ends at 23:00 for example and displayed only working hours:

the event will not visible until we enable all days hours visible:

The issue is described here:

https://www.telerik.com/forums/kendo-react-scheduler-issue-event-is-not-visible-if-start-date-outside-of-working-hours-range

 

Under Review
Last Updated: 26 Apr 2022 08:32 by ADMIN
Created by: James
Comments: 1
Type: Feature Request
0

Hi there,

I can see there is a column chooser component for the Angular Data Grid e.g. https://www.telerik.com/kendo-angular-ui/components/grid/columns/menu/#toc-column-chooser-item but there is not an equivalent for the React Data Grid (unless you code it yourself).

The DevExpress React Grid does have this feature https://devexpress.github.io/devextreme-reactive/react/grid/docs/guides/column-visibility/ so we were wondering if such a thing is planned React Data Grid?

Thanks very much,

James

Under Review
Last Updated: 19 Apr 2022 11:58 by ADMIN
Introducing expandIcon/collapseIcon or expandIconClass/collapseIconClass properties for the Grid, so that custom icons can be set
Under Review
Last Updated: 13 Apr 2022 14:20 by ADMIN

The `Surface` component, in the drawing module, has a few exposed event handlers. It exposes click, mouse enter and mouse leave. It does not expose a handler for mouse scroll wheel movement.

You can see the exposed handlers in the `SurfaceOptions` type ...

SurfaceOptions - React Drawing Component | KendoReact API (telerik.com)

Can you please expose the mouse scroll event handler?

Under Review
Last Updated: 11 Apr 2022 07:32 by ADMIN

A TimePicker control will take all scroll events if the mouse cursor is over it, whether the element has focus or not, and prevent the scroll from bubbling up to the page. This prevents a page from scrolling as soon as the mouse cursor touches a TimePicker.

Using Kendo rect v5.1.0 in FireFox v98 on OSX. (Issue does not happen in Chrome)

You can view the problem in the demo page: https://www.telerik.com/kendo-react-ui/components/dateinputs/timepicker/
Just try to scroll down the view, and as soon as the TimePicker is under the mouse cursor, the page can no longer be scrolled until you move the cursor off the control.

Under Review
Last Updated: 08 Mar 2022 13:38 by ADMIN

Currently, you cannot specify a custom icon for `MenuItem`, e.g. a Material Design icon, as the `icon` prop only accepts the name of an icon from the Kendo font icons.

So please can you add a `iconClass` prop just like Button so we are able to use an alternative icon set.

Thanks.

Under Review
Last Updated: 04 Mar 2022 13:31 by ADMIN

All of the Kendo components that "hide" content (tab views, collapse panels, etc) don't actually hide any content. They require us to not render any children.


<ExpansionPanel
  {expanded === item.id && (
    <ExpansionPanelContent>

This just strikes me as an odd design decision. I guess I don't understand the point of these components if they don't do the 1 thing they are supposed to do; hide portions of the content.

Un-rendering the content is usually not desirable. The contents are often still important. Possibly for SEO purposes, A11y, or if they are part of a Form:


<Form
  render={() => {
    <FormElement>
      <ExpansionPanel>
        {expanded === item.id && (
          <ExpansionPanelContent>
            <Field
                name={"firstName"}
                component={Input}
                validator={() => 'always invalid'}
              />
          </ExpansionPanelContent>
      </ExpansionPanel>
    </FormElement>
  }}
/>

This makes the Form valid as long as the panel is collapsed.

 

Can check out how Bootstrap collapse panels work to see how most people would expect these components to behave. The contents is rendered into the DOM and JS and CSS are used to hide it. There should be a way to achieve this same behavior with Kendo.

As a workaround I end up having to do my own CSS/SASS to hide the contents


.k-expander {
  .k-expander-content-wrapper {
    height: 0;
    overflow: hidden;
  }

  &.k-expanded {
    .k-expander-content-wrapper {
      height: auto;
    }  
  }
}

Under Review
Last Updated: 28 Feb 2022 18:01 by ADMIN

Hi,

Unfortunately,  the KendoReact PivotGrid sorting is currently supported only for string values. This means that even if you set the field type to "date", the sorting will still be applied as if the field were a string. You can see that in this example: https://dojo.telerik.com/oZoTuMIC/55

Please extend your sorting mechanism so that the sorting covers types such as dates and numbers too. Please also consider the user's language when implementing this sorting. We receive date fields in the format yyyy-mm-dd and they should then be displayed in the user language in the UI. For example in German dd.mm.yyyy (i.e. 21.11.2021) or in English 11/21/2021. And please offer this feature for local data binding too.

Regards,

Oliver

 

Under Review
Last Updated: 27 Feb 2022 09:54 by ADMIN
Created by: Ting
Comments: 1
Type: Feature Request
0

Feature request

I am using the `AutoComplete` component to implement a search input and I want to be notified when the user selects an item (via mouse click or keyboard navigation) from the popup list.

I found an undocumented prop `handleItemSelect` on the `AutoCompleteHandle` ref object, and used it to implement my feature successfully.

Please can you expose `handleItemSelect` as an event on the `AutoCompleteProps` API.

Under Review
Last Updated: 26 Feb 2022 18:21 by ADMIN

Hello, 

I'm trying to implement an accessible table using your Grid React component. The idea is for the users to be able to navigate the table using the keyboard if need be. Because we are a government contractor we have to make our product accessible and, testable using the Government issued tool for testing, ANDI

When I use a normal table, I can implement scopes in the table header, either for the column or the row and thus create relationships between headers and cells as well as, use the keyboard to navigate the entire table.

When the same table is implemented with the Grid component, there are no scopes in the header then again, both header and body are separate even though they reside inside a div with role=grid on it which in turn, contains two divs, one for the header and one for the body each in turn, implementing a table: one for what would be the headers and one for what would be the body. I'm attaching screenshots even though I'm sure you know the product.

The fact that both the <thead> and the <tbody> reside in different places, even though they are within the grid, makes it impossible to add associations furthermore, we're using a data-table and the grid. I tried using different props but, as long as both the header and the body are separate, the ANDI tools can't find the table.

Question is, is there a way to make this table truly accessible just as a one created using the semantic table tags?

Under Review
Last Updated: 25 Feb 2022 11:50 by ADMIN
Created by: David
Comments: 3
Type: Feature Request
2

Hi,

The KendoReact NumericTextBox responds to mousewheel events when in focus. It is very easy to focus on the textbox, type in a value, scroll up or down and inadvertently change the value just entered. This behaviour can be seen clearly on any of the Telerik example pages e.g. https://www.telerik.com/kendo-react-ui/components/inputs/numerictextbox/predefined-step/

I think this behaviour should be disabled by default if spinners are set to default, but otherwise I would like a property to disable it. The normal event handlers which could be used to disable this behaviour are not available on the NumericTextBoxProps.

Kind regards,

David

Under Review
Last Updated: 21 Feb 2022 14:19 by ADMIN

Hello,

Our team has an issue with KendoReact Data Grid Control https://www.telerik.com/kendo-react-ui/components/grid/

Data disappears when the user groups the grid by any column and scrolls down to the end. 

When the user scrolls up a bit from the bottom of the grid data blinks.
TreeList control doesn't look to be a good alternative in our case, because we need a grid with group, filter and sort functionality. Grid should work with thousands of records. Customer requires virtual scroll (paging can’t be used).

This issue can be reproduced when the grid has groupable option enabled. 

Virtual scroll works as expected when groupable is set to false.

Stackblitz example:https://stackblitz.com/edit/react-g7rdjm?file=app%2Fmain.tsx

Can you please point us to the solution?

Under Review
Last Updated: 09 Feb 2022 13:45 by ADMIN

Hello,

Our team is using MobX-State-Tree (MST) and KendoReact TreeList control with virtual scrolling enabled. According to documentation MST model stores data as an observable array (https://mobx-state-tree.js.org/API/#array and https://mobx.js.org/api.html#observablearray).

The MST model’s field ‘tree’ is not a regular array, but a LegacyObservableArray.

From UI standpoint: 

  • initially all tree nodes are collapsed

  • user clicks on i.e. 3rd tree node

  • selection is not displayed on any tree node (3rd node expected to be selected)

  • user expands 1st tree node - selection is set on the 3rd tree node

The following warning appears in the browser console. 

Warning: Failed prop type: Invalid prop `data` of type `object` supplied to `TreeList`, expected `array`.

    in TreeList (created by wrappedComponent)

    in wrappedComponent (created by wrappedComponent)

    in div (created by wrappedComponent)

    in div (created by wrappedComponent)

    in wrappedComponent

Model is defined as:

const TreeViewModel = types

    .model('TreeViewModel', {

        selectedItemUUID: types.maybe(types.string),

        tree: types.optional(types.array(TreeNodeModel), []),

        isLoaded: types.maybe(types.optional(types.boolean, false)),

        treeTypes: types.optional(types.array(TreeNodeTypeModel), []),

    })

    .views((self) => ({

        get treeCollection(): any {      

            return self.tree;

        },

    }))

Component is defined as:

        return (<>

            {!viewModel.isLoaded && loadingPanel}

            <div className='treeListContainer' ref={stageCanvasRef}>

                {treeListContainerHeight && <TreeList

                    style={{ maxHeight: `${treeListContainerHeight}px`, overflow: 'auto', }}

                    data={viewModel.treeCollection}

                    expandField={expandField}

                    subItemsField={subItemsField}

                    columns={columns}

                    selectedField={selectedField}

                    rowHeight={40}

                    scrollable="virtual"

                />}

            </div>

        </>);

The following workaround allows converting an observable array to a regular array.

    .views((self) => ({

        get treeCollection(): any {      

            return JSON.parse(JSON.stringify(self.tree));    // or self.tree.slice()

        },

    }))

This solution affects performance due to array copy. 

Besides this TreeList uses an array copy. User’s selection and expanding don’t trigger related changes in the initial observable array in the model.

Related event handlers (i.e. onSelectionChange, onExpandChange) should be extended to make appropriate changes in the MST model.

Can you please extend KendoReact controls to support observable arrays?

Is there a better solution?


Under Review
Last Updated: 07 Feb 2022 11:12 by ADMIN

I'd like to turn off even/odd row highlighting for the Grid and use cell border instead.

I can do it by learning kendo css classes and override particular properties for certain classes but... I have many different vendors for different components and it's so a pitty to learn all the css classes hell...

It'd be supper cool to have something like turnOffAlternation/alternatingRows and showCellBorder/showBorders  attributes on the Grid.

Under Review
Last Updated: 04 Feb 2022 08:25 by ADMIN

Hello,

I am using React Multiselect in my project. I need every item in the multiselect component selectable with checkboxes and multiselect itself filterable. It would be very nice if you add this features to Multiselect component as built in. There is a workaround which I share links below for this but we need to do all this stuff manually.

1. Checkboxes:

 

2. Filterable

 

Thanks

Under Review
Last Updated: 02 Feb 2022 12:30 by ADMIN
Per the attached support ticket non consecutive dates at a custom interval are not currently supported by kendo react scheduler. I have a use case that would benefit from being able to display every 7 days so that you can plan and schedule across weeks rather than each individual day.
Under Review
Last Updated: 07 Jan 2022 11:24 by ADMIN
Please add a master list of icons from the WebComponentsIcons font so I can use the icons in Adobe XD. It could be an XD file, or a way to copy the icon glyph from the website like Font Awesome has.
Under Review
Last Updated: 13 Jul 2021 06:00 by ADMIN

Actual Result:

While navigating in table, Narrator is not announcing as 'enter table' and it is also not announcing rows and column information. while navigating in table, With arrow keys or table navigation keys or tab key, Narrator is announcing as 'end of line/blank'.

With caps-arrow keys, Narrator is giving row and column information.

 

Expected 
While navigating in table, Narrator should announce as enter table and it should also give row and column information. And while navigating with arrow keys or table navigation keys or tab key, Narrator should not announce as 'end of line/blank' instead it should give row or column information


User Impact 
Visually impaired users who rely on screen reader will face difficulties to determining Row/Column information of a cell.
1 2