mirror of https://github.com/rancher/dashboard.git
65 lines
1.9 KiB
TypeScript
65 lines
1.9 KiB
TypeScript
import { SECRET, SERVICE } from '@shell/config/types';
|
|
import { SECRET_TYPES as TYPES } from '@shell/config/secret';
|
|
import { VuexStore } from '@shell/types/store/vuex';
|
|
|
|
/**
|
|
* Helper class for common functionality shared between the detail and edit ingress pages
|
|
*
|
|
* This could be an untyped mixin.. but this setups up us better for the future
|
|
*/
|
|
class IngressDetailEditHelper {
|
|
private $store: VuexStore;
|
|
private namespace: string;
|
|
|
|
constructor({
|
|
$store,
|
|
namespace,
|
|
}: {
|
|
$store: VuexStore
|
|
namespace: string,
|
|
}) {
|
|
this.$store = $store;
|
|
this.namespace = namespace;
|
|
}
|
|
|
|
/**
|
|
* Fetch services that will either be used to show
|
|
* - Create - the possible rule's target service
|
|
* - Edit - the selected and possible rule's target service
|
|
* - Detail - the selected rule's target service
|
|
*/
|
|
async fetchServices(args?: { namespace: string}): Promise<any[]> {
|
|
return this.$store.dispatch('cluster/findAll', { type: SERVICE, opt: { namespaced: args?.namespace || this.namespace } });
|
|
}
|
|
|
|
/**
|
|
* Fetch secrets that will either be used to show
|
|
* - Create - the possible secrets to use as a certificates
|
|
* - Edit - the selected and possible secrets to use as a certificates
|
|
* - Detail - the selected secrets to use as certificates
|
|
*/
|
|
async fetchSecrets(args?: { namespace: string}): Promise<any[]> {
|
|
return this.$store.dispatch('cluster/findAll', { type: SECRET, opt: { namespaced: args?.namespace || this.namespace } });
|
|
}
|
|
|
|
findAndMapCerts(secrets: any[]) {
|
|
return secrets
|
|
.filter((secret) => secret._type === TYPES.TLS)
|
|
.map((secret) => {
|
|
const { id } = secret;
|
|
|
|
return id.slice(id.indexOf('/') + 1);
|
|
});
|
|
}
|
|
|
|
findAndMapServiceTargets(services: any[]) {
|
|
return services.map((service) => ({
|
|
label: service.metadata.name,
|
|
value: service.metadata.name,
|
|
ports: service.spec.ports?.map((p: any) => p.port)
|
|
}));
|
|
}
|
|
}
|
|
|
|
export default IngressDetailEditHelper;
|