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,99 +1,99 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
//T:2019-02-27
|
|
3
|
-
|
|
4
|
-
const Goblin = require('xcraft-core-goblin');
|
|
5
|
-
const goblinName = 'taskbar';
|
|
6
|
-
const {v4: uuidV4} = require('uuid');
|
|
7
|
-
const confConfig = require('xcraft-core-etc')().load('goblin-configurator');
|
|
8
|
-
|
|
9
|
-
// Define initial logic values
|
|
10
|
-
const logicState = {};
|
|
11
|
-
// Define logic handlers according rc.json
|
|
12
|
-
const logicHandlers = {
|
|
13
|
-
create: (state, action) => {
|
|
14
|
-
const id = action.get('id');
|
|
15
|
-
return state.set('', {
|
|
16
|
-
id: id,
|
|
17
|
-
});
|
|
18
|
-
},
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
// Register quest's according rc.json
|
|
22
|
-
|
|
23
|
-
Goblin.registerQuest(goblinName, 'create', function (quest, desktopId) {
|
|
24
|
-
quest.goblin.setX('desktopId', desktopId);
|
|
25
|
-
quest.do();
|
|
26
|
-
return quest.goblin.id;
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
Goblin.registerQuest(goblinName, 'change-mandate', function (quest) {
|
|
30
|
-
quest.evt(`mandate.changed`);
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
Goblin.registerQuest(goblinName, 'delete', function (quest) {
|
|
34
|
-
quest.log.info('deleting tasks...');
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
Goblin.registerQuest(goblinName, 'run-app', function* (quest, app) {
|
|
38
|
-
if (!app.mainGoblin) {
|
|
39
|
-
throw new Error('missing mainGoblin in app definition');
|
|
40
|
-
}
|
|
41
|
-
if (!app.rootWidget) {
|
|
42
|
-
app.rootWidget = 'desktop';
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const desktopId = quest.goblin.getX('desktopId');
|
|
46
|
-
const desk = quest.getAPI(desktopId);
|
|
47
|
-
const sameOriginConfig = yield desk.getConfiguration();
|
|
48
|
-
const labId = yield desk.getLabId();
|
|
49
|
-
|
|
50
|
-
if (app.mandate) {
|
|
51
|
-
//change mandate
|
|
52
|
-
//TODO: security -> use app whitelist
|
|
53
|
-
//it's possible to open an app to another mandate...
|
|
54
|
-
//not secure in multi-tenant configuration
|
|
55
|
-
sameOriginConfig.mandate = app.mandate;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const username = yield desk.getUserInfo();
|
|
59
|
-
const newDesktopSessionId = `desktop@${app.mandate}@${username}`;
|
|
60
|
-
quest.evt(`<${labId}>.open-session-requested`, {
|
|
61
|
-
desktopId: newDesktopSessionId,
|
|
62
|
-
session: newDesktopSessionId,
|
|
63
|
-
username: username,
|
|
64
|
-
rootWidget: app.rootWidget,
|
|
65
|
-
configuration: sameOriginConfig,
|
|
66
|
-
mainGoblin: app.mainGoblin,
|
|
67
|
-
});
|
|
68
|
-
return;
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
Goblin.registerQuest(goblinName, 'run-workitem', function* (
|
|
72
|
-
quest,
|
|
73
|
-
workitem,
|
|
74
|
-
contextId,
|
|
75
|
-
clientSessionId
|
|
76
|
-
) {
|
|
77
|
-
const desk = quest.getAPI(quest.goblin.getX('desktopId'));
|
|
78
|
-
|
|
79
|
-
workitem.id = uuidV4();
|
|
80
|
-
workitem.isDone = false;
|
|
81
|
-
workitem.contextId = contextId;
|
|
82
|
-
return yield desk.addWorkitem({
|
|
83
|
-
workitem,
|
|
84
|
-
clientSessionId,
|
|
85
|
-
navigate: true,
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
Goblin.registerQuest(goblinName, 'run-client-quest', function* (
|
|
90
|
-
quest,
|
|
91
|
-
clientSessionId,
|
|
92
|
-
clientQuest
|
|
93
|
-
) {
|
|
94
|
-
const deskAPI = quest.getAPI(quest.goblin.getX('desktopId'));
|
|
95
|
-
yield deskAPI.runClientQuest({clientSessionId, ...clientQuest});
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
// Create a Goblin with initial state and handlers
|
|
99
|
-
module.exports = Goblin.configure(goblinName, logicState, logicHandlers);
|
|
1
|
+
'use strict';
|
|
2
|
+
//T:2019-02-27
|
|
3
|
+
|
|
4
|
+
const Goblin = require('xcraft-core-goblin');
|
|
5
|
+
const goblinName = 'taskbar';
|
|
6
|
+
const {v4: uuidV4} = require('uuid');
|
|
7
|
+
const confConfig = require('xcraft-core-etc')().load('goblin-configurator');
|
|
8
|
+
|
|
9
|
+
// Define initial logic values
|
|
10
|
+
const logicState = {};
|
|
11
|
+
// Define logic handlers according rc.json
|
|
12
|
+
const logicHandlers = {
|
|
13
|
+
create: (state, action) => {
|
|
14
|
+
const id = action.get('id');
|
|
15
|
+
return state.set('', {
|
|
16
|
+
id: id,
|
|
17
|
+
});
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
// Register quest's according rc.json
|
|
22
|
+
|
|
23
|
+
Goblin.registerQuest(goblinName, 'create', function (quest, desktopId) {
|
|
24
|
+
quest.goblin.setX('desktopId', desktopId);
|
|
25
|
+
quest.do();
|
|
26
|
+
return quest.goblin.id;
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
Goblin.registerQuest(goblinName, 'change-mandate', function (quest) {
|
|
30
|
+
quest.evt(`mandate.changed`);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
Goblin.registerQuest(goblinName, 'delete', function (quest) {
|
|
34
|
+
quest.log.info('deleting tasks...');
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
Goblin.registerQuest(goblinName, 'run-app', function* (quest, app) {
|
|
38
|
+
if (!app.mainGoblin) {
|
|
39
|
+
throw new Error('missing mainGoblin in app definition');
|
|
40
|
+
}
|
|
41
|
+
if (!app.rootWidget) {
|
|
42
|
+
app.rootWidget = 'desktop';
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const desktopId = quest.goblin.getX('desktopId');
|
|
46
|
+
const desk = quest.getAPI(desktopId);
|
|
47
|
+
const sameOriginConfig = yield desk.getConfiguration();
|
|
48
|
+
const labId = yield desk.getLabId();
|
|
49
|
+
|
|
50
|
+
if (app.mandate) {
|
|
51
|
+
//change mandate
|
|
52
|
+
//TODO: security -> use app whitelist
|
|
53
|
+
//it's possible to open an app to another mandate...
|
|
54
|
+
//not secure in multi-tenant configuration
|
|
55
|
+
sameOriginConfig.mandate = app.mandate;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const username = yield desk.getUserInfo();
|
|
59
|
+
const newDesktopSessionId = `desktop@${app.mandate}@${username}`;
|
|
60
|
+
quest.evt(`<${labId}>.open-session-requested`, {
|
|
61
|
+
desktopId: newDesktopSessionId,
|
|
62
|
+
session: newDesktopSessionId,
|
|
63
|
+
username: username,
|
|
64
|
+
rootWidget: app.rootWidget,
|
|
65
|
+
configuration: sameOriginConfig,
|
|
66
|
+
mainGoblin: app.mainGoblin,
|
|
67
|
+
});
|
|
68
|
+
return;
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
Goblin.registerQuest(goblinName, 'run-workitem', function* (
|
|
72
|
+
quest,
|
|
73
|
+
workitem,
|
|
74
|
+
contextId,
|
|
75
|
+
clientSessionId
|
|
76
|
+
) {
|
|
77
|
+
const desk = quest.getAPI(quest.goblin.getX('desktopId'));
|
|
78
|
+
|
|
79
|
+
workitem.id = uuidV4();
|
|
80
|
+
workitem.isDone = false;
|
|
81
|
+
workitem.contextId = contextId;
|
|
82
|
+
return yield desk.addWorkitem({
|
|
83
|
+
workitem,
|
|
84
|
+
clientSessionId,
|
|
85
|
+
navigate: true,
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
Goblin.registerQuest(goblinName, 'run-client-quest', function* (
|
|
90
|
+
quest,
|
|
91
|
+
clientSessionId,
|
|
92
|
+
clientQuest
|
|
93
|
+
) {
|
|
94
|
+
const deskAPI = quest.getAPI(quest.goblin.getX('desktopId'));
|
|
95
|
+
yield deskAPI.runClientQuest({clientSessionId, ...clientQuest});
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
// Create a Goblin with initial state and handlers
|
|
99
|
+
module.exports = Goblin.configure(goblinName, logicState, logicHandlers);
|
package/widgets/taskbar/view.js
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
//T:2019-02-27
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import Widget from 'goblin-laboratory/widgets/widget';
|
|
4
|
-
import Taskbar from 'goblin-desktop/widgets/taskbar/widget';
|
|
5
|
-
|
|
6
|
-
class TaskbarView extends Widget {
|
|
7
|
-
constructor() {
|
|
8
|
-
super(...arguments);
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
render() {
|
|
12
|
-
const {isDisplayed, context, desktopId} = this.props;
|
|
13
|
-
|
|
14
|
-
if (!isDisplayed) {
|
|
15
|
-
return null;
|
|
16
|
-
}
|
|
17
|
-
const WiredTaskbar = Widget.Wired(Taskbar)(
|
|
18
|
-
`${context}-taskbar@${desktopId}`
|
|
19
|
-
);
|
|
20
|
-
return <WiredTaskbar desktopId={desktopId} />;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export default TaskbarView;
|
|
1
|
+
//T:2019-02-27
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import Widget from 'goblin-laboratory/widgets/widget';
|
|
4
|
+
import Taskbar from 'goblin-desktop/widgets/taskbar/widget';
|
|
5
|
+
|
|
6
|
+
class TaskbarView extends Widget {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
render() {
|
|
12
|
+
const {isDisplayed, context, desktopId} = this.props;
|
|
13
|
+
|
|
14
|
+
if (!isDisplayed) {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
const WiredTaskbar = Widget.Wired(Taskbar)(
|
|
18
|
+
`${context}-taskbar@${desktopId}`
|
|
19
|
+
);
|
|
20
|
+
return <WiredTaskbar desktopId={desktopId} />;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export default TaskbarView;
|
|
@@ -1,167 +1,167 @@
|
|
|
1
|
-
//T:2019-02-27
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import importer from 'goblin_importer';
|
|
4
|
-
import Widget from 'goblin-laboratory/widgets/widget';
|
|
5
|
-
|
|
6
|
-
import Container from 'goblin-gadgets/widgets/container/widget';
|
|
7
|
-
import Button from 'goblin-gadgets/widgets/button/widget';
|
|
8
|
-
import CommandButton from 'goblin-gadgets/widgets/command-button/widget';
|
|
9
|
-
import Separator from 'goblin-gadgets/widgets/separator/widget';
|
|
10
|
-
import SFX from '../audio/sfx.js';
|
|
11
|
-
|
|
12
|
-
const tasksImporter = importer('tasks');
|
|
13
|
-
class Taskbar extends Widget {
|
|
14
|
-
constructor() {
|
|
15
|
-
super(...arguments);
|
|
16
|
-
this.runApp = this.runApp.bind(this);
|
|
17
|
-
this.runWorkitem = this.runWorkitem.bind(this);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
static get wiring() {
|
|
21
|
-
return {
|
|
22
|
-
id: 'id',
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
runApp(app) {
|
|
27
|
-
this.do('run-app', {
|
|
28
|
-
app,
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
runClientQuest(clientQuest) {
|
|
33
|
-
this.do('run-client-quest', {
|
|
34
|
-
clientQuest,
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
runWorkitem(workitem, context) {
|
|
39
|
-
this.do('run-workitem', {
|
|
40
|
-
workitem,
|
|
41
|
-
context,
|
|
42
|
-
});
|
|
43
|
-
if (workitem.kind === 'tab') {
|
|
44
|
-
SFX.tuludu.play();
|
|
45
|
-
}
|
|
46
|
-
if (workitem.kind === 'dialog') {
|
|
47
|
-
SFX.zim.play();
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
renderButton(context, task, index) {
|
|
52
|
-
if (task.workitem) {
|
|
53
|
-
const runWorkitem = () => this.runWorkitem(task.workitem, task.context);
|
|
54
|
-
const command = `${task.workitem.name}.create`;
|
|
55
|
-
return (
|
|
56
|
-
<CommandButton
|
|
57
|
-
key={index}
|
|
58
|
-
command={command}
|
|
59
|
-
kind="task-bar"
|
|
60
|
-
text={task.text}
|
|
61
|
-
glyph={task.glyph}
|
|
62
|
-
tooltip={task.workitem.description}
|
|
63
|
-
onClick={runWorkitem}
|
|
64
|
-
/>
|
|
65
|
-
);
|
|
66
|
-
}
|
|
67
|
-
if (task.app) {
|
|
68
|
-
const runApp = () => this.runApp(task.app);
|
|
69
|
-
return (
|
|
70
|
-
<Button
|
|
71
|
-
key={index}
|
|
72
|
-
kind="task-bar"
|
|
73
|
-
text={task.text}
|
|
74
|
-
glyph={task.glyph}
|
|
75
|
-
tooltip={task.app.description}
|
|
76
|
-
onClick={runApp}
|
|
77
|
-
/>
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
if (task.clientQuest) {
|
|
81
|
-
const runClientQuest = () =>
|
|
82
|
-
this.runClientQuest({labId: window.labId, ...task.clientQuest});
|
|
83
|
-
return (
|
|
84
|
-
<Button
|
|
85
|
-
key={index}
|
|
86
|
-
kind="task-bar"
|
|
87
|
-
text={task.text}
|
|
88
|
-
glyph={task.glyph}
|
|
89
|
-
tooltip={task.clientQuest.description}
|
|
90
|
-
onClick={runClientQuest}
|
|
91
|
-
/>
|
|
92
|
-
);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
renderSeparator(index) {
|
|
97
|
-
return <Separator key={index} kind="task" />;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
render() {
|
|
101
|
-
const {id, context} = this.props;
|
|
102
|
-
if (!id) {
|
|
103
|
-
return null;
|
|
104
|
-
}
|
|
105
|
-
const contextTasks = tasksImporter(context);
|
|
106
|
-
if (!contextTasks) {
|
|
107
|
-
return null;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
const navigatingStyle = {
|
|
111
|
-
height: '100%',
|
|
112
|
-
display: 'flex',
|
|
113
|
-
flexDirection: 'column',
|
|
114
|
-
};
|
|
115
|
-
if (this.props.working) {
|
|
116
|
-
navigatingStyle.pointerEvents = 'none';
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
return (
|
|
120
|
-
<div style={navigatingStyle}>
|
|
121
|
-
<Container kind="task-bar">
|
|
122
|
-
{contextTasks.map((task, i) => {
|
|
123
|
-
let isValidScope = true;
|
|
124
|
-
if (task.scope) {
|
|
125
|
-
switch (task.scope) {
|
|
126
|
-
case 'prototype':
|
|
127
|
-
if (!this.props.prototypeMode) {
|
|
128
|
-
isValidScope = false;
|
|
129
|
-
}
|
|
130
|
-
break;
|
|
131
|
-
case 'dev':
|
|
132
|
-
isValidScope = false;
|
|
133
|
-
if (
|
|
134
|
-
this.props.prototypeMode &&
|
|
135
|
-
process &&
|
|
136
|
-
process.env &&
|
|
137
|
-
process.env.NODE_ENV === 'development'
|
|
138
|
-
) {
|
|
139
|
-
isValidScope = true;
|
|
140
|
-
}
|
|
141
|
-
break;
|
|
142
|
-
default:
|
|
143
|
-
break;
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
if (isValidScope) {
|
|
148
|
-
if (task.separator) {
|
|
149
|
-
return this.renderSeparator(i);
|
|
150
|
-
} else {
|
|
151
|
-
return this.renderButton(context, task, i);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
})}
|
|
155
|
-
</Container>
|
|
156
|
-
</div>
|
|
157
|
-
);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
export default Widget.connect((state, props) => {
|
|
162
|
-
const userSession = Widget.getUserSession(state);
|
|
163
|
-
const prototypeMode = userSession.get('prototypeMode');
|
|
164
|
-
const working = state.get(`backend.${props.desktopId}.working`);
|
|
165
|
-
const context = state.get(`backend.${props.desktopId}.current.workcontext`);
|
|
166
|
-
return {prototypeMode, working, context};
|
|
167
|
-
})(Taskbar);
|
|
1
|
+
//T:2019-02-27
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import importer from 'goblin_importer';
|
|
4
|
+
import Widget from 'goblin-laboratory/widgets/widget';
|
|
5
|
+
|
|
6
|
+
import Container from 'goblin-gadgets/widgets/container/widget';
|
|
7
|
+
import Button from 'goblin-gadgets/widgets/button/widget';
|
|
8
|
+
import CommandButton from 'goblin-gadgets/widgets/command-button/widget';
|
|
9
|
+
import Separator from 'goblin-gadgets/widgets/separator/widget';
|
|
10
|
+
import SFX from '../audio/sfx.js';
|
|
11
|
+
|
|
12
|
+
const tasksImporter = importer('tasks');
|
|
13
|
+
class Taskbar extends Widget {
|
|
14
|
+
constructor() {
|
|
15
|
+
super(...arguments);
|
|
16
|
+
this.runApp = this.runApp.bind(this);
|
|
17
|
+
this.runWorkitem = this.runWorkitem.bind(this);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
static get wiring() {
|
|
21
|
+
return {
|
|
22
|
+
id: 'id',
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
runApp(app) {
|
|
27
|
+
this.do('run-app', {
|
|
28
|
+
app,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
runClientQuest(clientQuest) {
|
|
33
|
+
this.do('run-client-quest', {
|
|
34
|
+
clientQuest,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
runWorkitem(workitem, context) {
|
|
39
|
+
this.do('run-workitem', {
|
|
40
|
+
workitem,
|
|
41
|
+
context,
|
|
42
|
+
});
|
|
43
|
+
if (workitem.kind === 'tab') {
|
|
44
|
+
SFX.tuludu.play();
|
|
45
|
+
}
|
|
46
|
+
if (workitem.kind === 'dialog') {
|
|
47
|
+
SFX.zim.play();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
renderButton(context, task, index) {
|
|
52
|
+
if (task.workitem) {
|
|
53
|
+
const runWorkitem = () => this.runWorkitem(task.workitem, task.context);
|
|
54
|
+
const command = `${task.workitem.name}.create`;
|
|
55
|
+
return (
|
|
56
|
+
<CommandButton
|
|
57
|
+
key={index}
|
|
58
|
+
command={command}
|
|
59
|
+
kind="task-bar"
|
|
60
|
+
text={task.text}
|
|
61
|
+
glyph={task.glyph}
|
|
62
|
+
tooltip={task.workitem.description}
|
|
63
|
+
onClick={runWorkitem}
|
|
64
|
+
/>
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
if (task.app) {
|
|
68
|
+
const runApp = () => this.runApp(task.app);
|
|
69
|
+
return (
|
|
70
|
+
<Button
|
|
71
|
+
key={index}
|
|
72
|
+
kind="task-bar"
|
|
73
|
+
text={task.text}
|
|
74
|
+
glyph={task.glyph}
|
|
75
|
+
tooltip={task.app.description}
|
|
76
|
+
onClick={runApp}
|
|
77
|
+
/>
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
if (task.clientQuest) {
|
|
81
|
+
const runClientQuest = () =>
|
|
82
|
+
this.runClientQuest({labId: window.labId, ...task.clientQuest});
|
|
83
|
+
return (
|
|
84
|
+
<Button
|
|
85
|
+
key={index}
|
|
86
|
+
kind="task-bar"
|
|
87
|
+
text={task.text}
|
|
88
|
+
glyph={task.glyph}
|
|
89
|
+
tooltip={task.clientQuest.description}
|
|
90
|
+
onClick={runClientQuest}
|
|
91
|
+
/>
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
renderSeparator(index) {
|
|
97
|
+
return <Separator key={index} kind="task" />;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
render() {
|
|
101
|
+
const {id, context} = this.props;
|
|
102
|
+
if (!id) {
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
const contextTasks = tasksImporter(context);
|
|
106
|
+
if (!contextTasks) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const navigatingStyle = {
|
|
111
|
+
height: '100%',
|
|
112
|
+
display: 'flex',
|
|
113
|
+
flexDirection: 'column',
|
|
114
|
+
};
|
|
115
|
+
if (this.props.working) {
|
|
116
|
+
navigatingStyle.pointerEvents = 'none';
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
return (
|
|
120
|
+
<div style={navigatingStyle}>
|
|
121
|
+
<Container kind="task-bar">
|
|
122
|
+
{contextTasks.map((task, i) => {
|
|
123
|
+
let isValidScope = true;
|
|
124
|
+
if (task.scope) {
|
|
125
|
+
switch (task.scope) {
|
|
126
|
+
case 'prototype':
|
|
127
|
+
if (!this.props.prototypeMode) {
|
|
128
|
+
isValidScope = false;
|
|
129
|
+
}
|
|
130
|
+
break;
|
|
131
|
+
case 'dev':
|
|
132
|
+
isValidScope = false;
|
|
133
|
+
if (
|
|
134
|
+
this.props.prototypeMode &&
|
|
135
|
+
process &&
|
|
136
|
+
process.env &&
|
|
137
|
+
process.env.NODE_ENV === 'development'
|
|
138
|
+
) {
|
|
139
|
+
isValidScope = true;
|
|
140
|
+
}
|
|
141
|
+
break;
|
|
142
|
+
default:
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (isValidScope) {
|
|
148
|
+
if (task.separator) {
|
|
149
|
+
return this.renderSeparator(i);
|
|
150
|
+
} else {
|
|
151
|
+
return this.renderButton(context, task, i);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
})}
|
|
155
|
+
</Container>
|
|
156
|
+
</div>
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export default Widget.connect((state, props) => {
|
|
162
|
+
const userSession = Widget.getUserSession(state);
|
|
163
|
+
const prototypeMode = userSession.get('prototypeMode');
|
|
164
|
+
const working = state.get(`backend.${props.desktopId}.working`);
|
|
165
|
+
const context = state.get(`backend.${props.desktopId}.current.workcontext`);
|
|
166
|
+
return {prototypeMode, working, context};
|
|
167
|
+
})(Taskbar);
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
//T:2019-02-27
|
|
2
|
-
|
|
3
|
-
import Shredder from 'xcraft-core-shredder';
|
|
4
|
-
|
|
5
|
-
const initialState = new Shredder({
|
|
6
|
-
enabled: false,
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
export default (state = initialState, action) => {
|
|
10
|
-
switch (action.type) {
|
|
11
|
-
case 'TOGGLE': {
|
|
12
|
-
return state.set('enabled', !state.get('enabled'));
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
};
|
|
1
|
+
//T:2019-02-27
|
|
2
|
+
|
|
3
|
+
import Shredder from 'xcraft-core-shredder';
|
|
4
|
+
|
|
5
|
+
const initialState = new Shredder({
|
|
6
|
+
enabled: false,
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
export default (state = initialState, action) => {
|
|
10
|
+
switch (action.type) {
|
|
11
|
+
case 'TOGGLE': {
|
|
12
|
+
return state.set('enabled', !state.get('enabled'));
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
};
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
/******************************************************************************/
|
|
2
|
-
|
|
3
|
-
export default function styles(theme) {
|
|
4
|
-
const fullScreen = {
|
|
5
|
-
position: 'fixed',
|
|
6
|
-
left: 0,
|
|
7
|
-
right: 0,
|
|
8
|
-
bottom: 0,
|
|
9
|
-
top: 0,
|
|
10
|
-
zIndex: 10,
|
|
11
|
-
display: 'flex',
|
|
12
|
-
backgroundColor: theme.palette.rootBackground,
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
return {
|
|
16
|
-
fullScreen,
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/******************************************************************************/
|
|
1
|
+
/******************************************************************************/
|
|
2
|
+
|
|
3
|
+
export default function styles(theme) {
|
|
4
|
+
const fullScreen = {
|
|
5
|
+
position: 'fixed',
|
|
6
|
+
left: 0,
|
|
7
|
+
right: 0,
|
|
8
|
+
bottom: 0,
|
|
9
|
+
top: 0,
|
|
10
|
+
zIndex: 10,
|
|
11
|
+
display: 'flex',
|
|
12
|
+
backgroundColor: theme.palette.rootBackground,
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
return {
|
|
16
|
+
fullScreen,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/******************************************************************************/
|