Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-03-26 12:07:52 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-03-26 12:07:52 +0300
commit7e019504f5ac6decde690565857238e7e59aa034 (patch)
treefab8832b40e25fc9bc1ae54b9303b95ea146b5d5 /app/assets/javascripts/notes/components/sort_discussion.vue
parent116d4e56e83a1f408afe710ce070e699ba206475 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets/javascripts/notes/components/sort_discussion.vue')
-rw-r--r--app/assets/javascripts/notes/components/sort_discussion.vue64
1 files changed, 64 insertions, 0 deletions
diff --git a/app/assets/javascripts/notes/components/sort_discussion.vue b/app/assets/javascripts/notes/components/sort_discussion.vue
new file mode 100644
index 00000000000..16eded52763
--- /dev/null
+++ b/app/assets/javascripts/notes/components/sort_discussion.vue
@@ -0,0 +1,64 @@
+<script>
+import { GlIcon } from '@gitlab/ui';
+import { mapActions, mapGetters } from 'vuex';
+import { __ } from '~/locale';
+import { ASC, DESC } from '../constants';
+
+const SORT_OPTIONS = [
+ { key: DESC, text: __('Newest first'), cls: 'js-newest-first' },
+ { key: ASC, text: __('Oldest first'), cls: 'js-oldest-first' },
+];
+
+export default {
+ SORT_OPTIONS,
+ components: {
+ GlIcon,
+ },
+ computed: {
+ ...mapGetters(['sortDirection']),
+ selectedOption() {
+ return SORT_OPTIONS.find(({ key }) => this.sortDirection === key);
+ },
+ dropdownText() {
+ return this.selectedOption.text;
+ },
+ },
+ methods: {
+ ...mapActions(['setDiscussionSortDirection']),
+ fetchSortedDiscussions(direction) {
+ if (this.isDropdownItemActive(direction)) {
+ return;
+ }
+
+ this.setDiscussionSortDirection(direction);
+ },
+ isDropdownItemActive(sortDir) {
+ return sortDir === this.sortDirection;
+ },
+ },
+};
+</script>
+
+<template>
+ <div class="mr-2 d-inline-block align-bottom full-width-mobile">
+ <button class="btn btn-sm js-dropdown-text" data-toggle="dropdown" aria-expanded="false">
+ {{ dropdownText }}
+ <gl-icon name="chevron-down" />
+ </button>
+ <div ref="dropdownMenu" class="dropdown-menu dropdown-menu-selectable dropdown-menu-right">
+ <div class="dropdown-content">
+ <ul>
+ <li v-for="{ text, key, cls } in $options.SORT_OPTIONS" :key="key">
+ <button
+ :class="[cls, { 'is-active': isDropdownItemActive(key) }]"
+ type="button"
+ @click="fetchSortedDiscussions(key)"
+ >
+ {{ text }}
+ </button>
+ </li>
+ </ul>
+ </div>
+ </div>
+ </div>
+</template>