diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-10-22 15:06:20 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-10-22 15:06:20 +0300 |
commit | b1bcdba89bc241e2cede910f26cf3f5fff8d7901 (patch) | |
tree | 41b45ec9ff1ba56c93b29b00435495e7e5abf02b /app/assets | |
parent | 30dc5b50569db30fef06cc7ab66e7341161b3c70 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets')
-rw-r--r-- | app/assets/javascripts/vue_shared/components/split_button.vue | 76 | ||||
-rw-r--r-- | app/assets/stylesheets/framework/dropdowns.scss | 3 |
2 files changed, 78 insertions, 1 deletions
diff --git a/app/assets/javascripts/vue_shared/components/split_button.vue b/app/assets/javascripts/vue_shared/components/split_button.vue new file mode 100644 index 00000000000..f7dc00a345c --- /dev/null +++ b/app/assets/javascripts/vue_shared/components/split_button.vue @@ -0,0 +1,76 @@ +<script> +import _ from 'underscore'; + +import { GlDropdown, GlDropdownDivider, GlDropdownItem } from '@gitlab/ui'; + +const isValidItem = item => + _.isString(item.eventName) && _.isString(item.title) && _.isString(item.description); + +export default { + components: { + GlDropdown, + GlDropdownDivider, + GlDropdownItem, + }, + + props: { + actionItems: { + type: Array, + required: true, + validator(value) { + return value.length > 1 && value.every(isValidItem); + }, + }, + menuClass: { + type: String, + required: false, + default: '', + }, + }, + + data() { + return { + selectedItem: this.actionItems[0], + }; + }, + + computed: { + dropdownToggleText() { + return this.selectedItem.title; + }, + }, + + methods: { + triggerEvent() { + this.$emit(this.selectedItem.eventName); + }, + }, +}; +</script> + +<template> + <gl-dropdown + :menu-class="`dropdown-menu-selectable ${menuClass}`" + split + :text="dropdownToggleText" + v-bind="$attrs" + @click="triggerEvent" + > + <template v-for="(item, itemIndex) in actionItems"> + <gl-dropdown-item + :key="item.eventName" + :active="selectedItem === item" + active-class="is-active" + @click="selectedItem = item" + > + <strong>{{ item.title }}</strong> + <div>{{ item.description }}</div> + </gl-dropdown-item> + + <gl-dropdown-divider + v-if="itemIndex < actionItems.length - 1" + :key="`${item.eventName}-divider`" + /> + </template> + </gl-dropdown> +</template> diff --git a/app/assets/stylesheets/framework/dropdowns.scss b/app/assets/stylesheets/framework/dropdowns.scss index ce74aa6ed02..d53a4c1286c 100644 --- a/app/assets/stylesheets/framework/dropdowns.scss +++ b/app/assets/stylesheets/framework/dropdowns.scss @@ -506,7 +506,8 @@ .dropdown-menu-selectable { li { a, - button { + button, + .dropdown-item { padding: 8px 40px; position: relative; |