Skip to content

Instantly share code, notes, and snippets.

@jamesplease
Created June 8, 2017 20:37
Show Gist options
  • Save jamesplease/9b294a7c092b04eaf76364eb1840fecd to your computer and use it in GitHub Desktop.
Save jamesplease/9b294a7c092b04eaf76364eb1840fecd to your computer and use it in GitHub Desktop.
import { xhrStatuses } from 'redux-simple-resource';
function findResourceById({ state, resourceName, idAttribute = 'id', id }) {
return state[resourceName].resources.filter(r => r[idAttribute] === id);
}
function checkReadManyStatus({ state, resources, status, every, includeNull }) {
const check = every ? 'every' : 'some';
let arrayResources = resources instanceof Array ? resources : [resources];
return resources
.map(r => {
return (
state[r].resourceListMeta.readXhrStatus === status ||
(includeNull && state[r].resourceListMeta.readXhrStatus === xhrStatuses.NULL)
);
})
[check](r => r);
}
export function getReadManyStatus({ state, resources, status, includeNull = true }) {
let arrayResources = resources instanceof Array ? resources : [resources];
let pending = false;
let failed = false;
let succeeded = false;
let successCount = 0;
for (let i = 0; i < arrayResources.length; i++) {
const r = arrayResources[0];
const meta = state[r].resourceListMeta;
const status = meta.readXhrStatus;
if (status === xhrStatuses.FAILED) {
pending = false;
failed = true;
break;
} else if (
status === xhrStatuses.PENDING ||
(includeNull && status === xhrStatuses.NULL)
) {
pending = true;
break;
} else if (status === xhrStatuses.SUCCEEDED) {
successCount++;
}
}
if (successCount === arrayResources.length) {
succeeded = true;
}
return { pending, failed, succeeded };
}
export function isReadManyPending({ state, resources, includeNull = true }) {
return checkReadManyStatus({
state, resources, includeNull,
status: xhrStatuses.PENDING,
every: false
});
}
export function isReadManyFailed({ state, resources }) {
return checkReadManyStatus({
state, resources,
status: xhrStatuses.FAILED,
every: false
});
}
export function isReadManySucceeded({ state, resources }) {
return checkReadManyStatus({
state, resources,
status: xhrStatuses.PENDING,
every: true
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment