UNPKG

@uppy/core

Version:

Core module for the extensible JavaScript file upload widget with support for drag&drop, resumable uploads, previews, restrictions, file processing/encoding, remote providers like Instagram, Dropbox, Google Drive, S3 and more :dog:

42 lines (34 loc) 828 B
import deepFreeze from 'deep-freeze' /** * Default store + deepFreeze on setState to make sure nothing is mutated accidentally */ class DeepFrozenStore { constructor() { this.state = {} this.callbacks = [] } getState() { return this.state } setState(patch) { const prevState = { ...this.state } const nextState = deepFreeze({ ...this.state, ...patch }) this.state = nextState this._publish(prevState, nextState, patch) } subscribe(listener) { this.callbacks.push(listener) return () => { // Remove the listener. this.callbacks.splice(this.callbacks.indexOf(listener), 1) } } _publish(...args) { this.callbacks.forEach((listener) => { listener(...args) }) } } export default function defaultStore() { return new DeepFrozenStore() }