mirror of
https://gitlab.com/bramw/baserow.git
synced 2025-02-27 06:35:49 +00:00
87 lines
2.6 KiB
JavaScript
87 lines
2.6 KiB
JavaScript
import { getPrimaryOrFirstField } from '@baserow/modules/database/utils/field'
|
|
import BigNumber from 'bignumber.js'
|
|
|
|
export default {
|
|
computed: {
|
|
/**
|
|
* Returns the value of the field that can be used when creating a new row
|
|
* in the linked table starting from the current row.
|
|
*/
|
|
presetsForNewRowInLinkedTable() {
|
|
const presets = {}
|
|
const value = this.primaryFieldLinkRowValue
|
|
if (value) {
|
|
presets[`field_${this.field.link_row_related_field_id}`] = [value]
|
|
}
|
|
return presets
|
|
},
|
|
/**
|
|
* Returns the value of the field.
|
|
*/
|
|
primaryFieldLinkRowValue() {
|
|
// Set the starting row as preset so that can be used later if the user wants to create a new row
|
|
// starting from the selected row.
|
|
if (!this.allFieldsInTable) {
|
|
return
|
|
}
|
|
const primaryField = getPrimaryOrFirstField(this.allFieldsInTable)
|
|
const primaryFieldType = this.$registry.get(
|
|
'field',
|
|
primaryField._.type.type
|
|
)
|
|
return {
|
|
id: this.row.id,
|
|
value: primaryFieldType.toHumanReadableString(
|
|
primaryField,
|
|
this.row[`field_${primaryField.id}`]
|
|
),
|
|
}
|
|
},
|
|
},
|
|
methods: {
|
|
/**
|
|
* Removes an existing relation from the value.
|
|
*/
|
|
removeValue(event, value, id) {
|
|
const newValue = JSON.parse(JSON.stringify(value))
|
|
const index = newValue.findIndex((item) => item.id === id)
|
|
if (index === -1) {
|
|
return
|
|
}
|
|
|
|
newValue.splice(index, 1)
|
|
this.$emit('update', newValue, value)
|
|
},
|
|
/**
|
|
* Adds a new relation to the value. This typically happens via the modal.
|
|
*/
|
|
addValue(value, { row, primary }) {
|
|
// Check if the relation already exists.
|
|
for (let i = 0; i < value.length; i++) {
|
|
if (value[i].id === row.id) {
|
|
return
|
|
}
|
|
}
|
|
|
|
// Prepare the new value with all the relations and emit that value to the
|
|
// parent.
|
|
const rowValue = this.$registry
|
|
.get('field', primary.type)
|
|
.toHumanReadableString(primary, row[`field_${primary.id}`])
|
|
|
|
const newValue = JSON.parse(JSON.stringify(value))
|
|
newValue.push({ id: row.id, value: rowValue, order: row.order })
|
|
// Match the backend order sorting
|
|
newValue.sort((a, b) => {
|
|
const orderA = new BigNumber(a.order)
|
|
const orderB = new BigNumber(b.order)
|
|
return orderA.isLessThan(orderB)
|
|
? -1
|
|
: orderA.isEqualTo(orderB)
|
|
? a.id - b.id
|
|
: 1
|
|
})
|
|
this.$emit('update', newValue, value)
|
|
},
|
|
},
|
|
}
|