"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.UserInterfaceApiImpl = void 0;
const tslib_1 = require("tslib");
const PopupRedux = tslib_1.__importStar(require("../../Redux/ActionsReducers/PopupRedux"));
const ArrayExtensions_1 = require("../../Utilities/Extensions/ArrayExtensions");
const WindowPopups_1 = require("../../View/Components/Popups/WindowPopups/WindowPopups");
const UserInterfaceInternalApi_1 = require("../Internal/UserInterfaceInternalApi");
const ApiBase_1 = require("./ApiBase");
const PopupRedux_1 = require("../../Redux/ActionsReducers/PopupRedux");
class UserInterfaceApiImpl extends ApiBase_1.ApiBase {
    constructor(_adaptable) {
        super(_adaptable);
        this.showProgressIndicatorTimeout = null;
        this.internalApi = new UserInterfaceInternalApi_1.UserInterfaceInternalApi(_adaptable);
    }
    getColorPalette() {
        let colorPalette = this.getUserInterfaceOptions().colorPalette;
        // first do the function then get hardcoded items
        if (colorPalette != null && typeof colorPalette === 'function') {
            const currentTheme = this.getThemeApi().getCurrentTheme();
            const colours = colorPalette(currentTheme);
            return colours;
        }
        else {
            let arr = colorPalette;
            if (arr && ArrayExtensions_1.ArrayExtensions.IsNotNullOrEmpty(arr)) {
                return arr;
            }
        }
        return [];
    }
    getCustomIcons() {
        let customIconsProp = this.getUserInterfaceOptions().customIcons;
        if (customIconsProp != null) {
            // first do the function then get hardcoded items
            return typeof customIconsProp === 'function'
                ? customIconsProp()
                : customIconsProp;
        }
        return [];
    }
    getStyleClassNames() {
        return this.getUserInterfaceOptions().styleClassNames;
    }
    getEditableCellStyle() {
        return this.getUserInterfaceOptions().editableCellStyle;
    }
    getEditedCellStyle() {
        return this.getUserInterfaceOptions().editedCellStyle;
    }
    getReadOnlyCellStyle() {
        return this.getUserInterfaceOptions().readOnlyCellStyle;
    }
    getAdaptableObjectTags() {
        const objectTags = this.getUserInterfaceOptions().objectTags;
        if (objectTags != null && typeof objectTags === 'function') {
            return objectTags(this.getAdaptableInternalApi().buildBaseContext());
        }
        else {
            let arr = objectTags;
            if (arr && ArrayExtensions_1.ArrayExtensions.IsNotNullOrEmpty(arr)) {
                return arr;
            }
        }
    }
    getAdaptableObjectsWithTag(tag, adaptableModule) {
        if (adaptableModule) {
            const module = this.getAdaptableInternalApi()
                .getModuleService()
                .getModuleById(adaptableModule);
            if (!module) {
                return undefined;
            }
            return module
                .getModuleAdaptableObjects()
                ?.filter((ao) => ao.Tags?.includes(tag));
        }
        else {
            const modules = this.getAdaptableInternalApi().getModules();
            let returnObjects = [];
            modules.forEach((module) => {
                returnObjects.push(...module
                    .getModuleAdaptableObjects()
                    ?.filter((ao) => ao.Tags?.includes(tag)));
            });
            return returnObjects;
        }
    }
    showProgressIndicator(config) {
        const close = () => {
            this.hideProgressIndicator();
        };
        if (config.delay) {
            this.showProgressIndicatorTimeout = setTimeout(() => {
                this.dispatchAction((0, PopupRedux_1.ProgressIndicatorShow)(config));
            }, config.delay);
        }
        else {
            this.dispatchAction((0, PopupRedux_1.ProgressIndicatorShow)(config));
        }
        return { close };
    }
    hideProgressIndicator() {
        if (this.showProgressIndicatorTimeout) {
            clearTimeout(this.showProgressIndicatorTimeout);
            this.showProgressIndicatorTimeout = null;
        }
        this.dispatchAction((0, PopupRedux_1.ProgressIndicatorHide)());
    }
    openCustomWindowPopup(config) {
        const close = () => {
            this.dispatchAction(PopupRedux.PopupHideWindow(config.id));
        };
        const action = PopupRedux.PopupShowWindow({
            Id: config.id,
            Title: config.title,
            FactoryId: WindowPopups_1.CUSTOM_WINDOW_FACTORY_ID,
            PopupProps: {
                render: config.render,
                frameworkComponent: config.frameworkComponent,
                onFrameworkComponentDestroyed: config.onFrameworkComponentDestroyed,
                size: config.size,
                position: config.position,
            },
            Icon: config.icon,
        });
        this.dispatchAction(action);
        return { close };
    }
    closeCustomWindowPopup(windowId) {
        this.dispatchAction(PopupRedux.PopupHideWindow(windowId));
    }
}
exports.UserInterfaceApiImpl = UserInterfaceApiImpl;
