fix pending, support new collection add ui
This commit is contained in:
parent
f9f53af06e
commit
211266cdd8
6 changed files with 47 additions and 35 deletions
1
dist/flow-typed/Collections.js
vendored
1
dist/flow-typed/Collections.js
vendored
|
@ -37,4 +37,5 @@ declare type CollectionEditParams = {
|
|||
replace?: boolean,
|
||||
order?: { from: number, to: number },
|
||||
type?: string,
|
||||
name?: string,
|
||||
}
|
||||
|
|
|
@ -179,6 +179,7 @@ export {
|
|||
makeSelectNameForCollectionId,
|
||||
makeSelectIsResolvingCollectionForId,
|
||||
makeSelectNextUrlForCollection,
|
||||
makeSelectCollectionForIdHasClaimUrl,
|
||||
} from 'redux/selectors/collections';
|
||||
|
||||
export {
|
||||
|
|
|
@ -8,6 +8,7 @@ import {
|
|||
makeSelectCollectionForId,
|
||||
// makeSelectPublishedCollectionForId, // for "save" or "copy" action
|
||||
makeSelectMyPublishedCollectionForId,
|
||||
makeSelectPublishedCollectionForId,
|
||||
makeSelectUnpublishedCollectionForId,
|
||||
makeSelectEditedCollectionForId,
|
||||
} from 'redux/selectors/collections';
|
||||
|
@ -24,6 +25,7 @@ const getTimestamp = () => {
|
|||
export const doLocalCollectionCreate = (
|
||||
name: string,
|
||||
collectionItems: string,
|
||||
type: string,
|
||||
sourceId: string
|
||||
) => (dispatch: Dispatch) => {
|
||||
return dispatch({
|
||||
|
@ -35,6 +37,7 @@ export const doLocalCollectionCreate = (
|
|||
updatedAt: getTimestamp(),
|
||||
items: collectionItems || [],
|
||||
sourceId: sourceId,
|
||||
type: type || 'collection',
|
||||
},
|
||||
},
|
||||
});
|
||||
|
@ -294,7 +297,7 @@ export const doCollectionEdit = (collectionId: string, params: CollectionEditPar
|
|||
const unpublishedCollection: Collection = makeSelectUnpublishedCollectionForId(collectionId)(
|
||||
state
|
||||
);
|
||||
const publishedCollection: Collection = makeSelectMyPublishedCollectionForId(collectionId)(state);
|
||||
const publishedCollection: Collection = makeSelectPublishedCollectionForId(collectionId)(state); // needs to be published only
|
||||
|
||||
const generateCollectionItemsFromSearchResult = results => {
|
||||
return (
|
||||
|
@ -383,8 +386,11 @@ export const doCollectionEdit = (collectionId: string, params: CollectionEditPar
|
|||
currentItems.splice(order.to, 0, movedItem);
|
||||
}
|
||||
|
||||
// console.log('p&e', publishedCollection.items, newItems, publishedCollection.items.join(','), newItems.join(','))
|
||||
if (editedCollection) {
|
||||
if (publishedCollection.items.join(',') === newItems.join(',')) {
|
||||
// print these
|
||||
|
||||
// delete edited if newItems are the same as publishedItems
|
||||
dispatch({
|
||||
type: ACTIONS.COLLECTION_DELETE,
|
||||
|
|
|
@ -26,7 +26,6 @@ export const buildSharedStateMiddleware = (
|
|||
clearTimeout(timeout);
|
||||
const actionResult = next(action);
|
||||
// Call `getState` after calling `next` to ensure the state has updated in response to the action
|
||||
|
||||
function runPreferences() {
|
||||
const nextState: { user: any, settings: any } = getState();
|
||||
const syncEnabled =
|
||||
|
|
|
@ -69,7 +69,12 @@ const collectionsReducer = handleActions(
|
|||
const newPendingList = Object.assign({}, pendingList);
|
||||
|
||||
if (collectionKey && state[collectionKey] && state[collectionKey][id]) {
|
||||
delete state[collectionKey][id];
|
||||
const newList = Object.assign({}, state[collectionKey]);
|
||||
delete newList[id];
|
||||
return {
|
||||
...state,
|
||||
[collectionKey]: newList,
|
||||
};
|
||||
} else {
|
||||
if (newEditList[id]) {
|
||||
delete newEditList[id];
|
||||
|
@ -178,40 +183,38 @@ const collectionsReducer = handleActions(
|
|||
},
|
||||
[ACTIONS.COLLECTION_ITEMS_RESOLVE_COMPLETED]: (state, action) => {
|
||||
const { resolvedCollections, failedCollectionIds } = action.data;
|
||||
const {
|
||||
pending: pendingList,
|
||||
edited: editList,
|
||||
isResolvingCollectionById,
|
||||
resolved: lists,
|
||||
} = state;
|
||||
const { pending, edited, isResolvingCollectionById, resolved } = state;
|
||||
const newPending = Object.assign({}, pending);
|
||||
const newEdited = Object.assign({}, edited);
|
||||
const newResolved = Object.assign({}, resolved, resolvedCollections);
|
||||
|
||||
const resolvedIds = Object.keys(resolvedCollections);
|
||||
const newResolving = Object.assign({}, isResolvingCollectionById);
|
||||
if (resolvedCollections && resolvedCollections.length) {
|
||||
if (resolvedCollections && Object.keys(resolvedCollections).length) {
|
||||
resolvedIds.forEach(resolvedId => {
|
||||
if (editList[resolvedId]) {
|
||||
if (editList[resolvedId]['updatedAt'] < resolvedCollections[resolvedId]['updatedAt']) {
|
||||
delete editList[resolvedId];
|
||||
if (newEdited[resolvedId]) {
|
||||
if (newEdited[resolvedId]['updatedAt'] < resolvedCollections[resolvedId]['updatedAt']) {
|
||||
delete newEdited[resolvedId];
|
||||
}
|
||||
}
|
||||
delete newResolving[resolvedId];
|
||||
if (pendingList[resolvedId]) {
|
||||
delete pendingList[resolvedId];
|
||||
if (newPending[resolvedId]) {
|
||||
delete newPending[resolvedId];
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (failedCollectionIds && failedCollectionIds.length) {
|
||||
if (failedCollectionIds && Object.keys(failedCollectionIds).length) {
|
||||
failedCollectionIds.forEach(failedId => {
|
||||
delete newResolving[failedId];
|
||||
});
|
||||
}
|
||||
|
||||
const newLists = Object.assign({}, lists, resolvedCollections);
|
||||
|
||||
return Object.assign({}, state, {
|
||||
...state,
|
||||
pending: pendingList,
|
||||
resolved: newLists,
|
||||
pending: newPending,
|
||||
resolved: newResolved,
|
||||
edited: newEdited,
|
||||
isResolvingCollectionById: newResolving,
|
||||
});
|
||||
},
|
||||
|
|
|
@ -68,7 +68,6 @@ export const makeSelectCollectionIsMine = (id: string) =>
|
|||
}
|
||||
);
|
||||
|
||||
// for library page, we want all published
|
||||
export const selectMyPublishedCollections = createSelector(
|
||||
selectResolvedCollections,
|
||||
selectPendingCollections,
|
||||
|
@ -78,21 +77,18 @@ export const selectMyPublishedCollections = createSelector(
|
|||
// all resolved in myIds, plus those in pending and edited
|
||||
const myPublishedCollections = Object.fromEntries(
|
||||
Object.entries(pending).concat(
|
||||
Object.entries(edited)
|
||||
.filter(
|
||||
([key, val]) => myIds.includes(key)
|
||||
// $FlowFixMe
|
||||
)
|
||||
.concat(
|
||||
Object.entries(resolved).filter(
|
||||
([key, val]) =>
|
||||
myIds.includes(key) &&
|
||||
// $FlowFixMe
|
||||
(!pending[key] && !edited[key])
|
||||
)
|
||||
!pending[key]
|
||||
)
|
||||
)
|
||||
);
|
||||
// now add in edited:
|
||||
Object.entries(edited).forEach(([id, item]) => {
|
||||
myPublishedCollections[id] = item;
|
||||
});
|
||||
return myPublishedCollections;
|
||||
}
|
||||
);
|
||||
|
@ -163,6 +159,12 @@ export const makeSelectCollectionForId = (id: string) =>
|
|||
}
|
||||
);
|
||||
|
||||
export const makeSelectCollectionForIdHasClaimUrl = (id: string, url: string) =>
|
||||
createSelector(
|
||||
makeSelectCollectionForId(id),
|
||||
collection => collection.items.includes(url)
|
||||
);
|
||||
|
||||
export const makeSelectUrlsForCollectionId = (id: string) =>
|
||||
createSelector(
|
||||
makeSelectCollectionForId(id),
|
||||
|
|
Loading…
Reference in a new issue