collapsible_container.vue 2.95 KB
Newer Older
Filipa Lacerda's avatar
Filipa Lacerda committed
1
<script>
Filipa Lacerda's avatar
Filipa Lacerda committed
2
  import { mapActions } from 'vuex';
Filipa Lacerda's avatar
Filipa Lacerda committed
3
  import Flash from '../../flash';
4
  import clipboardButton from '../../vue_shared/components/clipboard_button.vue';
5 6
  import loadingIcon from '../../vue_shared/components/loading_icon.vue';
  import tooltip from '../../vue_shared/directives/tooltip';
7
  import tableRegistry from './table_registry.vue';
Filipa Lacerda's avatar
Filipa Lacerda committed
8
  import { errorMessages, errorMessagesTypes } from '../constants';
9

Filipa Lacerda's avatar
Filipa Lacerda committed
10
  export default {
Filipa Lacerda's avatar
Filipa Lacerda committed
11
    name: 'CollapsibeContainerRegisty',
Filipa Lacerda's avatar
Filipa Lacerda committed
12
    components: {
13
      clipboardButton,
14
      loadingIcon,
15
      tableRegistry,
16 17 18
    },
    directives: {
      tooltip,
Filipa Lacerda's avatar
Filipa Lacerda committed
19
    },
Filipa Lacerda's avatar
Filipa Lacerda committed
20 21 22 23 24 25
    props: {
      repo: {
        type: Object,
        required: true,
      },
    },
Filipa Lacerda's avatar
Filipa Lacerda committed
26 27 28 29 30 31
    data() {
      return {
        isOpen: false,
      };
    },
    methods: {
Filipa Lacerda's avatar
Filipa Lacerda committed
32
      ...mapActions([
33
        'fetchRepos',
Filipa Lacerda's avatar
Filipa Lacerda committed
34 35 36 37
        'fetchList',
        'deleteRepo',
      ]),

38
      toggleRepo() {
Filipa Lacerda's avatar
Filipa Lacerda committed
39
        this.isOpen = !this.isOpen;
40

Filipa Lacerda's avatar
Filipa Lacerda committed
41
        if (this.isOpen) {
Filipa Lacerda's avatar
Filipa Lacerda committed
42 43
          this.fetchList({ repo: this.repo })
          .catch(() => this.showError(errorMessagesTypes.FETCH_REGISTRY));
44 45
        }
      },
46

47
      handleDeleteRepository() {
Filipa Lacerda's avatar
Filipa Lacerda committed
48 49 50
        this.deleteRepo(this.repo)
          .then(() => this.fetchRepos())
          .catch(() => this.showError(errorMessagesTypes.DELETE_REPO));
51
      },
52

Filipa Lacerda's avatar
Filipa Lacerda committed
53
      showError(message) {
54
        Flash(errorMessages[message]);
Filipa Lacerda's avatar
Filipa Lacerda committed
55
      },
56 57
    },
  };
Filipa Lacerda's avatar
Filipa Lacerda committed
58 59 60 61
</script>

<template>
  <div class="container-image">
Filipa Lacerda's avatar
Filipa Lacerda committed
62
    <div class="container-image-head">
Filipa Lacerda's avatar
Filipa Lacerda committed
63 64
      <button
        type="button"
Filipa Lacerda's avatar
Filipa Lacerda committed
65
        class="js-toggle-repo btn-link"
66
        @click="toggleRepo"
Filipa Lacerda's avatar
Filipa Lacerda committed
67
      >
68 69 70 71 72
        <i
          :class="{
            'fa-chevron-right': !isOpen,
            'fa-chevron-up': isOpen,
          }"
73
          class="fa"
Filipa Lacerda's avatar
Filipa Lacerda committed
74 75
          aria-hidden="true"
        >
76
        </i>
Filipa Lacerda's avatar
Filipa Lacerda committed
77
        {{ repo.name }}
Filipa Lacerda's avatar
Filipa Lacerda committed
78
      </button>
79

80 81
      <clipboard-button
        v-if="repo.location"
82
        :text="repo.location"
83
        :title="repo.location"
84
        css-class="btn-default btn-transparent btn-clipboard"
Filipa Lacerda's avatar
Filipa Lacerda committed
85
      />
86

Clement Ho's avatar
Clement Ho committed
87
      <div class="controls d-none d-sm-block float-right">
88
        <button
89
          v-tooltip
90
          v-if="repo.canDelete"
Filipa Lacerda's avatar
Filipa Lacerda committed
91 92
          :title="s__('ContainerRegistry|Remove repository')"
          :aria-label="s__('ContainerRegistry|Remove repository')"
93 94
          type="button"
          class="js-remove-repo btn btn-danger"
Filipa Lacerda's avatar
Filipa Lacerda committed
95 96
          @click="handleDeleteRepository"
        >
97 98
          <i
            class="fa fa-trash"
Filipa Lacerda's avatar
Filipa Lacerda committed
99 100
            aria-hidden="true"
          >
101 102 103
          </i>
        </button>
      </div>
104
    </div>
105 106 107

    <loading-icon
      v-if="repo.isLoading"
Filipa Lacerda's avatar
Filipa Lacerda committed
108 109
      class="append-bottom-20"
      size="2"
Filipa Lacerda's avatar
Filipa Lacerda committed
110
    />
111

112
    <div
113
      v-else-if="!repo.isLoading && isOpen"
Filipa Lacerda's avatar
Filipa Lacerda committed
114 115
      class="container-image-tags"
    >
116

117 118 119
      <table-registry
        v-if="repo.list.length"
        :repo="repo"
Filipa Lacerda's avatar
Filipa Lacerda committed
120
      />
Filipa Lacerda's avatar
Filipa Lacerda committed
121

122 123
      <div
        v-else
Filipa Lacerda's avatar
Filipa Lacerda committed
124 125 126
        class="nothing-here-block"
      >
        {{ s__("ContainerRegistry|No tags in Container Registry for this container image.") }}
127 128
      </div>
    </div>
Filipa Lacerda's avatar
Filipa Lacerda committed
129 130
  </div>
</template>