Skip to content

Commit c9b8ba6

Browse files
feat(nuonic-extension): implement installation functionality and enhance UI details
1 parent 1eee62f commit c9b8ba6

File tree

8 files changed

+132
-56
lines changed

8 files changed

+132
-56
lines changed

src/Resources/app/administration/src/component/nuonic-extension-card/index.js

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,12 @@ const { Utils, Filter } = Shopware;
88
Component.register('nuonic-extension-card', {
99
template,
1010

11-
compatConfig: Shopware.compatConfig,
11+
inject: ['installExtensionService'],
1212

13-
inheritAttrs: false,
14-
15-
inject: ['shopwareExtensionService', 'extensionStoreActionService', 'cacheApiService'],
13+
mixins: [Mixin.getByName('notification')],
1614

1715
emits: ['update-list'],
1816

19-
mixins: ['sw-extension-error'],
20-
2117
props: {
2218
extension: {
2319
type: Object,
@@ -28,15 +24,6 @@ Component.register('nuonic-extension-card', {
2824
data() {
2925
return {
3026
isLoading: false,
31-
showUninstallModal: false,
32-
showRemovalModal: false,
33-
showPermissionsModal: false,
34-
permissionsAccepted: false,
35-
showPrivacyModal: false,
36-
permissionModalActionLabel: null,
37-
openLink: null,
38-
showConsentAffirmationModal: false,
39-
consentAffirmationDeltas: null,
4027
};
4128
},
4229

@@ -68,8 +55,6 @@ Component.register('nuonic-extension-card', {
6855
isInstalled() {
6956
const installed = this.extension.pluginId !== null;
7057

71-
console.log('isInstalled', installed);
72-
7358
return installed;
7459
},
7560

@@ -82,5 +67,27 @@ Component.register('nuonic-extension-card', {
8267
emitUpdateList() {
8368
this.$emit('update-list');
8469
},
70+
71+
onInstall() {
72+
this.isLoading = true;
73+
74+
const data = {
75+
openSourcePluginId: this.extension.id,
76+
};
77+
78+
this.installExtensionService
79+
.install(data)
80+
.then(() => {
81+
this.isLoading = false;
82+
this.$router.push({ name: 'sw.extension.my-extensions.listing.app', query: { term: this.extension.name } });
83+
})
84+
.catch((error) => {
85+
this.isLoading = false;
86+
this.createNotificationError({
87+
message: this.$tc('nuonic-plugin-installer.notification.installFailed'),
88+
error,
89+
});
90+
});
91+
},
8592
},
8693
});

src/Resources/app/administration/src/component/nuonic-extension-card/nuonic-extension-card.html.twig

Lines changed: 41 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,43 +3,53 @@
33

44
<sw-extension-icon :src="imageUrl" />
55

6-
{% block nuonic_extension_card_base_activation_switch %}
7-
<div class="nuonic-extension-card-base__info">
8-
<section>
9-
<span class="nuonic-extension-card-base__info-name">
10-
{{ extension.name }}
11-
</span>
12-
<br/>
13-
<span class="nuonic-extension-card-base__info-description">
14-
{{ extension.description }}
15-
</span>
16-
17-
</section>
18-
</div>
19-
{% endblock %}
6+
<div class="nuonic-extension-card-base__info">
7+
<section>
8+
<span class="nuonic-extension-card-base__info-name">
9+
{{ extension.name }}
10+
</span>
11+
<br/>
12+
<span class="nuonic-extension-card-base__info-description">
13+
{{ extension.description }}
14+
</span>
15+
<br/>
16+
<span v-if="extension.manufacturer" class="nuonic-extension-card-base__info-manufacturer">
17+
{{ $tc('nuonic-plugin-installer.cards.manufacturer') }}
18+
{{ extension.manufacturer }}
19+
</span>
20+
|
21+
<span v-if="extension.license" class="nuonic-extension-card-base__info-license">
22+
{{ $tc('nuonic-plugin-installer.cards.license') }}
23+
{{ extension.license }}
24+
</span>
25+
</section>
26+
</div>
27+
28+
<div class="nuonic-extension-card-base__main-link">
29+
<a :href="extension.link" target="_blank" rel="noopener noreferrer">
30+
<sw-icon name="regular-github"></sw-icon>
31+
</a>
32+
</div>
2033

2134
<div class="nuonic-extension-card-base__meta-info">
22-
{% block nuonic_extension_card_base_info_content %}
23-
<section>
24-
<span v-if="extension.availableVersion" class="nuonic-extension-card-base__meta-info-version">
25-
Version (TODO):
26-
{{ extension.availableVersion }}
27-
</span>
28-
<br/>
29-
<span v-if="extension.lastCommitTime" class="nuonic-extension-card-base__meta-info-last-commit">
30-
Last Commit (TODO):
31-
{{ dateFilter(extension.lastCommitTime, { month: 'numeric', year: 'numeric', hour: undefined, minute: undefined }) }}
32-
33-
</span>
34-
35-
</section>
36-
{% endblock %}
35+
<section>
36+
<span v-if="extension.availableVersion" class="nuonic-extension-card-base__meta-info-version">
37+
{{ $tc('nuonic-plugin-installer.cards.version') }}
38+
{{ extension.availableVersion }}
39+
</span>
40+
<br/>
41+
<span v-if="extension.lastCommitTime" class="nuonic-extension-card-base__meta-info-last-commit">
42+
{{ $tc('nuonic-plugin-installer.cards.lastCommit') }}
43+
{{ dateFilter(extension.lastCommitTime, { month: 'numeric', year: 'numeric', hour: undefined, minute: undefined }) }}
44+
</span>
45+
46+
</section>
3747

3848
</div>
3949

4050
<div class="nuonic-extension-card-base__main-action">
41-
<span v-if="!isInstalled" class="nuonic-extension-card-base__open-extension" role="button" tabindex="0">
42-
Install (TODO)
51+
<span v-if="!isInstalled" class="nuonic-extension-card-base__open-extension" role="button" tabindex="0" @click="onInstall">
52+
{{ $tc('nuonic-plugin-installer.cards.install') }}
4353
</span>
4454
</div>
4555

src/Resources/app/administration/src/component/nuonic-extension-card/nuonic-extension-card.scss

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,22 @@
99
border-radius: 8px;
1010
}
1111

12-
13-
1412
.sw-meteor-card__content .sw-meteor-card__content-wrapper {
1513
display: grid;
16-
grid-column-gap: 24px;
17-
grid-template-columns: 56px 5fr 2fr minmax(min-content, 1fr) auto;
14+
grid-column-gap: 1rem;
15+
grid-template-columns: 56px 5fr 24px 2fr minmax(min-content, 1fr);
1816
align-items: center;
1917
padding: 16px 32px;
2018
border: none;
2119
}
2220

21+
.nuonic-extension-card-base__main-link {
22+
a::after {
23+
display: none;
24+
}
25+
}
26+
2327
.nuonic-extension-card-base__info {
24-
margin-left: -8px;
2528
overflow: hidden;
2629
font-size: $font-size-xxs;
2730

src/Resources/app/administration/src/main.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import './component/nuonic-plugin-installer-index';
33
import './extension/sw-search-bar-item';
44
import './decorator/search-type.decorator';
55
import './component/nuonic-extension-card';
6+
import './service/api/install.service';
67

78
import deDE from './snippet/de-DE';
89
import enGB from './snippet/en-GB';

src/Resources/app/administration/src/module/nuonic-plugin-installer/page/nuonic-plugin-installer-list/nuonic-plugin-installer-list.html.twig

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
<sw-search-bar initial-search-type="nuonic_available_opensource_plugin" :placeholder="$tc('nuonic-plugin-installer.extension.listing.placeholderSearchBar')" @search="onSearch" />
55
</template>
66
<template #smart-bar-header>
7-
{{ $tc('sw-extension.mainMenu.purchased') }}
7+
<h2>
8+
{{ $tc('nuonic-plugin-installer.list.title') }}
9+
</h2>
810
</template>
911
<template #content>
1012
<div class="nuonic-plugin-installer-index">
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
const ApiService = Shopware.Classes.ApiService;
2+
const { Application } = Shopware;
3+
4+
class InstallExtensionService extends ApiService {
5+
constructor(httpClient, loginService, apiEndpoint = 'nuonic-plugin-installer') {
6+
super(httpClient, loginService, apiEndpoint);
7+
}
8+
9+
install(formData) {
10+
const headers = this.getBasicHeaders({});
11+
12+
return this.httpClient
13+
.post(`_action/nuonic-plugin-installer/install`, formData, {
14+
headers,
15+
})
16+
.then((response) => {
17+
return ApiService.handleResponse(response);
18+
});
19+
}
20+
}
21+
22+
Application.addServiceProvider('installExtensionService', (container) => {
23+
const initContainer = Application.getContainer('init');
24+
return new InstallExtensionService(initContainer.httpClient, container.loginService);
25+
});
26+
27+
export default InstallExtensionService;

src/Resources/app/administration/src/snippet/de-DE.json

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,19 @@
1111
"listing": {
1212
"placeholderSearchBar": "Suche nach Plugins..."
1313
}
14+
},
15+
"list": {
16+
"title": "OpenSource Plugin Installer"
17+
},
18+
"cards": {
19+
"version": "Version:",
20+
"install": "Installieren",
21+
"lastCommit": "Letzter Commit am:",
22+
"license": "Lizenz:",
23+
"manufacturer": "Hersteller:"
24+
},
25+
"notification": {
26+
"installFailed": "Installation fehlgeschlagen"
1427
}
1528
},
1629
"ce_plugins": {
@@ -25,4 +38,4 @@
2538
}
2639
}
2740
}
28-
}
41+
}

src/Resources/app/administration/src/snippet/en-GB.json

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,19 @@
1111
"listing": {
1212
"placeholderSearchBar": "Search for plugins..."
1313
}
14+
},
15+
"list": {
16+
"title": "OpenSource Plugin Installer"
17+
},
18+
"cards": {
19+
"version": "Version:",
20+
"install": "Install",
21+
"lastCommit": "Last commit on:",
22+
"license": "License:",
23+
"manufacturer": "Manufacturer:"
24+
},
25+
"notification": {
26+
"installFailed": "Installation failed"
1427
}
1528
},
1629
"ce_plugins": {
@@ -25,4 +38,4 @@
2538
}
2639
}
2740
}
28-
}
41+
}

0 commit comments

Comments
 (0)