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.
Files changed (143) hide show
  1. package/.editorconfig +9 -9
  2. package/.eslintrc.js +28 -28
  3. package/.zou-flow +3 -3
  4. package/README.md +108 -108
  5. package/builders/builders.js +3 -3
  6. package/builders/wizard.js +457 -457
  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/lib/service.js +137 -137
  12. package/package.json +36 -36
  13. package/password-wizard.js +13 -13
  14. package/quest-run-wizard.js +13 -13
  15. package/taskbar.js +13 -13
  16. package/widgets/audio/sfx.js +177 -177
  17. package/widgets/board/view.js +37 -37
  18. package/widgets/board/widget.js +65 -65
  19. package/widgets/contexts/logic-handlers.js +36 -36
  20. package/widgets/contexts/service.js +40 -40
  21. package/widgets/contexts/view.js +22 -22
  22. package/widgets/contexts/widget.js +147 -147
  23. package/widgets/datagrid/datagrid-entity.js +82 -82
  24. package/widgets/datagrid/datagrid-headers.js +272 -272
  25. package/widgets/datagrid/styles.js +13 -13
  26. package/widgets/datagrid/widget.js +192 -192
  27. package/widgets/datagrid-cell/styles.js +52 -52
  28. package/widgets/datagrid-cell/widget.js +41 -41
  29. package/widgets/datagrid-item/styles.js +15 -15
  30. package/widgets/datagrid-item/widget.js +74 -74
  31. package/widgets/default/view.js +142 -142
  32. package/widgets/desktop/compensator.js +9 -9
  33. package/widgets/desktop/logic-handlers.js +237 -237
  34. package/widgets/desktop/reducer.js +35 -35
  35. package/widgets/desktop/service.js +828 -828
  36. package/widgets/desktop/styles.js +28 -28
  37. package/widgets/desktop/widget.js +175 -175
  38. package/widgets/desktop-clock/styles.js +69 -69
  39. package/widgets/desktop-clock/widget.js +387 -387
  40. package/widgets/desktop-clock-clock/styles.js +56 -56
  41. package/widgets/desktop-clock-clock/widget.js +96 -96
  42. package/widgets/desktop-clock-menu/styles.js +129 -129
  43. package/widgets/desktop-clock-menu/widget.js +63 -63
  44. package/widgets/desktop-connection-status/reducer.js +15 -15
  45. package/widgets/desktop-connection-status/styles.js +44 -44
  46. package/widgets/desktop-connection-status/widget.js +129 -129
  47. package/widgets/desktop-content/widget.js +68 -68
  48. package/widgets/desktop-footer/reducer.js +31 -31
  49. package/widgets/desktop-footer/styles.js +36 -36
  50. package/widgets/desktop-footer/widget.js +52 -52
  51. package/widgets/desktop-monitors/styles.js +155 -155
  52. package/widgets/desktop-monitors/widget.js +272 -272
  53. package/widgets/desktop-notebook/styles.js +155 -155
  54. package/widgets/desktop-notebook/widget.js +252 -252
  55. package/widgets/desktop-notifications/styles.js +147 -147
  56. package/widgets/desktop-notifications/widget.js +231 -231
  57. package/widgets/desktop-scale/reducer.js +15 -15
  58. package/widgets/desktop-scale/styles.js +48 -48
  59. package/widgets/desktop-scale/widget.js +172 -172
  60. package/widgets/desktop-state-monitor/styles.js +72 -72
  61. package/widgets/desktop-state-monitor/widget.js +123 -123
  62. package/widgets/desktop-taskbar/widget.js +57 -57
  63. package/widgets/desktop-themes-menu/widget.js +121 -121
  64. package/widgets/desktop-topbar/widget.js +201 -201
  65. package/widgets/desktop-window/service.js +56 -56
  66. package/widgets/desktop-window/styles.js +22 -22
  67. package/widgets/desktop-window/widget.js +70 -70
  68. package/widgets/detail/compensator.js +17 -17
  69. package/widgets/detail/view.js +40 -40
  70. package/widgets/detail/widget.js +125 -125
  71. package/widgets/editor/widget.js +83 -83
  72. package/widgets/entity-alerts/styles.js +77 -77
  73. package/widgets/entity-alerts/widget.js +328 -328
  74. package/widgets/entity-list/styles.js +66 -66
  75. package/widgets/entity-list/view.js +36 -36
  76. package/widgets/entity-list/widget.js +209 -209
  77. package/widgets/entity-list-item/widget.js +68 -68
  78. package/widgets/entity-row/styles.js +105 -105
  79. package/widgets/entity-row/widget.js +524 -524
  80. package/widgets/entity-row-button/styles.js +46 -46
  81. package/widgets/entity-row-button/widget.js +57 -57
  82. package/widgets/entity-view/reducer.js +20 -20
  83. package/widgets/entity-view/styles.js +90 -90
  84. package/widgets/entity-view/widget.js +516 -516
  85. package/widgets/facet-checkbox/styles.js +17 -17
  86. package/widgets/facet-checkbox/widget.js +43 -43
  87. package/widgets/facet-filter/widget.js +94 -94
  88. package/widgets/facet-filter-add/styles.js +30 -30
  89. package/widgets/facet-filter-add/widget.js +105 -105
  90. package/widgets/facet-filter-button/styles.js +74 -74
  91. package/widgets/facet-filter-button/widget.js +214 -214
  92. package/widgets/facet-filter-list-dialog/styles.js +59 -59
  93. package/widgets/facet-filter-list-dialog/widget.js +253 -253
  94. package/widgets/facet-filter-list-dialog-footer/styles.js +22 -22
  95. package/widgets/facet-filter-list-dialog-footer/widget.js +105 -105
  96. package/widgets/facet-filter-range-dialog/styles.js +82 -82
  97. package/widgets/facet-filter-range-dialog/widget.js +399 -399
  98. package/widgets/facet-filter-range-dialog-footer/styles.js +22 -22
  99. package/widgets/facet-filter-range-dialog-footer/widget.js +182 -182
  100. package/widgets/gamepad/widget.js +75 -75
  101. package/widgets/helpers/facet-helpers.js +105 -105
  102. package/widgets/hinter/reducer.js +35 -35
  103. package/widgets/hinter/styles.js +79 -79
  104. package/widgets/hinter/view.js +31 -31
  105. package/widgets/hinter/widget.js +291 -291
  106. package/widgets/junction/styles.js +22 -22
  107. package/widgets/junction/widget.js +50 -50
  108. package/widgets/main-tab-menu/styles.js +17 -17
  109. package/widgets/main-tab-menu/widget.js +136 -136
  110. package/widgets/map/view.js +49 -49
  111. package/widgets/map/widget.js +65 -65
  112. package/widgets/monitor/reducer.js +15 -15
  113. package/widgets/monitor/widget.js +66 -66
  114. package/widgets/navigating-layer/widget.js +25 -25
  115. package/widgets/notifications-button/widget.js +44 -44
  116. package/widgets/password-wizard/service.js +53 -53
  117. package/widgets/password-wizard/ui.js +66 -66
  118. package/widgets/plugin/reducer.js +19 -19
  119. package/widgets/plugin/styles.js +294 -294
  120. package/widgets/plugin/widget.js +638 -637
  121. package/widgets/quest-run-wizard/service.js +49 -49
  122. package/widgets/quest-run-wizard/ui.js +25 -25
  123. package/widgets/search/styles.js +80 -80
  124. package/widgets/search/widget.js +285 -285
  125. package/widgets/simple/view.js +29 -29
  126. package/widgets/status-filters/widget.js +121 -121
  127. package/widgets/tab/styles.js +16 -16
  128. package/widgets/tab/widget.js +89 -89
  129. package/widgets/tab-content/widget.js +35 -35
  130. package/widgets/tabs/widget.js +48 -48
  131. package/widgets/taskbar/service.js +99 -99
  132. package/widgets/taskbar/view.js +24 -24
  133. package/widgets/taskbar/widget.js +167 -167
  134. package/widgets/widget-doc-caller/reducer.js +15 -15
  135. package/widgets/widget-doc-caller/styles.js +20 -20
  136. package/widgets/widget-doc-caller/widget.js +55 -55
  137. package/widgets/wizard/widget.js +299 -299
  138. package/widgets/wizard-buttons/widget.js +111 -111
  139. package/widgets/workitem/styles.js +281 -281
  140. package/widgets/workitem/view.js +62 -62
  141. package/widgets/workitem/widget.js +972 -972
  142. package/widgets/workitem-dialog/widget.js +86 -86
  143. 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;