UNPKG

6.83 kBJavaScriptView Raw
1// Copyright (c) Jupyter Development Team.
2// Distributed under the terms of the Modified BSD License.
3import { TextItem } from '@jupyterlab/statusbar';
4import { nullTranslator } from '@jupyterlab/translation';
5import { VDomModel, VDomRenderer } from '@jupyterlab/ui-components';
6import { JSONExt } from '@lumino/coreutils';
7import React from 'react';
8/**
9 * Helper function to translate kernel statuses mapping by using
10 * input translator.
11 *
12 * @param translator - Language translator.
13 * @return The translated kernel status mapping.
14 */
15export function translateKernelStatuses(translator) {
16 translator = translator || nullTranslator;
17 const trans = translator.load('jupyterlab');
18 const translated = {
19 unknown: trans.__('Unknown'),
20 starting: trans.__('Starting'),
21 idle: trans.__('Idle'),
22 busy: trans.__('Busy'),
23 terminating: trans.__('Terminating'),
24 restarting: trans.__('Restarting'),
25 autorestarting: trans.__('Autorestarting'),
26 dead: trans.__('Dead'),
27 connected: trans.__('Connected'),
28 connecting: trans.__('Connecting'),
29 disconnected: trans.__('Disconnected'),
30 initializing: trans.__('Initializing'),
31 '': ''
32 };
33 return translated;
34}
35/**
36 * A pure functional component for rendering kernel status.
37 */
38function KernelStatusComponent(props) {
39 const translator = props.translator || nullTranslator;
40 const trans = translator.load('jupyterlab');
41 let statusText = '';
42 if (props.status) {
43 statusText = ` | ${props.status}`;
44 }
45 return (React.createElement(TextItem, { onClick: props.handleClick, source: `${props.kernelName}${statusText}`, title: trans.__('Change kernel for %1', props.activityName) }));
46}
47/**
48 * A VDomRenderer widget for displaying the status of a kernel.
49 */
50export class KernelStatus extends VDomRenderer {
51 /**
52 * Construct the kernel status widget.
53 */
54 constructor(opts, translator) {
55 super(new KernelStatus.Model(translator));
56 this.translator = translator || nullTranslator;
57 this._handleClick = opts.onClick;
58 this.addClass('jp-mod-highlighted');
59 }
60 /**
61 * Render the kernel status item.
62 */
63 render() {
64 if (this.model === null) {
65 return null;
66 }
67 else {
68 return (React.createElement(KernelStatusComponent, { status: this.model.status, kernelName: this.model.kernelName, activityName: this.model.activityName, handleClick: this._handleClick, translator: this.translator }));
69 }
70 }
71}
72/**
73 * A namespace for KernelStatus statics.
74 */
75(function (KernelStatus) {
76 /**
77 * A VDomModel for the kernel status indicator.
78 */
79 class Model extends VDomModel {
80 constructor(translator) {
81 super();
82 this._activityName = '';
83 this._kernelName = '';
84 this._kernelStatus = '';
85 this._sessionContext = null;
86 translator = translator !== null && translator !== void 0 ? translator : nullTranslator;
87 this._trans = translator.load('jupyterlab');
88 this._statusNames = translateKernelStatuses(translator);
89 }
90 /**
91 * The name of the kernel.
92 */
93 get kernelName() {
94 return this._kernelName;
95 }
96 /**
97 * The current status of the kernel.
98 */
99 get status() {
100 return this._kernelStatus
101 ? this._statusNames[this._kernelStatus]
102 : undefined;
103 }
104 /**
105 * A display name for the activity.
106 */
107 get activityName() {
108 return this._activityName;
109 }
110 set activityName(val) {
111 const oldVal = this._activityName;
112 if (oldVal === val) {
113 return;
114 }
115 this._activityName = val;
116 this.stateChanged.emit();
117 }
118 /**
119 * The current client session associated with the kernel status indicator.
120 */
121 get sessionContext() {
122 return this._sessionContext;
123 }
124 set sessionContext(sessionContext) {
125 var _a, _b, _c, _d;
126 (_a = this._sessionContext) === null || _a === void 0 ? void 0 : _a.statusChanged.disconnect(this._onKernelStatusChanged, this);
127 (_b = this._sessionContext) === null || _b === void 0 ? void 0 : _b.connectionStatusChanged.disconnect(this._onKernelStatusChanged, this);
128 (_c = this._sessionContext) === null || _c === void 0 ? void 0 : _c.kernelChanged.disconnect(this._onKernelChanged, this);
129 const oldState = this._getAllState();
130 this._sessionContext = sessionContext;
131 this._kernelStatus = sessionContext === null || sessionContext === void 0 ? void 0 : sessionContext.kernelDisplayStatus;
132 this._kernelName =
133 (_d = sessionContext === null || sessionContext === void 0 ? void 0 : sessionContext.kernelDisplayName) !== null && _d !== void 0 ? _d : this._trans.__('No Kernel');
134 sessionContext === null || sessionContext === void 0 ? void 0 : sessionContext.statusChanged.connect(this._onKernelStatusChanged, this);
135 sessionContext === null || sessionContext === void 0 ? void 0 : sessionContext.connectionStatusChanged.connect(this._onKernelStatusChanged, this);
136 sessionContext === null || sessionContext === void 0 ? void 0 : sessionContext.kernelChanged.connect(this._onKernelChanged, this);
137 this._triggerChange(oldState, this._getAllState());
138 }
139 /**
140 * React to changes to the kernel status.
141 */
142 _onKernelStatusChanged() {
143 var _a;
144 this._kernelStatus = (_a = this._sessionContext) === null || _a === void 0 ? void 0 : _a.kernelDisplayStatus;
145 this.stateChanged.emit(void 0);
146 }
147 /**
148 * React to changes in the kernel.
149 */
150 _onKernelChanged(_sessionContext, change) {
151 var _a;
152 const oldState = this._getAllState();
153 // sync setting of status and display name
154 this._kernelStatus = (_a = this._sessionContext) === null || _a === void 0 ? void 0 : _a.kernelDisplayStatus;
155 this._kernelName = _sessionContext.kernelDisplayName;
156 this._triggerChange(oldState, this._getAllState());
157 }
158 _getAllState() {
159 return [this._kernelName, this._kernelStatus, this._activityName];
160 }
161 _triggerChange(oldState, newState) {
162 if (JSONExt.deepEqual(oldState, newState)) {
163 this.stateChanged.emit(void 0);
164 }
165 }
166 }
167 KernelStatus.Model = Model;
168})(KernelStatus || (KernelStatus = {}));
169//# sourceMappingURL=kernelstatuses.js.map
\No newline at end of file