@flow-editor/render
Version:
Dawn数据流的React实现
74 lines (62 loc) • 3.46 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useDawnPath = useDawnPath;
var _dawn = require("@flow-editor/dawn");
var _use = require("@rc-hooks/use");
var _react = require("react");
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function useDawnPath(options) {
var scope = options.scope,
model = options.model,
config = options.config,
brick = options.brick,
_options$isArray = options.isArray,
isArray = _options$isArray === void 0 ? false : _options$isArray,
_options$renderConfig = options.renderConfig,
renderConfig = _options$renderConfig === void 0 ? {} : _options$renderConfig,
onUpdatingBrickInfo = options.onUpdatingBrickInfo;
var update = (0, _use.useUpdate)();
var pendingRef = (0, _react.useRef)([]);
var oldRef = (0, _react.useRef)(null);
var onUpdatingBrickInfoCallback = (0, _use.useRefCallback)(onUpdatingBrickInfo);
var _renderConfig$updateW = renderConfig.updateWhenLoading,
updateWhenLoading = _renderConfig$updateW === void 0 ? false : _renderConfig$updateW,
_renderConfig$updateW2 = renderConfig.updateWhenValidating,
updateWhenValidating = _renderConfig$updateW2 === void 0 ? false : _renderConfig$updateW2,
_renderConfig$updateU = renderConfig.updateUntilReady,
updateUntilReady = _renderConfig$updateU === void 0 ? false : _renderConfig$updateU;
var node = new _dawn.DawnNode(scope, config.props.fieldName, isArray);
(0, _react.useEffect)(function () {
var pending = pendingRef.current;
if (pending.length) {
pending.map(function (item) {
return item();
});
pending.length = 0;
}
});
return new _dawn.Path(_objectSpread({}, brick, {
model: model,
node: node,
brickConfig: config,
updateBrickInfo: function updateBrickInfo(instance) {
var old = oldRef.current;
if (!instance.ready && updateUntilReady || old !== null && instance.ready !== old.ready && !updateUntilReady || instance.loading && !updateWhenLoading || instance.validating && !updateWhenValidating) {
return Promise.resolve();
}
var pending = pendingRef.current;
oldRef.current = instance;
onUpdatingBrickInfoCallback(instance, old);
return new Promise(function (resolve) {
if (pending.length === 0) {
update();
}
pending.push(resolve);
});
}
}));
}