Skip to content

Commit

Permalink
✨ Add query support to people:getAll - Google Contacts (#2552)
Browse files Browse the repository at this point in the history
* Add query support to people:getAll

* ⚡ Fix typo
  • Loading branch information
RicardoE105 authored Dec 11, 2021
1 parent 4adb9b8 commit 556e8e9
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 5 deletions.
40 changes: 40 additions & 0 deletions packages/nodes-base/nodes/Google/Contacts/ContactDescription.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand Down Expand Up @@ -918,6 +955,9 @@ export const contactFields: INodeProperties[] = [
resource: [
'contact',
],
useQuery: [
false,
],
},
},
options: [
Expand Down
29 changes: 24 additions & 5 deletions packages/nodes-base/nodes/Google/Contacts/GoogleContacts.node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import {
} from './ContactDescription';

import * as moment from 'moment';
import { IData } from '../Analytics/Interfaces';

export class GoogleContacts implements INodeType {
description: INodeTypeDescription = {
Expand Down Expand Up @@ -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;
Expand All @@ -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) {
Expand Down

0 comments on commit 556e8e9

Please sign in to comment.