@luka-cat-mimi/n8n-nodes-feishu-project
Version:
飞书项目 N8N 集成插件,支持附件管理等功能
184 lines • 7.09 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const RequestUtils_1 = __importDefault(require("../../../help/utils/RequestUtils"));
const description_1 = require("../../../help/description");
const ViewListOperate = {
name: '获取视图列表及配置信息',
value: 'view:list',
order: 10,
options: [
description_1.DESCRIPTIONS.PROJECT_KEY,
{
displayName: 'Return All',
name: 'returnAll',
type: 'boolean',
default: false,
description: 'Whether to return all results or only up to a given limit',
},
{
displayName: 'Limit',
name: 'limit',
type: 'number',
default: 50,
typeOptions: {
minValue: 1,
},
displayOptions: {
show: {
returnAll: [false],
},
},
description: 'Max number of results to return',
},
{
displayName: 'Options',
name: 'options',
type: 'collection',
placeholder: 'Add option',
default: {},
options: [
{
displayName: '工作项类型 Name or ID',
name: 'work_item_type_key',
type: 'options',
default: '',
description: '空间下工作项类型,需要先选择空间,详见:<a href="https://project.feishu.cn/b/helpcenter/2.0.0/1p8d7djs/3pjp854w">获取空间下工作项类型</a>. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
typeOptions: {
loadOptionsMethod: 'loadWorkItemTypes',
},
},
{
displayName: 'View IDs',
name: 'view_ids',
type: 'string',
default: '',
description: '视图ID列表,多个用逗号分隔',
},
{
displayName: 'Created By',
name: 'created_by',
type: 'string',
default: '',
description: '创建人',
},
{
displayName: 'Created At Start',
name: 'created_at_start',
type: 'dateTime',
default: '',
description: '创建时间起始',
},
{
displayName: 'Created At End',
name: 'created_at_end',
type: 'dateTime',
default: '',
description: '创建时间截止',
},
{
displayName: 'View Name',
name: 'view_name',
type: 'string',
default: '',
description: '视图名称(支持模糊搜索)',
},
{
displayName: 'Timeout',
name: 'timeout',
type: 'number',
default: 10000,
description: '请求超时时间(毫秒)',
},
],
},
],
async call(index) {
const project_key = this.getNodeParameter('project_key', index, '', {
extractValue: true,
});
const returnAll = this.getNodeParameter('returnAll', index, false);
const limit = this.getNodeParameter('limit', index, 50);
const options = this.getNodeParameter('options', index, {});
const toTimestamp = (value) => {
if (value === undefined || value === '' || value === null)
return undefined;
if (typeof value === 'number')
return value;
if (/^\d+$/.test(value))
return parseInt(value, 10);
const date = new Date(value);
if (!isNaN(date.getTime()))
return date.getTime();
return undefined;
};
const baseBody = {};
if (options.work_item_type_key) {
baseBody.work_item_type_key = options.work_item_type_key;
}
if (options.view_ids) {
baseBody.view_ids = options.view_ids.split(',').map(s => s.trim()).filter(s => s);
}
if (options.created_by) {
baseBody.created_by = options.created_by;
}
if (options.view_name) {
baseBody.view_name = options.view_name;
}
if (options.created_at_start || options.created_at_end) {
const createdAt = {};
const startTs = toTimestamp(options.created_at_start);
const endTs = toTimestamp(options.created_at_end);
if (startTs !== undefined)
createdAt.start = startTs;
if (endTs !== undefined)
createdAt.end = endTs;
if (Object.keys(createdAt).length > 0)
baseBody.created_at = createdAt;
}
const fetchPage = async (pageNum, pageSize) => {
var _a;
const body = {
...baseBody,
page_num: pageNum,
page_size: pageSize,
};
const response = await RequestUtils_1.default.request.call(this, {
method: 'POST',
url: `/open_api/${project_key}/view_conf/list`,
body: body,
timeout: options.timeout,
});
return {
data: (response === null || response === void 0 ? void 0 : response.data) || [],
total: ((_a = response === null || response === void 0 ? void 0 : response.pagination) === null || _a === void 0 ? void 0 : _a.total) || 0,
};
};
if (returnAll) {
let allResults = [];
let pageNum = 1;
const pageSize = 50;
while (true) {
const { data, total } = await fetchPage(pageNum, pageSize);
allResults = allResults.concat(data);
if (allResults.length >= total || data.length === 0 || pageNum >= 1000) {
if (pageNum >= 1000) {
this.logger.warn('已达到最大分页数限制(1000页),停止获取');
}
break;
}
pageNum++;
}
return allResults;
}
else {
const pageSize = Math.min(limit, 50);
const { data } = await fetchPage(1, pageSize);
return data.slice(0, limit);
}
}
};
exports.default = ViewListOperate;
//# sourceMappingURL=ViewListOperate.js.map