Hi,
I am building an application to get data from a view and attempting to patch it back to the view. However, I haven't found any endpoints to do it. First, I want to check whether the view has a field. If it doesn't, I shall create a new field and patch my data to the view. Any help is highly appreciated.
I am using Nest.js Axios, and here is my code:
createField(baseId: string, tableId: string, field: string, token: string) {
console.log('creating field...');
// when I post, it gives me 422
const url = `https://api.airtable.com/v0/meta/bases/${baseId}/tables/${tableId}/fields`;
const headers = {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
};
const body = JSON.stringify({
fields: {
name: field,
type: 'singleLineText',
},
});
this.http.post(url, body, { headers }).subscribe(res => {
console.log(res);
});
}
And here is my code for patching the data:
patchAirtable(
promises: Array<any>,
baseId: string,
tableId: string,
viewId: string,
token: string,
) {
console.log('patching airtable...');
// patch one record
// TODO: patch multiple records
console.log(promises[0]);
const id: string = promises[0].id;
const field: string = promises[0].field;
const value: string = promises[0].value.toString();
const url = `https://api.airtable.com/v0/${baseId}/${tableId}/${id}`;
console.log(url);
const options = {
headers: {
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
records: [
{
id: id,
fields: {
[field]: value,
},
},
],
}),
};
// https://api.airtable.com/v0/${baseId}/${tableId}?view=${viewId}
this.getView(baseId, tableId, viewId, token).subscribe(res => {
console.log('checking field exist...');
console.log(res.data.records.map(record => record.fields));
const fields = res.data.records.map(record => record.fields);
if (Object.keys(fields).includes(field)) {
console.log('field exist, patching...');
this.http.patch(url, options).subscribe(res => {
console.log(res);
});
} else {
console.log('field not exist, creating...');
this.createField(baseId, tableId, field, token);
}
});
}