UNPKG

uploadcare-widget-tab-effects

Version:

Effects Tab for Uploadcare Widget. Edit images in desktop and mobile browsers.

87 lines (72 loc) 2 kB
import {getModifiersByEffects, buildFileInfoCrop} from 'tools' const createStore = (initialState) => { let state = initialState let listeners = { view: [], imageLoad: [], appliedEffects: [], image: [], } const getState = () => state const setAppliedEffect = (appliedEffect) => { const appliedEffects = { ...state.appliedEffects, ...appliedEffect, } state = { ...state, ...{appliedEffects}, } listeners['appliedEffects'].forEach(listener => listener()) } const setView = (view) => { state = { ...state, ...{view}, } listeners['view'].forEach(listener => listener()) } const setImageLoad = (imageLoad) => { state = { ...state, ...{imageLoad}, } listeners['imageLoad'].forEach(listener => listener()) } const rebuildImage = () => { const {appliedEffects, image} = state const cdnUrlModifiers = getModifiersByEffects(appliedEffects) + state.otherModifiers const crop = buildFileInfoCrop(appliedEffects.crop) state.image = { ...image, ...{ cdnUrl: image.originalUrl + (cdnUrlModifiers || ''), cdnUrlModifiers, crop, }, } listeners['image'].forEach(listener => listener()) } const subscribe = (listener, source) => { listeners[source].push(listener) return () => { listeners[source] = listeners[source].filter(l => l !== listener) } } const subscribeToAppliedEffects = (listener) => subscribe(listener, 'appliedEffects') const subscribeToView = (listener) => subscribe(listener, 'view') const subscribeToImageLoad = (listener) => subscribe(listener, 'imageLoad') const subscribeToImage = (listener) => subscribe(listener, 'image') return { getState, setView, setImageLoad, setAppliedEffect, rebuildImage, subscribeToView, subscribeToImageLoad, subscribeToImage, subscribeToAppliedEffects, } } export default createStore