Skip to content

Commit 19952f1

Browse files
committed
refactoring solid client on server side, added UI in admin for managing solid server config, started UI for managing solid pods and synced data from fleetbase
1 parent 06e0e52 commit 19952f1

39 files changed

Lines changed: 3983 additions & 1424 deletions

.eslintignore

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,18 @@
66

77
# misc
88
/coverage/
9+
/scripts/
910
!.*
1011
.*/
1112

1213
# ember-try
1314
/.node_modules.ember-try/
15+
/bower.json.ember-try
16+
/npm-shrinkwrap.json.ember-try
17+
/package.json.ember-try
18+
/package-lock.json.ember-try
19+
/yarn.lock.ember-try
20+
21+
#server
22+
/server
23+
/server_vendor

.eslintrc.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ module.exports = {
2424
'ember/no-get': 'off',
2525
'ember/classic-decorator-no-classic-methods': 'off',
2626
'no-prototype-builtins': 'off',
27-
'node/no-unpublished-require': [
27+
'n/no-unpublished-require': [
2828
'error',
2929
{
3030
allowModules: ['resolve', 'broccoli-funnel'],

.stylelintrc.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
'use strict';
22

33
module.exports = {
4-
extends: ['stylelint-config-standard', 'stylelint-prettier/recommended'],
4+
extends: ['stylelint-config-standard', 'stylelint-prettier/recommended'],
55
};

.template-lintrc.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ module.exports = {
55
rules: {
66
'no-invalid-interactive': 'off',
77
'no-yield-only': 'off',
8-
'no-down-event-binding': 'off',
8+
'no-pointer-down-event-binding': 'off',
99
'table-groups': 'off',
1010
'link-href-attributes': 'off',
1111
'require-input-label': 'off',
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{{#if this.configLoaded}}
2+
<ContentPanel @title="Solid Server Config" @open={{true}} @pad={{true}} @panelBodyClass="bg-white dark:bg-gray-800 mb-4">
3+
<InputGroup @name="Server Host" @value={{this.host}} @placeholder="solid.myserver.com" />
4+
<InputGroup @name="Server Port" @value={{this.port}} @placeholder="3000" />
5+
<InputGroup>
6+
<Toggle @isToggled={{this.secure}} @onToggle={{fn (mut this.secure)}}>
7+
<span class="dark:text-gray-100 text-sm ml-2">Secure Server</span>
8+
</Toggle>
9+
</InputGroup>
10+
</ContentPanel>
11+
12+
<div class="mt-3 flex items-center justify-end">
13+
<Button @type="primary" @size="lg" @icon="save" @text={{t "common.save-changes"}} @onClick={{perform this.saveServerConfig}} @disabled={{not this.saveServerConfig.isIdle}} @isLoading={{not this.saveServerConfig.isIdle}} />
14+
</div>
15+
{{else}}
16+
<div class="flex items-center justify-center">
17+
<Spinner @loadingMessage="Loading server config..." />
18+
</div>
19+
{{/if}}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import Component from '@glimmer/component';
2+
import { tracked } from '@glimmer/tracking';
3+
import { inject as service } from '@ember/service';
4+
import { task } from 'ember-concurrency';
5+
6+
export default class AdminSolidServerConfigComponent extends Component {
7+
@service fetch;
8+
@service notifications;
9+
@tracked configLoaded = false;
10+
@tracked host;
11+
@tracked port;
12+
@tracked secure;
13+
14+
constructor() {
15+
super(...arguments);
16+
this.loadServerConfig.perform();
17+
}
18+
19+
getConfig() {
20+
return {
21+
host: this.host,
22+
port: this.port,
23+
secure: this.secure,
24+
};
25+
}
26+
27+
setConfig(config) {
28+
this.host = config.host;
29+
this.port = config.port;
30+
this.secure = config.secure;
31+
}
32+
33+
@task *loadServerConfig() {
34+
const config = yield this.fetch.get('server-config', {}, { namespace: 'solid/int/v1' });
35+
if (config) {
36+
this.setConfig(config);
37+
this.configLoaded = true;
38+
}
39+
}
40+
41+
@task *saveServerConfig() {
42+
try {
43+
const config = yield this.fetch.post('server-config', { server: this.getConfig() }, { namespace: 'solid/int/v1' });
44+
if (config) {
45+
this.setConfig(config);
46+
this.notifications.success('Solid server config udpated successfully.');
47+
}
48+
} catch (error) {
49+
this.notifications.serverError(error);
50+
}
51+
}
52+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<svg width={{this.width}} height={{this.height}} viewBox="0 0 352 322" xmlns="http://www.w3.org/2000/svg">
2+
<g fill-rule="nonzero" fill="none">
3+
<path d="M87.97296 282.3527L27.24133 177.02207c-5.62041-9.75765-5.62041-21.77908 0-31.53674L87.97296 40.2328c5.64643-9.78367 16.08061-15.79439 27.32143-15.79439h121.3852c11.26684 0 21.72704 6.01072 27.32143 15.7944l60.75765 105.30458c5.62041 9.75766 5.62041 21.77909 0 31.53674l-60.73163 105.33061c-5.64643 9.78367-16.08061 15.79439-27.32143 15.79439H115.37245c-11.31888-.05204-21.72704-6.08878-27.3995-15.84643z" fill="#111827" />
4+
<path d="M93.15102 275.19708l-57.1148-99.0597c-5.30816-9.1852-5.30816-20.50408 0-29.66326l57.1148-99.08572c5.33418-9.21122 15.14388-14.85765 25.73418-14.85765h114.2296c10.5903 0 20.42602 5.64643 25.73418 14.85765l57.16684 99.03368c5.30816 9.1852 5.30816 20.50408 0 29.66326L258.875 275.2231c-5.33418 9.21122-15.14388 14.85765-25.73418 14.85765H118.93724c-10.64234 0-20.45204-5.67245-25.78622-14.88367z" fill="#7C4DFF" />
5+
<path d="M118.46888 142.2328h117.53418c1.48316 0 2.65408-1.19695 2.65408-2.65409v-22.03928c0-14.6495-11.89132-26.54085-26.54081-26.54085h-70.56735c-20.5301-.026-37.15722 16.60105-37.15722 37.13115-.02594 7.83214 6.271 14.10306 14.07712 14.10306zM129.99592 239.60116H200.225c21.20663 0 38.43214-17.22551 38.43214-38.43214 0-7.07755-5.72449-12.82806-12.82806-12.82806H106.94184c-1.45715 0-2.55005 1.17091-2.55005 2.55v23.05408c-.02597 14.18112 11.47505 25.65612 25.60413 25.65612z" fill="#F7F7F7" />
6+
<path d="M109.59592 139.3185l87.66275 87.66276c5.80255 5.80255 15.19592 5.80255 20.99847 0l15.19592-15.19592c5.80255-5.80255 5.80255-15.19591 0-20.99847l-87.63673-87.66275c-5.80255-5.80255-15.19592-5.80255-20.99847 0l-15.19592 15.19592c-5.8546 5.80255-5.8546 15.22194-.02602 20.99847z" fill="#F7F7F7" />
7+
<path fill="#444" opacity=".3" d="M198.6898 228.46443l-51.4944-40.12347h11.39695zM144.35918 101.66698l40.56582 40.56581h13.7648z" />
8+
</g>
9+
</svg>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import Component from '@glimmer/component';
2+
import { tracked } from '@glimmer/tracking';
3+
4+
export default class SolidBrandIconComponent extends Component {
5+
@tracked width = 19;
6+
@tracked height = 19;
7+
constructor(owner, { options }) {
8+
super(...arguments);
9+
const { width = 19, height = 19 } = options || {};
10+
this.width = width;
11+
this.height = height;
12+
}
13+
}

addon/controllers/application.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import Controller from '@ember/controller';
2+
import { inject as service } from '@ember/service';
3+
import { task } from 'ember-concurrency';
4+
5+
export default class ApplicationController extends Controller {
6+
@service universe;
7+
@service fetch;
8+
9+
constructor() {
10+
super(...arguments);
11+
this.universe.on('sidebarContext.available', (sidebarContext) => {
12+
sidebarContext.hideNow();
13+
});
14+
}
15+
16+
@task *authenticate() {
17+
const { authenticationUrl, identifier } = yield this.fetch.get('request-authentication', {}, { namespace: 'solid/int/v1' });
18+
if (authenticationUrl) {
19+
window.location.href = `${authenticationUrl}/${identifier}`;
20+
}
21+
}
22+
23+
@task *getAccountIndex() {
24+
const response = yield this.fetch.get('account', {}, { namespace: 'solid/int/v1' });
25+
console.log('[response]', response);
26+
}
27+
}

addon/engine.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import loadInitializers from 'ember-load-initializers';
33
import Resolver from 'ember-resolver';
44
import config from './config/environment';
55
import services from '@fleetbase/ember-core/exports/services';
6+
import AdminSolidServerConfigComponent from './components/admin/solid-server-config';
7+
import SolidBrandIconComponent from './components/solid-brand-icon';
68

79
const { modulePrefix } = config;
810
const externalRoutes = ['console', 'extensions'];
@@ -14,7 +16,25 @@ export default class SolidEngine extends Engine {
1416
services,
1517
externalRoutes,
1618
};
17-
setupExtension = function (app, engine, universe) {};
19+
setupExtension = function (app, engine, universe) {
20+
// register menu item in header
21+
universe.registerHeaderMenuItem('Solid', 'console.solid-protocol', { iconComponent: SolidBrandIconComponent, iconComponentOptions: { width: 19, height: 19 }, priority: 5 });
22+
23+
// register admin settings -- create a solid server menu panel with it's own setting options
24+
universe.registerAdminMenuPanel(
25+
'Solid Protocol',
26+
[
27+
{
28+
title: 'Solid Server Config',
29+
icon: 'sliders',
30+
component: AdminSolidServerConfigComponent,
31+
},
32+
],
33+
{
34+
slug: 'solid-server',
35+
}
36+
);
37+
};
1838
}
1939

2040
loadInitializers(SolidEngine, modulePrefix);

0 commit comments

Comments
 (0)