Skip to content

Commit 1483170

Browse files
committed
#8536 basic setup
1 parent 8f34c20 commit 1483170

5 files changed

Lines changed: 155 additions & 0 deletions

File tree

apps/portal/canvas.mjs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import CanvasHelper from './canvas/Helper.mjs';
2+
3+
export const onStart = () => {
4+
// Canvas Helper available inside the Canvas worker
5+
};

apps/portal/canvas/Helper.mjs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import Base from '../../../src/core/Base.mjs';
2+
3+
/**
4+
* @class Portal.canvas.Helper
5+
* @extends Neo.core.Base
6+
* @singleton
7+
*/
8+
class Blackboard extends Base {
9+
static config = {
10+
/**
11+
* @member {String} className='Portal.canvas.Helper'
12+
* @protected
13+
*/
14+
className: 'Portal.canvas.Helper',
15+
/**
16+
* Remote method access
17+
* @member {Object} remote
18+
* @protected
19+
*/
20+
remote: {
21+
app: [
22+
'importTicketCanvas'
23+
]
24+
},
25+
/**
26+
* @member {Boolean} singleton=true
27+
* @protected
28+
*/
29+
singleton: true
30+
}
31+
32+
/**
33+
*
34+
*/
35+
importTicketCanvas() {
36+
import('./TicketCanvas.mjs')
37+
}
38+
}
39+
40+
export default Neo.setupClass(Blackboard);
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import Base from '../../../src/core/Base.mjs';
2+
3+
/**
4+
* @class Portal.canvas.TicketCanvas
5+
* @extends Neo.core.Base
6+
* @singleton
7+
*/
8+
class TicketCanvas extends Base {
9+
static config = {
10+
/**
11+
* @member {String} className='Portal.canvas.TicketCanvas'
12+
* @protected
13+
*/
14+
className: 'Portal.canvas.TicketCanvas',
15+
/**
16+
* Remote method access
17+
* @member {Object} remote
18+
* @protected
19+
*/
20+
remote: {
21+
app: []
22+
},
23+
/**
24+
* @member {Boolean} singleton=true
25+
* @protected
26+
*/
27+
singleton: true
28+
}
29+
30+
/**
31+
* @member {String|null} canvasId=null
32+
*/
33+
canvasId = null
34+
/**
35+
* @member {Object} canvasSize=null
36+
*/
37+
canvasSize = null
38+
}
39+
40+
export default Neo.setupClass(TicketCanvas);

apps/portal/neo-config.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"remotesApiUrl" : "remotes-api.json",
77
"themes" : ["neo-theme-neo-light", "neo-theme-light", "neo-theme-dark"],
88
"useAiClient" : true,
9+
"useCanvasWorker" : true,
910
"useSharedWorkers": true,
1011
"useServiceWorker": "dist/production",
1112

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import Canvas from '../../../../../src/component/Canvas.mjs';
2+
3+
/**
4+
* @class AgentOS.view.TimelineCanvas
5+
* @extends Neo.component.Canvas
6+
*/
7+
class TimelineCanvas extends Canvas {
8+
static config = {
9+
/**
10+
* @member {String} className='AgentOS.view.TimelineCanvas'
11+
* @protected
12+
*/
13+
className: 'AgentOS.view.TimelineCanvas',
14+
/**
15+
* @member {Object} _vdom
16+
*/
17+
_vdom:
18+
{tag: 'div', cls: ['neo-ticket-timeline-wrapper'], style: {width: '100%', height: '100%'}, cn: [
19+
{tag: 'canvas', style: {width: '100%', height: '100%'}}
20+
]}
21+
}
22+
23+
/**
24+
* Triggered after the offscreenRegistered config got changed
25+
* @param {Boolean} value
26+
* @param {Boolean} oldValue
27+
* @protected
28+
*/
29+
async afterSetOffscreenRegistered(value, oldValue) {
30+
if (value) {
31+
let me = this;
32+
33+
// Direct Remote Method Access call
34+
// The namespace AgentOS.canvas.Blackboard is auto-generated in this worker
35+
// by the RemoteMethodAccess mixin when the Canvas worker registers it.
36+
await Portal.canvas.TicketCanvas.initGraph({canvasId: me.getCanvasId(), windowId: me.windowId});
37+
38+
await me.updateSize()
39+
}
40+
}
41+
42+
/**
43+
* Override to return the inner canvas ID
44+
*/
45+
getCanvasId() {
46+
return this.vdom.cn[0].id;
47+
}
48+
49+
/**
50+
* @param {Object} data
51+
*/
52+
onDomResize(data) {
53+
super.onDomResize(data);
54+
this.updateSize(data.contentRect)
55+
}
56+
57+
async updateSize(rect) {
58+
let me = this;
59+
60+
if (!rect || rect.width === 0 || rect.height === 0) {
61+
rect = await me.waitForDomRect({id: me.getCanvasId()})
62+
}
63+
64+
// todo
65+
await Portal.canvas.TicketCanvas.updateSize({width: rect.width, height: rect.height})
66+
}
67+
}
68+
69+
export default Neo.setupClass(TimelineCanvas);

0 commit comments

Comments
 (0)