Created
June 8, 2017 20:37
-
-
Save jamesplease/9b294a7c092b04eaf76364eb1840fecd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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