diff --git a/packages/client/src/components/app/spreadsheet/Spreadsheet.svelte b/packages/client/src/components/app/spreadsheet/Spreadsheet.svelte
index 06db8e7f9c..267a8a7d85 100644
--- a/packages/client/src/components/app/spreadsheet/Spreadsheet.svelte
+++ b/packages/client/src/components/app/spreadsheet/Spreadsheet.svelte
@@ -23,6 +23,7 @@
let selectedRows = {}
let horizontallyScrolled = false
let changeCache = {}
+ let newRows = []
$: query = LuceneUtils.buildLuceneQuery(filter)
$: fetch = createFetch(table)
@@ -38,6 +39,7 @@
$: schema = $fetch.schema
$: rowCount = $fetch.rows?.length || 0
$: selectedRowCount = Object.values(selectedRows).filter(x => !!x).length
+ $: rows = getSortedRows($fetch.rows, newRows)
const createFetch = datasource => {
return fetchData({
@@ -100,14 +102,14 @@
if (allSelected) {
selectedRows = {}
} else {
- $fetch.rows.forEach(row => {
+ rows.forEach(row => {
selectedRows[row._id] = true
})
}
}
const handleChange = async (rowId, field, value) => {
- let row = $fetch.rows.find(x => x._id === rowId)
+ let row = rows.find(x => x._id === rowId)
if (!row) {
return
}
@@ -125,10 +127,10 @@
const deleteRows = () => {
// Fetch full row objects to be deleted
- const rows = Object.entries(selectedRows)
+ const rowsToDelete = Object.entries(selectedRows)
.map(entry => {
if (entry[1] === true) {
- return $fetch.rows.find(x => x._id === entry[0])
+ return rows.find(x => x._id === entry[0])
} else {
return null
}
@@ -139,7 +141,7 @@
const performDeletion = async () => {
await API.deleteRows({
tableId: table.tableId,
- rows,
+ rows: rowsToDelete,
})
await fetch.refresh()
notificationStore.actions.success(
@@ -163,6 +165,23 @@
performDeletion
)
}
+
+ const addRow = async field => {
+ const res = await API.saveRow({ tableId: table.tableId })
+ selectedCell = `${res._id}-${field}`
+ newRows.push(res._id)
+ await fetch.refresh()
+ }
+
+ const getSortedRows = (rows, newRows) => {
+ let sortedRows = rows.slice()
+ sortedRows.sort((a, b) => {
+ const aIndex = newRows.indexOf(a._id)
+ const bIndex = newRows.indexOf(b._id)
+ return aIndex < bIndex ? -1 : 1
+ })
+ return sortedRows
+ }
@@ -185,7 +204,12 @@
{/if}