refactor(plugin-workflow): export client calculators registry (#816)
This commit is contained in:
parent
2e8d27bf42
commit
ce75ecdb2b
@ -10,54 +10,113 @@ import { instructions, useNodeContext } from "./nodes";
|
|||||||
import { useFlowContext } from "./WorkflowCanvas";
|
import { useFlowContext } from "./WorkflowCanvas";
|
||||||
import { triggers } from "./triggers";
|
import { triggers } from "./triggers";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { Registry } from "@nocobase/utils/client";
|
||||||
|
|
||||||
function NullRender() {
|
function NullRender() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const calculators = [
|
interface Calculator {
|
||||||
|
name: string;
|
||||||
|
group: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const calculators = new Registry<Calculator>();
|
||||||
|
|
||||||
|
calculators.register('equal', {
|
||||||
|
name: '=',
|
||||||
|
group: 'boolean',
|
||||||
|
});
|
||||||
|
calculators.register('notEqual', {
|
||||||
|
name: '≠',
|
||||||
|
group: 'boolean',
|
||||||
|
});
|
||||||
|
calculators.register('gt', {
|
||||||
|
name: '>',
|
||||||
|
group: 'boolean',
|
||||||
|
});
|
||||||
|
calculators.register('gte', {
|
||||||
|
name: '≥',
|
||||||
|
group: 'boolean',
|
||||||
|
});
|
||||||
|
calculators.register('lt', {
|
||||||
|
name: '<',
|
||||||
|
group: 'boolean',
|
||||||
|
});
|
||||||
|
calculators.register('lte', {
|
||||||
|
name: '≤',
|
||||||
|
group: 'boolean',
|
||||||
|
});
|
||||||
|
|
||||||
|
calculators.register('add', {
|
||||||
|
name: '+',
|
||||||
|
group: 'number',
|
||||||
|
});
|
||||||
|
calculators.register('minus', {
|
||||||
|
name: '-',
|
||||||
|
group: 'number',
|
||||||
|
});
|
||||||
|
calculators.register('multiple', {
|
||||||
|
name: '*',
|
||||||
|
group: 'number',
|
||||||
|
});
|
||||||
|
calculators.register('divide', {
|
||||||
|
name: '/',
|
||||||
|
group: 'number',
|
||||||
|
});
|
||||||
|
calculators.register('mod', {
|
||||||
|
name: '%',
|
||||||
|
group: 'number',
|
||||||
|
});
|
||||||
|
|
||||||
|
calculators.register('includes', {
|
||||||
|
name: '{{t("contains")}}',
|
||||||
|
group: 'string'
|
||||||
|
});
|
||||||
|
calculators.register('notIncludes', {
|
||||||
|
name: '{{t("does not contain")}}',
|
||||||
|
group: 'string'
|
||||||
|
});
|
||||||
|
calculators.register('startsWith', {
|
||||||
|
name: '{{t("starts with")}}',
|
||||||
|
group: 'string'
|
||||||
|
});
|
||||||
|
calculators.register('notStartsWith', {
|
||||||
|
name: '{{t("not starts with")}}',
|
||||||
|
group: 'string'
|
||||||
|
});
|
||||||
|
calculators.register('endsWith', {
|
||||||
|
name: '{{t("ends with")}}',
|
||||||
|
group: 'string'
|
||||||
|
});
|
||||||
|
calculators.register('notEndsWith', {
|
||||||
|
name: '{{t("not ends with")}}',
|
||||||
|
group: 'string'
|
||||||
|
});
|
||||||
|
|
||||||
|
const calculatorGroups = [
|
||||||
{
|
{
|
||||||
value: 'boolean',
|
value: 'boolean',
|
||||||
title: '{{t("Comparison")}}',
|
title: '{{t("Comparison")}}'
|
||||||
children: [
|
|
||||||
{ value: 'equal', name: '=' },
|
|
||||||
{ value: 'notEqual', name: '≠' },
|
|
||||||
{ value: 'gt', name: '>' },
|
|
||||||
{ value: 'gte', name: '≥' },
|
|
||||||
{ value: 'lt', name: '<' },
|
|
||||||
{ value: 'lte', name: '≤' }
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: 'number',
|
value: 'number',
|
||||||
title: '{{t("Arithmetic calculation")}}',
|
title: '{{t("Arithmetic calculation")}}'
|
||||||
children: [
|
|
||||||
{ value: 'add', name: '+' },
|
|
||||||
{ value: 'minus', name: '-' },
|
|
||||||
{ value: 'multiple', name: '*' },
|
|
||||||
{ value: 'divide', name: '/' },
|
|
||||||
{ value: 'mod', name: '%' },
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: 'string',
|
value: 'string',
|
||||||
title: '{{t("String operation")}}',
|
title: '{{t("String operation")}}'
|
||||||
children: [
|
|
||||||
{ value: 'includes', name: '{{t("contains")}}' },
|
|
||||||
{ value: 'notIncludes', name: '{{t("does not contain")}}' },
|
|
||||||
{ value: 'startsWith', name: '{{t("starts with")}}' },
|
|
||||||
{ value: 'notStartsWith', name: '{{t("not starts with")}}' },
|
|
||||||
{ value: 'endsWith', name: '{{t("ends with")}}' },
|
|
||||||
{ value: 'notEndsWith', name: '{{t("not ends with")}}' }
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: 'date',
|
value: 'date',
|
||||||
title: '{{t("Date")}}',
|
title: '{{t("Date")}}'
|
||||||
children: []
|
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
function getGroupCalculators(group) {
|
||||||
|
return Array.from(calculators.getEntities()).filter(([key, value]) => value.group === group);
|
||||||
|
}
|
||||||
|
|
||||||
const JT_VALUE_RE = /^\s*\{\{([\s\S]*)\}\}\s*$/;
|
const JT_VALUE_RE = /^\s*\{\{([\s\S]*)\}\}\s*$/;
|
||||||
|
|
||||||
export function parseStringValue(value: string, Types) {
|
export function parseStringValue(value: string, Types) {
|
||||||
@ -320,10 +379,10 @@ export function Calculation({ calculator, operands = [], onChange }) {
|
|||||||
onChange={v => onChange({ operands, calculator: v })}
|
onChange={v => onChange({ operands, calculator: v })}
|
||||||
placeholder={t('Calculator')}
|
placeholder={t('Calculator')}
|
||||||
>
|
>
|
||||||
{calculators.map(group => (
|
{calculatorGroups.map(group => (
|
||||||
<Select.OptGroup key={group.value} label={compile(group.title)}>
|
<Select.OptGroup key={group.value} label={compile(group.title)}>
|
||||||
{group.children.map(item => (
|
{getGroupCalculators(group.value).map(([value, { name }]) => (
|
||||||
<Select.Option key={item.value} value={item.value}>{compile(item.name)}</Select.Option>
|
<Select.Option key={value} value={value}>{compile(name)}</Select.Option>
|
||||||
))}
|
))}
|
||||||
</Select.OptGroup>
|
</Select.OptGroup>
|
||||||
))}
|
))}
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
export { triggers } from './triggers';
|
export { triggers } from './triggers';
|
||||||
export * from './nodes';
|
export * from './nodes';
|
||||||
|
export { calculators } from './calculators';
|
||||||
export { WorkflowProvider as default } from './WorkflowProvider';
|
export { WorkflowProvider as default } from './WorkflowProvider';
|
||||||
|
Loading…
Reference in New Issue
Block a user