@tuanltntu/n8n-nodes-bitrix24
Version:
Comprehensive n8n community node for Bitrix24 API integration with CRM, Tasks, Chat, Telephony, and more
170 lines • 6.11 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MODULE_REGISTRY = exports.ModuleOperationsManager = void 0;
/**
* Smart Module Organization Manager
* Tổ chức modules hoàn toàn độc lập, không bị ảnh hưởng bởi nhau
*/
class ModuleOperationsManager {
/**
* Tạo namespace riêng biệt cho mỗi module để tránh xung đột hoàn toàn
*/
static createIsolatedModule(moduleName, operations) {
return operations.map((op) => {
var _a;
// Clone để tránh mutation
const isolatedOp = JSON.parse(JSON.stringify(op));
// Đảm bảo mỗi operation có namespace riêng
if (isolatedOp.name === "operation") {
// Tạo displayOptions cô lập hoàn toàn
isolatedOp.displayOptions = {
show: {
resource: [moduleName.toLowerCase()],
},
};
// Không sử dụng hide để tránh circular dependency
// Chỉ dựa vào show conditions duy nhất
}
// Đảm bảo tất cả fields khác cũng có namespace riêng
if ((_a = isolatedOp.displayOptions) === null || _a === void 0 ? void 0 : _a.show) {
if (!isolatedOp.displayOptions.show.resource) {
isolatedOp.displayOptions.show.resource = [moduleName.toLowerCase()];
}
}
return isolatedOp;
});
}
/**
* Tạo sub-resource operations (như crmActivityOperation)
* với namespace riêng biệt để tránh xung đột
*/
static createSubResourceOperations(parentResource, subResource, operations, operationName) {
return {
displayName: `${this.capitalize(subResource)} Operation`,
name: operationName,
type: "options",
noDataExpression: true,
displayOptions: {
show: {
resource: [parentResource.toLowerCase()],
[`${parentResource.toLowerCase()}Resource`]: [
subResource.toLowerCase(),
],
},
},
options: operations.map((op) => ({
name: this.capitalize(op),
value: op,
description: `${this.capitalize(op)} ${subResource}`,
action: `${this.capitalize(op)} a ${subResource}`,
})),
default: operations[0] || "get",
};
}
/**
* Tạo field với isolation hoàn toàn
*/
static createIsolatedField(fieldConfig, moduleName, additionalConditions = {}) {
const field = JSON.parse(JSON.stringify(fieldConfig));
// Đảm bảo displayOptions có namespace riêng
if (!field.displayOptions) {
field.displayOptions = {};
}
if (!field.displayOptions.show) {
field.displayOptions.show = {};
}
// Thêm resource condition
field.displayOptions.show.resource = [moduleName.toLowerCase()];
// Thêm các conditions khác
Object.assign(field.displayOptions.show, additionalConditions);
// Không sử dụng hide để tránh dependencies
if (field.displayOptions.hide) {
delete field.displayOptions.hide;
}
return field;
}
/**
* Tạo collection options cô lập
*/
static createIsolatedCollection(collectionName, moduleName, showConditions, options) {
return {
displayName: collectionName,
name: collectionName.toLowerCase().replace(/\s+/g, ""),
type: "collection",
placeholder: "Add Option",
default: {},
displayOptions: {
show: {
resource: [moduleName.toLowerCase()],
...showConditions,
},
},
options: options.map((opt) => {
// Đảm bảo các options con không có displayOptions để tránh nested dependencies
const cleanOpt = JSON.parse(JSON.stringify(opt));
if (cleanOpt.displayOptions) {
delete cleanOpt.displayOptions;
}
return cleanOpt;
}),
};
}
/**
* Utility function để capitalize strings
*/
static capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
/**
* Tạo resource selector với options riêng biệt
*/
static createResourceSelector(resources) {
var _a;
return {
displayName: "Resource",
name: "resource",
type: "options",
noDataExpression: true,
options: resources.map((resource) => ({
name: resource.name,
value: resource.value,
description: resource.description || `Work with ${resource.name}`,
})),
default: ((_a = resources[0]) === null || _a === void 0 ? void 0 : _a.value) || "crm",
};
}
}
exports.ModuleOperationsManager = ModuleOperationsManager;
/**
* Module Registry - đăng ký tất cả modules có sẵn
*/
exports.MODULE_REGISTRY = {
CRM: "crm",
TASK: "task",
CALENDAR: "calendar",
CHAT: "chat",
FILE: "file",
BIZPROC: "bizproc",
DISK: "disk",
DOCUMENT_GENERATOR: "documentGenerator",
EVENTS: "events",
LISTS: "lists",
MESSAGE_SERVICE: "messageService",
OPEN_LINES: "openLines",
SPA: "spa",
TELEPHONY: "telephony",
TIMELINE: "timeline",
USER_FIELD: "userField",
USER_FIELD_CONFIG: "userFieldConfig",
ACTIVITY: "activity",
AUTOMATION: "automation",
STATUS: "status",
PRODUCT: "product",
CATALOG: "catalog",
ENTITY: "entity",
CHATBOT: "chatbot",
DUPLICATE: "duplicate",
DIRECTAPI: "directapi",
USER: "user",
};
//# sourceMappingURL=ModuleOperationsManager.js.map