n8n-nodes-smartsuite
Version:
n8n community node for SmartSuite
133 lines • 6.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.loadOptions = void 0;
exports.getOperations = getOperations;
exports.getTableFields = getTableFields;
exports.getMutableTableFields = getMutableTableFields;
exports.getFilterOptionsForFieldType = getFilterOptionsForFieldType;
exports.searchTableFields = searchTableFields;
exports.searchTableFieldsMutable = searchTableFieldsMutable;
const smartSuiteApi_1 = require("../transport/smartSuiteApi");
const utils_1 = require("../helpers/utils");
const getFilterOptions_1 = require("../helpers/getFilterOptions");
const listSearch_1 = require("./listSearch");
/**
* 1) Operations picker
*/
async function getOperations() {
(0, utils_1.debugLog)('[LoadOptions] getOperations called', this.getNodeParameter('resource'), 2);
const resource = this.getNodeParameter('resource', 'record');
const map = {
record: [
{ name: 'Search Records', value: 'searchRecord', action: 'Search Records' },
{ name: 'Get Record', value: 'getRecord', action: 'Get Record' },
{ name: 'List Records', value: 'listRecord', action: 'List Records' },
{ name: 'Create Record', value: 'createRecord', action: 'Create Record' },
{ name: 'Update Record', value: 'updateRecord', action: 'Update Record' },
{ name: 'Delete Record', value: 'deleteRecord', action: 'Delete Record' },
{ name: 'Upsert Record', value: 'upsertRecord', action: 'Upsert Record' },
],
table: [
{ name: 'List Tables', value: 'listTable', action: 'List Tables' },
{ name: 'Get Table', value: 'getTable', action: 'Get Table' },
{ name: 'Create Table', value: 'createTable', action: 'Create Table' },
{ name: 'Create Table Field', value: 'createTableField', action: 'Create Table Field' },
],
solution: [
{ name: 'List Solutions', value: 'listSolution', action: 'List Solutions' },
{ name: 'Get Solution', value: 'getSolution', action: 'Get Solution' },
],
orgManagement: [
{ name: 'List Members', value: 'listMembers', action: 'List Members' },
{ name: 'List Teams', value: 'listTeams', action: 'List Teams' },
{ name: 'Get Current User', value: 'getCurrentUser', action: 'Get Current User' },
],
};
return map[resource] ?? [];
}
// Cache each table's structure so we only fetch it once per editor session
const tableStructureCache = new Map();
/**
* 2) Load ALL table fields (including reserved and record-ID fields)
*/
async function getTableFields() {
(0, utils_1.debugLog)('[LoadOptions] getTableFields called', undefined, 2);
const { results } = await listSearch_1.searchTableFields.call(this);
(0, utils_1.debugLog)('[LoadOptions] getTableFields raw', results, 2);
return results.map(({ name, value }) => ({ name: String(name), value: String(value) }));
}
/**
* 3) Load only mutable table fields (exclude reserved and record-ID fields)
*/
async function getMutableTableFields() {
(0, utils_1.debugLog)('[LoadOptions] getMutableTableFields called', undefined, 2);
const { results } = await listSearch_1.searchTableFieldsMutable.call(this);
(0, utils_1.debugLog)('[LoadOptions] getMutableTableFields raw', results, 2);
const filtered = results.filter((f) => !(0, utils_1.isReservedField)(String(f.value)) &&
!(f.description ?? '').toLowerCase().includes('recordidfield'));
(0, utils_1.debugLog)('[LoadOptions] getMutableTableFields filtered', filtered, 2);
return filtered.map(({ name, value }) => ({ name: String(name), value: String(value) }));
}
/**
* 4) Get filter operators for a given field type (supports upsert and search)
*/
async function getFilterOptionsForFieldType() {
// Determine operation context
const operation = this.getNodeParameter('operation');
let rawField;
if (operation === 'upsertRecord') {
rawField = this.getCurrentNodeParameter('matchingField');
}
else {
rawField = this.getCurrentNodeParameter('filters.filter[0].field');
}
(0, utils_1.debugLog)('[LoadOptions] getFilterOptionsForFieldType called', { operation, rawField }, 2);
let slug = '';
if (rawField &&
typeof rawField === 'object' &&
'value' in rawField) {
slug = (0, utils_1.asIdString)(rawField.value);
}
else if (typeof rawField === 'string') {
slug = (0, utils_1.asIdString)(rawField);
}
if (!slug)
return [];
const tableId = (0, utils_1.asIdString)(this.getNodeParameter('tableId', 0));
if (!tableId)
return [];
(0, utils_1.debugLog)('[LoadOptions] getFilterOptionsForFieldType slug', slug, 2);
let structure = tableStructureCache.get(tableId);
if (!structure) {
const resp = (await smartSuiteApi_1.apiRequest.call(this, 'GET', `/applications/${tableId}/`));
structure = resp.structure || [];
tableStructureCache.set(tableId, structure);
}
const def = structure.find((f) => f.slug === slug);
const ops = def ? getFilterOptions_1.filterOptionsByFieldType[def.field_type] : [];
(0, utils_1.debugLog)('[LoadOptions] getFilterOptionsForFieldType ops', ops, 2);
return ops.map((op) => ({
name: op.replace(/_/g, ' ').replace(/\b\w/g, (l) => l.toUpperCase()),
value: op,
}));
}
/**
* 5) Dynamic search methods
*/
async function searchTableFields() {
(0, utils_1.debugLog)('[LoadOptions] searchTableFields called', undefined, 2);
return getTableFields.call(this);
}
async function searchTableFieldsMutable() {
(0, utils_1.debugLog)('[LoadOptions] searchTableFieldsMutable called', undefined, 2);
return getMutableTableFields.call(this);
}
exports.loadOptions = {
getOperations,
getTableFields,
getMutableTableFields,
getFilterOptionsForFieldType,
searchTableFields,
searchTableFieldsMutable,
};
//# sourceMappingURL=loadOptions.js.map