I am trying to use this as a front end only in NetSuite so I am using the CDN/script only method.
Can you check what's missing in my code as it is not working.
I have tried charts/scheduler/pivot/data grid
hopefully you can add sample codes in the documentation for CDN / Scripts only method.
here is my code:
Charts:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>KendoReact</title>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
<script src="https://unpkg.com/react@16/umd/react.production.min.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js" crossorigin></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prop-types/15.7.2/prop-types.min.js"></script>
<script src="https://unpkg.com/@progress/kendo-date-math/dist/cdn/js/kendo-date-math.js"></script>
<script src="https://unpkg.com/@progress/kendo-drawing/dist/cdn/js/kendo-drawing.js"></script>
<script src="https://unpkg.com/@progress/kendo-licensing/dist/index.js"></script>
<script>
KendoLicensing.setScriptKey(
'censored'
);
</script>
<script src="https://unpkg.com/@progress/kendo-react-intl/dist/cdn/js/kendo-react-intl.js"></script>
<script src="https://unpkg.com/@progress/kendo-react-all/dist/cdn/js/kendo-react-all.js"></script>
<link rel="stylesheet" href="https://unpkg.com/@progress/kendo-theme-default@latest/dist/all.css"></link>
</head>
<body>
<my-app>
<span class="k-icon k-i-loading"></span>
</my-app>
</body>
<script type="text/babel">
const categories = [2002, 2003, 2004];
const series = [
{
name: "India",
data: [3.907, 7.943, 7.848],
},
{
name: "Russian Federation",
data: [4.743, 7.295, 7.175],
},
{
name: "Germany",
data: [0.21, 0.375, 1.161],
},
{
name: "World",
data: [1.988, 2.733, 3.994],
},
];
const areaData = [
{
name: "World",
data: [3.988, 3.733, 3.994],
},
{
name: "Germany",
data: [2.21, 2.375, 2.161],
},
{
name: "Russian Federation",
data: [1.743, 1.295, 1.175],
},
{
name: "India",
data: [0.907, 0.943, 0.848],
},
];
const pieData = [
{
name: "India",
share: 0.24,
},
{
name: "Russian Federation",
share: 0.26,
explode: true,
},
{
name: "Germany",
share: 0.1,
},
{
name: "World",
share: 0.4,
},
];
const ChartContainer = () => (
<>
<div className="row mb-3">
<div className="col-6">
<div className="k-card">
<Chart
style={{
height: 350,
}}
>
<ChartTitle text="Column Chart" />
<ChartLegend position="top" orientation="horizontal" />
<ChartCategoryAxis>
<ChartCategoryAxisItem categories={categories} startAngle={45} />
</ChartCategoryAxis>
<ChartSeries>
{series.map((item, idx) => (
<ChartSeriesItem
key={idx}
type="column"
tooltip={{
visible: true,
}}
data={item.data}
name={item.name}
/>
))}
</ChartSeries>
</Chart>
</div>
</div>
<div className="col-6">
<div className="k-card">
<Chart
style={{
height: 350,
}}
>
<ChartTitle text="Line Chart" />
<ChartLegend position="top" orientation="horizontal" />
<ChartCategoryAxis>
<ChartCategoryAxisItem categories={categories} startAngle={45} />
</ChartCategoryAxis>
<ChartSeries>
{series.map((item, idx) => (
<ChartSeriesItem
key={idx}
type="line"
tooltip={{
visible: true,
}}
data={item.data}
name={item.name}
/>
))}
</ChartSeries>
</Chart>
</div>
</div>
</div>
<div className="row">
<div className="col-6">
<div className="k-card">
<Chart
style={{
height: 350,
}}
>
<ChartTitle text="Area Chart" />
<ChartLegend position="top" orientation="horizontal" />
<ChartCategoryAxis>
<ChartCategoryAxisItem categories={categories} startAngle={45} />
</ChartCategoryAxis>
<ChartSeries>
{areaData.map((item, idx) => (
<ChartSeriesItem
key={idx}
type="area"
tooltip={{
visible: true,
}}
data={item.data}
name={item.name}
/>
))}
</ChartSeries>
</Chart>
</div>
</div>
<div className="col-6">
<div className="k-card">
<Chart
style={{
height: 350,
}}
>
<ChartTitle text="Pie Chart" />
<ChartLegend position="top" orientation="horizontal" />
<ChartSeries>
<ChartSeriesItem
type="pie"
overlay={{
gradient: "sharpBevel",
}}
tooltip={{
visible: true,
}}
data={pieData}
categoryField="name"
field="share"
/>
</ChartSeries>
</Chart>
</div>
</div>
</div>
</>
);
ReactDOM.render(<ChartContainer />, document.querySelector("my-app"));
</script>
</html>
Scheduler:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>KendoReact</title> <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script> <script src="https://unpkg.com/react@16/umd/react.production.min.js" crossorigin></script> <script src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js" crossorigin></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/prop-types/15.7.2/prop-types.min.js"></script> <script src="https://unpkg.com/@progress/kendo-date-math/dist/cdn/js/kendo-date-math.js"></script> <script src="https://unpkg.com/@progress/kendo-drawing/dist/cdn/js/kendo-drawing.js"></script> <script src="https://unpkg.com/@progress/kendo-licensing/dist/index.js"></script> <script> KendoLicensing.setScriptKey( 'censored' ); </script> <script src="https://unpkg.com/@progress/kendo-react-intl/dist/cdn/js/kendo-react-intl.js"></script> <script src="https://unpkg.com/@progress/kendo-react-all/dist/cdn/js/kendo-react-all.js"></script> <link rel="stylesheet" href="https://unpkg.com/@progress/kendo-theme-default@latest/dist/all.css"></link> </head> <body> <my-app> <span class="k-icon k-i-loading"></span> </my-app> </body> <script type="text/babel"> const baseData = [{ "TaskID": 4, "OwnerID": 2, "Title": "Bowling tournament", "Description": "", "StartTimezone": null, "Start": "2013-06-09T21:00:00.000Z", "End": "2013-06-10T00:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 5, "OwnerID": 2, "Title": "Take the dog to the vet", "Description": "", "StartTimezone": null, "Start": "2013-06-10T07:00:00.000Z", "End": "2013-06-10T08:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 6, "OwnerID": 2, "Title": "Call Charlie about the project", "Description": "", "StartTimezone": null, "Start": "2013-06-11T11:30:00.000Z", "End": "2013-06-11T13:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 7, "OwnerID": 3, "Title": "Meeting with Alex", "Description": "", "StartTimezone": null, "Start": "2013-06-12T11:00:00.000Z", "End": "2013-06-12T12:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 9, "OwnerID": 2, "Title": "Alex's Birthday", "Description": "", "StartTimezone": null, "Start": "2013-06-14T02:00:00.000Z", "End": "2013-06-14T02:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": true }, { "TaskID": 12, "OwnerID": 2, "Title": "Car Service", "RoomID": 1, "Description": "Might come to work later!", "StartTimezone": null, "Start": "2013-06-24T08:30:00.000Z", "End": "2013-06-24T10:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 14, "OwnerID": 3, "RoomID": 2, "PersonID": 3, "Title": "Replace the printer on the 1st floor", "Description": "", "StartTimezone": null, "Start": "2013-06-24T10:00:00.000Z", "End": "2013-06-24T11:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": true }, { "TaskID": 15, "OwnerID": 1, "Title": "Attending HR Conference", "Description": "", "StartTimezone": null, "Start": "2013-06-25T00:00:00.000Z", "End": "2013-06-26T00:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": true }, { "TaskID": 16, "OwnerID": 1, "Title": "Business Lunch with Gregory Watkins", "Description": "", "StartTimezone": null, "Start": "2013-06-25T12:00:00.000Z", "End": "2013-06-25T13:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 17, "OwnerID": 1, "Title": "Breakfast with CFO and COO", "Description": "", "StartTimezone": null, "Start": "2013-06-27T08:30:00.000Z", "End": "2013-06-27T09:30:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 18, "OwnerID": 1, "Title": "Job Interview - Mathew Stevens", "Description": "Junior Researcher", "StartTimezone": null, "Start": "2013-06-27T10:00:00.000Z", "End": "2013-06-27T11:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 19, "OwnerID": 1, "Title": "Review CVs with Tim", "Description": "", "StartTimezone": null, "Start": "2013-06-27T11:00:00.000Z", "End": "2013-06-27T11:30:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 20, "OwnerID": 1, "Title": "Lunch with Monica", "Description": "Discuss the Employee handbook", "StartTimezone": null, "Start": "2013-06-27T12:00:00.000Z", "End": "2013-06-27T13:30:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 21, "OwnerID": 1, "Title": "Job Interview - John Stewart", "Description": "Accountant", "StartTimezone": null, "Start": "2013-06-27T14:00:00.000Z", "End": "2013-06-27T15:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 22, "OwnerID": 1, "Title": "Job Interview - Mary Smith", "Description": "Accountant", "StartTimezone": null, "Start": "2013-06-27T15:30:00.000Z", "End": "2013-06-27T16:30:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 24, "OwnerID": 3, "Title": "Register new Access Cards", "Description": "", "StartTimezone": null, "Start": "2013-06-24T12:00:00.000Z", "End": "2013-06-24T12:30:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": true }, { "TaskID": 25, "OwnerID": 1, "Title": "HR Lecture", "Description": "", "StartTimezone": null, "Start": "2013-06-04T19:00:00.000Z", "End": "2013-06-04T21:00:00.000Z", "EndTimezone": null, "RecurrenceRule": "FREQ=WEEKLY;BYDAY=TU,TH", "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 26, "OwnerID": 1, "Title": "Dentist", "Description": "", "StartTimezone": null, "Start": "2013-06-28T08:00:00.000Z", "End": "2013-06-28T09:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 27, "OwnerID": 1, "Title": "Job Interview - Laura Bailey", "Description": "Helpdesk", "StartTimezone": null, "Start": "2013-06-28T09:30:00.000Z", "End": "2013-06-28T10:30:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 28, "OwnerID": 1, "Title": "Job Interview - Jenny Baxter", "Description": "Helpdesk", "StartTimezone": null, "Start": "2013-06-28T11:00:00.000Z", "End": "2013-06-28T12:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 31, "OwnerID": 1, "Title": "Team building prep tasks", "Description": "", "StartTimezone": null, "Start": "2013-06-28T14:00:00.000Z", "End": "2013-06-28T17:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 32, "OwnerID": 2, "RoomID": 2, "Title": "Job Interview - Bernard Atkins", "Description": "Helpdesk", "StartTimezone": null, "Start": "2013-06-24T13:30:00.000Z", "End": "2013-06-24T14:30:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 34, "OwnerID": 1, "Title": "Review Job Applications", "Description": "", "StartTimezone": null, "Start": "2013-06-24T15:00:00.000Z", "End": "2013-06-24T17:30:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 35, "OwnerID": 1, "Title": "Grand Canyon tour", "Description": "", "StartTimezone": null, "Start": "2013-06-23T00:00:00.000Z", "End": "2013-06-23T00:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": true }, { "TaskID": 40, "OwnerID": 3, "Title": "Install new laptops in conference rooms", "Description": "", "StartTimezone": null, "Start": "2013-06-24T13:30:00.000Z", "End": "2013-06-24T15:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 66, "OwnerID": 3, "Title": "Bob's Birthday", "Description": "", "StartTimezone": null, "Start": "2013-06-29T08:00:00.000Z", "End": "2013-06-29T06:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": true }, { "TaskID": 68, "OwnerID": 1, "RoomID": 2, "Title": "Breakfast with Tom", "Description": "", "StartTimezone": null, "Start": "2013-06-24T09:45:00.000Z", "End": "2013-06-24T11:30:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 69, "OwnerID": 2, "Title": "Team planning meeting", "Description": "", "StartTimezone": null, "Start": "2013-06-24T10:00:00.000Z", "End": "2013-06-24T12:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": true }, { "TaskID": 70, "OwnerID": 2, "Title": "Support Phone Call", "Description": "", "StartTimezone": null, "Start": "2013-06-24T16:00:00.000Z", "End": "2013-06-24T16:30:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": true }, { "TaskID": 71, "OwnerID": 2, "Title": "Business breakfast with Caroline", "Description": "", "StartTimezone": null, "Start": "2013-06-25T09:00:00.000Z", "End": "2013-06-25T10:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 72, "OwnerID": 2, "Title": "Discuss preojects' deadlines", "Description": "", "StartTimezone": null, "Start": "2013-06-25T11:00:00.000Z", "End": "2013-06-25T11:30:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 73, "OwnerID": 2, "Title": "Support Meeting", "Description": "", "StartTimezone": null, "Start": "2013-06-25T15:00:00.000Z", "End": "2013-06-25T16:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 74, "OwnerID": 2, "Title": "Dine with Mathew", "Description": "", "StartTimezone": null, "Start": "2013-06-25T18:30:00.000Z", "End": "2013-06-25T20:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 79, "OwnerID": 2, "Title": "Banking", "Description": "", "StartTimezone": null, "Start": "2013-06-26T09:00:00.000Z", "End": "2013-06-26T10:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 80, "OwnerID": 3, "Title": "Software updates", "Description": "", "StartTimezone": null, "Start": "2013-06-25T10:00:00.000Z", "End": "2013-06-25T12:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 81, "OwnerID": 3, "Title": "UPS maintenance", "Description": "", "StartTimezone": null, "Start": "2013-06-25T16:30:00.000Z", "End": "2013-06-25T18:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 82, "OwnerID": 2, "Title": "Support Call", "Description": "", "StartTimezone": null, "Start": "2013-06-26T11:30:00.000Z", "End": "2013-06-26T12:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 83, "OwnerID": 3, "Title": "Phone Sync with NY office ", "Description": "", "StartTimezone": null, "Start": "2013-06-26T13:30:00.000Z", "End": "2013-06-26T14:30:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 84, "OwnerID": 3, "Title": "Phone Sync with Boston Office", "Description": "", "StartTimezone": null, "Start": "2013-06-26T15:00:00.000Z", "End": "2013-06-26T16:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 85, "OwnerID": 3, "Title": "Server maintenance", "Description": "", "StartTimezone": null, "Start": "2013-06-26T18:30:00.000Z", "End": "2013-06-26T21:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": true }, { "TaskID": 86, "OwnerID": 2, "Title": "Status meeting", "Description": "", "StartTimezone": null, "Start": "2013-06-28T13:30:00.000Z", "End": "2013-06-28T15:30:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 87, "OwnerID": 3, "Title": "Helpdesk status meeting", "Description": "", "StartTimezone": null, "Start": "2013-06-27T10:30:00.000Z", "End": "2013-06-27T11:30:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 88, "OwnerID": 2, "Title": "Business Lunch", "Description": "", "StartTimezone": null, "Start": "2013-06-27T12:00:00.000Z", "End": "2013-06-27T13:00:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 89, "OwnerID": 3, "Title": "Employee database update", "Description": "", "StartTimezone": null, "Start": "2013-06-27T14:00:00.000Z", "End": "2013-06-27T15:30:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 90, "OwnerID": 3, "Title": "Website upload", "Description": "", "StartTimezone": null, "Start": "2013-06-27T07:30:00.000Z", "End": "2013-06-27T08:30:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 91, "OwnerID": 2, "Title": "Meeting with marketing guys", "Description": "", "StartTimezone": null, "Start": "2013-06-27T17:00:00.000Z", "End": "2013-06-27T18:30:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 92, "OwnerID": 3, "Title": "Meeting with Internet provider", "Description": "", "StartTimezone": null, "Start": "2013-06-28T10:30:00.000Z", "End": "2013-06-28T11:30:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 93, "OwnerID": 3, "Title": "Bob's Birthday Party", "Description": "", "StartTimezone": null, "Start": "2013-06-29T20:00:00.000Z", "End": "2013-06-29T23:30:00.000Z", "EndTimezone": null, "RecurrenceRule": null, "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 95, "OwnerID": 2, "Title": "Dance Practice", "Description": "", "StartTimezone": null, "Start": "2013-06-03T18:30:00.000Z", "End": "2013-06-03T20:00:00.000Z", "EndTimezone": null, "RecurrenceRule": "FREQ=WEEKLY;BYDAY=MO,WE", "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 114, "OwnerID": 3, "Title": "Software updates", "Description": "", "StartTimezone": null, "Start": "2013-06-04T09:00:00.000Z", "End": "2013-06-04T12:00:00.000Z", "EndTimezone": null, "RecurrenceRule": "", "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 115, "OwnerID": 1, "Title": "Breakfast at Starbucks", "Description": "", "StartTimezone": null, "Start": "2013-06-04T08:00:00.000Z", "End": "2013-06-04T09:30:00.000Z", "EndTimezone": null, "RecurrenceRule": "", "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 116, "OwnerID": 2, "Title": "Performance review", "Description": "", "StartTimezone": null, "Start": "2013-06-04T14:00:00.000Z", "End": "2013-06-04T17:00:00.000Z", "EndTimezone": null, "RecurrenceRule": "", "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 118, "OwnerID": 1, "Title": "HR seminar preparation", "Description": "", "StartTimezone": null, "Start": "2013-06-05T10:00:00.000Z", "End": "2013-06-05T12:00:00.000Z", "EndTimezone": null, "RecurrenceRule": "", "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 119, "OwnerID": 3, "Title": "Helpdesk weekly meeting", "Description": "", "StartTimezone": null, "Start": "2013-06-05T15:00:00.000Z", "End": "2013-06-05T16:00:00.000Z", "EndTimezone": null, "RecurrenceRule": "FREQ=WEEKLY;BYDAY=WE", "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }, { "TaskID": 120, "OwnerID": 3, "Title": "Website upload", "Description": "", "StartTimezone": null, "Start": "2013-06-07T07:00:00.000Z", "End": "2013-06-07T08:30:00.000Z", "EndTimezone": null, "RecurrenceRule": "", "RecurrenceID": null, "RecurrenceException": null, "isAllDay": false }]; const customModelFields = { id: 'TaskID', title: 'Title', description: 'Description', start: 'Start', end: 'End', recurrenceRule: 'RecurrenceRule', recurrenceId: 'RecurrenceID', recurrenceExceptions: 'RecurrenceException' }; const currentYear = new Date().getFullYear(); const parseAdjust = eventDate => { const date = new Date(eventDate); date.setFullYear(currentYear); return date; }; const randomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min; const displayDate = new Date(Date.UTC(currentYear, 5, 24)); const sampleData = baseData.map(dataItem => ({ id: dataItem.TaskID, start: parseAdjust(dataItem.Start), startTimezone: dataItem.startTimezone, end: parseAdjust(dataItem.End), endTimezone: dataItem.endTimezone, isAllDay: dataItem.isAllDay, title: dataItem.Title, description: dataItem.Description, recurrenceRule: dataItem.RecurrenceRule, recurrenceId: dataItem.RecurrenceID, recurrenceExceptions: dataItem.RecurrenceException, roomId: dataItem.RoomID, ownerID: dataItem.OwnerID, personId: dataItem.OwnerID })); const sampleDataWithResources = baseData.map(dataItem => ({ id: dataItem.TaskID, start: parseAdjust(dataItem.Start), startTimezone: dataItem.startTimezone, end: parseAdjust(dataItem.End), endTimezone: dataItem.endTimezone, isAllDay: dataItem.isAllDay, title: dataItem.Title, description: dataItem.Description, recurrenceRule: dataItem.RecurrenceRule, recurrenceId: dataItem.RecurrenceID, recurrenceExceptions: dataItem.RecurrenceException, roomId: randomInt(1, 2), personId: randomInt(1, 2) })); const sampleDataWithCustomSchema = baseData.map(dataItem => ({ ...dataItem, Start: parseAdjust(dataItem.Start), End: parseAdjust(dataItem.End), PersonIDs: randomInt(1, 2), RoomID: randomInt(1, 2) })); const App = () => { const timezones = React.useMemo(() => timezoneNames(), []); const locales = [{ language: 'en-US', locale: 'en' }, { language: 'es-ES', locale: 'es' }]; const [view, setView] = React.useState('day'); const [date, setDate] = React.useState(displayDate); const [locale, setLocale] = React.useState(locales[0]); const [timezone, setTimezone] = React.useState('Etc/UTC'); const [orientation, setOrientation] = React.useState('horizontal'); const [data, setData] = React.useState(sampleDataWithCustomSchema); const handleViewChange = React.useCallback(event => { setView(event.value); }, [setView]); const handleDateChange = React.useCallback(event => { setDate(event.value); }, [setDate]); const handleLocaleChange = React.useCallback(event => { setLocale(event.target.value); }, [setLocale]); const handleTimezoneChange = React.useCallback(event => { setTimezone(event.target.value); }, [setTimezone]); const handleOrientationChange = React.useCallback(event => { setOrientation(event.target.getAttribute('data-orientation')); }, []); const handleDataChange = React.useCallback(({ created, updated, deleted }) => { setData(old => old.filter(item => deleted.find(current => current.TaskID === item.TaskID) === undefined).map(item => updated.find(current => current.TaskID === item.TaskID) || item).concat(created.map(item => Object.assign({}, item, { TaskID: guid() })))); }, [setData]); return <div> <div className="example-config"> <div className="row"> <div className="col"> <h5>Timezone:</h5> <DropDownList value={timezone} onChange={handleTimezoneChange} data={timezones} /> </div> <div className="col"> <h5>Locale:</h5> <DropDownList value={locale} onChange={handleLocaleChange} data={locales} textField="language" dataItemKey="locale" /> </div> <div className="col"> <h5>Orientation:</h5> <input type="radio" name="orientation" id="horizontal" data-orientation="horizontal" className="k-radio k-radio-md" checked={orientation === 'horizontal'} onChange={handleOrientationChange} /> <label className="k-radio-label" htmlFor="horizontal">Horizontal</label> <br /> <input type="radio" name="orientation" id="vertical" data-orientation="vertical" className="k-radio k-radio-md" checked={orientation === 'vertical'} onChange={handleOrientationChange} /> <label className="k-radio-label" htmlFor="vertical">Vertical</label> </div> </div> </div> <LocalizationProvider language={locale.language}> <IntlProvider locale={locale.locale}> <Scheduler data={data} onDataChange={handleDataChange} view={view} onViewChange={handleViewChange} date={date} onDateChange={handleDateChange} editable={true} timezone={timezone} modelFields={customModelFields} group={{ resources: ['Rooms', 'Persons'], orientation }} resources={[{ name: 'Rooms', data: [{ text: 'Meeting Room 101', value: 1 }, { text: 'Meeting Room 201', value: 2, color: '#FF7272' }], field: 'RoomID', valueField: 'value', textField: 'text', colorField: 'color' }, { name: 'Persons', data: [{ text: 'Peter', value: 1, color: '#5392E4' }, { text: 'Alex', value: 2, color: '#54677B' }], field: 'PersonIDs', valueField: 'value', textField: 'text', colorField: 'color' }]}> <TimelineView /> <DayView /> <WeekView /> <MonthView /> <AgendaView /> </Scheduler> </IntlProvider> </LocalizationProvider> </div>; }; ReactDOM.render(<App />, document.querySelector('my-app')); </script> </html>
PivotGrid:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>KendoReact</title> <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script> <script src="https://unpkg.com/react@16/umd/react.production.min.js" crossorigin></script> <script src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js" crossorigin></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/prop-types/15.7.2/prop-types.min.js"></script> <script src="https://unpkg.com/@progress/kendo-date-math/dist/cdn/js/kendo-date-math.js"></script> <script src="https://unpkg.com/@progress/kendo-drawing/dist/cdn/js/kendo-drawing.js"></script> <script src="https://unpkg.com/@progress/kendo-licensing/dist/index.js"></script> <script> KendoLicensing.setScriptKey( 'censored' ); </script> <script src="https://unpkg.com/@progress/kendo-react-intl/dist/cdn/js/kendo-react-intl.js"></script> <script src="https://unpkg.com/@progress/kendo-react-all/dist/cdn/js/kendo-react-all.js"></script> <link rel="stylesheet" href="https://unpkg.com/@progress/kendo-theme-default@latest/dist/all.css"></link> </head> <body> <my-app> <span class="k-icon k-i-loading"></span> </my-app> </body> <script type="text/babel"> const WideColumn = React.forwardRef(props => { return <PivotGridColumn {...props} style={{ width: 200 }} />; }); const defaultColumnAxes = [{ name: ['[Date].[Calendar]'], expand: true }, { name: ['[Product].[Category]'] }]; const defaultRowAxes = [{ name: ['[Geography].[City]'] }]; const defaultMeasureAxes = [{ name: ['[Measures].[Reseller Freight Cost]'] }]; const catalog = 'Adventure Works DW 2008R2'; const cube = 'Adventure Works'; const url = 'https://demos.telerik.com/olap/msmdpump.dll'; const App = () => { const [show, setShow] = React.useState(false); const { pivotProps, configuratorProps, state } = usePivotOLAPService({ catalog, cube, url, defaultRowAxes, defaultColumnAxes, defaultMeasureAxes }); const handleButtonClick = React.useCallback(() => { setShow(!show); }, [show]); return <PivotGridContainer> <PivotGrid {...pivotProps} style={{ height: 700 }} column={WideColumn} /> {show && <PivotGridConfigurator {...configuratorProps} />} <PivotGridConfiguratorButton onClick={handleButtonClick} /> {state.loading && <Loader style={{ position: 'absolute', top: '50%', left: '50%', transform: 'translate(-50%,-50%)' }} size="large" type={'converging-spinner'} />} </PivotGridContainer>; }; ReactDOM.render(<App />, document.querySelector('my-app')); </script> </html>
datagrid:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>KendoReact</title>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
<script src="https://unpkg.com/react@16/umd/react.production.min.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js" crossorigin></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prop-types/15.7.2/prop-types.min.js"></script>
<script src="https://unpkg.com/@progress/kendo-date-math/dist/cdn/js/kendo-date-math.js"></script>
<script src="https://unpkg.com/@progress/kendo-drawing/dist/cdn/js/kendo-drawing.js"></script>
<script src="https://unpkg.com/@progress/kendo-licensing/dist/index.js"></script>
<script>
KendoLicensing.setScriptKey(
'censored'
);
</script>
<script src="https://unpkg.com/@progress/kendo-react-intl/dist/cdn/js/kendo-react-intl.js"></script>
<script src="https://unpkg.com/@progress/kendo-react-all/dist/cdn/js/kendo-react-all.js"></script>
<link rel="stylesheet" href="https://unpkg.com/@progress/kendo-theme-default@latest/dist/all.css"></link>
</head>
<body>
<my-app>
<span class="k-icon k-i-loading"></span>
</my-app>
</body>
<script type="text/babel">
const DATE_FORMAT = 'yyyy-mm-dd hh:mm:ss.SSS';
const intl = new IntlService('en');
orders.forEach(o => {
o.orderDate = intl.parseDate(o.orderDate ? o.orderDate : '20/20/2020', DATE_FORMAT);
o.shippedDate = o.shippedDate ? undefined : intl.parseDate(o.shippedDate ? o.orderDate.toString() : '20/20/2020', DATE_FORMAT);
});
const DetailComponent = props => {
const dataItem = props.dataItem;
return <div>
<section style={{
width: "200px",
float: "left"
}}>
<p><strong>Street:</strong> {dataItem.shipAddress.street}</p>
<p><strong>City:</strong> {dataItem.shipAddress.city}</p>
<p><strong>Country:</strong> {dataItem.shipAddress.country}</p>
<p><strong>Postal Code:</strong> {dataItem.shipAddress.postalCode}</p>
</section>
<Grid style={{
width: "500px"
}} data={dataItem.details} />
</div>;
};
const App = () => {
const locales = [{
language: 'en-US',
locale: 'en'
}, {
language: 'es-ES',
locale: 'es'
}];
const [dataState, setDataState] = React.useState({
skip: 0,
take: 20,
sort: [{
field: 'orderDate',
dir: 'desc'
}],
group: [{
field: 'customerID'
}]
});
const [currentLocale, setCurrentLocale] = React.useState(locales[0]);
const [dataResult, setDataResult] = React.useState(process(orders, dataState));
const dataStateChange = event => {
setDataResult(process(orders, event.dataState));
setDataState(event.dataState);
};
const expandChange = event => {
const isExpanded = event.dataItem.expanded === undefined ? event.dataItem.aggregates : event.dataItem.expanded;
event.dataItem.expanded = !isExpanded;
setDataResult({
...dataResult
});
};
let _pdfExport;
const exportExcel = () => {
_export.save();
};
let _export;
const exportPDF = () => {
_pdfExport.save();
};
return <LocalizationProvider language={currentLocale.language}>
<IntlProvider locale={currentLocale.locale}>
<div>
<ExcelExport data={orders} ref={exporter => {
_export = exporter;
}}>
<Grid style={{
height: '700px'
}} sortable={true} filterable={true} groupable={true} reorderable={true} pageable={{
buttonCount: 4,
pageSizes: true
}} data={dataResult} {...dataState} onDataStateChange={dataStateChange} detail={DetailComponent} expandField="expanded" onExpandChange={expandChange}>
<GridToolbar>
Locale:
<DropDownList value={currentLocale} textField="language" onChange={e => {
setCurrentLocale(e.target.value);
}} data={locales} />
<button title="Export to Excel" className="k-button k-button-md k-rounded-md k-button-solid k-button-solid-primary" onClick={exportExcel}>
Export to Excel
</button>
<button className="k-button k-button-md k-rounded-md k-button-solid k-button-solid-primary" onClick={exportPDF}>Export to PDF</button>
</GridToolbar>
<GridColumn field="customerID" width="200px" />
<GridColumn field="orderDate" filter="date" format="{0:D}" width="300px" />
<GridColumn field="shipName" width="280px" />
<GridColumn field="freight" filter="numeric" width="200px" />
<GridColumn field="shippedDate" filter="date" format="{0:D}" width="300px" />
<GridColumn field="employeeID" filter="numeric" width="200px" />
<GridColumn locked={true} field="orderID" filterable={false} title="ID" width="90px" />
</Grid>
</ExcelExport>
<GridPDFExport ref={element => {
_pdfExport = element;
}} margin="1cm">
{<Grid data={process(orders, {
skip: dataState.skip,
take: dataState.take
})}>
<GridColumn field="customerID" width="200px" />
<GridColumn field="orderDate" filter="date" format="{0:D}" width="300px" />
<GridColumn field="shipName" width="280px" />
<GridColumn field="freight" filter="numeric" width="200px" />
<GridColumn field="shippedDate" filter="date" format="{0:D}" width="300px" />
<GridColumn field="employeeID" filter="numeric" width="200px" />
<GridColumn locked={true} field="orderID" filterable={false} title="ID" width="90px" />
</Grid>}
</GridPDFExport>
</div>
</IntlProvider>
</LocalizationProvider>;
};
ReactDOM.render(<App />, document.querySelector('my-app'));
</script>
</html>