goblin-desktop 2.1.2 → 2.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +9 -9
- package/.eslintrc.js +28 -28
- package/.zou-flow +3 -3
- package/README.md +108 -108
- package/builders/builders.js +3 -3
- package/builders/wizard.js +457 -457
- package/contexts.js +13 -13
- package/desktop-manager.js +10 -10
- package/desktop-window.js +13 -13
- package/desktop.js +13 -13
- package/lib/service.js +137 -137
- package/package.json +36 -36
- package/password-wizard.js +13 -13
- package/quest-run-wizard.js +13 -13
- package/taskbar.js +13 -13
- package/widgets/audio/sfx.js +177 -177
- package/widgets/board/view.js +37 -37
- package/widgets/board/widget.js +65 -65
- package/widgets/contexts/logic-handlers.js +36 -36
- package/widgets/contexts/service.js +40 -40
- package/widgets/contexts/view.js +22 -22
- package/widgets/contexts/widget.js +147 -147
- package/widgets/datagrid/datagrid-entity.js +82 -82
- package/widgets/datagrid/datagrid-headers.js +272 -272
- package/widgets/datagrid/styles.js +13 -13
- package/widgets/datagrid/widget.js +192 -192
- package/widgets/datagrid-cell/styles.js +52 -52
- package/widgets/datagrid-cell/widget.js +41 -41
- package/widgets/datagrid-item/styles.js +15 -15
- package/widgets/datagrid-item/widget.js +74 -74
- package/widgets/default/view.js +142 -142
- package/widgets/desktop/compensator.js +9 -9
- package/widgets/desktop/logic-handlers.js +237 -237
- package/widgets/desktop/reducer.js +35 -35
- package/widgets/desktop/service.js +828 -828
- package/widgets/desktop/styles.js +28 -28
- package/widgets/desktop/widget.js +175 -175
- package/widgets/desktop-clock/styles.js +69 -69
- package/widgets/desktop-clock/widget.js +387 -387
- package/widgets/desktop-clock-clock/styles.js +56 -56
- package/widgets/desktop-clock-clock/widget.js +96 -96
- package/widgets/desktop-clock-menu/styles.js +129 -129
- package/widgets/desktop-clock-menu/widget.js +63 -63
- package/widgets/desktop-connection-status/reducer.js +15 -15
- package/widgets/desktop-connection-status/styles.js +44 -44
- package/widgets/desktop-connection-status/widget.js +129 -129
- package/widgets/desktop-content/widget.js +68 -68
- package/widgets/desktop-footer/reducer.js +31 -31
- package/widgets/desktop-footer/styles.js +36 -36
- package/widgets/desktop-footer/widget.js +52 -52
- package/widgets/desktop-monitors/styles.js +155 -155
- package/widgets/desktop-monitors/widget.js +272 -272
- package/widgets/desktop-notebook/styles.js +155 -155
- package/widgets/desktop-notebook/widget.js +252 -252
- package/widgets/desktop-notifications/styles.js +147 -147
- package/widgets/desktop-notifications/widget.js +231 -231
- package/widgets/desktop-scale/reducer.js +15 -15
- package/widgets/desktop-scale/styles.js +48 -48
- package/widgets/desktop-scale/widget.js +172 -172
- package/widgets/desktop-state-monitor/styles.js +72 -72
- package/widgets/desktop-state-monitor/widget.js +123 -123
- package/widgets/desktop-taskbar/widget.js +57 -57
- package/widgets/desktop-themes-menu/widget.js +121 -121
- package/widgets/desktop-topbar/widget.js +201 -201
- package/widgets/desktop-window/service.js +56 -56
- package/widgets/desktop-window/styles.js +22 -22
- package/widgets/desktop-window/widget.js +70 -70
- package/widgets/detail/compensator.js +17 -17
- package/widgets/detail/view.js +40 -40
- package/widgets/detail/widget.js +125 -125
- package/widgets/editor/widget.js +83 -83
- package/widgets/entity-alerts/styles.js +77 -77
- package/widgets/entity-alerts/widget.js +328 -328
- package/widgets/entity-list/styles.js +66 -66
- package/widgets/entity-list/view.js +36 -36
- package/widgets/entity-list/widget.js +209 -209
- package/widgets/entity-list-item/widget.js +68 -68
- package/widgets/entity-row/styles.js +105 -105
- package/widgets/entity-row/widget.js +524 -524
- package/widgets/entity-row-button/styles.js +46 -46
- package/widgets/entity-row-button/widget.js +57 -57
- package/widgets/entity-view/reducer.js +20 -20
- package/widgets/entity-view/styles.js +90 -90
- package/widgets/entity-view/widget.js +516 -516
- package/widgets/facet-checkbox/styles.js +17 -17
- package/widgets/facet-checkbox/widget.js +43 -43
- package/widgets/facet-filter/widget.js +94 -94
- package/widgets/facet-filter-add/styles.js +30 -30
- package/widgets/facet-filter-add/widget.js +105 -105
- package/widgets/facet-filter-button/styles.js +74 -74
- package/widgets/facet-filter-button/widget.js +214 -214
- package/widgets/facet-filter-list-dialog/styles.js +59 -59
- package/widgets/facet-filter-list-dialog/widget.js +253 -253
- package/widgets/facet-filter-list-dialog-footer/styles.js +22 -22
- package/widgets/facet-filter-list-dialog-footer/widget.js +105 -105
- package/widgets/facet-filter-range-dialog/styles.js +82 -82
- package/widgets/facet-filter-range-dialog/widget.js +399 -399
- package/widgets/facet-filter-range-dialog-footer/styles.js +22 -22
- package/widgets/facet-filter-range-dialog-footer/widget.js +182 -182
- package/widgets/gamepad/widget.js +75 -75
- package/widgets/helpers/facet-helpers.js +105 -105
- package/widgets/hinter/reducer.js +35 -35
- package/widgets/hinter/styles.js +79 -79
- package/widgets/hinter/view.js +31 -31
- package/widgets/hinter/widget.js +291 -291
- package/widgets/junction/styles.js +22 -22
- package/widgets/junction/widget.js +50 -50
- package/widgets/main-tab-menu/styles.js +17 -17
- package/widgets/main-tab-menu/widget.js +136 -136
- package/widgets/map/view.js +49 -49
- package/widgets/map/widget.js +65 -65
- package/widgets/monitor/reducer.js +15 -15
- package/widgets/monitor/widget.js +66 -66
- package/widgets/navigating-layer/widget.js +25 -25
- package/widgets/notifications-button/widget.js +44 -44
- package/widgets/password-wizard/service.js +53 -53
- package/widgets/password-wizard/ui.js +66 -66
- package/widgets/plugin/reducer.js +19 -19
- package/widgets/plugin/styles.js +294 -294
- package/widgets/plugin/widget.js +638 -637
- package/widgets/quest-run-wizard/service.js +49 -49
- package/widgets/quest-run-wizard/ui.js +25 -25
- package/widgets/search/styles.js +80 -80
- package/widgets/search/widget.js +285 -285
- package/widgets/simple/view.js +29 -29
- package/widgets/status-filters/widget.js +121 -121
- package/widgets/tab/styles.js +16 -16
- package/widgets/tab/widget.js +89 -89
- package/widgets/tab-content/widget.js +35 -35
- package/widgets/tabs/widget.js +48 -48
- package/widgets/taskbar/service.js +99 -99
- package/widgets/taskbar/view.js +24 -24
- package/widgets/taskbar/widget.js +167 -167
- package/widgets/widget-doc-caller/reducer.js +15 -15
- package/widgets/widget-doc-caller/styles.js +20 -20
- package/widgets/widget-doc-caller/widget.js +55 -55
- package/widgets/wizard/widget.js +299 -299
- package/widgets/wizard-buttons/widget.js +111 -111
- package/widgets/workitem/styles.js +281 -281
- package/widgets/workitem/view.js +62 -62
- package/widgets/workitem/widget.js +972 -972
- package/widgets/workitem-dialog/widget.js +86 -86
- package/widgets/workitem-fields/widget.js +63 -63
|
@@ -1,63 +1,63 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import Widget from 'goblin-laboratory/widgets/widget';
|
|
3
|
-
import * as styles from './styles';
|
|
4
|
-
import AnalogClock from 'goblin-gadgets/widgets/analog-clock/widget';
|
|
5
|
-
|
|
6
|
-
/******************************************************************************/
|
|
7
|
-
|
|
8
|
-
export default class DesktopClockMenu extends Widget {
|
|
9
|
-
constructor() {
|
|
10
|
-
super(...arguments);
|
|
11
|
-
this.styles = styles;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
renderMenuItem(look, index) {
|
|
15
|
-
return (
|
|
16
|
-
<div
|
|
17
|
-
key={index}
|
|
18
|
-
className={
|
|
19
|
-
look === this.props.selected
|
|
20
|
-
? this.styles.classNames.menuItemSelected
|
|
21
|
-
: this.styles.classNames.menuItem
|
|
22
|
-
}
|
|
23
|
-
onClick={() => this.props.onSelect(look)}
|
|
24
|
-
>
|
|
25
|
-
<div
|
|
26
|
-
className={`background-hover ${this.styles.classNames.background}`}
|
|
27
|
-
/>
|
|
28
|
-
<div className={`clock-hover ${this.styles.classNames.clock}`}>
|
|
29
|
-
<AnalogClock
|
|
30
|
-
size={this.props.clockSize}
|
|
31
|
-
look={look}
|
|
32
|
-
transition="none"
|
|
33
|
-
serverTick={this.props.serverTick}
|
|
34
|
-
/>
|
|
35
|
-
</div>
|
|
36
|
-
</div>
|
|
37
|
-
);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
renderMenuItems() {
|
|
41
|
-
const result = [];
|
|
42
|
-
let index = 0;
|
|
43
|
-
for (const look of this.props.looks) {
|
|
44
|
-
result.push(this.renderMenuItem(look, index++));
|
|
45
|
-
}
|
|
46
|
-
return result;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
render() {
|
|
50
|
-
return (
|
|
51
|
-
<div
|
|
52
|
-
className={this.styles.classNames.fullScreen}
|
|
53
|
-
onClick={this.props.onClose}
|
|
54
|
-
>
|
|
55
|
-
<div className={this.styles.classNames.desktopClockMenu}>
|
|
56
|
-
{this.renderMenuItems()}
|
|
57
|
-
</div>
|
|
58
|
-
</div>
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/******************************************************************************/
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import Widget from 'goblin-laboratory/widgets/widget';
|
|
3
|
+
import * as styles from './styles';
|
|
4
|
+
import AnalogClock from 'goblin-gadgets/widgets/analog-clock/widget';
|
|
5
|
+
|
|
6
|
+
/******************************************************************************/
|
|
7
|
+
|
|
8
|
+
export default class DesktopClockMenu extends Widget {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments);
|
|
11
|
+
this.styles = styles;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
renderMenuItem(look, index) {
|
|
15
|
+
return (
|
|
16
|
+
<div
|
|
17
|
+
key={index}
|
|
18
|
+
className={
|
|
19
|
+
look === this.props.selected
|
|
20
|
+
? this.styles.classNames.menuItemSelected
|
|
21
|
+
: this.styles.classNames.menuItem
|
|
22
|
+
}
|
|
23
|
+
onClick={() => this.props.onSelect(look)}
|
|
24
|
+
>
|
|
25
|
+
<div
|
|
26
|
+
className={`background-hover ${this.styles.classNames.background}`}
|
|
27
|
+
/>
|
|
28
|
+
<div className={`clock-hover ${this.styles.classNames.clock}`}>
|
|
29
|
+
<AnalogClock
|
|
30
|
+
size={this.props.clockSize}
|
|
31
|
+
look={look}
|
|
32
|
+
transition="none"
|
|
33
|
+
serverTick={this.props.serverTick}
|
|
34
|
+
/>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
renderMenuItems() {
|
|
41
|
+
const result = [];
|
|
42
|
+
let index = 0;
|
|
43
|
+
for (const look of this.props.looks) {
|
|
44
|
+
result.push(this.renderMenuItem(look, index++));
|
|
45
|
+
}
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
render() {
|
|
50
|
+
return (
|
|
51
|
+
<div
|
|
52
|
+
className={this.styles.classNames.fullScreen}
|
|
53
|
+
onClick={this.props.onClose}
|
|
54
|
+
>
|
|
55
|
+
<div className={this.styles.classNames.desktopClockMenu}>
|
|
56
|
+
{this.renderMenuItems()}
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/******************************************************************************/
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import Shredder from 'xcraft-core-shredder';
|
|
2
|
-
|
|
3
|
-
const initialState = new Shredder({dialogVisibility: false});
|
|
4
|
-
|
|
5
|
-
export default (state = initialState, action = {}) => {
|
|
6
|
-
switch (action.type) {
|
|
7
|
-
case 'SHOW_DIALOG': {
|
|
8
|
-
return state.set('dialogVisibility', true);
|
|
9
|
-
}
|
|
10
|
-
case 'HIDE_DIALOG': {
|
|
11
|
-
return state.set('dialogVisibility', false);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
return state;
|
|
15
|
-
};
|
|
1
|
+
import Shredder from 'xcraft-core-shredder';
|
|
2
|
+
|
|
3
|
+
const initialState = new Shredder({dialogVisibility: false});
|
|
4
|
+
|
|
5
|
+
export default (state = initialState, action = {}) => {
|
|
6
|
+
switch (action.type) {
|
|
7
|
+
case 'SHOW_DIALOG': {
|
|
8
|
+
return state.set('dialogVisibility', true);
|
|
9
|
+
}
|
|
10
|
+
case 'HIDE_DIALOG': {
|
|
11
|
+
return state.set('dialogVisibility', false);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return state;
|
|
15
|
+
};
|
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
/******************************************************************************/
|
|
2
|
-
|
|
3
|
-
export default function styles(theme) {
|
|
4
|
-
const dialog = {
|
|
5
|
-
zIndex: 10,
|
|
6
|
-
top: '80px',
|
|
7
|
-
right: '20px',
|
|
8
|
-
width: '400px',
|
|
9
|
-
position: 'fixed',
|
|
10
|
-
padding: '20px 20px 20px 20px',
|
|
11
|
-
borderRadius: '10px',
|
|
12
|
-
backgroundColor: theme.palette.flyingDialogBackground,
|
|
13
|
-
boxShadow: 'rgba(0, 0, 0, 1) 0px 0px 40px 15px',
|
|
14
|
-
display: 'flex',
|
|
15
|
-
flexDirection: 'row',
|
|
16
|
-
alignItems: 'start',
|
|
17
|
-
transformOrigin: 'top right',
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
const list = {
|
|
21
|
-
display: 'flex',
|
|
22
|
-
flexDirection: 'column',
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
const blink = {
|
|
26
|
-
animationName: {
|
|
27
|
-
'50%': {
|
|
28
|
-
opacity: 0,
|
|
29
|
-
},
|
|
30
|
-
},
|
|
31
|
-
animationDuration: '1.2s',
|
|
32
|
-
animationIterationCount: 'infinite',
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
/******************************************************************************/
|
|
36
|
-
|
|
37
|
-
return {
|
|
38
|
-
dialog,
|
|
39
|
-
list,
|
|
40
|
-
blink,
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/******************************************************************************/
|
|
1
|
+
/******************************************************************************/
|
|
2
|
+
|
|
3
|
+
export default function styles(theme) {
|
|
4
|
+
const dialog = {
|
|
5
|
+
zIndex: 10,
|
|
6
|
+
top: '80px',
|
|
7
|
+
right: '20px',
|
|
8
|
+
width: '400px',
|
|
9
|
+
position: 'fixed',
|
|
10
|
+
padding: '20px 20px 20px 20px',
|
|
11
|
+
borderRadius: '10px',
|
|
12
|
+
backgroundColor: theme.palette.flyingDialogBackground,
|
|
13
|
+
boxShadow: 'rgba(0, 0, 0, 1) 0px 0px 40px 15px',
|
|
14
|
+
display: 'flex',
|
|
15
|
+
flexDirection: 'row',
|
|
16
|
+
alignItems: 'start',
|
|
17
|
+
transformOrigin: 'top right',
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const list = {
|
|
21
|
+
display: 'flex',
|
|
22
|
+
flexDirection: 'column',
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const blink = {
|
|
26
|
+
animationName: {
|
|
27
|
+
'50%': {
|
|
28
|
+
opacity: 0,
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
animationDuration: '1.2s',
|
|
32
|
+
animationIterationCount: 'infinite',
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
/******************************************************************************/
|
|
36
|
+
|
|
37
|
+
return {
|
|
38
|
+
dialog,
|
|
39
|
+
list,
|
|
40
|
+
blink,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/******************************************************************************/
|
|
@@ -1,129 +1,129 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import Widget from 'goblin-laboratory/widgets/widget';
|
|
3
|
-
import * as styles from './styles';
|
|
4
|
-
import T from 't';
|
|
5
|
-
import Button from 'goblin-gadgets/widgets/button/widget';
|
|
6
|
-
import Label from 'goblin-gadgets/widgets/label/widget';
|
|
7
|
-
import Container from 'goblin-gadgets/widgets/container/widget';
|
|
8
|
-
import {ColorManipulator} from 'goblin-theme';
|
|
9
|
-
|
|
10
|
-
/******************************************************************************/
|
|
11
|
-
|
|
12
|
-
class DesktopConnectionStatusNC extends Widget {
|
|
13
|
-
constructor() {
|
|
14
|
-
super(...arguments);
|
|
15
|
-
this.styles = styles;
|
|
16
|
-
|
|
17
|
-
this.onToggleDialog = this.onToggleDialog.bind(this);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
get showDialog() {
|
|
21
|
-
return this.props.dialogVisibility;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
set showDialog(value) {
|
|
25
|
-
this.dispatchTo(this.widgetId, {
|
|
26
|
-
type: value ? 'SHOW_DIALOG' : 'HIDE_DIALOG',
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
onToggleDialog() {
|
|
31
|
-
this.showDialog = !this.showDialog;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
_getColor(lag) {
|
|
35
|
-
const color = lag ? '#ff0000' : '#00ff00';
|
|
36
|
-
return ColorManipulator.darken(color, 0.4);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
renderRow(horde, lag, delta, noSocket) {
|
|
40
|
-
return (
|
|
41
|
-
<Container kind="row" key={horde}>
|
|
42
|
-
<Label singleLine={true} text={T('{horde} :', '', {horde})} />
|
|
43
|
-
<Label
|
|
44
|
-
singleLine={true}
|
|
45
|
-
kind="warning"
|
|
46
|
-
text={
|
|
47
|
-
noSocket
|
|
48
|
-
? T('inatteignable')
|
|
49
|
-
: lag
|
|
50
|
-
? T('déconnecté depuis {delta}s', '', {
|
|
51
|
-
delta: parseInt(delta / 1000),
|
|
52
|
-
})
|
|
53
|
-
: T('connecté')
|
|
54
|
-
}
|
|
55
|
-
/>
|
|
56
|
-
</Container>
|
|
57
|
-
);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
renderDialog(hordes, color) {
|
|
61
|
-
if (!this.showDialog) {
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
|
-
return (
|
|
65
|
-
<div className={this.styles.classNames.dialog}>
|
|
66
|
-
<Label
|
|
67
|
-
width="50px"
|
|
68
|
-
glyph="solid/globe"
|
|
69
|
-
glyphSize="150%"
|
|
70
|
-
glyphColor={color}
|
|
71
|
-
/>
|
|
72
|
-
<div className={this.styles.classNames.list}>
|
|
73
|
-
<Label fontWeight="bold" text={T('Réseau')} bottomSpacing="large" />
|
|
74
|
-
{hordes
|
|
75
|
-
.entrySeq()
|
|
76
|
-
.map(([horde, {lag, delta, noSocket}]) =>
|
|
77
|
-
this.renderRow(horde, lag, delta, noSocket)
|
|
78
|
-
)}
|
|
79
|
-
</div>
|
|
80
|
-
</div>
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
renderStatus(hordes) {
|
|
85
|
-
const lag = hordes
|
|
86
|
-
.valueSeq()
|
|
87
|
-
.toArray()
|
|
88
|
-
.some(({lag}) => lag);
|
|
89
|
-
const color = this._getColor(lag);
|
|
90
|
-
|
|
91
|
-
return (
|
|
92
|
-
<>
|
|
93
|
-
<Button
|
|
94
|
-
kind="main-tab-right"
|
|
95
|
-
glyph="solid/globe"
|
|
96
|
-
glyphColor={lag ? color : null}
|
|
97
|
-
tooltip={T('Statut du réseau')}
|
|
98
|
-
onClick={() => this.onToggleDialog()}
|
|
99
|
-
className={lag && this.styles.classNames.blink}
|
|
100
|
-
/>
|
|
101
|
-
{this.renderDialog(hordes, color)}
|
|
102
|
-
</>
|
|
103
|
-
);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
render() {
|
|
107
|
-
const {hordes} = this.props;
|
|
108
|
-
if (!hordes || hordes.isEmpty()) {
|
|
109
|
-
return null;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
return this.renderStatus(hordes);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/******************************************************************************/
|
|
117
|
-
|
|
118
|
-
const DesktopConnectionStatus = Widget.connect((state, props) => {
|
|
119
|
-
const stateWidgets = state.get('widgets').get(props.id);
|
|
120
|
-
const stateNetwork = state.get('network');
|
|
121
|
-
|
|
122
|
-
const hordes = stateNetwork.get('hordes');
|
|
123
|
-
const dialogVisibility = stateWidgets
|
|
124
|
-
? stateWidgets.get('dialogVisibility')
|
|
125
|
-
: false;
|
|
126
|
-
return {hordes, dialogVisibility};
|
|
127
|
-
})(DesktopConnectionStatusNC);
|
|
128
|
-
|
|
129
|
-
export default DesktopConnectionStatus;
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import Widget from 'goblin-laboratory/widgets/widget';
|
|
3
|
+
import * as styles from './styles';
|
|
4
|
+
import T from 't';
|
|
5
|
+
import Button from 'goblin-gadgets/widgets/button/widget';
|
|
6
|
+
import Label from 'goblin-gadgets/widgets/label/widget';
|
|
7
|
+
import Container from 'goblin-gadgets/widgets/container/widget';
|
|
8
|
+
import {ColorManipulator} from 'goblin-theme';
|
|
9
|
+
|
|
10
|
+
/******************************************************************************/
|
|
11
|
+
|
|
12
|
+
class DesktopConnectionStatusNC extends Widget {
|
|
13
|
+
constructor() {
|
|
14
|
+
super(...arguments);
|
|
15
|
+
this.styles = styles;
|
|
16
|
+
|
|
17
|
+
this.onToggleDialog = this.onToggleDialog.bind(this);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
get showDialog() {
|
|
21
|
+
return this.props.dialogVisibility;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
set showDialog(value) {
|
|
25
|
+
this.dispatchTo(this.widgetId, {
|
|
26
|
+
type: value ? 'SHOW_DIALOG' : 'HIDE_DIALOG',
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
onToggleDialog() {
|
|
31
|
+
this.showDialog = !this.showDialog;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
_getColor(lag) {
|
|
35
|
+
const color = lag ? '#ff0000' : '#00ff00';
|
|
36
|
+
return ColorManipulator.darken(color, 0.4);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
renderRow(horde, lag, delta, noSocket) {
|
|
40
|
+
return (
|
|
41
|
+
<Container kind="row" key={horde}>
|
|
42
|
+
<Label singleLine={true} text={T('{horde} :', '', {horde})} />
|
|
43
|
+
<Label
|
|
44
|
+
singleLine={true}
|
|
45
|
+
kind="warning"
|
|
46
|
+
text={
|
|
47
|
+
noSocket
|
|
48
|
+
? T('inatteignable')
|
|
49
|
+
: lag
|
|
50
|
+
? T('déconnecté depuis {delta}s', '', {
|
|
51
|
+
delta: parseInt(delta / 1000),
|
|
52
|
+
})
|
|
53
|
+
: T('connecté')
|
|
54
|
+
}
|
|
55
|
+
/>
|
|
56
|
+
</Container>
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
renderDialog(hordes, color) {
|
|
61
|
+
if (!this.showDialog) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
return (
|
|
65
|
+
<div className={this.styles.classNames.dialog}>
|
|
66
|
+
<Label
|
|
67
|
+
width="50px"
|
|
68
|
+
glyph="solid/globe"
|
|
69
|
+
glyphSize="150%"
|
|
70
|
+
glyphColor={color}
|
|
71
|
+
/>
|
|
72
|
+
<div className={this.styles.classNames.list}>
|
|
73
|
+
<Label fontWeight="bold" text={T('Réseau')} bottomSpacing="large" />
|
|
74
|
+
{hordes
|
|
75
|
+
.entrySeq()
|
|
76
|
+
.map(([horde, {lag, delta, noSocket}]) =>
|
|
77
|
+
this.renderRow(horde, lag, delta, noSocket)
|
|
78
|
+
)}
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
renderStatus(hordes) {
|
|
85
|
+
const lag = hordes
|
|
86
|
+
.valueSeq()
|
|
87
|
+
.toArray()
|
|
88
|
+
.some(({lag}) => lag);
|
|
89
|
+
const color = this._getColor(lag);
|
|
90
|
+
|
|
91
|
+
return (
|
|
92
|
+
<>
|
|
93
|
+
<Button
|
|
94
|
+
kind="main-tab-right"
|
|
95
|
+
glyph="solid/globe"
|
|
96
|
+
glyphColor={lag ? color : null}
|
|
97
|
+
tooltip={T('Statut du réseau')}
|
|
98
|
+
onClick={() => this.onToggleDialog()}
|
|
99
|
+
className={lag && this.styles.classNames.blink}
|
|
100
|
+
/>
|
|
101
|
+
{this.renderDialog(hordes, color)}
|
|
102
|
+
</>
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
render() {
|
|
107
|
+
const {hordes} = this.props;
|
|
108
|
+
if (!hordes || hordes.isEmpty()) {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return this.renderStatus(hordes);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/******************************************************************************/
|
|
117
|
+
|
|
118
|
+
const DesktopConnectionStatus = Widget.connect((state, props) => {
|
|
119
|
+
const stateWidgets = state.get('widgets').get(props.id);
|
|
120
|
+
const stateNetwork = state.get('network');
|
|
121
|
+
|
|
122
|
+
const hordes = stateNetwork.get('hordes');
|
|
123
|
+
const dialogVisibility = stateWidgets
|
|
124
|
+
? stateWidgets.get('dialogVisibility')
|
|
125
|
+
: false;
|
|
126
|
+
return {hordes, dialogVisibility};
|
|
127
|
+
})(DesktopConnectionStatusNC);
|
|
128
|
+
|
|
129
|
+
export default DesktopConnectionStatus;
|
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import Widget from 'goblin-laboratory/widgets/widget';
|
|
3
|
-
import importer from 'goblin_importer';
|
|
4
|
-
/******************************************************************************/
|
|
5
|
-
const viewImporter = importer('view');
|
|
6
|
-
|
|
7
|
-
class Content extends Widget {
|
|
8
|
-
constructor() {
|
|
9
|
-
super(...arguments);
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
render() {
|
|
13
|
-
const {desktopId, workitem, dialogId, context, hinter, detail} = this.props;
|
|
14
|
-
|
|
15
|
-
let wid;
|
|
16
|
-
let view;
|
|
17
|
-
if (workitem) {
|
|
18
|
-
wid = workitem.get('id');
|
|
19
|
-
view = workitem.get('view');
|
|
20
|
-
} else if (!dialogId) {
|
|
21
|
-
return null;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
if (wid === dialogId) {
|
|
25
|
-
//avoid display same content in tab
|
|
26
|
-
wid = null;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
if (!view) {
|
|
30
|
-
view = 'default';
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const View = viewImporter(view);
|
|
34
|
-
return (
|
|
35
|
-
<View
|
|
36
|
-
desktopId={desktopId}
|
|
37
|
-
context={context}
|
|
38
|
-
workitemId={wid}
|
|
39
|
-
dialogId={dialogId}
|
|
40
|
-
hinter={hinter}
|
|
41
|
-
detail={detail}
|
|
42
|
-
/>
|
|
43
|
-
);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/******************************************************************************/
|
|
48
|
-
|
|
49
|
-
const CurrentContent = Widget.connect((state, props) => {
|
|
50
|
-
const context = state.get(`backend.${props.id}.current.workcontext`);
|
|
51
|
-
|
|
52
|
-
const dialogId = state.get(`backend.${props.id}.current.dialogs.${context}`);
|
|
53
|
-
const workitemId = state.get(
|
|
54
|
-
`backend.${props.id}.current.workitems.${context}`
|
|
55
|
-
);
|
|
56
|
-
let workitem = null;
|
|
57
|
-
let hinter;
|
|
58
|
-
let detail;
|
|
59
|
-
if (workitemId) {
|
|
60
|
-
workitem = state.get(`backend.${props.id}.workitems.${workitemId}`);
|
|
61
|
-
hinter = workitem.get('hinter');
|
|
62
|
-
detail = workitem.get('detail');
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
return {workitem, dialogId, context, hinter, detail};
|
|
66
|
-
})(Content);
|
|
67
|
-
|
|
68
|
-
export default CurrentContent;
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import Widget from 'goblin-laboratory/widgets/widget';
|
|
3
|
+
import importer from 'goblin_importer';
|
|
4
|
+
/******************************************************************************/
|
|
5
|
+
const viewImporter = importer('view');
|
|
6
|
+
|
|
7
|
+
class Content extends Widget {
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
render() {
|
|
13
|
+
const {desktopId, workitem, dialogId, context, hinter, detail} = this.props;
|
|
14
|
+
|
|
15
|
+
let wid;
|
|
16
|
+
let view;
|
|
17
|
+
if (workitem) {
|
|
18
|
+
wid = workitem.get('id');
|
|
19
|
+
view = workitem.get('view');
|
|
20
|
+
} else if (!dialogId) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (wid === dialogId) {
|
|
25
|
+
//avoid display same content in tab
|
|
26
|
+
wid = null;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (!view) {
|
|
30
|
+
view = 'default';
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const View = viewImporter(view);
|
|
34
|
+
return (
|
|
35
|
+
<View
|
|
36
|
+
desktopId={desktopId}
|
|
37
|
+
context={context}
|
|
38
|
+
workitemId={wid}
|
|
39
|
+
dialogId={dialogId}
|
|
40
|
+
hinter={hinter}
|
|
41
|
+
detail={detail}
|
|
42
|
+
/>
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/******************************************************************************/
|
|
48
|
+
|
|
49
|
+
const CurrentContent = Widget.connect((state, props) => {
|
|
50
|
+
const context = state.get(`backend.${props.id}.current.workcontext`);
|
|
51
|
+
|
|
52
|
+
const dialogId = state.get(`backend.${props.id}.current.dialogs.${context}`);
|
|
53
|
+
const workitemId = state.get(
|
|
54
|
+
`backend.${props.id}.current.workitems.${context}`
|
|
55
|
+
);
|
|
56
|
+
let workitem = null;
|
|
57
|
+
let hinter;
|
|
58
|
+
let detail;
|
|
59
|
+
if (workitemId) {
|
|
60
|
+
workitem = state.get(`backend.${props.id}.workitems.${workitemId}`);
|
|
61
|
+
hinter = workitem.get('hinter');
|
|
62
|
+
detail = workitem.get('detail');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return {workitem, dialogId, context, hinter, detail};
|
|
66
|
+
})(Content);
|
|
67
|
+
|
|
68
|
+
export default CurrentContent;
|