@wordpress/upload-media
Version:
Core media upload logic.
143 lines (140 loc) • 3.36 kB
JavaScript
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
;