UNPKG

n8n-nodes-smartsuite

Version:
133 lines 6.02 kB
"use strict"; 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