1
0
Fork 0
mirror of https://gitlab.com/bramw/baserow.git synced 2025-04-07 14:25:37 +00:00

Resolve "Allow selecting multiple rows via the row select modal"

This commit is contained in:
Bram Wiepjes 2024-07-19 11:27:52 +00:00
parent b0096c9678
commit 7028fa24cc
7 changed files with 83 additions and 7 deletions
changelog/entries/unreleased/feature
web-frontend/modules

View file

@ -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"
}

View file

@ -72,6 +72,20 @@
&.simple-grid__cell--single {
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 {
@ -83,7 +97,7 @@
}
}
.simple-grid__row--selected {
.simple-grid__row--disabled {
cursor: initial;
.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 {
display: block;
line-height: 33px;

View file

@ -39,7 +39,9 @@
:table-id="field.link_row_table_id"
:view-id="field.link_row_limit_selection_view_id"
:value="value"
:multiple="true"
@selected="addValue(value, $event)"
@unselected="removeValue({}, value, $event.row.id)"
></SelectRowModal>
<ForeignRowEditModal
v-if="!readOnly || isInForeignRowEditModal"

View file

@ -28,6 +28,7 @@
:with-footer="true"
:show-hovered-row="true"
:selected-rows="selectedRows"
:multiple="multiple"
:show-row-id="true"
@add-row="$refs.rowCreateModal.show()"
@row-click="select($event)"
@ -99,6 +100,11 @@ export default {
required: false,
default: '',
},
multiple: {
type: Boolean,
required: false,
default: false,
},
},
data() {
return {
@ -296,11 +302,14 @@ export default {
* Called when the user selects a 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
}
this.$emit('selected', {
this.$emit(exists ? 'unselected' : 'selected', {
row,
primary: this.primary,
fields: this.fields,

View file

@ -10,7 +10,9 @@
:table-id="tableId"
:view-id="viewId"
:value="value"
:multiple="multiple"
@selected="selected"
@unselected="unselected"
@hide="hide"
></SelectRowContent>
</Modal>
@ -40,15 +42,26 @@ export default {
required: false,
default: () => [],
},
multiple: {
type: Boolean,
required: false,
default: false,
},
},
methods: {
/**
* Hide the modal when a row has been selected.
*/
selected(...args) {
this.hide()
if (!this.multiple) {
this.hide()
}
this.$emit('selected', ...args)
},
unselected(...args) {
console.log('unselected')
this.$emit('unselected', ...args)
},
},
}
</script>

View file

@ -38,7 +38,10 @@
:class="{
'simple-grid__row--hover':
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)"
@mouseover="currentHoveredRow = row.id"
@ -49,6 +52,15 @@
class="simple-grid__cell simple-grid__cell--first"
>
{{ 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
v-for="field in fixedFields"
@ -61,7 +73,9 @@
<div
v-if="canAddRow"
class="simple-grid__row"
:class="{ 'simple-grid__row--hover': showHoveredRow && addRowHover }"
:class="{
'simple-grid__row--hover': showHoveredRow && addRowHover,
}"
@mouseover="addRowHover = true"
@mouseleave="addRowHover = false"
@click="$emit('add-row')"
@ -106,7 +120,10 @@
:class="{
'simple-grid__row--hover':
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)"
@mouseover="currentHoveredRow = row.id"
@ -195,6 +212,11 @@ export default {
required: false,
default: false,
},
multiple: {
type: Boolean,
required: false,
default: false,
},
},
data() {
return { addRowHover: false, currentHoveredRow: null }

View file

@ -46,7 +46,9 @@
:table-id="field.link_row_table_id"
:view-id="field.link_row_limit_selection_view_id"
:value="value"
:multiple="true"
@selected="addValue(value, $event)"
@unselected="removeValue({}, value, $event.row.id)"
@hidden="hideModal"
></SelectRowModal>
<ForeignRowEditModal