condition-builder 部分代码
This commit is contained in:
parent
69bcc57321
commit
a68a9c84d4
|
@ -0,0 +1,23 @@
|
||||||
|
import React from 'react';
|
||||||
|
import {ThemeProps, themeable} from '../../theme';
|
||||||
|
import {LocaleProps, localeable} from '../../locale';
|
||||||
|
import {uncontrollable} from 'uncontrollable';
|
||||||
|
import {FieldTypes, FieldItem} from './types';
|
||||||
|
|
||||||
|
export interface QueryBuilderProps extends ThemeProps, LocaleProps {
|
||||||
|
fields: Array<FieldItem>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class QueryBuilder extends React.Component<QueryBuilderProps> {
|
||||||
|
render() {
|
||||||
|
return <p>this is querybuilder component</p>;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default themeable(
|
||||||
|
localeable(
|
||||||
|
uncontrollable(QueryBuilder, {
|
||||||
|
value: 'onChange'
|
||||||
|
})
|
||||||
|
)
|
||||||
|
);
|
|
@ -0,0 +1,36 @@
|
||||||
|
import {FieldTypes, OperatorType, Funcs} from './types';
|
||||||
|
|
||||||
|
export interface BaseFieldConfig {
|
||||||
|
operations: Array<OperatorType>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Config {
|
||||||
|
funcs?: Funcs;
|
||||||
|
maxLevel?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
const defaultConfig: Config = {
|
||||||
|
// fields: [],
|
||||||
|
|
||||||
|
// 函数配置示例
|
||||||
|
funcs: [
|
||||||
|
// {
|
||||||
|
// label: '文本',
|
||||||
|
// children: [
|
||||||
|
// {
|
||||||
|
// type: 'LOWERCASE',
|
||||||
|
// label: '转小写',
|
||||||
|
// returnType: 'text',
|
||||||
|
// args: [
|
||||||
|
// {
|
||||||
|
// type: 'text',
|
||||||
|
// label: '文本',
|
||||||
|
// valueTypes: ['raw', 'field']
|
||||||
|
// }
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
// ]
|
||||||
|
// }
|
||||||
|
]
|
||||||
|
};
|
||||||
|
export default defaultConfig;
|
|
@ -0,0 +1,85 @@
|
||||||
|
type TypedMap<T> = {
|
||||||
|
[key: string]: T;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type FieldTypes = 'text' | 'number' | 'boolean' | 'date' | 'datetime';
|
||||||
|
|
||||||
|
export type OperatorType =
|
||||||
|
| 'equals'
|
||||||
|
| 'not_equals'
|
||||||
|
| 'less_than'
|
||||||
|
| 'less_than_or_equals';
|
||||||
|
|
||||||
|
export type FieldItem = {
|
||||||
|
type: 'text';
|
||||||
|
operators: Array<OperatorType>;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type ConditionRightValueLiteral = string | number | object | undefined;
|
||||||
|
export type ConditionRightValue =
|
||||||
|
| ConditionRightValueLiteral
|
||||||
|
| {
|
||||||
|
type: 'raw';
|
||||||
|
value: ConditionRightValueLiteral;
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
type: 'func';
|
||||||
|
func: string;
|
||||||
|
args: Array<ConditionRightValue>;
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
type: 'field';
|
||||||
|
field: string;
|
||||||
|
}
|
||||||
|
| {
|
||||||
|
type: 'expression';
|
||||||
|
field: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
export interface ConditionRule {
|
||||||
|
left: string;
|
||||||
|
op: OperatorType;
|
||||||
|
right: ConditionRightValue | Array<ConditionRightValue>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ConditionGroup {
|
||||||
|
conjunction: 'and' | 'or';
|
||||||
|
not?: boolean;
|
||||||
|
children?: Array<ConditionRule | ConditionGroup>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ConditionValue extends ConditionGroup {}
|
||||||
|
|
||||||
|
interface BaseField {
|
||||||
|
type: FieldTypes;
|
||||||
|
label: string;
|
||||||
|
valueTypes?: Array<'raw' | 'field' | 'func' | 'expression'>;
|
||||||
|
|
||||||
|
// valueTypes 里面配置 func 才有效。
|
||||||
|
funcs?: Array<string>;
|
||||||
|
|
||||||
|
defaultValue?: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface TextField extends BaseField {
|
||||||
|
type: 'text';
|
||||||
|
}
|
||||||
|
|
||||||
|
type Field = TextField;
|
||||||
|
|
||||||
|
interface FuncGroup {
|
||||||
|
label: string;
|
||||||
|
children: Array<Func>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface Func {
|
||||||
|
type: string;
|
||||||
|
returnType: FieldTypes;
|
||||||
|
args: Array<FuncArg>;
|
||||||
|
label: string;
|
||||||
|
}
|
||||||
|
export interface FuncArg extends BaseField {
|
||||||
|
isOptional?: boolean;
|
||||||
|
}
|
||||||
|
export type Funcs = Array<Func | FuncGroup>;
|
||||||
|
export type Fields = Array<Field>;
|
Loading…
Reference in New Issue