Skip to content

Commit 12e80c6

Browse files
feat(nuonic-plugin-installer): implement plugin listing page and update navigation
1 parent 7782d89 commit 12e80c6

File tree

3 files changed

+87
-17
lines changed

3 files changed

+87
-17
lines changed
Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,26 @@
1+
import './page/nuonic-plugin-installer-list';
2+
13
Shopware.Module.register('nuonic-plugin-installer', {
2-
type: 'plugin',
3-
name: 'NuonicPluginInstaller',
4-
title: 'nuonic-plugin-installer.extension.title',
5-
description: 'nuonic-plugin-installer.extension.description',
6-
color: '#66bbe3',
7-
icon: 'regular-dashboard',
8-
navigation: [{
9-
label: 'NuonicPluginInstaller',
4+
type: 'plugin',
5+
name: 'nuonic-plugin-installer.extension.title',
6+
title: 'nuonic-plugin-installer.extension.title',
7+
description: 'nuonic-plugin-installer.extension.description',
108
color: '#66bbe3',
11-
path: 'nuonic.plugin.installer.index',
129
icon: 'regular-dashboard',
13-
parent: 'sw-extension',
14-
position: 100
15-
}],
16-
routes: {
17-
index: {
18-
component: 'nuonic-plugin-installer-index',
19-
path: '/'
10+
navigation: [
11+
{
12+
label: 'nuonic-plugin-installer.extension.title',
13+
color: '#66bbe3',
14+
path: 'nuonic.plugin.installer.list',
15+
icon: 'regular-dashboard',
16+
parent: 'sw-extension',
17+
position: 100,
18+
},
19+
],
20+
routes: {
21+
list: {
22+
component: 'nuonic-plugin-installer-list',
23+
path: 'list',
24+
},
2025
},
21-
},
2226
});
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import template from './nuonic-plugin-installer-list.html.twig';
2+
3+
const { Component, Mixin } = Shopware;
4+
const { Criteria } = Shopware.Data;
5+
6+
Component.register('nuonic-plugin-installer-list', {
7+
template,
8+
9+
inject: ['repositoryFactory'],
10+
mixins: [Mixin.getByName('listing')],
11+
12+
data() {
13+
return {
14+
availablePlugins: [],
15+
page: 1,
16+
limit: 20,
17+
total: 0,
18+
term: null,
19+
sortBy: 'name',
20+
sortDirection: 'ASC',
21+
loading: false,
22+
};
23+
},
24+
25+
computed: {
26+
availablePluginsRepository() {
27+
return this.repositoryFactory.create('nuonic_available_opensource_plugin');
28+
},
29+
availablePluginsCriteria() {
30+
const criteria = new Criteria(this.page, this.limit);
31+
criteria.setTerm(this.term);
32+
criteria.addSorting(Criteria.sort(this.sortBy, this.sortDirection));
33+
return criteria;
34+
},
35+
},
36+
37+
methods: {
38+
getList() {
39+
this.loading = true;
40+
this.availablePluginsRepository.search(this.availablePluginsCriteria).then((result) => {
41+
this.availablePlugins = result;
42+
this.total = result.total;
43+
this.loading = false;
44+
});
45+
},
46+
changePage({ page = 1, limit = 10 }) {
47+
this.page = page;
48+
this.limit = limit;
49+
this.getList();
50+
},
51+
},
52+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{% block nuonic_plugin_installer_index %}
2+
<sw-meteor-page hide-icon>
3+
<div class="nuonic-plugin-installer-index">
4+
<sw-skeleton v-if="isLoading" :variant="skeletonVariant" />
5+
<div v-else class="nuonic-plugin-installer-index__listing-grid">
6+
<template v-for="entry in availablePlugins" :key="entry.id">
7+
{{ entry.name }}
8+
</template>
9+
10+
<sw-pagination :total="total" :limit="limit" :page="page" @page-change="changePage" />
11+
</div>
12+
</div>
13+
</sw-meteor-page>
14+
{% endblock %}

0 commit comments

Comments
 (0)