Francesco Torchia aba9c167e0
Vue3 migration - vue-migration.js launch + shell compatibility fixes
Signed-off-by: Francesco Torchia <francesco.torchia@suse.com>
2024-10-23 17:00:51 +02:00

115 lines
2.3 KiB
Vue

<script>
import isString from 'lodash/isString';
import { allHash } from '@shell/utils/promise';
import { HCI } from '../../../types';
import impl from '../../../mixins/harvester-vm/impl';
export default {
mixins: [impl],
props: {
value: {
type: Object,
required: true
}
},
async fetch() {
const hash = await allHash({ allSSHs: this.$store.dispatch('harvester/findAll', { type: HCI.SSH }) });
this.allSSHs = hash.allSSHs;
},
data() {
return {
allSSHs: [],
sshKeys: []
};
},
methods: {
toggleShow(idx) {
const ssh = this.sshKeys[idx];
this.$set(this.sshKeys, idx, {
...ssh,
showKey: !ssh.showKey
});
},
getKeys() {
return this.mergeAllSSHs(this.value?.spec);
},
isShow(id = '') {
const ssh = this.sshKeys.find(O => O?.data?.id === id) || {};
return ssh.showKey || false;
}
},
watch: {
allSSHs(neu) {
const out = this.getKeys().map((ssh) => {
return {
id: ssh.id,
publicKey: isString(ssh.data) ? ssh.data : ssh.data?.spec?.publicKey,
showKey: this.isShow(ssh.id)
};
});
this['sshKeys'] = out;
}
}
};
</script>
<template>
<div class="overview-sshKeys">
<div v-for="(ssh, index) in sshKeys" :key="index">
<div class="col span-4">
{{ ssh.id }}
</div>
<div class="col span-7 offset-1">
<div v-if="ssh.showKey" class="key-display">
{{ ssh.publicKey }}
<button class="btn btn-sm role-link hide-bar" @click="toggleShow(index)">
<i class="icon icon-x"></i>
</button>
</div>
<button v-else class="btn btn-sm role-link" @click="toggleShow(index)">
*******<i class="icons icon-show"></i>
</button>
</div>
</div>
</div>
</template>
<style lang="scss" scoped>
.overview-sshKeys {
text-align: left;
max-height: 700px;
overflow: auto;
&__item {
margin-bottom: 15px;
&:last-child {
margin-bottom: 0;
}
}
.key-display {
position: relative;
padding-right: 30px;
word-break: break-word;
.hide-bar {
position: absolute;
top: -10px;
right: 10px;
}
}
}
</style>