goblin-desktop 4.2.0 → 4.2.2

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.
Files changed (144) hide show
  1. package/.editorconfig +9 -9
  2. package/.zou-flow +2 -2
  3. package/LICENSE +21 -21
  4. package/README.md +108 -108
  5. package/builders/builders.js +3 -3
  6. package/builders/wizard.js +462 -462
  7. package/contexts.js +13 -13
  8. package/desktop-manager.js +10 -10
  9. package/desktop-window.js +13 -13
  10. package/desktop.js +13 -13
  11. package/eslint.config.js +65 -65
  12. package/lib/service.js +137 -137
  13. package/package.json +48 -48
  14. package/password-wizard.js +24 -24
  15. package/quest-run-wizard.js +24 -24
  16. package/taskbar.js +13 -13
  17. package/widgets/audio/sfx.js +177 -177
  18. package/widgets/board/view.js +37 -37
  19. package/widgets/board/widget.js +65 -65
  20. package/widgets/contexts/logic-handlers.js +36 -36
  21. package/widgets/contexts/service.js +40 -40
  22. package/widgets/contexts/view.js +21 -21
  23. package/widgets/contexts/widget.js +147 -147
  24. package/widgets/datagrid/datagrid-entity.js +82 -82
  25. package/widgets/datagrid/datagrid-headers.js +274 -274
  26. package/widgets/datagrid/styles.js +13 -13
  27. package/widgets/datagrid/widget.js +192 -192
  28. package/widgets/datagrid-cell/styles.js +52 -52
  29. package/widgets/datagrid-cell/widget.js +41 -41
  30. package/widgets/datagrid-item/styles.js +15 -15
  31. package/widgets/datagrid-item/widget.js +74 -74
  32. package/widgets/default/view.js +160 -160
  33. package/widgets/desktop/compensator.js +9 -9
  34. package/widgets/desktop/logic-handlers.js +243 -243
  35. package/widgets/desktop/reducer.js +35 -35
  36. package/widgets/desktop/service.js +858 -858
  37. package/widgets/desktop/styles.js +28 -28
  38. package/widgets/desktop/widget.js +191 -191
  39. package/widgets/desktop-clock/styles.js +69 -69
  40. package/widgets/desktop-clock/widget.js +387 -387
  41. package/widgets/desktop-clock-clock/styles.js +56 -56
  42. package/widgets/desktop-clock-clock/widget.js +96 -96
  43. package/widgets/desktop-clock-menu/styles.js +129 -129
  44. package/widgets/desktop-clock-menu/widget.js +63 -63
  45. package/widgets/desktop-connection-status/reducer.js +15 -15
  46. package/widgets/desktop-connection-status/styles.js +44 -44
  47. package/widgets/desktop-connection-status/widget.js +134 -134
  48. package/widgets/desktop-content/widget.js +68 -68
  49. package/widgets/desktop-footer/reducer.js +31 -31
  50. package/widgets/desktop-footer/styles.js +36 -36
  51. package/widgets/desktop-footer/widget.js +52 -52
  52. package/widgets/desktop-monitors/styles.js +155 -155
  53. package/widgets/desktop-monitors/widget.js +272 -272
  54. package/widgets/desktop-notebook/styles.js +155 -155
  55. package/widgets/desktop-notebook/widget.js +252 -252
  56. package/widgets/desktop-notifications/styles.js +147 -147
  57. package/widgets/desktop-notifications/widget.js +231 -231
  58. package/widgets/desktop-scale/reducer.js +15 -15
  59. package/widgets/desktop-scale/styles.js +49 -49
  60. package/widgets/desktop-scale/widget.js +173 -172
  61. package/widgets/desktop-state-monitor/styles.js +72 -72
  62. package/widgets/desktop-state-monitor/widget.js +123 -123
  63. package/widgets/desktop-taskbar/widget.js +57 -57
  64. package/widgets/desktop-themes-menu/widget.js +121 -121
  65. package/widgets/desktop-topbar/widget.js +201 -201
  66. package/widgets/desktop-window/service.js +56 -56
  67. package/widgets/desktop-window/styles.js +22 -22
  68. package/widgets/desktop-window/widget.js +70 -70
  69. package/widgets/detail/compensator.js +17 -17
  70. package/widgets/detail/view.js +40 -40
  71. package/widgets/detail/widget.js +119 -119
  72. package/widgets/editor/widget.js +82 -82
  73. package/widgets/entity-alerts/styles.js +77 -77
  74. package/widgets/entity-alerts/widget.js +328 -328
  75. package/widgets/entity-list/styles.js +66 -66
  76. package/widgets/entity-list/view.js +36 -36
  77. package/widgets/entity-list/widget.js +209 -209
  78. package/widgets/entity-list-item/widget.js +68 -68
  79. package/widgets/entity-row/styles.js +105 -105
  80. package/widgets/entity-row/widget.js +524 -524
  81. package/widgets/entity-row-button/styles.js +46 -46
  82. package/widgets/entity-row-button/widget.js +57 -57
  83. package/widgets/entity-view/reducer.js +20 -20
  84. package/widgets/entity-view/styles.js +90 -90
  85. package/widgets/entity-view/widget.js +601 -601
  86. package/widgets/facet-checkbox/styles.js +17 -17
  87. package/widgets/facet-checkbox/widget.js +43 -43
  88. package/widgets/facet-filter/widget.js +94 -94
  89. package/widgets/facet-filter-add/styles.js +30 -30
  90. package/widgets/facet-filter-add/widget.js +105 -105
  91. package/widgets/facet-filter-button/styles.js +74 -74
  92. package/widgets/facet-filter-button/widget.js +214 -214
  93. package/widgets/facet-filter-list-dialog/styles.js +59 -59
  94. package/widgets/facet-filter-list-dialog/widget.js +273 -273
  95. package/widgets/facet-filter-list-dialog-footer/styles.js +22 -22
  96. package/widgets/facet-filter-list-dialog-footer/widget.js +105 -105
  97. package/widgets/facet-filter-range-dialog/styles.js +82 -82
  98. package/widgets/facet-filter-range-dialog/widget.js +399 -399
  99. package/widgets/facet-filter-range-dialog-footer/styles.js +22 -22
  100. package/widgets/facet-filter-range-dialog-footer/widget.js +182 -182
  101. package/widgets/gamepad/widget.js +75 -75
  102. package/widgets/helpers/facet-helpers.js +105 -105
  103. package/widgets/hinter/reducer.js +35 -35
  104. package/widgets/hinter/styles.js +79 -79
  105. package/widgets/hinter/view.js +32 -32
  106. package/widgets/hinter/widget.js +289 -291
  107. package/widgets/junction/styles.js +22 -22
  108. package/widgets/junction/widget.js +50 -50
  109. package/widgets/main-tab-menu/styles.js +17 -17
  110. package/widgets/main-tab-menu/widget.js +130 -130
  111. package/widgets/map/view.js +49 -49
  112. package/widgets/map/widget.js +64 -64
  113. package/widgets/monitor/reducer.js +15 -15
  114. package/widgets/monitor/widget.js +60 -60
  115. package/widgets/navigating-layer/widget.js +25 -25
  116. package/widgets/notifications-button/widget.js +44 -44
  117. package/widgets/password-wizard/service.js +53 -53
  118. package/widgets/password-wizard/ui.js +66 -66
  119. package/widgets/plugin/reducer.js +19 -19
  120. package/widgets/plugin/styles.js +294 -294
  121. package/widgets/plugin/widget.js +622 -622
  122. package/widgets/quest-run-wizard/service.js +49 -49
  123. package/widgets/quest-run-wizard/ui.js +25 -25
  124. package/widgets/search/styles.js +80 -80
  125. package/widgets/search/widget.js +283 -285
  126. package/widgets/simple/view.js +28 -28
  127. package/widgets/status-filters/widget.js +121 -121
  128. package/widgets/tab/styles.js +16 -16
  129. package/widgets/tab/widget.js +89 -89
  130. package/widgets/tab-content/widget.js +35 -35
  131. package/widgets/tabs/widget.js +48 -48
  132. package/widgets/taskbar/service.js +99 -99
  133. package/widgets/taskbar/view.js +27 -27
  134. package/widgets/taskbar/widget.js +167 -167
  135. package/widgets/widget-doc-caller/reducer.js +15 -15
  136. package/widgets/widget-doc-caller/styles.js +20 -20
  137. package/widgets/widget-doc-caller/widget.js +55 -55
  138. package/widgets/wizard/widget.js +298 -298
  139. package/widgets/wizard-buttons/widget.js +111 -111
  140. package/widgets/workitem/styles.js +286 -286
  141. package/widgets/workitem/view.js +62 -62
  142. package/widgets/workitem/widget.js +988 -988
  143. package/widgets/workitem-dialog/widget.js +86 -86
  144. package/widgets/workitem-fields/widget.js +64 -64
