Skip to content

Commit

Permalink
✨ Support more than 25 record types
Browse files Browse the repository at this point in the history
  • Loading branch information
shunkosa committed Feb 19, 2024
1 parent f52b5a4 commit 6f2947c
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 25 deletions.
68 changes: 43 additions & 25 deletions src/services/salesforce/core.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ import { ASYNC_STORAGE_KEYS } from '../../constants';
import { logger } from '../../utility/logger';
import { DescribeLayoutResult, CompositeLayoutResponse, RecordDefaultsResponse } from '../../../src/types/metadata';
import { formatISOStringToAPIDate } from '../../utility/date';
import { sliceByNumber } from '../../utility';

const SALESFORCE_API_VERSION = 'v49.0';

const MAX_NUM_OF_OPERATION = 25;
/**
* @description Execute SOQL and return records
* @param query SOQL
Expand Down Expand Up @@ -109,19 +110,27 @@ export const describeLayouts = async (
recordTypeIds: Array<string>
): Promise<CompositeLayoutResponse> => {
const endPoint = (await buildEndpointUrl()) + '/composite';
const body = {
allOrNone: true,
compositeRequest: [],
};
for (const recordTypeId of recordTypeIds) {
body.compositeRequest.push({
method: 'GET',
referenceId: recordTypeId,
url: `/services/data/${SALESFORCE_API_VERSION}/sobjects/${sObjectType}/describe/layouts/${recordTypeId}`,
});
const recordTypeIdsBundle = sliceByNumber(recordTypeIds, MAX_NUM_OF_OPERATION);
let result: CompositeLayoutResponse;
for (const currentRecordTypeIds of recordTypeIdsBundle) {
const body = {
allOrNone: true,
compositeRequest: [],
};
for (const recordTypeId of currentRecordTypeIds) {
body.compositeRequest.push({
method: 'GET',
referenceId: recordTypeId,
url: `/services/data/${SALESFORCE_API_VERSION}/sobjects/${sObjectType}/describe/layouts/${recordTypeId}`,
});
}
const currentResult = await fetchRetriable({ endPoint, method: 'POST', body: JSON.stringify(body) });
if (!result) {
result = currentResult;
} else {
result.compositeResponse = result.compositeResponse.concat(currentResult.compositeResponse);
}
}

const result = await fetchRetriable({ endPoint, method: 'POST', body: JSON.stringify(body) });
return result;
};

Expand All @@ -132,19 +141,28 @@ export const describeLayouts = async (
*/
export const describeCompactLayouts = async (sObjectType: string, recordTypeIds: Array<string>) => {
const endPoint = (await buildEndpointUrl()) + '/composite';
const body = {
allOrNone: true,
compositeRequest: [],
};
for (const recordTypeId of recordTypeIds) {
body.compositeRequest.push({
method: 'GET',
referenceId: recordTypeId,
url: `/services/data/${SALESFORCE_API_VERSION}/sobjects/${sObjectType}/describe/compactLayouts/${recordTypeId}`,
});
const recordTypeIdsBundle = sliceByNumber(recordTypeIds, MAX_NUM_OF_OPERATION);
let result;
for (const currentRecordTypeIds of recordTypeIdsBundle) {
const body = {
allOrNone: true,
compositeRequest: [],
};
for (const recordTypeId of currentRecordTypeIds) {
body.compositeRequest.push({
method: 'GET',
referenceId: recordTypeId,
url: `/services/data/${SALESFORCE_API_VERSION}/sobjects/${sObjectType}/describe/compactLayouts/${recordTypeId}`,
});
}
const currentResult = await fetchRetriable({ endPoint, method: 'POST', body: JSON.stringify(body) });
if (!result) {
result = currentResult;
} else {
result.compositeResponse = result.compositeResponse.concat(currentResult.compositeResponse);
}
}

return await fetchRetriable({ endPoint, method: 'POST', body: JSON.stringify(body) });
return result;
};

/**
Expand Down
4 changes: 4 additions & 0 deletions src/utility/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,7 @@ export const validateEmail = email => {
export const toShortLocale = (locale: string) => {
return locale.includes('_') ? locale.split('_')[0] : locale;
};

export const sliceByNumber = (array, size) => {
return array.flatMap((_, i) => (i % size ? [] : [array.slice(i, i + size)]));
};

0 comments on commit 6f2947c

Please sign in to comment.