SessionsScreen constructor

SessionsScreen(
  1. AppContext ctx,
  2. String nodeId
)

Builds the sessions screen for nodeId.

Implementation

SessionsScreen(this.ctx, this.nodeId) {
  _controller = SessionsController(ctx.service, nodeId);
  _body = div(classes: 'list');
  _refresh = button(
    'Refresh',
    className: 'btn-sm',
    onClick: _controller.refresh,
  );

  element = el(
    'div',
    classes: 'stack',
    children: [
      el(
        'div',
        classes: 'toolbar',
        children: [
          button(
            '← Node',
            className: 'ghost',
            onClick: () =>
                ctx.router.go('/nodes/${Uri.encodeComponent(nodeId)}'),
          ),
          el('h1', text: 'Sessions', classes: 'sessions-title'),
          el('div', classes: 'grow'),
          button(
            'New',
            primary: true,
            className: 'btn-sm',
            onClick: () => ctx.router.go(
              '/nodes/${Uri.encodeComponent(nodeId)}/sessions/new',
            ),
          ),
          _refresh,
        ],
      ),
      // The node id, shown big and white like the node-info title.
      el('h1', classes: 'mono node-title', text: nodeId),
      _body,
    ],
  );

  _sub = _controller.state.stream.listen(_render);
  // Re-render when the highlighted (last-interacted) session changes.
  _lastSub = ctx.lastSession.stream.listen(
    (_) => _render(_controller.state.value),
  );
  _render(_controller.state.value);
  unawaited(_controller.refresh());
}