Browse Source

fix(gui): sync LTAR data on switching tab

Signed-off-by: Pranav C <pranavxc@gmail.com>
fix/save-rows-on-tab-switch
Pranav C 2 years ago
parent
commit
3bdcbb8e98
  1. 23
      packages/nc-gui/components/smartsheet/Grid.vue
  2. 4
      packages/nc-gui/components/smartsheet/Row.vue
  3. 2
      packages/nc-gui/composables/useViewData.ts

23
packages/nc-gui/components/smartsheet/Grid.vue

@ -324,19 +324,24 @@ const showContextMenu = (e: MouseEvent, target?: { row: number; col: number }) =
} }
} }
const rowRefs = $ref<any[]>()
onBeforeUnmount(async () => { onBeforeUnmount(async () => {
for (const row of data.value) { console.log(rowRefs)
if (row.rowMeta.new) { for (const [index, currentRow] of Object.entries(data.value)) {
await updateOrSaveRow(row, null) if (currentRow.rowMeta.new) {
row.rowMeta.changed = false const syncLTARRefs = rowRefs[index]!.syncLTARRefs
const savedRow = await updateOrSaveRow(currentRow, null)
await syncLTARRefs(savedRow)
currentRow.rowMeta.changed = false
continue continue
} }
if (row.rowMeta.changed) { if (currentRow.rowMeta.changed) {
row.rowMeta.changed = false currentRow.rowMeta.changed = false
for (const field of meta?.value.columns ?? []) { for (const field of meta?.value.columns ?? []) {
if (isVirtualCol(field)) continue if (isVirtualCol(field)) continue
if (row.row[field.title!] !== row.oldRow[field.title!]) { if (currentRow.row[field.title!] !== currentRow.oldRow[field.title!]) {
await updateOrSaveRow(row, field.title!) await updateOrSaveRow(currentRow, field.title!)
} }
} }
} }
@ -418,7 +423,7 @@ onBeforeUnmount(async () => {
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<SmartsheetRow v-for="(row, rowIndex) of data" :key="rowIndex" :row="row"> <SmartsheetRow ref="rowRefs" v-for="(row, rowIndex) of data" :key="rowIndex" :row="row">
<template #default="{ state }"> <template #default="{ state }">
<tr class="nc-grid-row"> <tr class="nc-grid-row">
<td key="row-index" class="caption nc-grid-cell pl-5 pr-1"> <td key="row-index" class="caption nc-grid-cell pl-5 pr-1">

4
packages/nc-gui/components/smartsheet/Row.vue

@ -33,6 +33,10 @@ reloadHook.on(() => {
}) })
provide(ReloadRowDataHookInj, reloadHook) provide(ReloadRowDataHookInj, reloadHook)
defineExpose({
syncLTARRefs
})
</script> </script>
<template> <template>

2
packages/nc-gui/composables/useViewData.ts

@ -256,7 +256,7 @@ export function useViewData(
async function updateOrSaveRow(row: Row, property: string) { async function updateOrSaveRow(row: Row, property: string) {
if (row.rowMeta.new) { if (row.rowMeta.new) {
await insertRow(row.row, formattedData.value.indexOf(row)) return await insertRow(row.row, formattedData.value.indexOf(row))
} else { } else {
await updateRowProperty(row, property) await updateRowProperty(row, property)
} }

Loading…
Cancel
Save