1
0
Fork 0
mirror of https://gitlab.com/bramw/baserow.git synced 2025-05-17 14:22:02 +00:00
bramw_baserow/web-frontend/modules/core/mixins/dropdownItem.js

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

112 lines
2.3 KiB
JavaScript
Raw Permalink Normal View History

2021-01-06 20:23:15 +00:00
import { escapeRegExp } from '@baserow/modules/core/utils/string'
export default {
inject: ['multiple'],
2021-01-06 20:23:15 +00:00
props: {
value: {
validator: () => true,
required: true,
},
name: {
type: String,
required: true,
},
alias: {
type: String,
required: false,
},
2021-01-06 20:23:15 +00:00
icon: {
type: String,
required: false,
default: null,
},
image: {
type: String,
required: false,
default: null,
},
iconTooltip: {
type: String,
required: false,
default: null,
},
2021-02-04 16:16:33 +00:00
description: {
type: String,
required: false,
default: null,
},
2021-01-06 20:23:15 +00:00
disabled: {
type: Boolean,
required: false,
default: false,
},
visible: {
type: Boolean,
required: false,
default: true,
},
2024-12-25 08:40:24 +00:00
indented: {
type: Boolean,
required: false,
default: false,
},
2021-01-06 20:23:15 +00:00
},
data() {
return {
// This field is being used by `getDropdownItemComponents` in ``dropdown.js to
// figure out if the child component is a dropdown item or not
isDropdownItem: true,
2021-01-06 20:23:15 +00:00
query: '',
}
},
2024-09-19 13:39:45 +00:00
computed: {
// Retrieve the first parent of this component that has 'isDropdown'
// property set.
parent() {
let parent = this.$parent
while (parent) {
if (parent.isDropdown) {
return parent
}
parent = parent.$parent
}
return parent
},
},
2021-01-06 20:23:15 +00:00
methods: {
select(value, disabled) {
if (!disabled) {
2024-09-19 13:39:45 +00:00
this.parent.select(value)
2021-01-06 20:23:15 +00:00
}
this.$emit('click', value)
2021-01-06 20:23:15 +00:00
},
hover(value, disabled) {
2024-09-19 13:39:45 +00:00
if (!disabled && this.parent.hover !== value) {
this.parent.hover = value
2021-01-06 20:23:15 +00:00
}
},
search(query) {
this.query = query
return this.isVisible(query)
},
isVisible(query) {
2021-12-28 12:37:58 +00:00
if (!query) {
return true
}
2021-01-06 20:23:15 +00:00
const regex = new RegExp('(' + escapeRegExp(query) + ')', 'i')
return this.name.match(regex) || this.alias?.match(regex)
2021-01-06 20:23:15 +00:00
},
isActive(value) {
if (this.multiple.value) {
const parentValue = this.parent.value ?? []
return parentValue.includes(value)
} else {
2024-09-19 13:39:45 +00:00
return this.parent.value === value
}
2021-01-06 20:23:15 +00:00
},
isHovering(value) {
2024-09-19 13:39:45 +00:00
return this.parent.hover === value
2021-01-06 20:23:15 +00:00
},
},
}