UNPKG

4.48 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var tslib_1 = require("tslib");
4var util_1 = require("@antv/util");
5var wolfy87_eventemitter_1 = tslib_1.__importDefault(require("wolfy87-eventemitter"));
6var view_1 = require("./view");
7var constants_1 = tslib_1.__importDefault(require("./constants"));
8/**
9 * 数据集
10 * @public
11 */
12var DataSet = /** @class */ (function (_super) {
13 tslib_1.__extends(DataSet, _super);
14 /**
15 * @param initialProps - 初始状态
16 */
17 function DataSet(initialProps) {
18 if (initialProps === void 0) { initialProps = { state: {} }; }
19 var _this = _super.call(this) || this;
20 /**
21 * 否是 DataSet
22 */
23 _this.isDataSet = true;
24 _this._onChangeTimer = null;
25 /**
26 * 所有挂在数据集上的数据视图(key-value 对)
27 */
28 _this.views = {};
29 /**
30 * 存储数据集上的状态量(key-value 对)
31 */
32 _this.state = {};
33 // assign(me, initialProps);
34 _this.state = initialProps.state;
35 return _this;
36 }
37 /**
38 * 注册一个数据连接函数,注册后所有数据视图都可以使用 name 来引用这个数据连接函数,从而接入某种数据源。
39 * @param name - 类型
40 * @param connector - 解析逻辑
41 */
42 DataSet.registerConnector = function (name, connector) {
43 DataSet.connectors[name] = connector;
44 };
45 DataSet.getConnector = function (name) {
46 return DataSet.connectors[name] || DataSet.connectors.default;
47 };
48 /**
49 * 注册一个数据处理函数,注册后所有数据视图都可以使用 name 来引用这个数据处理函数,从而进行某种数据处理
50 * @param name - transform 类型
51 * @param transform - transform逻辑
52 */
53 DataSet.registerTransform = function (name, transform) {
54 DataSet.transforms[name] = transform;
55 };
56 DataSet.getTransform = function (name) {
57 return DataSet.transforms[name] || DataSet.transforms.default;
58 };
59 DataSet.prototype._getUniqueViewName = function () {
60 var name = util_1.uniqueId('view_');
61 while (this.views[name]) {
62 name = util_1.uniqueId('view_');
63 }
64 return name;
65 };
66 DataSet.prototype.createView = function (name, options) {
67 if (util_1.isNil(name)) {
68 name = this._getUniqueViewName();
69 }
70 if (util_1.isObject(name)) {
71 options = name;
72 name = this._getUniqueViewName();
73 }
74 if (this.views[name]) {
75 throw new Error("data view exists: " + name);
76 }
77 var view = new view_1.View(this, options);
78 this.views[name] = view;
79 return view;
80 };
81 /**
82 * 返回 name 对应的数据视图实例
83 * @param name - name
84 */
85 DataSet.prototype.getView = function (name) {
86 return this.views[name];
87 };
88 /**
89 * 设置 name 对应的数据视图实例为 dv
90 * @param name - 名称
91 * @param view - data view
92 */
93 DataSet.prototype.setView = function (name, view) {
94 this.views[name] = view;
95 };
96 /**
97 * 设置状态量 name 的值为 value
98 * @param name - 状态名
99 * @param value - 值
100 */
101 DataSet.prototype.setState = function (name, value) {
102 var _this = this;
103 this.state[name] = value;
104 if (this._onChangeTimer) {
105 window.clearTimeout(this._onChangeTimer);
106 this._onChangeTimer = null;
107 }
108 this._onChangeTimer = window.setTimeout(function () {
109 _this.emit('statechange', name, value);
110 }, 16); // execute after one frame
111 };
112 /**
113 * 常量,譬如 DataSet.CONSTANTS.HIERARCHY 是树形结构的名称
114 */
115 DataSet.CONSTANTS = constants_1.default;
116 /**
117 * 注册的 Connector(key-value 对)
118 */
119 DataSet.connectors = {};
120 /**
121 * 已注册的 Transform(key-value 对)
122 */
123 DataSet.transforms = {};
124 DataSet.DataSet = DataSet;
125 DataSet.DataView = view_1.View; // alias
126 DataSet.View = view_1.View;
127 DataSet.version = '____DATASET_VERSION____';
128 return DataSet;
129}(wolfy87_eventemitter_1.default));
130exports.DataSet = DataSet;
131// @ts-ignore
132util_1.assign(DataSet, constants_1.default);
133// @ts-ignore
134util_1.assign(DataSet.prototype, {
135 view: DataSet.prototype.createView,
136});
137view_1.View.DataSet = DataSet;