
<!--
Copyright 2017-present Open Networking Foundation

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->


<div class="row">
  <div class="col-xs-12">
    <h1>Xos Sample GUI Dashboard Extension</h1>
  </div>
  <div class="col-xs-12">
    <p>From our sample GUI extension module we are able to extend the dashboard.</p>
  </div>
</div>
<div class="row">
  <div class="col-sm-4">
  To add a component to the dashboard you can invoke the <code>XosComponentInjector</code> service as in this example:
  </div>
  <div class="col-sm-8">
    <pre>
      XosComponentInjector.injectComponent(
      '#dashboard-component-container',
      'dashboardExtension',
      {},
      '',
      false
    );
    </pre>
  </div>
</div>
