JQL 编辑器
这个软件包允许消费者制作高级的JQL编辑器组件,以便自动完成辅助编写和 验证 JQL 查询.
使用量
要制作编辑器,消费者必须配置 autocompleteProvider,它定义了用于
获取 JQL 字段、 函数和值 。 为了放松配置,我们还运送
@atlassianlabs/jql-editor-autocomplete-rest 软件包,将这些调用包包起来,并提供简单的钩子来代表
给Jira REST API的.
JQL 编辑器的最低配置如下:
import { useCallback } from 'react';
import { JQLEditorAsync as JQLEditor } from '@atlassianlabs/jql-editor';
import { useAutocompleteProvider } from '@atlassianlabs/jql-editor-autocomplete-rest';
const getInitialData = async (url: string) => {
const response = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ includeCollapsedFields: true })
});
const data = response.json();
return {
jqlFields: data.visibleFieldNames,
jqlFunctions: data.visibleFunctionNames,
};
};
const getSuggestions = async (url: string) => {
const response = await fetch(url);
return response.json();
};
const MyJQLEditor = () => {
const autocompleteProvider = useAutocompleteProvider('my-app', getInitialData, getSuggestions);
const onSearch = useCallback((jql: string) => {
// Do some action on search
}, []);
return (
<JQLEditor
analyticsSource={'my-app'}
query={''}
onSearch={onSearch}
autocompleteProvider={autocompleteProvider}
locale={"en"}
/>
);
};
对于应用程序开发者,请参考 @atlassianlabs/jql-editor-connect 财务报告和审定财务报表 @atlassianlabs/jql-editor-forge
软件包。 由Jira自动完成整合而来.
安装
yarn add @atlassianlabs/jql-editor
文档
搜索和编写 JQL
编辑器主要有两种使用案例:
- 通过 JQL 查询搜索
- 正在编写 JQL 查询
两者的关键区别在于,在作者 JQL 时,例如当 使用 JQL 编辑器作为窗体输入。 上面记录了搜索用例,这里我们将讨论作者.
正在撰写 JQL
隐藏搜索按钮既简单又不提供 onSearch 道具 (英语). 相反,你会想使用 onUpdate 哪个
当查询更新时会被触发.
默认情况下,编辑器会在用户按下搜索时自动显示任何语法错误. 没有搜索按钮 消费者需要设置错误才能手动显示.
import { useCallback, useMemo, useState } from 'react';
import { Jast, JQLParseError } from '@atlassianlabs/jql-ast';
import { JQLEditorAsync as JQLEditor, ExternalError } from '@atlassianlabs/jql-editor';
import debounce from 'lodash/debounce';
const MyJQLEditor = () => {
const [errors, setErrors] = useState<ExternalError[]>([]);
const debounceSetErrors = useMemo(() => {
// Update our errors after a 1 second debounce
return debounce((parseErrors: JQLParseError[]) => {
// Format JQL parse errors to be shown as custom error messages in the editor
const errorMessages: ExternalError[] = parseErrors.map(({ description }) => ({
message: description,
type: 'error',
}));
setErrors(errorMessages)
}, 1000);
}, [setErrors]);
const onUpdate = useCallback((jql: string, jast: Jast) => {
debounceSetErrors(jast.errors)
}, []);
return (
<JQLEditor
analyticsSource={'my-app'}
query={''}
onUpdate={onUpdate}
messages={errors}
autocompleteProvider={/* ... */}
locale={"en"}
/>
);
};
编辑器也可以使用相同的API显示警告和消息:
const [messages] = useState<ExternalMessage[]>([
{ type: 'error', message: `I'm an error message`} as ExternalError,
{ type: 'warning', message: `I'm a warning message`} as ExternalWarning,
{ type: 'info', message: `I'm an info message`} as ExternalInfo,
]);
return (
<JQLEditor
{/* ... */}
messages={messages}
/>
);
值得一提的是,信息是由优先权传递的 并且同时在UI上只能出现单一类型的消息.
因此在以上例子中,将只发布一个错误消息.
支助
对于在Atlassian以外的开发者寻求帮助或报告 问题, 请在社区论坛发表文章 我们将监测论坛,并重新将专题分配给适当的维护者.
许可证
版权(c) 2021-2022 阿特拉斯人等. Apache 2.0 许可证,见 自由主义 文档.