m7v
5/30/2017 - 4:43 AM

boilerplate for Slot + React (Update)

boilerplate for Slot + React (Update)

export default function reviewPreviewContainer(slot) {

    const $store = slot.requireComponent('store');

    let entityId;
    let moduleInstance;
    let unsubscribe = noop;
    let moduleRerender = noop;

    function entityDeleteHandler() {
        $store.dispatch(
            deleteEntityAction(entityId)
        );
    }

    function buildProps() {
        const entityData = $store.getEntitiyData(); // Как пример, такого метода нет

        return {
            entity: entityData,
            handleDeleteEntity: entityDeleteHandler
        };
    }

    return {
        init(data) {
            entityId = data.entityId;

            moduleInstance = slot.container(ReactComponent, buildProps());
        },

        clientInit() {
            moduleRerender = debounce(50, () => {
                if (slot.stage & slot.STAGE_ALIVE) {
                    moduleInstance.update(buildProps());
                }
            });

            moduleRerender();
            unsubscribe = $store.subscribe(moduleRerender);
        },

        viewContext() {
            return moduleInstance;
        },

        dispose() {
            unsubscribe();
        }
    };
}