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