summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/diffs/components/changed_files_dropdown.vue
blob: b38d217fbe3378aa0971b56aaf7c252d2a97f99c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<script>
import Icon from '~/vue_shared/components/icon.vue';
import changedFilesMixin from '../mixins/changed_files';

export default {
  components: {
    Icon,
  },
  mixins: [changedFilesMixin],
  data() {
    return {
      searchText: '',
    };
  },
  computed: {
    filteredDiffFiles() {
      return this.diffFiles.filter(file =>
        file.filePath.toLowerCase().includes(this.searchText.toLowerCase()),
      );
    },
  },
  methods: {
    clearSearch() {
      this.searchText = '';
    },
  },
};
</script>

<template>
  <span>
    Showing
    <button
      class="diff-stats-summary-toggler"
      data-toggle="dropdown"
      type="button"
      aria-expanded="false"
    >
      <span>
        {{ n__('%d changed file', '%d changed files', diffFiles.length) }}
      </span>
      <icon
        :size="8"
        name="chevron-down"
      />
    </button>
    <div class="dropdown-menu diff-file-changes">
      <div class="dropdown-input">
        <input
          v-model="searchText"
          type="search"
          class="dropdown-input-field"
          placeholder="Search files"
          autocomplete="off"
        />
        <i
          v-if="searchText.length === 0"
          aria-hidden="true"
          data-hidden="true"
          class="fa fa-search dropdown-input-search">
        </i>
        <i
          v-else
          role="button"
          class="fa fa-times dropdown-input-search"
          @click="clearSearch"
        ></i>
      </div>
      <div class="dropdown-content">
        <ul>
          <li
            v-for="diffFile in filteredDiffFiles"
            :key="diffFile.name"
          >
            <a
              :href="`#${diffFile.fileHash}`"
              :title="diffFile.newPath"
              class="diff-changed-file"
            >
              <icon
                :name="fileChangedIcon(diffFile)"
                :size="16"
                :class="fileChangedClass(diffFile)"
                class="diff-file-changed-icon append-right-8"
              />
              <span class="diff-changed-file-content append-right-8">
                <strong
                  v-if="diffFile.blob && diffFile.blob.name"
                  class="diff-changed-file-name"
                >
                  {{ diffFile.blob.name }}
                </strong>
                <strong
                  v-else
                  class="diff-changed-blank-file-name"
                >
                  {{ s__('Diffs|No file name available') }}
                </strong>
                <span class="diff-changed-file-path prepend-top-5">
                  {{ truncatedDiffPath(diffFile.blob.path) }}
                </span>
              </span>
              <span class="diff-changed-stats">
                <span class="cgreen">
                  +{{ diffFile.addedLines }}
                </span>
                <span class="cred">
                  -{{ diffFile.removedLines }}
                </span>
              </span>
            </a>
          </li>

          <li
            v-show="filteredDiffFiles.length === 0"
            class="dropdown-menu-empty-item"
          >
            <a>
              {{ __('No files found') }}
            </a>
          </li>
        </ul>
      </div>
    </div>
  </span>
</template>