Backend API
import React from 'react';
import { ContextMenu, type ContextMenuTypes } from 'devextreme-react/context-menu';
import notify from 'devextreme/ui/notify';
import { contextMenuItems as items } from './data.ts';
import type { ContextMenuItem } from './types';
function itemClick(e: ContextMenuTypes.ItemClickEvent<ContextMenuItem>): void {
if (!e.itemData?.items) {
notify(`The "${e.itemData?.text}" item was clicked`, 'success', 1500);
}
}
function App() {
return (
<>
<div className="target-area">
Right click within this region to display the DevExtreme Context Menu
</div>
<ContextMenu
dataSource={items}
width={200}
target= ".target-area"
onItemClick= {itemClick}
/>
</>
);
}
export default App;
import React from 'react';
import { ContextMenu } from 'devextreme-react/context-menu';
import notify from 'devextreme/ui/notify';
import { contextMenuItems as items } from './data.js';
function itemClick(e) {
if (!e.itemData?.items) {
notify(`The "${e.itemData?.text}" item was clicked`, 'success', 1500);
}
}
function App() {
return (
<>
<div className="target-area">
Right click within this region to display the DevExtreme Context Menu
</div>
<ContextMenu
dataSource={items}
width={200}
target=".target-area"
onItemClick={itemClick}
/>
</>
);
}
export default App;
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.tsx';
ReactDOM.render(
<App />,
document.getElementById('app'),
);
import type { ContextMenuItem } from './types';
export const contextMenuItems: ContextMenuItem[] = [
{
text: 'Electronics',
items: [
{
text: 'Computers',
items: [
{
text: 'Desktops',
},
{
text: 'Laptops',
},
{
text: 'Tablets',
},
{
text: 'Monitors',
},
{
text: 'Printers',
},
{
text: 'Scanners',
},
{
text: 'Servers',
},
{
text: 'Network Devices',
},
{
text: 'Warranties',
},
{
text: 'Projectors & Screens',
},
{
text: 'Computer Accessories',
},
],
},
{
text: 'Cell Phones',
items: [
{
text: 'Home & Office Phones',
},
{
text: 'Smart Phones & PDAs',
},
{
text: 'Senior Cell Phones',
},
{
text: 'Mobile Broadband Devices',
},
{
text: 'Cell Phone Accessories',
},
],
},
{
text: 'Camera & Photo',
items: [
{
text: 'Action Cameras',
},
{
text: 'Camcorders',
},
{
text: 'Digital Cameras',
},
{
text: 'Digital Picture Frames',
},
{
text: 'Film Cameras',
},
{
text: 'Professional Video Cameras',
},
{
text: 'Flashes',
},
{
text: 'Lenses',
},
{
text: 'Photo Printers',
},
{
text: 'Film & Slide Scanners',
},
{
text: 'Slide Projectors',
},
{
text: 'Slide Viewers',
},
{
text: 'Tripods & Monopods',
},
{
text: 'Underwater Video & Photography',
},
{
text: 'Camera Accessories',
},
],
},
{
text: 'Audio',
items: [
{
text: 'Boomboxes',
},
{
text: 'DVD & CD Player Bags',
},
{
text: 'Hi-Fi & Home Audio Accessories',
},
{
text: 'Media Streaming Devices',
},
{
text: 'MP3 & Digital Media Players',
},
{
text: 'MP3 Player Accessories',
},
{
text: 'Personal Cassette Players',
},
{
text: 'Personal CD Players',
},
{
text: 'Compact Stereos',
},
{
text: 'Speakers',
},
],
},
{
text: 'Home Appliances',
items: [
{
text: 'Air Conditioners',
},
{
text: 'Coffee Machines',
},
{
text: 'Fans',
},
{
text: 'Lamps',
},
{
text: 'Microwaves',
},
{
text: 'Refrigerators',
},
{
text: 'Washers & Dryers',
},
{
text: ' Water Heaters',
},
{
'text': 'Vacuum',
},
{
text: 'Steaming & Ironing',
},
],
},
],
},
{
text: 'Entertainment',
items: [
{
text: 'Films & Music',
items: [
{
text: 'TV Shows',
},
{
text: 'DVD',
},
{
text: 'Blu-ray',
},
{
text: 'CD',
},
{
text: 'SACD',
},
{
text: 'Vinyl',
},
{
text: 'Cassette',
},
{
text: 'Musical Instruments',
},
{
text: 'DJ Equipment',
},
],
},
{
text: 'Games & Toys',
items: [
{
text: 'PC Games',
},
{
text: 'Virtual Reality',
},
{
text: 'Boxed Games',
},
{
text: 'Download Games',
},
{
text: 'Handheld Game Systems',
},
{
text: 'Legacy Systems',
},
{
text: 'Cards',
},
],
},
],
},
{
text: 'Healthcare & Living',
items: [
{
text: 'Sports & Outdoors',
items: [
{
text: 'Camping',
},
{
text: 'Fitness',
},
{
text: 'Football',
},
{
text: 'Cycling',
},
{
text: 'Running',
},
{
text: 'Sport Electronics',
},
{
text: 'Sport Apparel',
},
{
text: 'Trainers & Tennis Shoes',
},
],
},
{
text: 'Beauty',
items: [
{
text: 'Bath & Shower',
},
{
text: 'Skin Care',
},
{
text: 'Hair Care',
},
{
text: 'Nail Care',
},
{
text: 'Make-up',
},
{
text: 'Fragrance',
},
{
text: 'Salon & SPA Equipment',
},
{
text: 'Tools & Accessories',
},
],
},
{
text: 'Fashion',
items: [
{
text: 'Clothing',
},
{
text: 'Jewellery',
},
{
text: 'Shoes',
},
{
text: 'Handbags & Shoulder Bags',
},
{
text: 'Watches',
},
{
text: 'Accessories',
},
],
},
],
},
];
export interface ContextMenuItem {
text: string;
items?: ContextMenuItem[]
}
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.js';
ReactDOM.render(<App />, document.getElementById('app'));
export const contextMenuItems = [
{
text: 'Electronics',
items: [
{
text: 'Computers',
items: [
{
text: 'Desktops',
},
{
text: 'Laptops',
},
{
text: 'Tablets',
},
{
text: 'Monitors',
},
{
text: 'Printers',
},
{
text: 'Scanners',
},
{
text: 'Servers',
},
{
text: 'Network Devices',
},
{
text: 'Warranties',
},
{
text: 'Projectors & Screens',
},
{
text: 'Computer Accessories',
},
],
},
{
text: 'Cell Phones',
items: [
{
text: 'Home & Office Phones',
},
{
text: 'Smart Phones & PDAs',
},
{
text: 'Senior Cell Phones',
},
{
text: 'Mobile Broadband Devices',
},
{
text: 'Cell Phone Accessories',
},
],
},
{
text: 'Camera & Photo',
items: [
{
text: 'Action Cameras',
},
{
text: 'Camcorders',
},
{
text: 'Digital Cameras',
},
{
text: 'Digital Picture Frames',
},
{
text: 'Film Cameras',
},
{
text: 'Professional Video Cameras',
},
{
text: 'Flashes',
},
{
text: 'Lenses',
},
{
text: 'Photo Printers',
},
{
text: 'Film & Slide Scanners',
},
{
text: 'Slide Projectors',
},
{
text: 'Slide Viewers',
},
{
text: 'Tripods & Monopods',
},
{
text: 'Underwater Video & Photography',
},
{
text: 'Camera Accessories',
},
],
},
{
text: 'Audio',
items: [
{
text: 'Boomboxes',
},
{
text: 'DVD & CD Player Bags',
},
{
text: 'Hi-Fi & Home Audio Accessories',
},
{
text: 'Media Streaming Devices',
},
{
text: 'MP3 & Digital Media Players',
},
{
text: 'MP3 Player Accessories',
},
{
text: 'Personal Cassette Players',
},
{
text: 'Personal CD Players',
},
{
text: 'Compact Stereos',
},
{
text: 'Speakers',
},
],
},
{
text: 'Home Appliances',
items: [
{
text: 'Air Conditioners',
},
{
text: 'Coffee Machines',
},
{
text: 'Fans',
},
{
text: 'Lamps',
},
{
text: 'Microwaves',
},
{
text: 'Refrigerators',
},
{
text: 'Washers & Dryers',
},
{
text: ' Water Heaters',
},
{
text: 'Vacuum',
},
{
text: 'Steaming & Ironing',
},
],
},
],
},
{
text: 'Entertainment',
items: [
{
text: 'Films & Music',
items: [
{
text: 'TV Shows',
},
{
text: 'DVD',
},
{
text: 'Blu-ray',
},
{
text: 'CD',
},
{
text: 'SACD',
},
{
text: 'Vinyl',
},
{
text: 'Cassette',
},
{
text: 'Musical Instruments',
},
{
text: 'DJ Equipment',
},
],
},
{
text: 'Games & Toys',
items: [
{
text: 'PC Games',
},
{
text: 'Virtual Reality',
},
{
text: 'Boxed Games',
},
{
text: 'Download Games',
},
{
text: 'Handheld Game Systems',
},
{
text: 'Legacy Systems',
},
{
text: 'Cards',
},
],
},
],
},
{
text: 'Healthcare & Living',
items: [
{
text: 'Sports & Outdoors',
items: [
{
text: 'Camping',
},
{
text: 'Fitness',
},
{
text: 'Football',
},
{
text: 'Cycling',
},
{
text: 'Running',
},
{
text: 'Sport Electronics',
},
{
text: 'Sport Apparel',
},
{
text: 'Trainers & Tennis Shoes',
},
],
},
{
text: 'Beauty',
items: [
{
text: 'Bath & Shower',
},
{
text: 'Skin Care',
},
{
text: 'Hair Care',
},
{
text: 'Nail Care',
},
{
text: 'Make-up',
},
{
text: 'Fragrance',
},
{
text: 'Salon & SPA Equipment',
},
{
text: 'Tools & Accessories',
},
],
},
{
text: 'Fashion',
items: [
{
text: 'Clothing',
},
{
text: 'Jewellery',
},
{
text: 'Shoes',
},
{
text: 'Handbags & Shoulder Bags',
},
{
text: 'Watches',
},
{
text: 'Accessories',
},
],
},
],
},
];
<!DOCTYPE html>
<html lang="en">
<head>
<title>DevExtreme Demo</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0" />
<link rel="stylesheet" type="text/css" href="https://cdn3.devexpress.com/jslib/26.1.5/css/dx.light.css" />
<link rel="stylesheet" type="text/css" href="./bundle.css" />
</head>
<body class="dx-viewport">
<div class="demo-container">
<div id="app"></div>
</div>
<script src="bundles/vendor/react.vendor.js"></script>
<script src="./bundle.js"></script>
</body>
</html>
html,
body {
width: 100%;
height: 100%;
}
body {
margin: 0;
}
#app,
.demo-container {
height: 100%;
}
.target-area {
color: var(--dx-color-text);
background-color: var(--dx-color-border);
height: 100%;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
-webkit-touch-callout: none;
user-select: none;
}