Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/cartforge.co/vendor/magento/module-page-builder/view/adminhtml/web/ts/js/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/cartforge.co/vendor/magento/module-page-builder/view/adminhtml/web/ts/js/data-store.ts
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

import $ from "jquery";
import {get, set} from "./utils/object";

interface DataStoreEvent {
    state: DataObject;
}

export interface DataObject<T = any> {
    [key: string]: T;
}

export default class DataStore {
    private state: DataObject = {};
    private events: JQuery = $({});
    private previousState: DataObject = {};

    /**
     * Retrieve specific data from the data store
     *
     * @param {string} key
     * @param defaultValue
     * @returns {T}
     */
    public get<T>(key: string, defaultValue?: any): T {
        return get(this.state, key, defaultValue);
    }

    /**
     * Retrieve the entire state of the data object
     *
     * @returns {DataObject}
     */
    public getState() {
        return this.state;
    }

    /**
     * Retrieve the entire previous state of the data object
     *
     * @returns {DataObject}
     */
    public getPreviousState() {
        return this.previousState;
    }

    /**
     * Set a specific keys value in the data store
     *
     * @param {string} key
     * @param value
     */
    public set(key: string, value: any) {
        this.previousState = Object.assign({}, this.state);
        set(this.state, key, value);
        this.emitState();
    }

    /**
     * Update the entire state for the content type
     *
     * @param {DataObject} state
     */
    public setState(state: DataObject) {
        this.previousState = Object.assign({}, this.state);
        this.state = state;
        this.emitState();
    }

    /**
     * Remove item from DataStore
     *
     * @param {string | number} key
     */
    public unset(key: string | number): void {
        const storeState = this.state;
        delete storeState[key];
        this.setState(storeState);
    }

    /**
     * Subscribe to data changes within the data store of a content type
     *
     * @param {(state: DataObject, event: Event) => void} handler
     * @param {string | number} key
     */
    public subscribe(handler: (state: DataObject, event: Event) => void, key?: string | number): void {
        this.events.on("state", (event: Event, data: DataStoreEvent) => {
            if (key) {
                if (this.previousState[key] !== data.state[key]) {
                    handler(data.state, event);
                }
            } else {
                if (this.previousState !== data.state) {
                    handler(data.state, event);
                }
            }
        });
    }

    /**
     * Emit state updates through events
     */
    private emitState() {
        this.events.trigger("state", { state: this.state });
    }
}

Spamworldpro Mini