feat(image-widget): media library gallery tools (#6087) (#6236)

Co-authored-by: Erez Rokah <erezrokah@users.noreply.github.com>
This commit is contained in:
Anze Demsar
2022-03-25 15:39:20 +01:00
committed by GitHub
parent 1e53d35db9
commit 80c577a462
4 changed files with 163 additions and 43 deletions

View File

@ -413,6 +413,7 @@ function mediaLibraryOpened(payload: {
forImage?: boolean;
privateUpload?: boolean;
value?: string;
replaceIndex?: number;
allowMultiple?: boolean;
config?: Map<string, unknown>;
field?: EntryField;

View File

@ -45,6 +45,8 @@ const defaultState: {
files?: MediaFile[];
config: Map<string, unknown>;
field?: EntryField;
value?: string | string[];
replaceIndex?: number;
} = {
isVisible: false,
showMediaButton: true,
@ -62,7 +64,8 @@ function mediaLibrary(state = Map(defaultState), action: MediaLibraryAction) {
});
case MEDIA_LIBRARY_OPEN: {
const { controlID, forImage, privateUpload, config, field } = action.payload;
const { controlID, forImage, privateUpload, config, field, value, replaceIndex } =
action.payload;
const libConfig = config || Map();
const privateUploadChanged = state.get('privateUpload') !== privateUpload;
if (privateUploadChanged) {
@ -76,6 +79,8 @@ function mediaLibrary(state = Map(defaultState), action: MediaLibraryAction) {
controlMedia: Map(),
displayURLs: Map(),
field,
value,
replaceIndex,
});
}
return state.withMutations(map => {
@ -86,6 +91,8 @@ function mediaLibrary(state = Map(defaultState), action: MediaLibraryAction) {
map.set('privateUpload', privateUpload);
map.set('config', libConfig);
map.set('field', field);
map.set('value', value);
map.set('replaceIndex', replaceIndex);
});
}
@ -95,8 +102,25 @@ function mediaLibrary(state = Map(defaultState), action: MediaLibraryAction) {
case MEDIA_INSERT: {
const { mediaPath } = action.payload;
const controlID = state.get('controlID');
const value = state.get('value');
if (!Array.isArray(value)) {
return state.withMutations(map => {
map.setIn(['controlMedia', controlID], mediaPath);
});
}
const replaceIndex = state.get('replaceIndex');
const mediaArray = Array.isArray(mediaPath) ? mediaPath : [mediaPath];
const valueArray = value as string[];
if (typeof replaceIndex == 'number') {
valueArray[replaceIndex] = mediaArray[0];
} else {
valueArray.push(...mediaArray);
}
return state.withMutations(map => {
map.setIn(['controlMedia', controlID], mediaPath);
map.setIn(['controlMedia', controlID], valueArray);
});
}