Merge pull request #2025 from OrigenStudio/feature/dynamic-fragment-initalization

Dynamic fragment initalization
This commit is contained in:
Sacha Greif 2018-07-28 12:38:34 +09:00 committed by GitHub
commit e8d9f06af3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -167,7 +167,7 @@ export const getFragment = fragmentName => {
throw new Error(`Fragment "${fragmentName}" not registered.`); throw new Error(`Fragment "${fragmentName}" not registered.`);
} }
if (!Fragments[fragmentName].fragmentObject) { if (!Fragments[fragmentName].fragmentObject) {
throw new Error(`Fragment "${fragmentName}" registered, but not initialized.`) initializeFragments([fragmentName]);
} }
// return fragment object created by gql // return fragment object created by gql
return Fragments[fragmentName].fragmentObject; return Fragments[fragmentName].fragmentObject;
@ -188,10 +188,18 @@ export const getFragmentText = fragmentName => {
/* /*
Get names of non initialized fragments.
*/
export const getNonInitializedFragmentNames = () =>
_.keys(Fragments).filter(name => !Fragments[name].fragmentObject);
/*
Perform all fragment extensions (called from routing) Perform all fragment extensions (called from routing)
*/ */
export const initializeFragments = () => { export const initializeFragments = (fragments = getNonInitializedFragmentNames()) => {
const errorFragmentKeys = []; const errorFragmentKeys = [];
@ -207,7 +215,7 @@ export const initializeFragments = () => {
// create fragment objects // create fragment objects
// initialize fragments *with no subfragments* first to avoid unresolved dependencies // initialize fragments *with no subfragments* first to avoid unresolved dependencies
const keysWithoutSubFragments = _.filter(_.keys(Fragments), fragmentName => !Fragments[fragmentName].subFragments); const keysWithoutSubFragments = _.filter(fragments, fragmentName => !Fragments[fragmentName].subFragments);
_.forEach(keysWithoutSubFragments, fragmentName => { _.forEach(keysWithoutSubFragments, fragmentName => {
const fragment = Fragments[fragmentName]; const fragment = Fragments[fragmentName];
fragment.fragmentObject = getFragmentObject(fragment.fragmentText, fragment.subFragments) fragment.fragmentObject = getFragmentObject(fragment.fragmentText, fragment.subFragments)