@@ -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,134 +1,134 @@
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, data]) =>
77
- this.renderRow(
78
- horde,
79
- data.get('lag'),
80
- data.get('delta'),
81
- data.get('noSocket')
82
- )
83
- )}
84
- </div>
85
- </div>
86
- );
87
- }
88
-
89
- renderStatus(hordes) {
90
- const lag = hordes
91
- .valueSeq()
92
- .toArray()
93
- .some((horde) => horde.get('lag'));
94
- const color = this._getColor(lag);
95
-
96
- return (
97
- <>
98
- <Button
99
- kind="main-tab-right"
100
- glyph="solid/globe"
101
- glyphColor={lag ? color : null}
102
- tooltip={T('Statut du réseau')}
103
- onClick={() => this.onToggleDialog()}
104
- className={lag && this.styles.classNames.blink}
105
- />
106
- {this.renderDialog(hordes, color)}
107
- </>
108
- );
109
- }
110
-
111
- render() {
112
- const {hordes} = this.props;
113
- if (!hordes || hordes.isEmpty()) {
114
- return null;
115
- }
116
-
117
- return this.renderStatus(hordes);
118
- }
119
- }
120
-
121
- /******************************************************************************/
122
-
123
- const DesktopConnectionStatus = Widget.connect((state, props) => {
124
- const stateWidgets = state.get('widgets').get(props.id);
125
- const stateNetwork = state.get('network');
126
-
127
- const hordes = stateNetwork.get('hordes');
128
- const dialogVisibility = stateWidgets
129
- ? stateWidgets.get('dialogVisibility')
130
- : false;
131
- return {hordes, dialogVisibility};
132
- })(DesktopConnectionStatusNC);
133
-
134
- 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, data]) =>
77
+ this.renderRow(
78
+ horde,
79
+ data.get('lag'),
80
+ data.get('delta'),
81
+ data.get('noSocket')
82
+ )
83
+ )}
84
+ </div>
85
+ </div>
86
+ );
87
+ }
88
+
89
+ renderStatus(hordes) {
90
+ const lag = hordes
91
+ .valueSeq()
92
+ .toArray()
93
+ .some((horde) => horde.get('lag'));
94
+ const color = this._getColor(lag);
95
+
96
+ return (
97
+ <>
98
+ <Button
99
+ kind="main-tab-right"
100
+ glyph="solid/globe"
101
+ glyphColor={lag ? color : null}
102
+ tooltip={T('Statut du réseau')}
103
+ onClick={() => this.onToggleDialog()}
104
+ className={lag && this.styles.classNames.blink}
105
+ />
106
+ {this.renderDialog(hordes, color)}
107
+ </>
108
+ );
109
+ }
110
+
111
+ render() {
112
+ const {hordes} = this.props;
113
+ if (!hordes || hordes.isEmpty()) {
114
+ return null;
115
+ }
116
+
117
+ return this.renderStatus(hordes);
118
+ }
119
+ }
120
+
121
+ /******************************************************************************/
122
+
123
+ const DesktopConnectionStatus = Widget.connect((state, props) => {
124
+ const stateWidgets = state.get('widgets').get(props.id);
125
+ const stateNetwork = state.get('network');
126
+
127
+ const hordes = stateNetwork.get('hordes');
128
+ const dialogVisibility = stateWidgets
129
+ ? stateWidgets.get('dialogVisibility')
130
+ : false;
131
+ return {hordes, dialogVisibility};
132
+ })(DesktopConnectionStatusNC);
133
+
134
+ 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;