11<script lang="ts">
2- import semver from ' semver' ;
32import Vue , { VueConstructor } from ' vue' ;
43import { mapGetters } from ' vuex' ;
54
65import MarketplaceCard from ' @pkg/components/MarketplaceCard.vue' ;
76import { Settings , ContainerEngine } from ' @pkg/config/settings' ;
8- import { ExtensionState , MarketplaceData } from ' @pkg/store/extensions.js ' ;
7+ import type { ExtensionState , MarketplaceData } from ' @pkg/store/extensions' ;
98
10- type ExtensionData = MarketplaceData & { installed : boolean } ;
9+ type ExtensionData = MarketplaceData ;
1110
1211interface VuexBindings {
1312 getPreferences: Settings ;
@@ -17,33 +16,14 @@ export default (Vue as VueConstructor<Vue & VuexBindings>).extend({
1716 name: ' marketplace-catalog' ,
1817 components: { MarketplaceCard },
1918 data() {
20- return {
21- searchValue: ' ' ,
22- loading: true ,
23- credentials: {
24- user: ' ' ,
25- password: ' ' ,
26- port: 0 ,
27- },
28- };
29- },
30- async fetch() {
31- this .credentials = await this .$store .dispatch (
32- ' credentials/fetchCredentials' ,
33- );
34-
35- if (! this .credentials ) {
36- return ;
37- }
38-
39- this .loading = false ;
19+ return { searchValue: ' ' };
4020 },
4121 computed: {
4222 ... mapGetters (' preferences' , [' getPreferences' ]),
43- ... mapGetters (' extensions' , { installedExtensions: ' list ' , extensions: ' marketData' } ) as {
44- installedExtensions: () => ({ id : string } & ExtensionState ) [],
45- extensions : () => MarketplaceData [],
46- },
23+ ... mapGetters (' extensions' , [ ' installedExtensions' , ' marketData' ] ) as {
24+ installedExtensions: () => ExtensionState [],
25+ marketData : () => MarketplaceData [],
26+ },
4727 containerEngine(): string {
4828 return this .getPreferences .containerEngine .name ;
4929 },
@@ -57,15 +37,9 @@ export default (Vue as VueConstructor<Vue & VuexBindings>).extend({
5737 return this .getPreferences .application .extensions .allowed .list ;
5838 },
5939 filteredExtensions(): ExtensionData [] {
60- let tempExtensions = this .extensions
40+ let tempExtensions = this .marketData
6141 .filter ((item ) => {
6242 return this .isAllowed (item .slug );
63- })
64- .map ((item ) => {
65- return {
66- ... item ,
67- installed: this .isInstalled (item .slug ),
68- };
6943 });
7044
7145 if (this .searchValue ) {
@@ -84,21 +58,15 @@ export default (Vue as VueConstructor<Vue & VuexBindings>).extend({
8458 },
8559 },
8660 methods: {
87- isInstalled(slug : string ) {
88- return !! this .installedExtensions .find (item => item ?.id === slug );
89- },
90- isOutdated(slug : string ) {
91- const available = this .extensions .find (item => item .slug === slug );
92- const installed = this .installedExtensions .find (item => item ?.id === slug );
93-
94- return available && installed && semver .gt (available .version , installed .version );
95- },
9661 installedVersion(slug : string ) {
9762 return this .installedExtensions .find (item => item .id === slug )?.version ;
9863 },
9964 isAllowed(slug : string ) {
10065 return ! this .allowedListEnabled || this .allowedExtensions .includes (slug );
10166 },
67+ installedExtension(slug : string ) {
68+ return this .installedExtensions .find (item => item .id === slug );
69+ },
10270 },
10371});
10472 </script >
@@ -117,7 +85,6 @@ export default (Vue as VueConstructor<Vue & VuexBindings>).extend({
11785 {{ t('marketplace.noResults') }}
11886 </div >
11987 <div
120- v-if =" !loading"
12188 class =" extensions-content"
12289 >
12390 <div
@@ -127,11 +94,8 @@ export default (Vue as VueConstructor<Vue & VuexBindings>).extend({
12794 >
12895 <MarketplaceCard
12996 :extension =" item"
97+ :installed =" installedExtension(item.slug)"
13098 :data-test =" `extension-card-${item.title.toLowerCase()}`"
131- :is-installed =" item.installed"
132- :installed-version =" installedVersion(item.slug)"
133- :credentials =" credentials"
134- @update:extension =" isInstalled"
13599 />
136100 </div >
137101 </div >
0 commit comments