@dunite/au-react-wrapper
Version:
React wrappers for Aurelia
132 lines (131 loc) • 5.74 kB
JavaScript
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
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 * as React from 'react';
import * as ReactDom from 'react-dom';
import { inlineView, LogManager } from 'aurelia-framework';
import { ReactWrapper } from './ReactWrapper';
import { AuReactWrapperBase } from './AuReactWrapperBase';
// Den här filen har endast "ReactWrapper" som unik referens
var AuReactWrapper = /** @class */ (function (_super) {
__extends(AuReactWrapper, _super);
function AuReactWrapper(element, tq) {
var _this = _super.call(this, element, tq) || this;
_this.tq = tq;
//console.log("ctor AuReactWrapper")
_this.element = element;
_this.log = LogManager.getLogger('reacthost');
// this.log.info('DuReactWrapperBaseClass constructor');
_this.inneridAurelia = 'du' + Math.round(Math.random() * 10000000000000000);
return _this;
}
AuReactWrapper.prototype.unbind = function () {
if (this.element != null)
ReactDom.unmountComponentAtNode(this.container);
};
AuReactWrapper.prototype.propertyChanged = function (name, newValue) {
// console.log('AuReactWrapper: propertyChanged');
// console.log(this);
var _this = this;
// console.log(`property ${name} changed to ${newValue}`);
if (name == this.hiddenName) {
if (this.isHidden()) {
this.moveBack();
}
}
if (!this.ignoreReactUpdate) {
////console.log("update came from aurelia");
var obj = {};
obj[name] = newValue;
// line below is necessery
this.reactComponent.setState(obj);
}
this.tq.queueMicroTask(function () {
_this.ignoreReactUpdate = false;
});
return;
// if (name == this.hiddenName)
// {
// if ( this.hiddenIsHidden ? newValue : !newValue )
// {
// this.moveBack();
// }
// }
// console.log(this);
// //@ts-ignore
// if(this.changeState == false)
// {
// console.log("AuReactWrapper changeState == false");
// }
// else
// {
// console.log("AuReactWrapper changeState == true");
// //this.reactComponent.setState(obj);
// //this[name] = newValue;
// }
// this.reactComponent.setState(obj);
// //@ts-ignore
// this.changeState = true;
};
AuReactWrapper.prototype.moveBack = function () {
//console.log('moveBack AuReactWrapper');
var auelement = document.getElementById(this.inneridAurelia);
var oldParent = document.getElementById(this.reactComponent.inneridReact);
if (oldParent == null || auelement == null) {
return;
}
while (oldParent.childNodes.length > 0) {
auelement.appendChild(oldParent.childNodes[0]);
}
};
AuReactWrapper.prototype.renderReact = function (reactClass, a) {
//console.log('renderReact AuReactWrapper');
//ReactDom.unmountComponentAtNode(this.element);
this.container = this.element.querySelector('.au-react-root');
// if (this.container != null) {
// this.container.remove();
// }
// this.container = document.createElement('span');
// this.container.setAttribute('class', 'au-react-root');
// this.element.appendChild(this.container);
if (this.container == null) {
this.container = document.createElement('span');
this.container.setAttribute('class', 'au-react-root');
this.element.appendChild(this.container);
}
a.aureliaHost = this;
a.reactClass = reactClass;
// reactElement is the DOM element;
var reactElement = React.createElement(ReactWrapper, a);
// reactComponent is THE React Component
var reactComponent = ReactDom.render(reactElement, this.container
// , () =>
// {
// console.log('DuReactWrapperBaseClass React callback render complete');
// }
);
this.reactComponent = reactComponent;
//console.log('renderReact complete AuReactWrapper');
};
AuReactWrapper = __decorate([
inlineView('<template><span id.bind="inneridAurelia" show.bind="!hidden"><slot></slot></span></template>')
], AuReactWrapper);
return AuReactWrapper;
}(AuReactWrapperBase));
export { AuReactWrapper };