Add query support to people:getAll - Google Contacts (#2552)

* Add query support to people:getAll

*  Fix typo
This commit is contained in:
Ricardo Espinoza 2021-12-11 11:00:47 -05:00 committed by GitHub
parent 4adb9b83c5
commit 556e8e9417
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 64 additions and 5 deletions

View file

@ -887,6 +887,43 @@ export const contactFields: INodeProperties[] = [
default: '',
description: 'A field mask to restrict which fields on each person are returned. Multiple fields can be specified by separating them with commas.',
},
{
displayName: 'Use Query',
name: 'useQuery',
type: 'boolean',
displayOptions: {
show: {
operation: [
'getAll',
],
resource: [
'contact',
],
},
},
default: false,
description: `Whether or not to use a query to filter the results`,
},
{
displayName: 'Query',
name: 'query',
type: 'string',
displayOptions: {
show: {
operation: [
'getAll',
],
resource: [
'contact',
],
useQuery: [
true,
],
},
},
default: '',
description: `The plain-text query for the request. The query is used to match prefix phrases of the fields on a person. For example, a person with name "foo name" matches queries such as "f", "fo", "foo", "foo n", "nam", etc., but not "oo n".`,
},
{
displayName: 'RAW Data',
name: 'rawData',
@ -918,6 +955,9 @@ export const contactFields: INodeProperties[] = [
resource: [
'contact',
],
useQuery: [
false,
],
},
},
options: [

View file

@ -24,6 +24,7 @@ import {
} from './ContactDescription';
import * as moment from 'moment';
import { IData } from '../Analytics/Interfaces';
export class GoogleContacts implements INodeType {
description: INodeTypeDescription = {
@ -264,11 +265,19 @@ export class GoogleContacts implements INodeType {
responseData.contactId = responseData.resourceName.split('/')[1];
}
//https://developers.google.com/people/api/rest/v1/people.connections/list
//https://developers.google.com/people/api/rest/v1/people/searchContacts
if (operation === 'getAll') {
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
const fields = this.getNodeParameter('fields', i) as string[];
const options = this.getNodeParameter('options', i) as IDataObject;
const options = this.getNodeParameter('options', i, {}) as IDataObject;
const rawData = this.getNodeParameter('rawData', i) as boolean;
const useQuery = this.getNodeParameter('useQuery', i) as boolean;
const endpoint = (useQuery) ? ':searchContacts' : '/me/connections';
if (useQuery) {
qs.query = this.getNodeParameter('query', i) as string;
}
if (options.sortOrder) {
qs.sortOrder = options.sortOrder as number;
@ -280,25 +289,35 @@ export class GoogleContacts implements INodeType {
qs.personFields = (fields as string[]).join(',');
}
if (useQuery) {
qs.readMask = qs.personFields;
delete qs.personFields;
}
if (returnAll) {
responseData = await googleApiRequestAllItems.call(
this,
'connections',
(useQuery) ? 'results' : 'connections',
'GET',
`/people/me/connections`,
`/people${endpoint}`,
{},
qs,
);
if (useQuery) {
responseData = responseData.map((result: IDataObject) => result.person);
}
} else {
qs.pageSize = this.getNodeParameter('limit', i) as number;
responseData = await googleApiRequest.call(
this,
'GET',
`/people/me/connections`,
`/people${endpoint}`,
{},
qs,
);
responseData = responseData.connections;
responseData = responseData.connections || responseData.results.map((result: IDataObject) => result.person);
}
if (!rawData) {