UNPKG

@wordpress/upload-media

Version:
143 lines (140 loc) 3.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _types = require("./types"); /** * Internal dependencies */ const noop = () => {}; const DEFAULT_STATE = { queue: [], queueStatus: 'active', blobUrls: {}, settings: { mediaUpload: noop } }; function reducer(state = DEFAULT_STATE, action = { type: _types.Type.Unknown }) { switch (action.type) { case _types.Type.PauseQueue: { return { ...state, queueStatus: 'paused' }; } case _types.Type.ResumeQueue: { return { ...state, queueStatus: 'active' }; } case _types.Type.Add: return { ...state, queue: [...state.queue, action.item] }; case _types.Type.Cancel: return { ...state, queue: state.queue.map(item => item.id === action.id ? { ...item, error: action.error } : item) }; case _types.Type.Remove: return { ...state, queue: state.queue.filter(item => item.id !== action.id) }; case _types.Type.OperationStart: { return { ...state, queue: state.queue.map(item => item.id === action.id ? { ...item, currentOperation: action.operation } : item) }; } case _types.Type.AddOperations: return { ...state, queue: state.queue.map(item => { if (item.id !== action.id) { return item; } return { ...item, operations: [...(item.operations || []), ...action.operations] }; }) }; case _types.Type.OperationFinish: return { ...state, queue: state.queue.map(item => { if (item.id !== action.id) { return item; } const operations = item.operations ? item.operations.slice(1) : []; // Prevent an empty object if there's no attachment data. const attachment = item.attachment || action.item.attachment ? { ...item.attachment, ...action.item.attachment } : undefined; return { ...item, currentOperation: undefined, operations, ...action.item, attachment, additionalData: { ...item.additionalData, ...action.item.additionalData } }; }) }; case _types.Type.CacheBlobUrl: { const blobUrls = state.blobUrls[action.id] || []; return { ...state, blobUrls: { ...state.blobUrls, [action.id]: [...blobUrls, action.blobUrl] } }; } case _types.Type.RevokeBlobUrls: { const newBlobUrls = { ...state.blobUrls }; delete newBlobUrls[action.id]; return { ...state, blobUrls: newBlobUrls }; } case _types.Type.UpdateSettings: { return { ...state, settings: { ...state.settings, ...action.settings } }; } } return state; } var _default = exports.default = reducer; //# sourceMappingURL=reducer.js.map