1717 </div >
1818</template >
1919
20- <script >
20+ <script lang="ts" >
2121
2222import _ from ' lodash' ;
23- import { mapGetters } from ' vuex ' ;
23+ import { defineComponent } from ' vue ' ;
2424
2525import { State as K8sState } from ' @pkg/backend/backend' ;
2626import Images from ' @pkg/components/Images.vue' ;
2727import { defaultSettings } from ' @pkg/config/settings' ;
28+ import { mapTypedActions , mapTypedGetters , mapTypedMutations , mapTypedState } from ' @pkg/entry/store' ;
29+ import { IpcRendererEvents } from ' @pkg/typings/electron-ipc' ;
2830import { ipcRenderer } from ' @pkg/utils/ipcRenderer' ;
2931
30- const ImageMangerStates = Object .freeze ({
31- UNREADY : ' IMAGE_MANAGER_UNREADY' ,
32- READY : ' READY' ,
33- });
32+ type Image = Parameters <IpcRendererEvents [' images-changed' ]>[0 ][number ];
33+
34+ enum ImageManagerStates {
35+ UNREADY = ' IMAGE_MANAGER_UNREADY' ,
36+ READY = ' READY' ,
37+ }
3438
35- export default {
39+ export default defineComponent ( {
3640 components: { Images },
3741 data() {
3842 return {
3943 settings: defaultSettings ,
40- images: [],
41- imageNamespaces: [],
44+ images: [] as Image [] ,
45+ imageNamespaces: [] as string [] ,
4246 supportsNamespaces: true ,
4347 };
4448 },
4549
4650 computed: {
4751 state() {
48- if (window .imagesListMock ) {
52+ if (( window as any ) .imagesListMock ) {
4953 // Override for screenshots
50- return ImageMangerStates .READY ;
54+ return ImageManagerStates .READY ;
5155 }
5256
5357 if (! [K8sState .STARTED , K8sState .DISABLED ].includes (this .k8sState )) {
54- return ImageMangerStates .UNREADY ;
58+ return ImageManagerStates .UNREADY ;
5559 }
5660
57- return this .imageManagerState ? ImageMangerStates .READY : ImageMangerStates .UNREADY ;
61+ return this .imageManagerState ? ImageManagerStates .READY : ImageManagerStates .UNREADY ;
5862 },
59- rancherImages () {
63+ rancherImages(): string [] {
6064 return this .images
61- .filter (image => image .imageName . startsWith ( ' rancher/ ' ) )
62- .map ( image => image . imageName );
65+ .map (image => image .imageName )
66+ .filter ( name => name . startsWith ( ' rancher/ ' ) );
6367 },
64- installedExtensionImages () {
68+ installedExtensionImages(): string [] {
6569 return this .installedExtensions .map (image => image .id );
6670 },
67- protectedImages () {
71+ protectedImages(): string [] {
6872 return [
6973 ' moby/buildkit' ,
7074 ' ghcr.io/rancher-sandbox/rancher-desktop/rdx-proxy' ,
7175 ... this .rancherImages ,
7276 ... this .installedExtensionImages ,
7377 ];
7478 },
75- ... mapGetters ( ' k8sManager ' , { k8sState : ' getK8sState ' } ),
76- ... mapGetters ( ' imageManager ' , { imageManagerState : ' getImageManagerState ' }),
77- ... mapGetters (' extensions' , [' installedExtensions' ]),
79+ ... mapTypedState ( ' imageManager ' , [ ' imageManagerState ' ] ),
80+ ... mapTypedGetters ( ' k8sManager ' , { k8sState : ' getK8sState ' }),
81+ ... mapTypedGetters (' extensions' , [' installedExtensions' ]),
7882 },
7983
8084 watch: {
8185 state: {
82- handler (state ) {
83- this .$store .dispatch (
84- ' page/setHeader' ,
85- { title: this .t (' images.title' ) },
86- );
86+ handler(state : string ) {
87+ this .setHeader ({ title: this .t (' images.title' ) });
8788
88- if (! state || state === ImageMangerStates .UNREADY ) {
89+ if (! state || state === ImageManagerStates .UNREADY ) {
8990 return ;
9091 }
9192
92- this .$store .dispatch (
93- ' page/setAction' ,
94- { action: ' ImagesButtonAdd' },
95- );
93+ this .setAction ({ action: ' ImagesButtonAdd' });
9694 },
9795 immediate: true ,
9896 },
9997 },
10098
10199 mounted() {
102100 ipcRenderer .on (' images-changed' , async (event , images ) => {
103- if (window .imagesListMock ) {
101+ if (( window as any ) .imagesListMock ) {
104102 // Override for screenshots
105- images = await window .imagesListMock ();
103+ images = await ( window as any ) .imagesListMock ();
106104 }
107105 if (_ .isEqual (images , this .images )) {
108106 return ;
@@ -118,47 +116,49 @@ export default {
118116 }
119117 });
120118
121- ipcRenderer .on (' images-check-state' , (event , state ) => {
122- this .$store . dispatch ( ' imageManager/ setImageManagerState' , state);
119+ ipcRenderer .on (' images-check-state' , (event , state : any ) => {
120+ this .setImageManagerState ( state );
123121 });
124122
125- ipcRenderer .invoke (' images-check-state' ).then ((state ) => {
126- this .$store . dispatch ( ' imageManager/ setImageManagerState' , state);
123+ ipcRenderer .invoke (' images-check-state' ).then ((state : any ) => {
124+ this .setImageManagerState ( state );
127125 });
128126
129- ipcRenderer .on (' settings-update' , (event , settings ) => {
127+ ipcRenderer .on (' settings-update' , (event , settings : any ) => {
130128 // TODO: put in a status bar
131129 this .$data .settings = settings ;
132130 this .checkSelectedNamespace ();
133131 });
134132
135133 (async () => {
136- this .$data . images = await ipcRenderer .invoke (' images-mounted' , true );
134+ this .images = await ipcRenderer .invoke (' images-mounted' , true );
137135 })();
138136
139- ipcRenderer .on (' images-namespaces' , (event , namespaces ) => {
137+ ipcRenderer .on (' images-namespaces' , (event , namespaces : string [] ) => {
140138 // TODO: Use a specific message to indicate whether or not messages are supported.
141- this .$data . imageNamespaces = namespaces;
142- this .$data . supportsNamespaces = namespaces .length > 0 ;
139+ this .imageNamespaces = namespaces ;
140+ this .supportsNamespaces = namespaces .length > 0 ;
143141 this .checkSelectedNamespace ();
144142 });
145143 ipcRenderer .send (' images-namespaces-read' );
146- ipcRenderer .on (' settings-read' , (event , settings ) => {
147- this .$data . settings = settings;
144+ ipcRenderer .on (' settings-read' , (event , settings : any ) => {
145+ this .settings = settings ;
148146 });
149147 ipcRenderer .send (' settings-read' );
150148
151149 ipcRenderer .on (' extensions/changed' , this .fetchExtensions );
152- this .$store . dispatch ( ' extensions/fetch ' );
150+ this .fetchExtensions ( );
153151 },
154152 beforeUnmount() {
155153 ipcRenderer .invoke (' images-mounted' , false );
156- ipcRenderer .removeAllListeners (' images-mounted' );
157154 ipcRenderer .removeAllListeners (' images-changed' );
158155 ipcRenderer .removeListener (' extensions/changed' , this .fetchExtensions );
159156 },
160157
161158 methods: {
159+ ... mapTypedActions (' extensions' , { fetchExtensions: ' fetch' }),
160+ ... mapTypedActions (' page' , [' setAction' , ' setHeader' ]),
161+ ... mapTypedMutations (' imageManager' , { setImageManagerState: ' SET_IMAGE_MANAGER_STATE' }),
162162 checkSelectedNamespace() {
163163 if (! this .supportsNamespaces || this .imageNamespaces .length === 0 ) {
164164 // Nothing to verify yet
@@ -171,21 +171,18 @@ export default {
171171 { images: { namespace: defaultNamespace } } );
172172 }
173173 },
174- onShowAllImagesChanged (value ) {
174+ onShowAllImagesChanged(value : boolean ) {
175175 if (value !== this .settings .images .showAll ) {
176176 ipcRenderer .invoke (' settings-write' ,
177177 { images: { showAll: value } } );
178178 }
179179 },
180- onChangeNamespace (value ) {
180+ onChangeNamespace(value : string ) {
181181 if (value !== this .settings .images .namespace ) {
182182 ipcRenderer .invoke (' settings-write' ,
183183 { images: { namespace: value } } );
184184 }
185185 },
186- fetchExtensions () {
187- this .$store .dispatch (' extensions/fetch' );
188- },
189186 },
190- };
187+ }) ;
191188 </script >
0 commit comments