n8n-nodes-smartsuite
Version:
n8n community node for SmartSuite
132 lines • 5.55 kB
JavaScript
;
// 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