UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

995 lines (994 loc) 97.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { EventEmitter } from '@angular/core'; import { AbstractDataView } from './AbstractDataView'; import { Option } from '../../decorator/Option.decorator'; import { EventUtils } from '../../share/utils/EventUtils'; import { LANG_ADD_EVENT, LANG_REMOVE_EVENT, LANG_CLICK_EVENT, BEFORE_LANG_ADD_EVENT, BEFORE_LANG_REMOVE_EVENT, BEFORE_LANG_CLICK_EVENT } from '../../share/CustomEventType'; /** * <p style="text-indent: 2em;"> * An abstract base class for component providing <code>data lang selector</code> to the user. * </p> * * @author shiorin, tee4cute * @abstract */ export class AbstractDataLangSelector extends AbstractDataView { /** * @param {?} elementRef * @param {?} dialogService */ constructor(elementRef, dialogService) { super(elementRef); this.langClickEvent = new EventEmitter(); this.langAddEvent = new EventEmitter(); this.langRemoveEvent = new EventEmitter(); this.beforeLangClickEvent = new EventEmitter(); this.beforeLangAddEvent = new EventEmitter(); this.beforeLangRemoveEvent = new EventEmitter(); this.languageList = []; this.dataLangList = []; this.oldLangs = []; this.markCreatedLangs = []; this.dataObjects = []; this.selectedLang = null; this.defaultData = null; this.dialogService = dialogService; } /** * @return {?} */ ngOnInit() { super.ngOnInit(); this.defaultData = this.getDefaultData(); this.refreshLanguageList(); this.refreshDataLanguageList(); } /** * @param {?} langCode * @param {?=} objId * @return {?} */ isDataObjectsContainsLang(langCode, objId) { let /** @type {?} */ result = this.getDataObjectByLang(langCode, objId); if (result !== null && typeof result !== 'undefined') { return true; } return false; } /** * @param {?} langCode * @param {?=} objId * @return {?} */ getDataObjectByLang(langCode, objId) { let /** @type {?} */ objects = this.getDataObjects(); if (objects !== null && typeof objects !== 'undefined') { let /** @type {?} */ objIdFieldName = this.getObjectIdFieldName(); let /** @type {?} */ langFieldName = this.getLanguageFieldName(); if (langFieldName !== null) { for (let /** @type {?} */ d of objects) { let /** @type {?} */ langPass = false; if (d[langFieldName] === langCode) { langPass = true; } let /** @type {?} */ objIdPass = true; if (typeof objId !== 'undefined') { if (d[objIdFieldName] !== objId) { objIdPass = false; } } if (langPass && objIdPass) { return d; } } } } return null; } /** * @return {?} */ refreshDataLanguageList() { let /** @type {?} */ defaultObj = this.getDefaultData(); this.defaultData = defaultObj; // search for other lang let /** @type {?} */ langFieldName = this.getLanguageFieldName(); this.oldLangs = []; let /** @type {?} */ langProm = this.loadDataLanguageList(defaultObj); if (langProm !== null && typeof langProm !== 'undefined') { langProm.then((result) => { let /** @type {?} */ tempArray = []; if (result !== null && typeof result !== 'undefined') { if (Array.isArray(result)) { tempArray = result; } else { tempArray.push(result); } } // check contain let /** @type {?} */ langCode = []; for (let /** @type {?} */ lang of this.languageList) { langCode.push(lang.code); } let /** @type {?} */ isAdded = false; for (let /** @type {?} */ temp of tempArray) { let /** @type {?} */ tempCode = temp[langFieldName]; if (langCode.indexOf(tempCode) <= -1) { isAdded = true; this.languageList.push(this.parseLanguageButtonModel(tempCode)); } this.oldLangs.push(tempCode); } if (isAdded) { this.sortLanguageList(this.languageList); } this.dataLangList = []; for (let /** @type {?} */ i = 0; i < this.languageList.length; i++) { let /** @type {?} */ item = this.languageList[i]; let /** @type {?} */ matched = null; for (let /** @type {?} */ temp of tempArray) { if (item.code === temp[langFieldName]) { let /** @type {?} */ curData = this.getDataObjectByLang(item.code); if (curData === null) { matched = temp; } else { // get from old matched = curData; } break; } } this.dataLangList.push(matched); } }); } else { this.dataLangList = []; for (let /** @type {?} */ i = 0; i < this.languageList.length; i++) { this.dataLangList.push(null); } } } /** * @return {?} */ refreshLanguageList() { this.languageList = []; let /** @type {?} */ defaultLangs = this.getLanguageList(); if (defaultLangs !== null && typeof defaultLangs !== 'undefined' && Array.isArray(defaultLangs)) { for (let /** @type {?} */ lang of defaultLangs) { this.languageList.push(this.parseLanguageButtonModel(lang)); } } this.sortLanguageList(this.languageList); } /** * @param {?} objArray * @return {?} */ sortLanguageList(objArray) { if (objArray === null || typeof objArray === 'undefined') { return; } objArray.sort(function (obj1, obj2) { if ((obj1 === null || typeof obj1 === 'undefined') && (obj2 !== null && typeof obj2 !== 'undefined')) { return 1; } else if ((obj1 !== null && typeof obj1 !== 'undefined') && (obj2 === null || typeof obj2 === 'undefined')) { return -1; } else if ((obj1 === null || typeof obj1 === 'undefined') && (obj2 === null || typeof obj2 === 'undefined')) { return 0; } let /** @type {?} */ code1 = obj1.code; let /** @type {?} */ code2 = obj2.code; if ((code1 === null || typeof code1 === 'undefined') && (code2 !== null && typeof code2 !== 'undefined')) { return 1; } else if ((code1 !== null && typeof code1 !== 'undefined') && (code2 === null || typeof code2 === 'undefined')) { return -1; } else if ((code1 === null || typeof code1 === 'undefined') && (code2 === null || typeof code2 === 'undefined')) { return 0; } if (code1 < code2) { return -1; } else if (code1 > code2) { return 1; } return 0; }); } /** * @param {?} langModel * @return {?} */ langTabChange(langModel) { this.selectedLang = langModel; } /** * @param {?} code * @return {?} */ getLanguageIndex(code) { if (code !== null && typeof code !== 'undefined') { for (let /** @type {?} */ i = 0; i < this.languageList.length; i++) { let /** @type {?} */ lang = this.languageList[i]; if (lang.code === code) { return i; } } } return -1; } /** * @param {?} langCode * @return {?} */ createNewLang(langCode) { let /** @type {?} */ result = null; if (langCode !== null && typeof langCode !== 'undefined') { let /** @type {?} */ langFieldName = this.getLanguageFieldName(); let /** @type {?} */ index = this.getLanguageIndex(langCode); if (this.isLanguageHasData(langCode)) { // already has data in the lang if (index > -1 && index < this.dataLangList.length) { let /** @type {?} */ dataLang = this.dataLangList[index]; result = dataLang; } } else { // create empty data if (index > -1 && index < this.dataLangList.length) { let /** @type {?} */ cloneDefault = {}; let /** @type {?} */ defaultData = this.getDefaultData(); if (defaultData !== null && typeof defaultData !== 'undefined') { cloneDefault = JSON.parse(JSON.stringify(defaultData)); let /** @type {?} */ objIdFieldName = this.getObjectIdFieldName(); cloneDefault[objIdFieldName] = undefined; } cloneDefault[langFieldName] = langCode; // add lang this.dataLangList[index] = cloneDefault; result = cloneDefault; } } } return result; } /** * @param {?} langCode * @param {?=} $event * @param {?=} fireEvent * @return {?} */ createNewLangSelected(langCode, $event, fireEvent) { if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } return EventUtils.handleBrowserEvent(this, 'beforeLangAddEvent', $event, fireEvent, ($event) => { // doEvent let /** @type {?} */ result = this.createNewLang(langCode); if (result !== null && result !== undefined) { let /** @type {?} */ index = this.getLanguageIndex(langCode); if (index > -1 && index < this.languageList.length) { this.langTabChange(this.languageList[index]); } this.onLanguageAdded(result); } return result; }, ($event) => { // emitBeforeEvent this.emitBeforeLangAddEvent($event); }, ($event, result) => { // emitAfterEvent this.emitLangAddEvent(result, $event); }, ($event) => { // doPrevented }); } /** * @param {?} langCode * @return {?} */ removeLanguageData(langCode) { let /** @type {?} */ result = null; if (langCode !== null && typeof langCode !== 'undefined') { let /** @type {?} */ langFieldName = this.getLanguageFieldName(); if (this.isLanguageHasData(langCode)) { let /** @type {?} */ index = this.getLanguageIndex(langCode); let /** @type {?} */ changeToDefLang = false; // remove from datalanglist if (index > -1 && index < this.dataLangList.length) { let /** @type {?} */ removeItem = this.dataLangList[index]; result = removeItem; this.dataLangList[index] = null; if (this.selectedLang === this.languageList[index]) { changeToDefLang = true; } } if (changeToDefLang) { // set tab to default this.langTabChange(null); } } else { // no lang data } this.onLanguageRemoved(result); } return result; } /** * @param {?} langCode * @param {?=} $event * @param {?=} fireEvent * @return {?} */ removeLangSelected(langCode, $event, fireEvent) { if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } return EventUtils.handleBrowserEvent(this, 'beforeLangRemoveEvent', $event, fireEvent, ($event) => { // doEvent return this.removeLanguageData(langCode); }, ($event) => { // emitBeforeEvent this.emitBeforeLangRemoveEvent($event); }, ($event, result) => { // emitAfterEvent this.emitLangRemoveEvent(result, $event); }, ($event) => { // doPrevented }); } /** * @param {?} langModel * @param {?} index * @param {?=} $event * @return {?} */ emitBeforeLangClickEvent(langModel, index, $event) { let /** @type {?} */ data = { model: langModel, index: index }; let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_LANG_CLICK_EVENT, this, data, $event); this.beforeLangClickEvent.emit(ev); } /** * @param {?} langModel * @param {?} index * @param {?=} $event * @return {?} */ emitLangClickEvent(langModel, index, $event) { let /** @type {?} */ data = { model: langModel, index: index }; let /** @type {?} */ ev = EventUtils.newCustomEvent(LANG_CLICK_EVENT, this, data, $event); this.langClickEvent.emit(ev); } /** * @param {?=} $event * @return {?} */ emitBeforeLangAddEvent($event) { let /** @type {?} */ data = null; let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_LANG_ADD_EVENT, this, data, $event); this.beforeLangAddEvent.emit(ev); } /** * @param {?} result * @param {?=} $event * @return {?} */ emitLangAddEvent(result, $event) { let /** @type {?} */ data = result; let /** @type {?} */ ev = EventUtils.newCustomEvent(LANG_ADD_EVENT, this, data, $event); this.langAddEvent.emit(ev); } /** * @param {?=} $event * @return {?} */ emitBeforeLangRemoveEvent($event) { let /** @type {?} */ data = null; let /** @type {?} */ ev = EventUtils.newCustomEvent(BEFORE_LANG_REMOVE_EVENT, this, data, $event); this.beforeLangRemoveEvent.emit(ev); } /** * @param {?} result * @param {?=} $event * @return {?} */ emitLangRemoveEvent(result, $event) { let /** @type {?} */ data = result; let /** @type {?} */ ev = EventUtils.newCustomEvent(LANG_REMOVE_EVENT, this, data, $event); this.langRemoveEvent.emit(ev); } /** * @param {?} index * @return {?} */ _isSelectedLanguageByIndex(index) { if (typeof index !== 'undefined') { if (index !== null) { // find lang model if (index >= 0 && index < this.languageList.length) { return this.isSelectedLanguage(this.languageList[index]); } } else { return this.isSelectedLanguage(null); } } return false; } /** * @param {?} index * @return {?} */ _langHasDataByIndex(index) { if (index <= -1) { return false; } if (index < this.dataLangList.length) { let /** @type {?} */ value = this.dataLangList[index]; if (value !== null && typeof value !== 'undefined') { return true; } } return false; } /** * @param {?} index * @return {?} */ _isDataDirtyByIndex(index) { let /** @type {?} */ dataLang = null; if (index !== null && typeof index === 'number' && index > -1) { if (index < this.dataLangList.length) { dataLang = this.dataLangList[index]; } } let /** @type {?} */ isDirty = this.isDataLanguageDirty(dataLang); if (isDirty) { return true; } return false; } /** * @param {?} langModel * @return {?} */ _hasButtonIcon(langModel) { if (langModel !== null && typeof langModel !== 'undefined') { if (langModel.iconURL !== null && typeof langModel.iconURL !== 'undefined' && langModel.iconURL !== '') { return true; } } return false; } /** * @return {?} */ _getDataLangList() { return this.dataLangList; } /** * when new language was created this method will be called * @param {?} newLangData as any * @return {?} */ onLanguageAdded(newLangData) { if (this.controller !== null && typeof this.controller !== 'undefined') { this.controller.languageAdded(newLangData); } } /** * when language was removed this method will be called * @param {?} removedData * @return {?} */ onLanguageRemoved(removedData) { if (this.controller !== null && typeof this.controller !== 'undefined') { this.controller.languageRemoved(removedData); } } /** * @param {?} $event * @param {?} langModel * @param {?} index * @return {?} */ _LangModelBtnClick($event, langModel, index) { let /** @type {?} */ showDialog = true; if (langModel === null) { // default showDialog = false; } if (this._langHasDataByIndex(index)) { showDialog = false; } if (showDialog) { // asking to new tab let /** @type {?} */ prom = this.createNewLangWithConfirmDialog(langModel.code); return prom; } else { this.langTabChange(langModel); } return null; } /** * @param {?} $event * @param {?} langModel * @param {?} index * @param {?=} fireEvent * @return {?} */ onActionBtnClicked($event, langModel, index, fireEvent) { if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } EventUtils.handleBrowserEvent(this, 'beforeLangClickEvent', $event, fireEvent, ($event) => { // doEvent // This method can return a promise to emitAfterEvent // after promise is done. return this._LangModelBtnClick($event, langModel, index); }, ($event) => { // emitBeforeEvent this.emitBeforeLangClickEvent(langModel, index, $event); }, ($event) => { // emitAfterEvent this.emitLangClickEvent(langModel, index, $event); }, ($event) => { // doPrevented }); } /** * @param {?} langModel * @return {?} */ isSelectedLanguage(langModel) { if (typeof this.selectedLang !== 'undefined') { return this.selectedLang === langModel; } return false; } /** * @return {?} */ hasLanguage() { if (this.languageList !== null && typeof this.languageList !== 'undefined' && this.languageList.length > 0) { return true; } return false; } /** * @param {?} defaultData as any * @return {?} promise that return array of dataLang object */ loadDataLanguageList(defaultData) { if (this.controller !== null && typeof this.controller !== 'undefined') { return this.controller.loadDataLanguageList(defaultData); } return Promise.resolve(null); } /** * @return {?} any as object in pattern {iconURL: string, code: string, label: string} */ getLanguageList() { if (this.controller !== null && typeof this.controller !== 'undefined') { return this.controller.getLanguageList(); } return null; } /** * <p style="text-indent: 1em;"> * To check that the data bound to <code>this</code> component having the given language <code><b>code</b></code> or not. * </p> * * @param {?} code The language code to check. * * @return {?} <code>True</code> if there is the given language <code><b>code</b></code> in the <code>data</code>. Otherwise, * returns <code>false</code>. */ isLanguageHasData(code) { if (code !== null && typeof code !== 'undefined') { let /** @type {?} */ index = this.getLanguageIndex(code); return this._langHasDataByIndex(index); } return false; } /** * <p style="text-indent: 1em;"> * Create a new data lang by showing confirmation dialog first. If the given language code (<code><b>langCode</b></code>) already * exists in component data, this method will return a resolved <code>Promise</code> having result as data object of the * corresponding language. * </p> * * @param {?} langCode The language code to create. * * @param {?=} $event * @param {?=} fireEvent * @return {?} A <code>Promise</code> with result's value as in the following cases: <br/> * <ul> * <li>If [[DialogService]] is not available, returns <code>null</code>.</li> * <li>If the user clicks <code>NO</code> button, returns <code>null</code>.</li> * <li>If the given <code><b>langCode</b></code> already exists, returns data object of the corresponding language.</li> * <li>Otherwise, returns a newly created data object of the given language.</li> * </ul> */ createNewLangWithConfirmDialog(langCode, $event, fireEvent) { return new Promise((resolve, reject) => { if (this.dialogService === null || typeof this.dialogService === 'undefined') { resolve(null); return; } let /** @type {?} */ langFieldName = this.getLanguageFieldName(); this.dialogService.showConfirmDialog('Confirm Create Data', 'Do you want to Create data in new language ?', false).then((result) => { if (result == 1) { this.createNewLangSelected(langCode, $event, fireEvent).then((result) => { resolve(result); }).catch((error) => { reject(error); }); } else { // NO resolve(null); } }); }); } /** * <p style="text-indent: 1em;"> * Remove data lang by showing confirmation dialog first. If the given language code (<code><b>langCode</b></code>) does not * exist in component data, this method will return a resolved <code>Promise</code> having result as <code>null</code>. * </p> * * @param {?} langCode The language code to remove. * * @param {?=} $event * @param {?=} fireEvent * @return {?} A <code>Promise</code> with result's value as in the following cases: <br/> * <ul> * <li>If [[DialogService]] is not available, returns <code>null</code>.</li> * <li>If the user clicks <code>NO</code> button, returns <code>null</code>.</li> * <li>If the given <code><b>langCode</b></code> does not exist, returns <code>null</code>.</li> * <li>Otherwise, returns data object of the corresponding <code><b>langCode</b></code>.</li> * </ul> */ removeLangWithConfirmDialog(langCode, $event, fireEvent) { return new Promise((resolve, reject) => { if (this.dialogService === null || typeof this.dialogService === 'undefined') { resolve(null); return; } let /** @type {?} */ langFieldName = this.getLanguageFieldName(); this.dialogService.showConfirmDialog('Confirm Remove Data', 'Do you want to Remove ' + langCode + ' ?', false).then((result) => { if (result == 1) { this.removeLangSelected(langCode, $event, fireEvent).then((result) => { resolve(result); }).catch((error) => { reject(error); }); } else { // NO resolve(null); } }); }); } /** * <p style="text-indent: 1em;"> * Get output [[EventEmitter]] which will emit an event when lang button of <code>this</code> component is clicked. * </p> * @return {?} */ getLangClickEvent() { return this.langClickEvent; } /** * @param {?} event * @return {?} */ setLangClickEvent(event) { this.langClickEvent = event; } /** * @return {?} */ getLangAddEvent() { return this.langAddEvent; } /** * @param {?} event * @return {?} */ setLangAddEvent(event) { this.langAddEvent = event; } /** * @return {?} */ getLangRemoveEvent() { return this.langRemoveEvent; } /** * @param {?} event * @return {?} */ setLangRemoveEvent(event) { this.langRemoveEvent = event; } /** * @return {?} */ getBeforeLangClickEvent() { return this.beforeLangClickEvent; } /** * @param {?} event * @return {?} */ setBeforeLangClickEvent(event) { this.beforeLangClickEvent = event; } /** * @return {?} */ getBeforeLangAddEvent() { return this.beforeLangAddEvent; } /** * @param {?} event * @return {?} */ setBeforeLangAddEvent(event) { this.beforeLangAddEvent = event; } /** * @return {?} */ getBeforeLangRemoveEvent() { return this.beforeLangRemoveEvent; } /** * @param {?} event * @return {?} */ setBeforeLangRemoveEvent(event) { this.beforeLangRemoveEvent = event; } /** * @param {?} data * @return {?} */ setData(data) { super.setData(data); this.selectedLang = null; this.refreshDataLanguageList(); this.dataObjects = []; this.dataObjects.push(data); } /** * @return {?} */ isSelfDataDirty() { if (this.dataLangList !== null && typeof this.dataLangList !== 'undefined') { let /** @type {?} */ langFieldName = this.getLanguageFieldName(); let /** @type {?} */ objIdFieldName = this.getObjectIdFieldName(); let /** @type {?} */ newLangDirty = false; for (let /** @type {?} */ dataLang of this.dataLangList) { if (dataLang === null || typeof dataLang === 'undefined') { continue; } let /** @type {?} */ lang = dataLang[langFieldName]; let /** @type {?} */ objId = dataLang[objIdFieldName]; if (lang !== null && typeof lang !== 'undefined') { if (objId === null || typeof objId === 'undefined') { newLangDirty = true; break; } } let /** @type {?} */ isDirty = this.isDataLanguageDirty(dataLang); if (isDirty) { return true; } } if (newLangDirty) { return true; } } return false; } /** * * @return {?} */ getMergedLanguageList() { return this.languageList; } /** * @param {?} data * @return {?} */ selfSaveData(data) { } /** * @return {?} */ selfResetData() { } /** * @param {?} controller * @return {?} */ setController(controller) { this.controller = controller; } /** * @param {?} langCode * @return {?} */ isNew(langCode) { if (langCode !== null && typeof langCode !== 'undefined') { let /** @type {?} */ oldLangContsins = (this.oldLangs.indexOf(langCode) >= 0) ? true : false; let /** @type {?} */ markLangContsins = (this.markCreatedLangs.indexOf(langCode) >= 0) ? true : false; return !oldLangContsins && !markLangContsins; } else { // DefaultData let /** @type {?} */ defaultData = this.getDefaultData(); if (defaultData !== null && typeof defaultData !== 'undefined') { let /** @type {?} */ uuid = defaultData._uuid; if (uuid === null || typeof uuid === 'undefined') { return true; } } else { return true; } } return false; } /** * @param {?} langCode * @return {?} */ markLangAsCreated(langCode) { if (langCode === null || typeof langCode === 'undefined') { // DefaultData } let /** @type {?} */ index = this.markCreatedLangs.indexOf(langCode); if (index < 0) { this.markCreatedLangs.push(langCode); } } /** * @param {?} langCode * @return {?} */ unmarkLangAsCreated(langCode) { if (langCode === null || typeof langCode === 'undefined') { // DefaultData } let /** @type {?} */ index = this.markCreatedLangs.indexOf(langCode); if (index >= 0) { this.markCreatedLangs.splice(index, 1); } } /** * @return {?} */ doPreload() { return Promise.resolve(null); } /** * @return {?} */ doLoaded() { } /** * @return {?} any as one object. */ getDefaultData() { return this.getMappedData(); } /** * @return {?} */ getDataObjects() { return this.dataObjects; } } tslib_1.__decorate([ Option('langClick'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractDataLangSelector.prototype, "langClickEvent", void 0); tslib_1.__decorate([ Option('langAdd'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractDataLangSelector.prototype, "langAddEvent", void 0); tslib_1.__decorate([ Option('langRemove'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractDataLangSelector.prototype, "langRemoveEvent", void 0); tslib_1.__decorate([ Option('beforeLangClick'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractDataLangSelector.prototype, "beforeLangClickEvent", void 0); tslib_1.__decorate([ Option('beforeLangAdd'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractDataLangSelector.prototype, "beforeLangAddEvent", void 0); tslib_1.__decorate([ Option('beforeLangRemove'), tslib_1.__metadata("design:type", EventEmitter) ], AbstractDataLangSelector.prototype, "beforeLangRemoveEvent", void 0); function AbstractDataLangSelector_tsickle_Closure_declarations() { /** @type {?} */ AbstractDataLangSelector.prototype.oldLangs; /** @type {?} */ AbstractDataLangSelector.prototype.markCreatedLangs; /** @type {?} */ AbstractDataLangSelector.prototype.defaultData; /** @type {?} */ AbstractDataLangSelector.prototype.langClickEvent; /** @type {?} */ AbstractDataLangSelector.prototype.langAddEvent; /** @type {?} */ AbstractDataLangSelector.prototype.langRemoveEvent; /** @type {?} */ AbstractDataLangSelector.prototype.beforeLangClickEvent; /** @type {?} */ AbstractDataLangSelector.prototype.beforeLangAddEvent; /** @type {?} */ AbstractDataLangSelector.prototype.beforeLangRemoveEvent; /** @type {?} */ AbstractDataLangSelector.prototype.dialogService; /** @type {?} */ AbstractDataLangSelector.prototype.languageList; /** @type {?} */ AbstractDataLangSelector.prototype.selectedLang; /** @type {?} */ AbstractDataLangSelector.prototype.dataLangList; /** @type {?} */ AbstractDataLangSelector.prototype.controller; /** @type {?} */ AbstractDataLangSelector.prototype.dataObjects; /** * @abstract * @return {?} */ AbstractDataLangSelector.prototype.getLanguageFieldName = function () { }; /** * @abstract * @return {?} */ AbstractDataLangSelector.prototype.getObjectIdFieldName = function () { }; /** * @abstract * @param {?} data as a dataLanguage * @return {?} boolean is dataLanguageDirty */ AbstractDataLangSelector.prototype.isDataLanguageDirty = function (data) { }; /** * @abstract * @param {?} langCode * @return {?} */ AbstractDataLangSelector.prototype.parseLanguageButtonModel = function (langCode) { }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3REYXRhTGFuZ1NlbGVjdG9yLmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L2RhdGF2aWV3L0Fic3RyYWN0RGF0YUxhbmdTZWxlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBNEIsWUFBWSxFQUFzQixNQUFNLGVBQWUsQ0FBQztBQUUzRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUt0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFDTCxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQ25ELHFCQUFxQixFQUFFLHdCQUF3QixFQUFFLHVCQUF1QixFQUN6RSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7QUFXckMsTUFBTSwrQkFBeUMsU0FBUSxnQkFBZ0I7Ozs7O0lBMEJyRSxZQUFZLFVBQXNCLEVBQUUsYUFBNEI7UUFDOUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQy9DLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcs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