com.phloxui
Version:
PhloxUI Ng2+ Framework
1,028 lines (1,027 loc) • 103 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { EventEmitter, ViewChildren, QueryList } from '@angular/core';
import { AbstractI18NApplicable } from '../share/AbstractI18NApplicable';
import { Option } from '../decorator/decorators';
import { LOAD_EVENT } from '../share/CustomEventType';
import { EventUtils } from '../share/utils/EventUtils';
import { Preload } from '../directive/Preload.directive';
const /** @type {?} */ DEFAULT_IGNORE_PARENT_DATA = false;
const /** @type {?} */ DEFAULT_DELEGATE_HISTORY = true;
/**
* <p style="text-indent: 2em;">
* An abstract concrete base class of [[IHasData]] interface. All classes implementing [[IHasData]] interface should extend this class.
* For more information, please see [[IHasData]].
* </p>
*
* @author shiorin, tee4cute
* @see [[IHasData]]
* @abstract
*/
export class AbstractHasData extends AbstractI18NApplicable {
/**
* @param {?} elementRef
* @param {?=} kbShortcutService
*/
constructor(elementRef, kbShortcutService) {
super();
this.dataChildren = [];
this.histories = [];
this.historyCursor = -1;
this.elementRef = elementRef;
this._disabled = false;
this._loaded = false;
this._loading = false;
this.kbShortcutService = kbShortcutService;
this.loadingEnabled = true;
}
/**
* @return {?}
*/
get disabled() {
if (this.dataParent !== null && typeof this.dataParent !== 'undefined') {
let /** @type {?} */ parent = this.dataParent;
if (typeof parent.isDisabled === 'function' && !this.ignoreParentDisabled) {
return parent.isDisabled() || this._disabled;
}
}
return this._disabled;
}
/**
* @param {?} value
* @return {?}
*/
set disabled(value) {
// change dom css class
let /** @type {?} */ oldSelfDisabled = this._disabled;
this._disabled = value;
let /** @type {?} */ parentDisabled = false;
if (!this.ignoreParentDisabled && this.dataParent !== null && typeof this.dataParent !== 'undefined') {
// Has parent
let /** @type {?} */ parent = this.dataParent;
if (typeof parent.isDisabled === 'function') {
parentDisabled = parent.isDisabled();
}
}
let /** @type {?} */ oldDisabled = parentDisabled || oldSelfDisabled;
let /** @type {?} */ currentDisabled = parentDisabled || this._disabled;
if (oldDisabled !== currentDisabled) {
if (currentDisabled) {
this._propagateOnDisabled();
}
else {
this._propagateOnEnabled();
}
}
}
/**
* @return {?}
*/
ngOnInit() {
if (this.ignoreParentData === null || typeof this.ignoreParentData === 'undefined') {
this.ignoreParentData = DEFAULT_IGNORE_PARENT_DATA;
}
if (this.delegateHistory === null || typeof this.delegateHistory === 'undefined') {
this.delegateHistory = DEFAULT_DELEGATE_HISTORY;
}
if (this.data !== null && typeof this.data !== 'undefined') {
this.setData(this.data);
}
this.setDataParent(this.dataParent);
if (this.loadingEnabled) {
this.preload();
}
else {
this._loaded = true;
}
// auto regist shortcut key
if (this.kbShortcutService !== null && typeof this.kbShortcutService !== 'undefined') {
if (typeof this["getDefaultShortcutKeyHandlers"] === 'function') {
let /** @type {?} */ defaultKeys = this['getDefaultShortcutKeyHandlers'].call(this);
if (defaultKeys !== null && typeof defaultKeys !== 'undefined') {
for (let /** @type {?} */ shortcut of defaultKeys) {
this.kbShortcutService.addKeyHandler(shortcut);
}
}
}
if (typeof this["getDefaultShortcutNameHandlers"] === 'function') {
let /** @type {?} */ defaultNames = this["getDefaultShortcutNameHandlers"].call(this);
if (defaultNames !== null && typeof defaultNames !== 'undefined') {
for (let /** @type {?} */ shortcut of defaultNames) {
this.kbShortcutService.addNameHandler(shortcut);
}
}
}
}
// Auto call selfSaveData() on inited.
this.selfSaveData(this.data);
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
if (changes['data'] !== null && typeof changes['data'] !== 'undefined') {
let /** @type {?} */ newVal = changes['data'].currentValue;
this.setData(newVal);
}
if (changes['dataParent'] !== null && typeof changes['dataParent'] !== 'undefined') {
let /** @type {?} */ newVal = changes['dataParent'].currentValue;
this.setDataParent(newVal);
}
}
/**
* @return {?}
*/
ngOnDestroy() {
// auto unregist shortcut key
if (this.kbShortcutService !== null && typeof this.kbShortcutService !== 'undefined') {
if (typeof this["getDefaultShortcutKeyHandlers"] === 'function') {
let /** @type {?} */ defaultKeys = this['getDefaultShortcutKeyHandlers'].call(this);
for (let /** @type {?} */ shortcut of defaultKeys) {
this.kbShortcutService.removeKeyHandler(shortcut);
}
}
if (typeof this["getDefaultShortcutNameHandlers"] === 'function') {
let /** @type {?} */ defaultNames = this["getDefaultShortcutNameHandlers"].call(this);
for (let /** @type {?} */ shortcut of defaultNames) {
this.kbShortcutService.removeNameHandler(shortcut);
}
}
}
}
/**
* @return {?}
*/
_propagateOnDisabled() {
// Firstly, call this.onDisabled(this).
if (this.onDisabled !== null && typeof this.onDisabled === 'function') {
this.onDisabled(this);
}
// Auto add css class "disabled" to this native element.
if (this.elementRef !== null && typeof this.elementRef !== 'undefined') {
let /** @type {?} */ hasClass = $(this.elementRef.nativeElement).hasClass("disabled");
if (!hasClass) {
$(this.elementRef.nativeElement).addClass("disabled");
}
}
// Then, propagate method call to children & descendants.
if (this.dataChildren !== null) {
for (let /** @type {?} */ c of this.dataChildren) {
let /** @type {?} */ child = /** @type {?} */ (c);
let /** @type {?} */ ignore = false;
if (typeof child.isIgnoreParentDisabled === 'function') {
ignore = child.isIgnoreParentDisabled();
}
if (ignore) {
// If this child ignore parent's disabled, do nothing.
continue;
}
let /** @type {?} */ childSelfDisabled = false;
if (typeof child.isSelfDisabled === 'function') {
childSelfDisabled = child.isSelfDisabled();
}
if (!childSelfDisabled) {
// If the child itself was not disabled before, but, this parent is going to be disabled,
// we'll propagate onDisabled to this child and its descendants.
// So, child._propagateOnDisabled() must be called.
if (typeof child._propagateOnDisabled === 'function') {
child._propagateOnDisabled();
}
}
}
}
}
/**
* @return {?}
*/
_propagateOnEnabled() {
// Firstly, call this.onEnabled(this).
if (this.onEnabled !== null && typeof this.onEnabled === 'function') {
this.onEnabled(this);
}
// Auto remove css class "disabled" from this native element.
if (this.elementRef !== null && typeof this.elementRef !== 'undefined') {
let /** @type {?} */ hasClass = $(this.elementRef.nativeElement).hasClass("disabled");
if (hasClass) {
$(this.elementRef.nativeElement).removeClass("disabled");
}
}
// Then, propagate method call to children & descendants.
if (this.dataChildren !== null) {
for (let /** @type {?} */ c of this.dataChildren) {
let /** @type {?} */ child = /** @type {?} */ (c);
let /** @type {?} */ ignore = false;
if (typeof child.isIgnoreParentDisabled === 'function') {
ignore = child.isIgnoreParentDisabled();
}
if (ignore) {
// If this child ignore parent's disabled, do nothing.
continue;
}
let /** @type {?} */ childSelfDisabled = false;
if (typeof child.isSelfDisabled === 'function') {
childSelfDisabled = child.isSelfDisabled();
}
if (!childSelfDisabled) {
// If the child itself was not disabled before, but, this parent is going to be enabled,
// we'll propagate onEnabled to this child and its descendants.
// So, child._propagateOnEnabled() must be called.
if (typeof child._propagateOnEnabled === 'function') {
child._propagateOnEnabled();
}
}
}
}
}
/**
* @param {?} first
* @param {?=} component
* @param {?=} name
* @return {?}
*/
_makeHistory(first, component, name) {
if (this.isDelegateHistory() && this.dataParent !== null && typeof this.dataParent !== 'undefined') {
if (typeof this.dataParent['makeHistory'] === 'function') {
let /** @type {?} */ comp = component;
if ((comp === null || typeof comp === 'undefined') && typeof this['getCurrentHistoryState'] === 'function') {
comp = this;
}
return (/** @type {?} */ (this.dataParent)).makeHistory(comp, name);
}
}
if (!first) {
if (this.histories.length <= 0) {
throw new Error('The method "makeFirstHistory()" should be called at the first time before calling subsequent "makeHistory()".');
}
}
else {
if (this.histories.length > 0) {
throw new Error('The method "makeFirstHistory()" can be called once.');
}
}
if (component === null || typeof component === 'undefined') {
component = /** @type {?} */ (this);
}
if (typeof component.getCurrentHistoryState !== 'function') {
throw new Error('The "component" is not an instance of IHistoryManaged: ' + component.constructor.name);
}
let /** @type {?} */ state = JSON.parse(JSON.stringify(component.getCurrentHistoryState()));
let /** @type {?} */ history = {
component: component,
name: name,
state: state
};
this.histories.splice(this.historyCursor + 1, this.histories.length - this.historyCursor - 1, history);
this.historyCursor = this.histories.length - 1;
return history;
}
/**
* @return {?}
*/
getData() {
return this.data;
}
/**
* @return {?}
*/
getChainData() {
return this.data;
}
/**
* @return {?}
*/
chainData() {
if (this.dataChildren !== null) {
let /** @type {?} */ cData = this.getChainData();
for (let /** @type {?} */ c of this.dataChildren) {
if (c.isIgnoreParentData()) {
continue;
}
c.setData(cData);
}
}
}
/**
* @param {?} data
* @return {?}
*/
setData(data) {
this.data = data;
this.chainData();
}
/**
* @param {?} child
* @return {?}
*/
addDataChild(child) {
if (this.dataChildren !== null) {
this.dataChildren.push(child);
// Auto set data from parent to child if it has no data.
if (child.getData() === undefined && !child.isIgnoreParentData()) {
let /** @type {?} */ cData = this.getChainData();
child.setData(cData);
}
// Auto propagate disabled flag to child if this parent is disabled.
if (this.isDisabled() && typeof child['setDisabled'] === 'function') {
let /** @type {?} */ ignore = false;
if (typeof child['isIgnoreParentDisabled'] === 'function') {
ignore = (/** @type {?} */ (child)).isIgnoreParentDisabled();
}
if (!ignore) {
(/** @type {?} */ (child)).setDisabled(this.isDisabled());
}
}
let /** @type {?} */ i18nChild = child;
if (typeof this.i18nValue !== 'undefined' && typeof i18nChild.applyI18N === 'function') {
let /** @type {?} */ value = this.i18nValue;
if (value === null) {
i18nChild.applyI18N(null);
}
else if (typeof value.children !== 'undefined') {
let /** @type {?} */ bypass = false;
if (typeof i18nChild.isBypassKey === 'function') {
bypass = i18nChild.isBypassKey();
}
if (bypass) {
i18nChild.applyI18N(value.children);
}
else {
if (value.children === null) {
i18nChild.applyI18N(null);
}
else {
if (typeof i18nChild.getI18NKey === 'function') {
let /** @type {?} */ i18nCVal = value.children[i18nChild.getI18NKey()];
if (i18nCVal !== 'undefined') {
i18nChild.applyI18N(i18nCVal);
}
}
}
}
}
}
}
}
/**
* @param {?} child
* @return {?}
*/
removeDataChild(child) {
if (this.dataChildren !== null) {
let /** @type {?} */ cIndex = this.dataChildren.indexOf(child);
if (cIndex > -1) {
this.dataChildren.splice(cIndex, 1);
}
}
}
/**
* @param {?} dataParent
* @return {?}
*/
setDataParent(dataParent) {
if (this.dataParent !== null && typeof this.dataParent !== 'undefined') {
if (typeof this.dataParent.removeDataChild === 'function') {
this.dataParent.removeDataChild(this);
}
}
this.dataParent = dataParent;
if (this.dataParent !== null && typeof this.dataParent !== 'undefined') {
if (typeof this.dataParent.addDataChild === 'function') {
this.dataParent.addDataChild(this);
}
}
}
/**
* @return {?}
*/
getDataParent() {
return this.dataParent;
}
/**
* @return {?}
*/
getDataChildren() {
return this.dataChildren;
}
/**
* @return {?}
*/
isDataDirty() {
if (this.dataChildren !== null) {
for (let /** @type {?} */ c of this.dataChildren) {
if (c.isDataDirty()) {
return true;
}
}
}
return this.isSelfDataDirty();
}
/**
* @param {?} ignore
* @return {?}
*/
setIgnoreParentData(ignore) {
this.ignoreParentData = ignore;
}
/**
* @return {?}
*/
isIgnoreParentData() {
return this.ignoreParentData;
}
/**
* @param {?} ignore
* @return {?}
*/
setIgnoreParentDisabled(ignore) {
this.ignoreParentDisabled = ignore;
}
/**
* @return {?}
*/
isIgnoreParentDisabled() {
return this.ignoreParentDisabled;
}
/**
* @param {?=} data
* @return {?}
*/
saveData(data) {
if (data === undefined) {
data = this.data;
}
if (this.dataChildren !== null) {
for (let /** @type {?} */ c of this.dataChildren) {
c.saveData(data);
}
}
this.selfSaveData(data);
}
/**
* @return {?}
*/
resetData() {
if (this.dataChildren !== null) {
for (let /** @type {?} */ c of this.dataChildren) {
c.resetData();
}
}
return this.selfResetData();
}
/**
* @param {?} value
* @return {?}
*/
applyI18N(value) {
if (typeof value === 'undefined') {
return;
}
super.applyI18N(value);
if (this.dataChildren !== null) {
for (let /** @type {?} */ c of this.dataChildren) {
let /** @type {?} */ child = /** @type {?} */ (c);
// check if child is applicable
if (typeof child.applyI18N === 'function') {
if (value === null) {
child.applyI18N(null);
}
else {
if (typeof value.children !== 'undefined') {
let /** @type {?} */ bypass = false;
if (typeof child.isBypassKey === 'function') {
bypass = child.isBypassKey();
}
if (bypass) {
child.applyI18N(value.children);
}
else {
if (value.children === null) {
child.applyI18N(null);
}
else {
if (typeof child.getI18NKey === 'function') {
let /** @type {?} */ i18nCVal = value.children[child.getI18NKey()];
if (i18nCVal !== 'undefined') {
child.applyI18N(i18nCVal);
}
}
}
}
}
}
}
}
}
}
/**
* @return {?}
*/
isDelegateHistory() {
return this.delegateHistory;
}
/**
* @param {?} delegate
* @return {?}
*/
setDelegateHistory(delegate) {
this.delegateHistory = delegate;
}
/**
* @return {?}
*/
getOnEnabled() {
return this.onEnabled;
}
/**
* @param {?} handler
* @return {?}
*/
setOnEnabled(handler) {
this.onEnabled = handler;
}
/**
* @return {?}
*/
getOnDisabled() {
return this.onDisabled;
}
/**
* @param {?} handler
* @return {?}
*/
setOnDisabled(handler) {
this.onDisabled = handler;
}
/**
* @return {?}
*/
getLoadEvent() {
return this.loadEvent;
}
/**
* @param {?} event
* @return {?}
*/
setLoadEvent(event) {
this.loadEvent = event;
}
/**
* @param {?=} component
* @param {?=} name
* @return {?}
*/
makeFirstHistory(component, name) {
return this._makeHistory(true, component, name);
}
/**
* @param {?=} component
* @param {?=} name
* @return {?}
*/
makeHistory(component, name) {
return this._makeHistory(false, component, name);
}
/**
* @param {?=} steps
* @return {?}
*/
undo(steps = 1) {
if (this.isDelegateHistory() && this.dataParent !== null && typeof this.dataParent !== 'undefined') {
if (typeof this.dataParent['undo'] === 'function') {
return (/** @type {?} */ (this.dataParent)).undo(steps);
}
}
if (steps === null || typeof steps !== 'number') {
steps = 1;
}
if (steps <= 0) {
steps = 1;
}
// We use "steps > this.historyCursor" instead of "this.historyCursor + 1"
// since we want to limit the first history should not be able to be undone.
if (steps > this.historyCursor) {
steps = this.historyCursor;
}
if (steps <= 0) {
// If no more history can be undone, return Promise<null>.
return Promise.resolve(null);
}
let /** @type {?} */ revertTo = this.histories[this.historyCursor - steps];
let /** @type {?} */ clonedState = JSON.parse(JSON.stringify(revertTo.state));
this.historyCursor = this.historyCursor - steps;
return revertTo.component.loadHistoryState(revertTo, clonedState).then(() => {
return revertTo;
});
}
/**
* @param {?=} steps
* @return {?}
*/
redo(steps = 1) {
if (this.isDelegateHistory() && this.dataParent !== null && typeof this.dataParent !== 'undefined') {
if (typeof this.dataParent['redo'] === 'function') {
return (/** @type {?} */ (this.dataParent)).redo(steps);
}
}
if (steps === null || typeof steps !== 'number') {
steps = 1;
}
if (steps <= 0) {
steps = 1;
}
if (steps > this.histories.length - this.historyCursor - 1) {
steps = this.histories.length - this.historyCursor - 1;
}
if (steps <= 0) {
// If no more history can be redone, return Promise<null>.
return Promise.resolve(null);
}
let /** @type {?} */ revertTo = this.histories[this.historyCursor + steps];
let /** @type {?} */ clonedState = JSON.parse(JSON.stringify(revertTo.state));
this.historyCursor = this.historyCursor + steps;
return revertTo.component.loadHistoryState(revertTo, clonedState).then(() => {
return revertTo;
});
}
/**
* @return {?}
*/
canUndo() {
if (this.isDelegateHistory() && this.dataParent !== null && typeof this.dataParent !== 'undefined') {
if (typeof this.dataParent['canUndo'] === 'function') {
return (/** @type {?} */ (this.dataParent)).canUndo();
}
}
// We use "this.historyCursor > 0" instead of "this.historyCursor > -1" here
// since we want to limit the first history should not be able to be undone.
return this.historyCursor > 0 && this.histories.length > 0;
}
/**
* @return {?}
*/
canRedo() {
if (this.isDelegateHistory() && this.dataParent !== null && typeof this.dataParent !== 'undefined') {
if (typeof this.dataParent['canRedo'] === 'function') {
return (/** @type {?} */ (this.dataParent)).canRedo();
}
}
return this.historyCursor < this.histories.length - 1;
}
/**
* @return {?}
*/
clearForwardHistories() {
if (this.isDelegateHistory() && this.dataParent !== null && typeof this.dataParent !== 'undefined') {
if (typeof this.dataParent['clearForwardHistories'] === 'function') {
return (/** @type {?} */ (this.dataParent)).clearForwardHistories();
}
}
let /** @type {?} */ re = this.histories.slice(this.historyCursor + 1, this.histories.length);
this.histories.splice(this.historyCursor + 1, this.histories.length - this.historyCursor - 1);
return re;
}
/**
* @return {?}
*/
clearBackwardHistories() {
if (this.isDelegateHistory() && this.dataParent !== null && typeof this.dataParent !== 'undefined') {
if (typeof this.dataParent['clearBackwardHistories'] === 'function') {
return (/** @type {?} */ (this.dataParent)).clearBackwardHistories();
}
}
let /** @type {?} */ re = this.histories.slice(0, this.historyCursor + 1);
this.histories.splice(0, this.historyCursor + 1);
if (this.histories.length > 0) {
this.historyCursor = 0;
}
else {
this.historyCursor = -1;
}
return re;
}
/**
* @return {?}
*/
clearHistories() {
if (this.isDelegateHistory() && this.dataParent !== null && typeof this.dataParent !== 'undefined') {
if (typeof this.dataParent['clearHistories'] === 'function') {
return (/** @type {?} */ (this.dataParent)).clearHistories();
}
}
let /** @type {?} */ re = this.histories;
this.histories = [];
this.historyCursor = -1;
return re;
}
/**
* @return {?}
*/
getHistories() {
if (this.isDelegateHistory() && this.dataParent !== null && typeof this.dataParent !== 'undefined') {
if (typeof this.dataParent['getHistories'] === 'function') {
return (/** @type {?} */ (this.dataParent)).getHistories();
}
}
return [].concat(this.histories);
}
/**
* @return {?}
*/
isDisabled() {
return this.disabled;
}
/**
* @param {?} disabled
* @return {?}
*/
setDisabled(disabled) {
// Auto propagate to children.
this.disabled = disabled;
}
/**
* @return {?}
*/
isSelfDisabled() {
return this._disabled;
}
/**
* @return {?}
*/
isLoadingEnabled() {
return this.loadingEnabled;
}
/**
* @param {?} success
* @param {?} resultOrError
* @return {?}
*/
loaded(success, resultOrError) {
if (this._loaded) {
// Prevent calling this method twice.
return;
}
this._loaded = true;
// Let sub class implement its own behavior.
try {
this.doLoaded(success, resultOrError);
}
catch (/** @type {?} */ e) {
console.error(e);
}
this.loadSuccess = success;
// Auto remove css class
// Should declare css class as static const
if (this.elementRef !== undefined && this.elementRef !== null) {
$(this.elementRef.nativeElement).removeClass("loading");
}
// emit event
let /** @type {?} */ data = {
success: success,
resultOrError: resultOrError
};
let /** @type {?} */ ev = EventUtils.newCustomEvent(LOAD_EVENT, this, data, null);
if (this.loadEvent !== null && this.loadEvent !== undefined) {
this.loadEvent.emit(ev);
}
}
/**
* @return {?}
*/
isLoading() {
return this._loading;
}
/**
* @return {?}
*/
isLoaded() {
return this._loaded;
}
/**
* @return {?}
*/
isLoadSuccess() {
return this.loadSuccess;
}
/**
* @return {?}
*/
getElementRef() {
return this.elementRef;
}
/**
* @return {?}
*/
selfValidateData() {
// The default implementation will return empty array.
// Sub class should override this method if necessary.
return [];
}
/**
* @return {?}
*/
validateData() {
let /** @type {?} */ results = this.selfValidateData();
if (results === null || typeof results === 'undefined' || !Array.isArray(results)) {
results = [];
}
// Chain this method to children & descendants.
if (this.dataChildren !== null && typeof this.dataChildren !== 'undefined') {
for (let /** @type {?} */ c of this.dataChildren) {
let /** @type {?} */ child = c;
if (typeof child.validateData === 'function') {
// Force set autoFocusOnError = false to children since we'll only do auto
// focus once when all results are obtained.
let /** @type {?} */ childResults = child.validateData(false);
if (childResults !== null && Array.isArray(childResults)) {
// Add all child's results into results.
results = results.concat(childResults);
}
}
}
}
return results;
}
/**
* @return {?}
*/
addPreloadDom() {
if (!this.preloadList) {
return;
}
this.preloadList.forEach((item, index, array) => {
item.show();
});
}
/**
* @return {?}
*/
removePreloadDom() {
if (!this.preloadList) {
return;
}
this.preloadList.forEach((item, index, array) => {
item.hide();
});
}
/**
* @return {?}
*/
preload() {
if (this._loading) {
// Prevent calling method twice
return;
}
// Set flag loading as "true"
this._loading = true;
// Unset the flag
this._loaded = false;
if (this.elementRef !== undefined && this.elementRef !== null) {
$(this.elementRef.nativeElement).addClass("loading");
}
this.addPreloadDom();
let /** @type {?} */ result = null;
try {
result = this.doPreload();
}
catch (/** @type {?} */ e) {
result = Promise.reject(e);
}
if (result === null || result === undefined || !(result instanceof Promise)) {
result = Promise.resolve(result);
}
return result.then((result) => {
this.loaded(true, result);
this.removePreloadDom();
// Unset flag loading as "false"
this._loading = false;
return Promise.resolve(result);
}).catch((error) => {
this.loaded(false, error);
this.removePreloadDom();
// Unset flag loading as "false"
this._loading = false;
return Promise.reject(error);
});
}
}
AbstractHasData.DEFAULT_IGNORE_PARENT_DATA = DEFAULT_IGNORE_PARENT_DATA;
AbstractHasData.DEFAULT_DELEGATE_HISTORY = DEFAULT_DELEGATE_HISTORY;
AbstractHasData.propDecorators = {
"preloadList": [{ type: ViewChildren, args: [Preload,] },],
};
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Object)
], AbstractHasData.prototype, "dataParent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], AbstractHasData.prototype, "ignoreParentData", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], AbstractHasData.prototype, "ignoreParentDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], AbstractHasData.prototype, "onDisabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Function)
], AbstractHasData.prototype, "onEnabled", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], AbstractHasData.prototype, "loadingEnabled", void 0);
tslib_1.__decorate([
Option('load'),
tslib_1.__metadata("design:type", EventEmitter)
], AbstractHasData.prototype, "loadEvent", void 0);
tslib_1.__decorate([
Option(),
tslib_1.__metadata("design:type", Boolean)
], AbstractHasData.prototype, "delegateHistory", void 0);
tslib_1.__decorate([
Option('disabled'),
tslib_1.__metadata("design:type", Boolean),
tslib_1.__metadata("design:paramtypes", [Boolean])
], AbstractHasData.prototype, "disabled", null);
function AbstractHasData_tsickle_Closure_declarations() {
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
AbstractHasData.propDecorators;
/** @type {?} */
AbstractHasData.DEFAULT_IGNORE_PARENT_DATA;
/** @type {?} */
AbstractHasData.DEFAULT_DELEGATE_HISTORY;
/** @type {?} */
AbstractHasData.prototype.dataParent;
/** @type {?} */
AbstractHasData.prototype.ignoreParentData;
/** @type {?} */
AbstractHasData.prototype.ignoreParentDisabled;
/** @type {?} */
AbstractHasData.prototype.onDisabled;
/** @type {?} */
AbstractHasData.prototype.onEnabled;
/** @type {?} */
AbstractHasData.prototype.loadingEnabled;
/** @type {?} */
AbstractHasData.prototype.loadEvent;
/** @type {?} */
AbstractHasData.prototype.delegateHistory;
/** @type {?} */
AbstractHasData.prototype.preloadList;
/** @type {?} */
AbstractHasData.prototype.historyCursor;
/** @type {?} */
AbstractHasData.prototype.histories;
/** @type {?} */
AbstractHasData.prototype.elementRef;
/** @type {?} */
AbstractHasData.prototype.dataChildren;
/** @type {?} */
AbstractHasData.prototype.data;
/** @type {?} */
AbstractHasData.prototype.kbShortcutService;
/** @type {?} */
AbstractHasData.prototype.loadSuccess;
/** @type {?} */
AbstractHasData.prototype._loading;
/** @type {?} */
AbstractHasData.prototype._loaded;
/** @type {?} */
AbstractHasData.prototype._disabled;
/**
* @abstract
* @return {?}
*/
AbstractHasData.prototype.doPreload = function () { };
/**
* @abstract
* @param {?} success
* @param {?} resultOrError
* @return {?}
*/
AbstractHasData.prototype.doLoaded = function (success, resultOrError) { };
/**
* @abstract
* @return {?}
*/
AbstractHasData.prototype.isSelfDataDirty = function () { };
/**
* @abstract
* @param {?} data
* @return {?}
*/
AbstractHasData.prototype.selfSaveData = function (data) { };
/**
* @abstract
* @return {?}
*/
AbstractHasData.prototype.selfResetData = function () { };
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RIYXNEYXRhLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L0Fic3RyYWN0SGFzRGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBNEMsWUFBWSxFQUFFLFlBQVksRUFBUyxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFRdkgsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFekUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBS2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXpELHVCQUFNLDBCQUEwQixHQUFZLEtBQUssQ0FBQztBQUNsRCx1QkFBTSx3QkFBd0IsR0FBWSxJQUFJLENBQUM7Ozs7Ozs7Ozs7O0FBVy9DLE1BQU0sc0JBQWdDLFNBQVEsc0JBQXNCOzs7OztJQStFbEUsWUFBWSxVQUFzQixFQUFFLGlCQUEyQztRQUM3RSxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO1FBQzNDLElBQUksQ0FB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