174d86f0a0
* refactor: typescript search actions, add tests avoid duplicate search * refactor: switch from promise chain to async/await in loadEntries * feat: add sorting, initial commit * fix: set isFetching to true on entries request * fix: ui improvments and bug fixes * test: fix tests * feat(backend-gitlab): cache local tree) * fix: fix prop type warning * refactor: code cleanup * feat(backend-bitbucket): add local tree caching support * feat: swtich to orderBy and support multiple sort keys * fix: backoff function * fix: improve backoff * feat: infer sortable fields * feat: fetch file commit metadata - initial commit * feat: extract file author and date, finalize GitLab & Bitbucket * refactor: code cleanup * feat: handle github rate limit errors * refactor: code cleanup * fix(github): add missing author and date when traversing cursor * fix: add missing author and date when traversing cursor * refactor: code cleanup * refactor: code cleanup * refactor: code cleanup * test: fix tests * fix: rebuild local tree when head doesn't exist in remote branch * fix: allow sortable fields to be an empty array * fix: allow translation of built in sort fields * build: fix proxy server build * fix: hide commit author and date fields by default on non git backends * fix(algolia): add listAllEntries method for alogolia integration * fix: handle sort fields overflow * test(bitbucket): re-record some bitbucket e2e tests * test(bitbucket): fix media library test * refactor(gitgateway-gitlab): share request code and handle 404 errors * fix: always show commit date by default * docs: add sortableFields * refactor: code cleanup * improvement: drop multi-sort, rework sort UI * chore: force main package bumps Co-authored-by: Shawn Erquhart <shawn@erquh.art>
28 lines
1013 B
JavaScript
28 lines
1013 B
JavaScript
import { fromJS } from 'immutable';
|
|
import { Cursor } from 'netlify-cms-lib-util';
|
|
import { ENTRIES_SUCCESS, SORT_ENTRIES_SUCCESS } from 'Actions/entries';
|
|
|
|
// Since pagination can be used for a variety of views (collections
|
|
// and searches are the most common examples), we namespace cursors by
|
|
// their type before storing them in the state.
|
|
export const selectCollectionEntriesCursor = (state, collectionName) =>
|
|
new Cursor(state.getIn(['cursorsByType', 'collectionEntries', collectionName]));
|
|
|
|
const cursors = (state = fromJS({ cursorsByType: { collectionEntries: {} } }), action) => {
|
|
switch (action.type) {
|
|
case ENTRIES_SUCCESS: {
|
|
return state.setIn(
|
|
['cursorsByType', 'collectionEntries', action.payload.collection],
|
|
Cursor.create(action.payload.cursor).store,
|
|
);
|
|
}
|
|
case SORT_ENTRIES_SUCCESS: {
|
|
return state.deleteIn(['cursorsByType', 'collectionEntries', action.payload.collection]);
|
|
}
|
|
default:
|
|
return state;
|
|
}
|
|
};
|
|
|
|
export default cursors;
|