-
- Maintained by [[repo.maintainer]].
-
-
-
- Visit repository website.
-
+
+
+
-
-
-
-
-
- [[addon.name]]
- [[addon.description]]
-
- [[computeInstallStatus(addon)]]
-
-
-
+
+
+
+
+
+
+
+
+
@@ -49,31 +50,31 @@ class HassioAddonRepository extends window.hassMixins.EventsMixin(Polymer.Elemen
static get properties() {
return {
- repo: {
- type: Object,
- },
-
- addons: {
- type: Array,
- },
+ repo: Object,
+ addons: Array,
};
}
- computeShowIntro(repo) {
- return repo.url || repo.maintainer;
+ sortAddons(a, b) {
+ return a.name < b.name ? -1 : 1;
}
- computeInstallStatus(addon) {
- if (!addon.installed) {
- return 'Not installed';
- } else if (addon.installed !== addon.version) {
- return addon.installed + ' (update available)';
- }
- return addon.installed;
+ computeIcon(addon) {
+ return addon.installed && addon.installed !== addon.version ? 'mdi:arrow-up-bold-circle' : 'mdi:puzzle';
+ }
+
+ computeIconTitle(addon) {
+ if (addon.installed) return addon.installed !== addon.version ? 'New version available' : 'Add-on is installed';
+ return 'Add-on is not installed';
+ }
+
+ computeIconClass(addon) {
+ if (addon.installed) return addon.installed !== addon.version ? 'update' : 'installed';
+ return '';
}
addonTapped(ev) {
- history.pushState(null, null, '/hassio/store/' + this.addons[ev.model.index].slug);
+ history.pushState(null, null, '/hassio/addon/' + ev.model.addon.slug);
this.fire('location-changed');
}
}
diff --git a/hassio/addon-store/hassio-addon-store-overview.html b/hassio/addon-store/hassio-addon-store-overview.html
deleted file mode 100644
index 2c7a359094..0000000000
--- a/hassio/addon-store/hassio-addon-store-overview.html
+++ /dev/null
@@ -1,123 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Hass.io Add-Ons
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/hassio/addon-store/hassio-addon-store-view.html b/hassio/addon-store/hassio-addon-store-view.html
deleted file mode 100644
index 0dbd9bbdf3..0000000000
--- a/hassio/addon-store/hassio-addon-store-view.html
+++ /dev/null
@@ -1,145 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- [[addon.name]]
-
-
-
-
-
-
-
-
[[addon.description]]
-
- Made available via repository [[addon.repository]].
-
-
- Visit website
-
-
-
- This add-on will built locally on the device.
-
-
-
-
-
- Open
-
-
- Install
-
-
-
-
-
-
-
-
Maintainer: [[repo.maintainer]]
-
Visit website
-
-
-
-
-
-
-
-
diff --git a/hassio/addon-store/hassio-addon-store.html b/hassio/addon-store/hassio-addon-store.html
index 0a8387449f..818ba5fd71 100644
--- a/hassio/addon-store/hassio-addon-store.html
+++ b/hassio/addon-store/hassio-addon-store.html
@@ -3,38 +3,55 @@
-
-
+
-
-
-
-
-
-
+
+
+
+
+
+ Add-on store
+
+
+
+
+
-
+ >
+
+
+
+
+
@@ -44,37 +61,13 @@ class HassioAddonStore extends Polymer.Element {
static get properties() {
return {
- hass: {
- type: Object,
- },
-
+ hass: Object,
+ addons: Array,
+ repos: Array,
visible: {
type: Boolean,
- observer: '_visibleChanged',
+ observer: 'visibleChanged',
},
-
- route: Object,
- _routeData: Object,
- _routeMatches: Boolean,
-
- selectedAddonObject: {
- type: Object,
- computed: 'computeActiveAddon(addons, _routeData.addon)',
- },
-
- addons: {
- type: Array,
- value: [],
- },
-
- repos: {
- type: Array,
- value: []
- },
-
- supervisorInfo: {
- type: Object,
- }
};
}
@@ -86,52 +79,60 @@ class HassioAddonStore extends Polymer.Element {
apiCalled(ev) {
if (ev.detail.success) {
- this._loadData();
+ this.loadData();
}
}
- _visibleChanged(visible) {
+ sortRepos(a, b) {
+ if (a.slug === 'local') {
+ return -1;
+ } else if (b.slug === 'local') {
+ return 1;
+ } else if (a.slug === 'core') {
+ return -1;
+ } else if (b.slug === 'core') {
+ return 1;
+ }
+ return a.name < b.name ? -1 : 1;
+ }
+
+ computeAddons(repo) {
+ return this.addons.filter(function (addon) {
+ return addon.repository === repo;
+ });
+ }
+
+ visibleChanged(visible) {
if (visible) {
- this._loadData();
+ this.loadData();
}
}
- _loadData() {
+ loadData() {
this.hass.callApi('get', 'hassio/addons')
- .then(function (info) {
+ .then((info) => {
this.addons = info.data.addons;
this.repos = info.data.repositories;
- }.bind(this), function () {
+ }, () => {
this.addons = [];
this.repos = [];
- }.bind(this));
+ });
}
- computeActiveAddon(addons, selectedAddon) {
- for (var i = 0; i < addons.length; i++) {
- if (addons[i].slug === selectedAddon) {
- return addons[i];
- }
- }
- return null;
- }
-
- computeActiveRepo(repos, selectedAddonObject) {
- if (!selectedAddonObject) return null;
-
- for (var i = 0; i < repos.length; i++) {
- if (repos[i].slug === selectedAddonObject.repository) {
- return repos[i];
- }
- }
- return null;
- }
refreshData() {
this.hass.callApi('post', 'hassio/addons/reload')
- .then(function () {
- this._loadData();
- }.bind(this));
+ .then(() => {
+ this.loadData();
+ });
+ }
+
+ refreshTapped() {
+ this.fire('hassio-store-refresh');
+ }
+
+ backTapped() {
+ history.back();
}
}
diff --git a/hassio/addon-store/hassio-repositories-editor.html b/hassio/addon-store/hassio-repositories-editor.html
index 3d9e7ada33..887d4fcbdc 100644
--- a/hassio/addon-store/hassio-repositories-editor.html
+++ b/hassio/addon-store/hassio-repositories-editor.html
@@ -1,35 +1,69 @@
-
+
+
+
+
+
-
-
-
-
Configure which add-on repositories to fetch data from. One repository per line.
-
+
+
+ Repositories
+
+ Configure which add-on repositories to fetch data from:
+
-
- Save
-
-
+
+
+
+
+
+
+ Remove
+
+
+
+
+
+
+ Add
+
+
+
@@ -39,36 +73,34 @@ class HassioRepositoriesEditor extends Polymer.Element {
static get properties() {
return {
- hass: {
- type: Object,
- },
-
- options: {
- type: String,
- value: '',
- },
-
+ hass: Object,
repos: {
type: Array,
observer: 'reposChanged',
},
+ repoList: Array,
+ repoUrl: String,
};
}
reposChanged(repos) {
- this.options = repos
- .filter(function (el) { return el.source !== null; })
- .map(function (el) { return el.source; })
- .join('\n');
+ this.repoList = repos.filter(repo => repo.slug !== 'core' && repo.slug !== 'local');
+ this.repoUrl = '';
}
- computeOptionsData(options) {
- var parsed = options.trim();
- parsed = parsed ?
- parsed.split('\n').map(function (ent) { return ent.trim(); }) : [];
- return {
- addons_repositories: parsed,
- };
+ sortRepos(a, b) {
+ return a.name < b.name ? -1 : 1;
+ }
+
+ computeRemoveRepoData(repoList, url) {
+ const list = repoList.filter(repo => repo.url !== url).map(repo => repo.url);
+ return { addons_repositories: list };
+ }
+
+ computeAddRepoData(repoList, url) {
+ const list = repoList.map(repo => repo.url);
+ list.push(url);
+ return { addons_repositories: list };
}
}
diff --git a/hassio/hassio-main.html b/hassio/hassio-main.html
index 4bfedab52a..9bcf22c4e4 100644
--- a/hassio/hassio-main.html
+++ b/hassio/hassio-main.html
@@ -58,9 +58,7 @@