@wordpress/upload-media
Version:
Core media upload logic.
228 lines (226 loc) • 6.33 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// packages/upload-media/src/store/reducer.ts
var reducer_exports = {};
__export(reducer_exports, {
default: () => reducer_default
});
module.exports = __toCommonJS(reducer_exports);
var import_types = require("./types.cjs");
var import_constants = require("./constants.cjs");
var noop = () => {
};
var DEFAULT_STATE = {
queue: [],
queueStatus: "active",
blobUrls: {},
settings: {
mediaUpload: noop,
maxConcurrentUploads: import_constants.DEFAULT_MAX_CONCURRENT_UPLOADS,
maxConcurrentImageProcessing: import_constants.DEFAULT_MAX_CONCURRENT_IMAGE_PROCESSING,
retry: { ...import_constants.DEFAULT_RETRY_SETTINGS }
}
};
function reducer(state = DEFAULT_STATE, action = { type: import_types.Type.Unknown }) {
switch (action.type) {
case import_types.Type.PauseQueue: {
return {
...state,
queueStatus: "paused"
};
}
case import_types.Type.ResumeQueue: {
return {
...state,
queueStatus: "active"
};
}
case import_types.Type.PauseItem:
return {
...state,
queue: state.queue.map(
(item) => item.id === action.id ? {
...item,
status: import_types.ItemStatus.Paused
} : item
)
};
case import_types.Type.ResumeItem:
return {
...state,
queue: state.queue.map(
(item) => item.id === action.id ? {
...item,
status: import_types.ItemStatus.Processing
} : item
)
};
case import_types.Type.Add:
return {
...state,
queue: [...state.queue, action.item]
};
case import_types.Type.Cancel:
return {
...state,
queue: state.queue.map(
(item) => item.id === action.id ? {
...item,
error: action.error
} : item
)
};
case import_types.Type.RetryItem:
return {
...state,
queue: state.queue.map(
(item) => item.id === action.id ? {
...item,
status: import_types.ItemStatus.Processing,
error: void 0,
retryCount: (item.retryCount ?? 0) + 1,
abortController: new AbortController()
} : item
)
};
case import_types.Type.ScheduleRetry:
return {
...state,
queue: state.queue.map(
(item) => item.id === action.id ? {
...item,
status: import_types.ItemStatus.PendingRetry,
error: action.error,
retryCount: action.retryCount,
nextRetryTimestamp: action.nextRetryTimestamp
} : item
)
};
case import_types.Type.Remove:
return {
...state,
queue: state.queue.filter((item) => item.id !== action.id)
};
case import_types.Type.OperationStart: {
return {
...state,
queue: state.queue.map(
(item) => item.id === action.id ? {
...item,
currentOperation: action.operation
} : item
)
};
}
case import_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 import_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) : [];
const attachment = item.attachment || action.item.attachment ? {
...item.attachment,
...action.item.attachment
} : void 0;
return {
...item,
currentOperation: void 0,
operations,
...action.item,
attachment,
additionalData: {
...item.additionalData,
...action.item.additionalData
}
};
})
};
case import_types.Type.CacheBlobUrl: {
const blobUrls = state.blobUrls[action.id] || [];
return {
...state,
blobUrls: {
...state.blobUrls,
[action.id]: [...blobUrls, action.blobUrl]
}
};
}
case import_types.Type.RevokeBlobUrls: {
const newBlobUrls = { ...state.blobUrls };
delete newBlobUrls[action.id];
return {
...state,
blobUrls: newBlobUrls
};
}
case import_types.Type.UpdateProgress:
return {
...state,
queue: state.queue.map(
(item) => item.id === action.id ? {
...item,
progress: action.progress
} : item
)
};
case import_types.Type.AccumulateSubSize:
return {
...state,
queue: state.queue.map(
(item) => item.id === action.id ? {
...item,
subSizes: [
...item.subSizes || [],
action.subSize
]
} : item
)
};
case import_types.Type.UpdateSettings: {
return {
...state,
settings: {
...state.settings,
...action.settings
}
};
}
}
return state;
}
var reducer_default = reducer;
//# sourceMappingURL=reducer.cjs.map