mirror of https://github.com/rancher/dashboard.git
187 lines
4.5 KiB
Vue
187 lines
4.5 KiB
Vue
<script>
|
|
import { abbreviateClusterName } from '@shell/utils/cluster';
|
|
|
|
export default {
|
|
props: {
|
|
cluster: {
|
|
type: Object,
|
|
required: true,
|
|
},
|
|
routeCombo: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
},
|
|
computed: {
|
|
isEnabled() {
|
|
return !!this.cluster?.ready;
|
|
},
|
|
showLocalIcon() {
|
|
if (this.cluster.isLocal && this.cluster.removePreviewColor) {
|
|
return true;
|
|
}
|
|
|
|
return this.cluster.isLocal && !this.cluster.isHarvester && !this.cluster.badge?.iconText;
|
|
},
|
|
|
|
customColor() {
|
|
return !this.cluster.removePreviewColor && this.cluster.badge?.iconText ? this.cluster.badge?.color : '';
|
|
},
|
|
},
|
|
|
|
methods: {
|
|
smallIdentifier(input) {
|
|
if (this.cluster.badge?.iconText) {
|
|
return this.cluster.badge?.iconText;
|
|
}
|
|
|
|
if (this.cluster.isLocal && !this.cluster.badge?.iconText) {
|
|
return undefined;
|
|
}
|
|
|
|
return abbreviateClusterName(input);
|
|
}
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<template>
|
|
<div
|
|
v-if="cluster"
|
|
class="cluster-icon-menu"
|
|
>
|
|
<div
|
|
class="cluster-badge-logo"
|
|
:class="{ 'disabled': !isEnabled }"
|
|
>
|
|
<span
|
|
v-if="!showLocalIcon"
|
|
class="cluster-badge-logo-text"
|
|
>
|
|
{{ smallIdentifier(cluster.label) }}
|
|
</span>
|
|
<span
|
|
class="custom-color-decoration"
|
|
:style="{'background': customColor}"
|
|
/>
|
|
<svg
|
|
v-if="showLocalIcon"
|
|
class="cluster-local-logo"
|
|
version="1.1"
|
|
xmlns="http://www.w3.org/2000/svg"
|
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
x="0px"
|
|
y="0px"
|
|
viewBox="0 0 100 100"
|
|
style="enable-background:new 0 0 100 100;"
|
|
xml:space="preserve"
|
|
>
|
|
<g>
|
|
<g>
|
|
<path
|
|
class="rancher-icon-fill"
|
|
d="M26.0862026,44.4953918H8.6165142c-5.5818157,0-9.3979139-4.6252708-8.4802637-10.1311035l2.858391-17.210701
|
|
C3.912292,11.6477556,6.1382647,7.1128125,7.8419709,7.1128125s3.1788611,4.5368752,3.1788611,10.1186218v4.4837742
|
|
c0,5.5817471,4.4044495,9.5409164,9.9862652,9.5409164h5.0791054V44.4953918z"
|
|
/>
|
|
</g>
|
|
<path
|
|
class="rancher-icon-fill"
|
|
d="M63.0214729,92.8871841H37.0862045c-6.0751343,0-11.0000019-4.9248657-11.0000019-11V30.3864384
|
|
c0-6.0751324,4.9248676-11,11.0000019-11h25.9352684c6.0751305,0,11.0000038,4.9248676,11.0000038,11v51.5007477
|
|
C74.0214767,87.9623184,69.0966034,92.8871841,63.0214729,92.8871841z"
|
|
/>
|
|
<g>
|
|
<path
|
|
class="rancher-icon-fill"
|
|
d="M73.9137955,44.4953918h17.4696884c5.5818176,0,9.3979187-4.6252708,8.4802628-10.1311035
|
|
l-2.8583908-17.210701c-0.9176483-5.5058317-3.1436234-10.0407753-4.8473282-10.0407753
|
|
s-3.1788635,4.5368752-3.1788635,10.1186218v4.4837742c0,5.5817471-4.4044418,9.5409164-9.9862595,9.5409164h-5.0791092
|
|
V44.4953918z"
|
|
/>
|
|
</g>
|
|
</g>
|
|
</svg>
|
|
</div>
|
|
<i
|
|
v-if="!routeCombo && cluster.pinned"
|
|
class="icon icon-pin cluster-pin-icon"
|
|
/>
|
|
<i
|
|
v-else-if="routeCombo"
|
|
class="icon icon-keyboard_tab key-combo-icon"
|
|
/>
|
|
</div>
|
|
</template>
|
|
|
|
<style lang="scss" scoped>
|
|
.rancher-icon-fill {
|
|
fill: var(--primary);
|
|
}
|
|
|
|
.cluster-icon-menu {
|
|
position: relative;
|
|
align-items: center;
|
|
display: flex;
|
|
height: 32px;
|
|
justify-content: center;
|
|
width: 42px;
|
|
}
|
|
.cluster-pin-icon {
|
|
position: absolute;
|
|
top: -6px;
|
|
right: -7px;
|
|
font-size: 14px;
|
|
transform: scaleX(-1);
|
|
color: var(--body-text);
|
|
}
|
|
.key-combo-icon {
|
|
position: absolute;
|
|
top: -7px;
|
|
right: -8px;
|
|
font-size: 14px;
|
|
color: var(--body-text);
|
|
background-color: #dddee6;
|
|
padding: 2px;
|
|
border-radius: 2px;
|
|
}
|
|
|
|
.cluster-local-logo {
|
|
width: 20px;
|
|
}
|
|
|
|
.cluster-badge-logo {
|
|
width: 42px;
|
|
height: 32px;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
color: var(--default-active-text);
|
|
font-weight: bold;
|
|
background: var(--nav-icon-badge-bg);
|
|
border: 1px solid var(--border);
|
|
border-radius: 5px;
|
|
font-size: 12px;
|
|
text-transform: uppercase;
|
|
|
|
.custom-color-decoration {
|
|
height: 4px;
|
|
width: 100%;
|
|
margin: 0 auto;
|
|
position: absolute;
|
|
bottom: 0px;
|
|
border-radius: 0px 0px 5px 5px;
|
|
}
|
|
|
|
&.disabled {
|
|
color: var(--muted);
|
|
}
|
|
}
|
|
</style>
|
|
|
|
<style lang="scss">
|
|
.theme-dark .key-combo-icon {
|
|
color: var(--body-bg);
|
|
}
|
|
</style>
|