Browse Source

fix(gui): update rowMeta only when it's defined

Signed-off-by: Pranav C <pranavxc@gmail.com>
pull/4088/head
Pranav C 2 years ago
parent
commit
a9429cd059
  1. 2
      packages/nc-gui/components/smartsheet/Grid.vue
  2. 36
      packages/nc-gui/composables/useViewData.ts

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

@ -479,7 +479,7 @@ watch(
</div>
<span class="flex-1" />
<div v-if="!readOnly && !isLocked" class="nc-expand" :class="{ 'nc-comment': row.rowMeta?.commentCount }">
<a-spin class="!flex items-center" v-if="row.rowMeta.saving" />
<a-spin v-if="row.rowMeta.saving" class="!flex items-center" />
<template v-else>
<span
v-if="row.rowMeta?.commentCount"

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

@ -180,12 +180,12 @@ export function useViewData(
if ((!project?.value?.id || !meta.value?.id || !viewMeta.value?.id) && !isPublic.value) return
const response = !isPublic.value
? await api.dbViewRow.list('noco', project.value.id!, meta.value!.id!, viewMeta.value!.id!, {
...queryParams.value,
...params,
...(isUIAllowed('sortSync') ? {} : { sortArrJson: JSON.stringify(sorts.value) }),
...(isUIAllowed('filterSync') ? {} : { filterArrJson: JSON.stringify(nestedFilters.value) }),
where: where?.value,
})
...queryParams.value,
...params,
...(isUIAllowed('sortSync') ? {} : { sortArrJson: JSON.stringify(sorts.value) }),
...(isUIAllowed('filterSync') ? {} : { filterArrJson: JSON.stringify(nestedFilters.value) }),
where: where?.value,
})
: await fetchSharedViewData({ sortsArr: sorts.value, filtersArr: nestedFilters.value })
formattedData.value = formatData(response.list)
paginationData.value = response.pageInfo
@ -204,9 +204,12 @@ export function useViewData(
row: Record<string, any>,
rowIndex = formattedData.value?.length,
ltarState: Record<string, any> = {},
{ metaValue = meta.value, viewMetaValue = viewMeta.value }: { metaValue?: TableType; viewMetaValue?: ViewType } = {},
{
metaValue = meta.value,
viewMetaValue = viewMeta.value,
}: { metaValue?: TableType; viewMetaValue?: ViewType } = {},
) {
formattedData.value[rowIndex].rowMeta.saving = true
if (formattedData.value[rowIndex].rowMeta) formattedData.value[rowIndex].rowMeta.saving = true
try {
const { missingRequiredColumns, insertObj } = await populateInsertObject({
meta: metaValue!,
@ -227,7 +230,7 @@ export function useViewData(
Object.assign(formattedData.value[rowIndex], {
row: { ...insertedData, ...row },
rowMeta: { ...row.rowMeta, new: undefined },
rowMeta: { ...(row.rowMeta || {}), new: undefined },
oldRow: { ...insertedData },
})
@ -236,16 +239,19 @@ export function useViewData(
} catch (error: any) {
message.error(await extractSdkResponseErrorMsg(error))
} finally {
formattedData.value[rowIndex].rowMeta.saving = false
if (formattedData.value[rowIndex].rowMeta) formattedData.value[rowIndex].rowMeta.saving = false
}
}
async function updateRowProperty(
toUpdate: Row,
property: string,
{ metaValue = meta.value, viewMetaValue = viewMeta.value }: { metaValue?: TableType; viewMetaValue?: ViewType } = {},
{
metaValue = meta.value,
viewMetaValue = viewMeta.value,
}: { metaValue?: TableType; viewMetaValue?: ViewType } = {},
) {
toUpdate.rowMeta.saving = true
if (toUpdate.rowMeta) toUpdate.rowMeta.saving = true
try {
const id = extractPkFromRow(toUpdate.row, meta.value?.columns as ColumnType[])
@ -278,7 +284,7 @@ export function useViewData(
} catch (e: any) {
message.error(`${t('msg.error.rowUpdateFailed')} ${await extractSdkResponseErrorMsg(e)}`)
} finally {
toUpdate.rowMeta.saving = false
if (toUpdate.rowMeta) toUpdate.rowMeta.saving = false
}
}
@ -289,7 +295,7 @@ export function useViewData(
args: { metaValue?: TableType; viewMetaValue?: ViewType } = {},
) {
// if new row and save is in progress then wait until the save is complete
await until(() => !(row.rowMeta.new && row.rowMeta.saving)).toMatch((v) => v)
await until(() => !(row.rowMeta?.new && row.rowMeta?.saving)).toMatch((v) => v)
if (row.rowMeta.new) {
return await insertRow(row.row, formattedData.value.indexOf(row), ltarState, args)
@ -309,7 +315,7 @@ export function useViewData(
async function deleteRowById(id: string) {
if (!id) {
throw new Error("Delete not allowed for table which doesn't have primary Key")
throw new Error('Delete not allowed for table which doesn\'t have primary Key')
}
const res: any = await $api.dbViewRow.delete(

Loading…
Cancel
Save