1
0
Fork 0
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:
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 { &.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;

View file

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

View file

@ -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,

View file

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

View file

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

View file

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