cncjs
72 строки · 1.9 Кб
1import PropTypes from 'prop-types';2import React, { PureComponent } from 'react';3import AxesWidget from 'app/widgets/Axes';4import ConnectionWidget from 'app/widgets/Connection';5import ConsoleWidget from 'app/widgets/Console';6import GCodeWidget from 'app/widgets/GCode';7import GrblWidget from 'app/widgets/Grbl';8import LaserWidget from 'app/widgets/Laser';9import MacroWidget from 'app/widgets/Macro';10import MarlinWidget from 'app/widgets/Marlin';11import ProbeWidget from 'app/widgets/Probe';12import SmoothieWidget from 'app/widgets/Smoothie';13import SpindleWidget from 'app/widgets/Spindle';14import CustomWidget from 'app/widgets/Custom';15import TinyGWidget from 'app/widgets/TinyG';16import VisualizerWidget from 'app/widgets/Visualizer';17import WebcamWidget from 'app/widgets/Webcam';18
19const getWidgetByName = (name) => {20return {21'axes': AxesWidget,22'connection': ConnectionWidget,23'console': ConsoleWidget,24'gcode': GCodeWidget,25'grbl': GrblWidget,26'laser': LaserWidget,27'macro': MacroWidget,28'marlin': MarlinWidget,29'probe': ProbeWidget,30'smoothie': SmoothieWidget,31'spindle': SpindleWidget,32'custom': CustomWidget,33'tinyg': TinyGWidget,34'visualizer': VisualizerWidget,35'webcam': WebcamWidget36}[name] || null;37};38
39class WidgetWrapper extends PureComponent {40widget = null;41
42render() {43const { widgetId } = this.props;44
45if (typeof widgetId !== 'string') {46return null;47}48
49// e.g. "webcam" or "webcam:d8e6352f-80a9-475f-a4f5-3e9197a48a23"50const name = widgetId.split(':')[0];51const Widget = getWidgetByName(name);52
53if (!Widget) {54return null;55}56
57return (58<Widget59{...this.props}60ref={node => {61this.widget = node;62}}63/>64);65}66}
67
68WidgetWrapper.propTypes = {69widgetId: PropTypes.string.isRequired70};71
72export default WidgetWrapper;73