Skip to content

Commit

Permalink
fix(Google Sheets Node): Fix "Append or Update" on an empty sheet (#9175
Browse files Browse the repository at this point in the history
)

Co-authored-by: Michael Kret <michael.k@radency.com>
  • Loading branch information
elsmr and michael-radency authored Apr 23, 2024
1 parent f5ccb5f commit 29ee4fa
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import { fieldCannotBeDeleted, parseResourceMapperFieldName } from '@/utils/node
import { isResourceMapperValue } from '@/utils/typeGuards';
import { i18n as locale } from '@/plugins/i18n';
import { useNDVStore } from '@/stores/ndv.store';
import { useWorkflowsStore } from '@/stores/workflows.store';
type Props = {
parameter: INodeProperties;
Expand All @@ -32,6 +33,7 @@ type Props = {
const nodeTypesStore = useNodeTypesStore();
const ndvStore = useNDVStore();
const workflowsStore = useWorkflowsStore();
const props = withDefaults(defineProps<Props>(), {
teleported: true,
Expand Down Expand Up @@ -71,6 +73,16 @@ watch(
},
);
// Reload fields to map when node is executed
watch(
() => workflowsStore.getWorkflowExecution,
async (data) => {
if (data?.status === 'success' && state.paramValue.mappingMode === 'autoMapInputData') {
await initFetching(true);
}
},
);
onMounted(async () => {
if (props.node) {
state.parameterValues = {
Expand Down Expand Up @@ -199,9 +211,9 @@ const pluralFieldWord = computed<string>(() => {
);
});
async function initFetching(inlineLading = false): Promise<void> {
async function initFetching(inlineLoading = false): Promise<void> {
state.loadingError = false;
if (inlineLading) {
if (inlineLoading) {
state.refreshInProgress = true;
} else {
state.loading = true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -249,18 +249,23 @@ export async function execute(
}
}

const dataMode =
nodeVersion < 4
? (this.getNodeParameter('dataMode', 0) as string)
: (this.getNodeParameter('columns.mappingMode', 0) as string);

let columnNames: string[] = [];

const sheetData = await sheet.getData(sheetName, 'FORMATTED_VALUE');
const sheetData = (await sheet.getData(sheetName, 'FORMATTED_VALUE')) ?? [];

if (sheetData?.[headerRow] === undefined) {
if (!sheetData[headerRow] && dataMode !== 'autoMapInputData') {
throw new NodeOperationError(
this.getNode(),
`Could not retrieve the column names from row ${headerRow + 1}`,
);
}

columnNames = sheetData[headerRow];
columnNames = sheetData[headerRow] ?? [];

const newColumns = new Set<string>();

Expand All @@ -269,11 +274,6 @@ export async function execute(
? [this.getNodeParameter('columnToMatchOn', 0) as string]
: (this.getNodeParameter('columns.matchingColumns', 0) as string[]);

const dataMode =
nodeVersion < 4
? (this.getNodeParameter('dataMode', 0) as string)
: (this.getNodeParameter('columns.mappingMode', 0) as string);

// TODO: Add support for multiple columns to match on in the next overhaul
const keyIndex = columnNames.indexOf(columnsToMatchOn[0]);

Expand Down Expand Up @@ -379,6 +379,7 @@ export async function execute(
headerRow + 1,
);
columnNames = newColumnNames;
sheetData[headerRow] = newColumnNames;
newColumns.clear();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -476,7 +476,7 @@ export class GoogleSheet {

const keyIndex = columnNames.indexOf(indexKey);

if (keyIndex === -1) {
if (keyIndex === -1 && !upsert) {
throw new NodeOperationError(
this.executeFunctions.getNode(),
`Could not find column for key "${indexKey}"`,
Expand Down

0 comments on commit 29ee4fa

Please sign in to comment.