fix: folder collection path (#549)

This commit is contained in:
Daniel Lautzenheiser
2023-02-16 13:34:35 -05:00
committed by GitHub
parent 93915dac35
commit 8f7237ab7c
53 changed files with 742 additions and 513 deletions

View File

@ -44,7 +44,7 @@ import { Cursor } from '../lib/util';
import { selectFields, updateFieldByKey } from '../lib/util/collection.util';
import { selectCollectionEntriesCursor } from '../reducers/selectors/cursors';
import {
selectEntriesSortFields,
selectEntriesSortField,
selectIsFetching,
selectPublishedSlugs,
} from '../reducers/selectors/entries';
@ -653,10 +653,9 @@ export function loadEntries(collection: Collection, page = 0) {
return;
}
const state = getState();
const sortFields = selectEntriesSortFields(state, collection.name);
if (sortFields && sortFields.length > 0) {
const field = sortFields[0];
return dispatch(sortByField(collection, field.key, field.direction));
const sortField = selectEntriesSortField(collection.name)(state);
if (sortField) {
return dispatch(sortByField(collection, sortField.key, sortField.direction));
}
const configState = state.config;
@ -956,7 +955,7 @@ export function persistEntry(collection: Collection) {
const state = getState();
const entryDraft = state.entryDraft;
const fieldsErrors = entryDraft.fieldsErrors;
const usedSlugs = selectPublishedSlugs(state, collection.name);
const usedSlugs = selectPublishedSlugs(collection.name)(state);
// Early return if draft contains validation errors
if (Object.keys(fieldsErrors).length > 0) {

View File

@ -6,11 +6,9 @@ import {
LOAD_ASSET_SUCCESS,
REMOVE_ASSET,
} from '../constants';
import { isAbsolutePath } from '../lib/util';
import { selectMediaFilePath } from '../lib/util/media.util';
import { selectMediaFileByPath } from '../reducers/selectors/mediaLibrary';
import { createAssetProxy } from '../valueObjects/AssetProxy';
import { getMediaDisplayURL, getMediaFile, waitForMediaLibraryToLoad } from './mediaLibrary';
import { getMediaFile, waitForMediaLibraryToLoad } from './mediaLibrary';
import type { AnyAction } from 'redux';
import type { ThunkDispatch } from 'redux-thunk';
@ -58,18 +56,9 @@ async function loadAsset(
dispatch(loadAssetRequest(resolvedPath));
// load asset url from backend
await waitForMediaLibraryToLoad(dispatch, getState());
const file = selectMediaFileByPath(getState(), resolvedPath);
let asset: AssetProxy;
if (file) {
const url = await getMediaDisplayURL(dispatch, getState(), file);
asset = createAssetProxy({ path: resolvedPath, url: url || resolvedPath });
dispatch(addAsset(asset));
} else {
const { url } = await getMediaFile(getState(), resolvedPath);
asset = createAssetProxy({ path: resolvedPath, url });
dispatch(addAsset(asset));
}
const { url } = await getMediaFile(getState(), resolvedPath);
const asset = createAssetProxy({ path: resolvedPath, url });
dispatch(addAsset(asset));
dispatch(loadAssetSuccess(resolvedPath));
return asset;
} catch (error: unknown) {
@ -105,7 +94,8 @@ export function getAsset<F extends BaseField = UnknownField>(
path,
field as Field,
);
let { asset, isLoading, error } = state.medias[resolvedPath] || {};
const { asset, isLoading } = state.medias[resolvedPath] || {};
if (isLoading) {
return promiseCache[resolvedPath];
}
@ -116,23 +106,9 @@ export function getAsset<F extends BaseField = UnknownField>(
}
const p = new Promise<AssetProxy>(resolve => {
if (isAbsolutePath(resolvedPath)) {
// asset path is a public url so we can just use it as is
asset = createAssetProxy({ path: resolvedPath, url: path });
dispatch(addAsset(asset));
loadAsset(resolvedPath, dispatch, getState).then(asset => {
resolve(asset);
} else {
if (error) {
// on load error default back to original path
asset = createAssetProxy({ path: resolvedPath, url: path });
dispatch(addAsset(asset));
resolve(asset);
} else {
loadAsset(resolvedPath, dispatch, getState).then(asset => {
resolve(asset);
});
}
}
});
});
promiseCache[resolvedPath] = p;

View File

@ -34,6 +34,7 @@ import type { AnyAction } from 'redux';
import type { ThunkDispatch } from 'redux-thunk';
import type {
BaseField,
Collection,
DisplayURLState,
Field,
ImplementationMediaFile,
@ -83,16 +84,28 @@ export function openMediaLibrary<F extends BaseField = UnknownField>(
allowMultiple?: boolean;
replaceIndex?: number;
config?: Record<string, unknown>;
collection?: Collection<F>;
field?: F;
} = {},
) {
return (dispatch: ThunkDispatch<RootState, {}, AnyAction>, getState: () => RootState) => {
const state = getState();
const mediaLibrary = state.mediaLibrary.externalLibrary;
const { controlID, value, config = {}, allowMultiple, forImage, replaceIndex, field } = payload;
const {
controlID,
value,
config = {},
allowMultiple,
forImage,
replaceIndex,
collection,
field,
} = payload;
if (mediaLibrary) {
mediaLibrary.show({ id: controlID, value, config, allowMultiple, imagesOnly: forImage });
}
dispatch(
mediaLibraryOpened({
controlID,
@ -101,6 +114,7 @@ export function openMediaLibrary<F extends BaseField = UnknownField>(
allowMultiple,
replaceIndex,
config,
collection: collection as Collection,
field: field as Field,
}),
);
@ -406,6 +420,7 @@ function mediaLibraryOpened(payload: {
replaceIndex?: number;
allowMultiple?: boolean;
config?: Record<string, unknown>;
collection?: Collection;
field?: Field;
}) {
return { type: MEDIA_LIBRARY_OPEN, payload } as const;