debian-mirror-gitlab/app/assets/javascripts/clusters/agents/components/integration_status.vue
2022-10-11 01:57:18 +05:30

98 lines
2.4 KiB
Vue

<script>
import { GlCollapse, GlButton, GlIcon } from '@gitlab/ui';
import { s__ } from '~/locale';
import { AGENT_STATUSES } from '~/clusters_list/constants';
import { getAgentLastContact, getAgentStatus } from '~/clusters_list/clusters_util';
import {
INTEGRATION_STATUS_VALID_TOKEN,
INTEGRATION_STATUS_NO_TOKEN,
INTEGRATION_STATUS_RESTRICTED_CI_CD,
} from '../constants';
import AgentIntegrationStatusRow from './agent_integration_status_row.vue';
export default {
components: {
GlCollapse,
GlButton,
GlIcon,
AgentIntegrationStatusRow,
},
i18n: {
title: s__('ClusterAgents|Integration Status'),
},
AGENT_STATUSES,
props: {
tokens: {
required: true,
type: Array,
},
},
data() {
return {
isVisible: false,
};
},
computed: {
chevronIcon() {
return this.isVisible ? 'chevron-down' : 'chevron-right';
},
agentStatus() {
const lastContact = getAgentLastContact(this.tokens);
return getAgentStatus(lastContact);
},
integrationStatuses() {
const statuses = [];
if (this.agentStatus === 'active') {
statuses.push(INTEGRATION_STATUS_VALID_TOKEN);
}
if (!this.tokens.length) {
statuses.push(INTEGRATION_STATUS_NO_TOKEN);
}
statuses.push(INTEGRATION_STATUS_RESTRICTED_CI_CD);
return statuses;
},
},
methods: {
toggleCollapse() {
this.isVisible = !this.isVisible;
},
},
};
</script>
<template>
<div>
<gl-button
:icon="chevronIcon"
variant="link"
size="small"
class="gl-mr-3"
@click="toggleCollapse"
>
{{ $options.i18n.title }} </gl-button
><span data-testid="agent-status">
<gl-icon
:name="$options.AGENT_STATUSES[agentStatus].icon"
:class="$options.AGENT_STATUSES[agentStatus].class"
class="gl-mr-2"
/>{{ $options.AGENT_STATUSES[agentStatus].name }}
</span>
<gl-collapse v-model="isVisible" class="gl-ml-5 gl-mt-5">
<ul class="gl-list-style-none gl-pl-2 gl-mb-0">
<agent-integration-status-row
v-for="(status, index) in integrationStatuses"
:key="index"
:icon="status.icon"
:icon-class="status.iconClass"
:text="status.text"
:help-url="status.helpUrl"
:feature-name="status.featureName"
/>
</ul>
</gl-collapse>
</div>
</template>