UNPKG

n8n-nodes-smartsuite

Version:
132 lines 5.55 kB
"use strict"; // src/nodes/SmartSuite/methods/listSearch.ts Object.defineProperty(exports, "__esModule", { value: true }); exports.listSearch = exports.searchTableFieldsMutable = exports.searchTableFields = exports.tableSearch = exports.solutionSearch = void 0; const utils_1 = require("../helpers/utils"); const smartSuiteApi_1 = require("../transport/smartSuiteApi"); const cache_1 = require("../helpers/cache"); // Helper to map fields for resourceLocator (supports description property) const serializeField = (f) => ({ name: `${f.label} (${f.field_type})`, value: f.slug, description: `Type: ${f.field_type}`, }); const solutionSearch = async function (filter = '') { const all = []; let offset = 0; const limit = 100; while (true) { const resp = (await smartSuiteApi_1.apiRequest.call(this, 'GET', '/solutions/', {}, { limit, offset })); const page = Array.isArray(resp) ? resp : resp.results || []; if (!page.length) break; all.push(...page); if (page.length < limit) break; offset += limit; } const filtered = all.filter((s) => !filter || s.name.toLowerCase().includes(filter.toLowerCase())); const results = filtered .sort((a, b) => a.name.localeCompare(b.name)) .map((s) => ({ name: s.name, value: s.id })); return { results }; }; exports.solutionSearch = solutionSearch; const tableSearch = async function (filter = '') { const solutionId = (0, utils_1.asIdString)(this.getNodeParameter('solutionId', 0)); if (!solutionId) return { results: [] }; const resp = (await smartSuiteApi_1.apiRequest.call(this, 'GET', `/applications/?solution=${solutionId}`)); const filtered = resp.filter((t) => !filter || t.name.toLowerCase().includes(filter.toLowerCase())); const results = filtered .sort((a, b) => a.name.localeCompare(b.name)) .map((t) => ({ name: t.name, value: t.id })); return { results }; }; exports.tableSearch = tableSearch; const searchTableFields = async function (filter = '') { const tableId = (0, utils_1.asIdString)(this.getNodeParameter('tableId', 0)); if (!tableId) return { results: [] }; // Try to get solution ID for more specific caching let solutionId = ''; try { solutionId = (0, utils_1.asIdString)(this.getNodeParameter('solutionId', 0)) || ''; } catch { // Solution ID might not be available in all contexts } // Generate cache key const cacheKey = (0, cache_1.generateFieldsCacheKey)(solutionId || 'unknown', tableId); // Check cache first const cachedStructure = (0, cache_1.getCache)(cacheKey); let structure = []; if (cachedStructure) { // Use cached data structure = cachedStructure; } else { // Fetch from API if not cached const response = (await smartSuiteApi_1.apiRequest.call(this, 'GET', `/applications/${tableId}/`)); structure = response.structure || []; // Cache the structure for future use if (structure.length > 0) { (0, cache_1.setCache)(cacheKey, structure); } } const filtered = structure.filter((f) => !filter || f.label.toLowerCase().includes(filter.toLowerCase()) || f.slug.toLowerCase().includes(filter.toLowerCase())); const results = filtered.map(serializeField); return { results }; }; exports.searchTableFields = searchTableFields; const searchTableFieldsMutable = async function (filter = '') { const tableId = (0, utils_1.asIdString)(this.getNodeParameter('tableId', 0)); if (!tableId) return { results: [] }; // Try to get solution ID for more specific caching let solutionId = ''; try { solutionId = (0, utils_1.asIdString)(this.getNodeParameter('solutionId', 0)) || ''; } catch { // Solution ID might not be available in all contexts } // Generate cache key with 'mutable' suffix to differentiate from regular fields const cacheKey = (0, cache_1.generateFieldsCacheKey)(solutionId || 'unknown', tableId, 'mutable'); // Check cache first const cachedStructure = (0, cache_1.getCache)(cacheKey); let structure = []; if (cachedStructure) { // Use cached data structure = cachedStructure; } else { // Fetch from API if not cached const response = (await smartSuiteApi_1.apiRequest.call(this, 'GET', `/applications/${tableId}/`)); structure = response.structure || []; // Cache the structure for future use if (structure.length > 0) { (0, cache_1.setCache)(cacheKey, structure); } } // Exclude reserved fields const withoutReserved = structure.filter((f) => !(0, utils_1.isReservedField)(f.slug)); // Exclude record ID fields const withoutRecordId = withoutReserved.filter((f) => f.field_type !== 'recordidfield'); // Apply search filter const filtered = withoutRecordId.filter((f) => !filter || f.label.toLowerCase().includes(filter.toLowerCase()) || f.slug.toLowerCase().includes(filter.toLowerCase())); const results = filtered.map(serializeField); return { results }; }; exports.searchTableFieldsMutable = searchTableFieldsMutable; exports.listSearch = { solutionSearch: exports.solutionSearch, tableSearch: exports.tableSearch, searchTableFields: exports.searchTableFields, searchTableFieldsMutable: exports.searchTableFieldsMutable, }; //# sourceMappingURL=listSearch.js.map