UNPKG

@ovine/core

Version:

Build flexible admin system with json.

61 lines (60 loc) 2.33 kB
/** * lib-when 条件渲染器 * 用于不同条件,渲染不同组件的情况 */ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; import { Renderer } from 'amis/lib/factory'; import { evalJS } from 'amis/lib/utils/tpl'; import { isFunction } from 'lodash'; import React from 'react'; let LibWhen = class LibWhen extends React.Component { render() { const { render, data, condition = '', cases, defaultCase, ifTrue, ifFalse } = this.props; let schema = null; const getResult = (con, value, source) => { const result = isFunction(con) ? con(value, source) : con; if (typeof result === 'boolean') { return result; } if (result && typeof result === 'string') { return evalJS(result, source) === value; } return !!result; }; // with multi cases if (cases) { schema = cases.find((item) => { const { value, condition: itemCon } = item; // get schema by case item condition return getResult(itemCon || condition, value, data); }); // set defaultCase if (!schema && defaultCase) { schema = defaultCase; } } else if (ifTrue || ifFalse) { // with bool condition const result = getResult(condition, !!ifTrue, data); if (result && ifTrue) { schema = ifTrue; } if (!result && ifFalse) { schema = ifFalse; } } return !schema ? null : render('body', schema); } }; LibWhen = __decorate([ Renderer({ test: /(^|\/)lib-when$/, name: 'lib-when', }) ], LibWhen); export { LibWhen };