mirror of
https://gitlab.com/bramw/baserow.git
synced 2025-04-14 09:08:32 +00:00
Resolve "Allow selecting multiple rows via the row select modal"
This commit is contained in:
parent
b0096c9678
commit
7028fa24cc
7 changed files with 83 additions and 7 deletions
changelog/entries/unreleased/feature
web-frontend/modules
core/assets/scss/components/views/grid
database/components
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"type": "feature",
|
||||||
|
"message": "Allow selecting multiple relationships in the row select modal of the link row field.",
|
||||||
|
"issue_number": 2267,
|
||||||
|
"bullet_points": [],
|
||||||
|
"created_at": "2024-07-17"
|
||||||
|
}
|
|
@ -72,6 +72,20 @@
|
||||||
&.simple-grid__cell--single {
|
&.simple-grid__cell--single {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.simple-grid__cell--with-checkbox {
|
||||||
|
width: 64px;
|
||||||
|
padding-right: 22px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.simple-grid__cell-checkbox {
|
||||||
|
@include absolute(0, 0, 0, 0);
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
vertical-align: center;
|
||||||
|
justify-content: center;
|
||||||
|
background-color: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
.simple-grid__row--hover {
|
.simple-grid__row--hover {
|
||||||
|
@ -83,7 +97,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.simple-grid__row--selected {
|
.simple-grid__row--disabled {
|
||||||
cursor: initial;
|
cursor: initial;
|
||||||
|
|
||||||
.simple-grid__cell,
|
.simple-grid__cell,
|
||||||
|
@ -92,6 +106,13 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.simple-grid__row--checked {
|
||||||
|
.simple-grid__cell,
|
||||||
|
.grid-view__cell {
|
||||||
|
background-color: $color-primary-100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.simple-grid__add-row {
|
.simple-grid__add-row {
|
||||||
display: block;
|
display: block;
|
||||||
line-height: 33px;
|
line-height: 33px;
|
||||||
|
|
|
@ -39,7 +39,9 @@
|
||||||
:table-id="field.link_row_table_id"
|
:table-id="field.link_row_table_id"
|
||||||
:view-id="field.link_row_limit_selection_view_id"
|
:view-id="field.link_row_limit_selection_view_id"
|
||||||
:value="value"
|
:value="value"
|
||||||
|
:multiple="true"
|
||||||
@selected="addValue(value, $event)"
|
@selected="addValue(value, $event)"
|
||||||
|
@unselected="removeValue({}, value, $event.row.id)"
|
||||||
></SelectRowModal>
|
></SelectRowModal>
|
||||||
<ForeignRowEditModal
|
<ForeignRowEditModal
|
||||||
v-if="!readOnly || isInForeignRowEditModal"
|
v-if="!readOnly || isInForeignRowEditModal"
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
:with-footer="true"
|
:with-footer="true"
|
||||||
:show-hovered-row="true"
|
:show-hovered-row="true"
|
||||||
:selected-rows="selectedRows"
|
:selected-rows="selectedRows"
|
||||||
|
:multiple="multiple"
|
||||||
:show-row-id="true"
|
:show-row-id="true"
|
||||||
@add-row="$refs.rowCreateModal.show()"
|
@add-row="$refs.rowCreateModal.show()"
|
||||||
@row-click="select($event)"
|
@row-click="select($event)"
|
||||||
|
@ -99,6 +100,11 @@ export default {
|
||||||
required: false,
|
required: false,
|
||||||
default: '',
|
default: '',
|
||||||
},
|
},
|
||||||
|
multiple: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
@ -296,11 +302,14 @@ export default {
|
||||||
* Called when the user selects a row.
|
* Called when the user selects a row.
|
||||||
*/
|
*/
|
||||||
select(row) {
|
select(row) {
|
||||||
if (this.selectedRows.includes(row.id)) {
|
const exists = this.selectedRows.includes(row.id)
|
||||||
|
|
||||||
|
// In multiple mode it's also possible to unselect.
|
||||||
|
if (!this.multiple && exists) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
this.$emit('selected', {
|
this.$emit(exists ? 'unselected' : 'selected', {
|
||||||
row,
|
row,
|
||||||
primary: this.primary,
|
primary: this.primary,
|
||||||
fields: this.fields,
|
fields: this.fields,
|
||||||
|
|
|
@ -10,7 +10,9 @@
|
||||||
:table-id="tableId"
|
:table-id="tableId"
|
||||||
:view-id="viewId"
|
:view-id="viewId"
|
||||||
:value="value"
|
:value="value"
|
||||||
|
:multiple="multiple"
|
||||||
@selected="selected"
|
@selected="selected"
|
||||||
|
@unselected="unselected"
|
||||||
@hide="hide"
|
@hide="hide"
|
||||||
></SelectRowContent>
|
></SelectRowContent>
|
||||||
</Modal>
|
</Modal>
|
||||||
|
@ -40,15 +42,26 @@ export default {
|
||||||
required: false,
|
required: false,
|
||||||
default: () => [],
|
default: () => [],
|
||||||
},
|
},
|
||||||
|
multiple: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
/**
|
/**
|
||||||
* Hide the modal when a row has been selected.
|
* Hide the modal when a row has been selected.
|
||||||
*/
|
*/
|
||||||
selected(...args) {
|
selected(...args) {
|
||||||
this.hide()
|
if (!this.multiple) {
|
||||||
|
this.hide()
|
||||||
|
}
|
||||||
this.$emit('selected', ...args)
|
this.$emit('selected', ...args)
|
||||||
},
|
},
|
||||||
|
unselected(...args) {
|
||||||
|
console.log('unselected')
|
||||||
|
this.$emit('unselected', ...args)
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -38,7 +38,10 @@
|
||||||
:class="{
|
:class="{
|
||||||
'simple-grid__row--hover':
|
'simple-grid__row--hover':
|
||||||
showHoveredRow && currentHoveredRow === row.id,
|
showHoveredRow && currentHoveredRow === row.id,
|
||||||
'simple-grid__row--selected': selectedRows.includes(row.id),
|
'simple-grid__row--disabled':
|
||||||
|
!multiple && selectedRows.includes(row.id),
|
||||||
|
'simple-grid__row--checked':
|
||||||
|
multiple && selectedRows.includes(row.id),
|
||||||
}"
|
}"
|
||||||
@click="$emit('row-click', row)"
|
@click="$emit('row-click', row)"
|
||||||
@mouseover="currentHoveredRow = row.id"
|
@mouseover="currentHoveredRow = row.id"
|
||||||
|
@ -49,6 +52,15 @@
|
||||||
class="simple-grid__cell simple-grid__cell--first"
|
class="simple-grid__cell simple-grid__cell--first"
|
||||||
>
|
>
|
||||||
{{ row.id }}
|
{{ row.id }}
|
||||||
|
<div
|
||||||
|
v-if="multiple"
|
||||||
|
v-show="
|
||||||
|
currentHoveredRow === row.id || selectedRows.includes(row.id)
|
||||||
|
"
|
||||||
|
class="simple-grid__cell-checkbox"
|
||||||
|
>
|
||||||
|
<Checkbox :checked="selectedRows.includes(row.id)"></Checkbox>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-for="field in fixedFields"
|
v-for="field in fixedFields"
|
||||||
|
@ -61,7 +73,9 @@
|
||||||
<div
|
<div
|
||||||
v-if="canAddRow"
|
v-if="canAddRow"
|
||||||
class="simple-grid__row"
|
class="simple-grid__row"
|
||||||
:class="{ 'simple-grid__row--hover': showHoveredRow && addRowHover }"
|
:class="{
|
||||||
|
'simple-grid__row--hover': showHoveredRow && addRowHover,
|
||||||
|
}"
|
||||||
@mouseover="addRowHover = true"
|
@mouseover="addRowHover = true"
|
||||||
@mouseleave="addRowHover = false"
|
@mouseleave="addRowHover = false"
|
||||||
@click="$emit('add-row')"
|
@click="$emit('add-row')"
|
||||||
|
@ -106,7 +120,10 @@
|
||||||
:class="{
|
:class="{
|
||||||
'simple-grid__row--hover':
|
'simple-grid__row--hover':
|
||||||
showHoveredRow && currentHoveredRow === row.id,
|
showHoveredRow && currentHoveredRow === row.id,
|
||||||
'simple-grid__row--selected': selectedRows.includes(row.id),
|
'simple-grid__row--disabled':
|
||||||
|
!multiple && selectedRows.includes(row.id),
|
||||||
|
'simple-grid__row--checked':
|
||||||
|
multiple && selectedRows.includes(row.id),
|
||||||
}"
|
}"
|
||||||
@click="$emit('row-click', row)"
|
@click="$emit('row-click', row)"
|
||||||
@mouseover="currentHoveredRow = row.id"
|
@mouseover="currentHoveredRow = row.id"
|
||||||
|
@ -195,6 +212,11 @@ export default {
|
||||||
required: false,
|
required: false,
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
|
multiple: {
|
||||||
|
type: Boolean,
|
||||||
|
required: false,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return { addRowHover: false, currentHoveredRow: null }
|
return { addRowHover: false, currentHoveredRow: null }
|
||||||
|
|
|
@ -46,7 +46,9 @@
|
||||||
:table-id="field.link_row_table_id"
|
:table-id="field.link_row_table_id"
|
||||||
:view-id="field.link_row_limit_selection_view_id"
|
:view-id="field.link_row_limit_selection_view_id"
|
||||||
:value="value"
|
:value="value"
|
||||||
|
:multiple="true"
|
||||||
@selected="addValue(value, $event)"
|
@selected="addValue(value, $event)"
|
||||||
|
@unselected="removeValue({}, value, $event.row.id)"
|
||||||
@hidden="hideModal"
|
@hidden="hideModal"
|
||||||
></SelectRowModal>
|
></SelectRowModal>
|
||||||
<ForeignRowEditModal
|
<ForeignRowEditModal
|
||||||
|
|
Loading…
Add table
Reference in a new issue