@platform/ui.datagrid
Version:
Isolated tabular DataGrid.
122 lines (121 loc) • 4.89 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.DataGridOverlay = void 0;
var tslib_1 = require("tslib");
var React = require("react");
var rxjs_1 = require("rxjs");
var operators_1 = require("rxjs/operators");
var common_1 = require("../common");
var CSS = common_1.constants.CSS;
var DataGridOverlay = (function (_super) {
(0, tslib_1.__extends)(DataGridOverlay, _super);
function DataGridOverlay() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.state = {};
_this.state$ = new rxjs_1.Subject();
_this.unmounted$ = new rxjs_1.Subject();
return _this;
}
DataGridOverlay.prototype.componentDidMount = function () {
var _this = this;
var grid = this.props.grid;
this.state$.pipe((0, operators_1.takeUntil)(this.unmounted$)).subscribe(function (e) { return _this.setState(e); });
var events$ = grid.events$.pipe((0, operators_1.takeUntil)(this.unmounted$));
var command$ = events$.pipe((0, operators_1.filter)(function (e) { return e.type === 'GRID/command'; }), (0, operators_1.map)(function (e) { return e.payload; }));
command$
.pipe((0, operators_1.filter)(function (e) { return e.command === 'OVERLAY/show'; }), (0, operators_1.map)(function (e) { return e; }), (0, operators_1.filter)(function (e) { return !common_1.R.equals(e.props.screen, _this.state.screen); }))
.subscribe(function (e) {
var key = e.props.cell;
var screen = e.props.screen;
if (key && screen) {
_this.show({ key: key, screen: screen });
}
});
command$
.pipe((0, operators_1.filter)(function (e) { return e.command === 'OVERLAY/hide'; }), (0, operators_1.filter)(function () { return _this.isShowing; }))
.subscribe(function (e) { return _this.hide(); });
};
DataGridOverlay.prototype.componentWillUnmount = function () {
this.unmounted$.next();
this.unmounted$.complete();
};
Object.defineProperty(DataGridOverlay.prototype, "isShowing", {
get: function () {
return Boolean(this.state.screen);
},
enumerable: false,
configurable: true
});
Object.defineProperty(DataGridOverlay.prototype, "key", {
get: function () {
return this.state.key;
},
enumerable: false,
configurable: true
});
Object.defineProperty(DataGridOverlay.prototype, "data", {
get: function () {
return this.getData(this.key);
},
enumerable: false,
configurable: true
});
Object.defineProperty(DataGridOverlay.prototype, "request", {
get: function () {
var screen = this.state.screen;
var key = this.key;
var data = this.data;
if (!screen || !data || !key) {
return undefined;
}
else {
var props = common_1.util.toGridCellProps(data.props);
var view = props.view;
var req = {
type: 'SCREEN',
grid: this.props.grid,
cell: { key: key, data: data, props: props },
view: view,
};
return req;
}
},
enumerable: false,
configurable: true
});
DataGridOverlay.prototype.getData = function (key) {
return this.props.grid.data.cells[key] || {};
};
DataGridOverlay.prototype.show = function (args) {
var key = args.key, screen = args.screen, Provider = args.Provider;
this.state$.next({ key: key, screen: screen, Provider: Provider });
};
DataGridOverlay.prototype.hide = function () {
this.state$.next({
key: undefined,
screen: undefined,
Provider: undefined,
});
};
DataGridOverlay.prototype.render = function () {
var req = this.request;
var _a = this.state, screen = _a.screen, Provider = _a.Provider;
var factory = this.props.factory;
if (!req || !screen || !Provider) {
return null;
}
var styles = {
base: (0, common_1.css)({
Absolute: 0,
display: 'flex',
backgroundColor: 'rgba(0, 0, 0, 0)',
zIndex: 9999,
}),
};
var className = CSS.CLASS.SCREEN.BASE + " " + (screen.className || '');
return (React.createElement("div", (0, tslib_1.__assign)({}, (0, common_1.css)(styles.base, this.props.style), { className: className }),
React.createElement(Provider, null, factory(req))));
};
return DataGridOverlay;
}(React.PureComponent));
exports.DataGridOverlay = DataGridOverlay;