diff --git a/packages/nova-base-components/lib/categories/CategoriesEditForm.jsx b/packages/nova-base-components/lib/categories/CategoriesEditForm.jsx index 1e3029b49..b037f3a19 100644 --- a/packages/nova-base-components/lib/categories/CategoriesEditForm.jsx +++ b/packages/nova-base-components/lib/categories/CategoriesEditForm.jsx @@ -35,7 +35,8 @@ class CategoriesEditForm extends Component{ document={this.props.category} collection={Categories} mutationName="categoriesEdit" - resultQuery={Categories.graphQLQueries.single} + // resultQuery={Categories.graphQLQueries.single} + fragment={Categories.fragments.full} successCallback={(category)=>{ this.context.closeCallback(); this.props.flash("Category edited.", "success"); diff --git a/packages/nova-base-components/lib/categories/CategoriesNewForm.jsx b/packages/nova-base-components/lib/categories/CategoriesNewForm.jsx index 91f9d3883..674a441d0 100644 --- a/packages/nova-base-components/lib/categories/CategoriesNewForm.jsx +++ b/packages/nova-base-components/lib/categories/CategoriesNewForm.jsx @@ -13,7 +13,8 @@ const CategoriesNewForm = (props, context) => { { const newCategory = mutationResult.data.categoriesNew; @@ -22,6 +23,7 @@ const CategoriesNewForm = (props, context) => { $push: [newCategory] } }); + // note: 'newCategoriesList' is extended with the category but somehow when the query updates it e return newCategoriesList; }, }} diff --git a/packages/nova-base-containers/lib/client.js b/packages/nova-base-containers/lib/client.js index 62ae698d4..5600393a8 100644 --- a/packages/nova-base-containers/lib/client.js +++ b/packages/nova-base-containers/lib/client.js @@ -1,4 +1,4 @@ -import './containers.js'; +import './fragments.js'; import withApp from './containers/withApp.js'; import withPostsList from './containers/withPostsList.js'; diff --git a/packages/nova-base-containers/lib/containers.js b/packages/nova-base-containers/lib/containers.js deleted file mode 100644 index 5834cb18e..000000000 --- a/packages/nova-base-containers/lib/containers.js +++ /dev/null @@ -1,11 +0,0 @@ -import Telescope from 'meteor/nova:lib'; - -// containers - -Telescope.registerComponent("AppContainer", require('./containers/AppContainer.jsx')); -Telescope.registerComponent("PostsListContainer", require('./containers/PostsListContainer.jsx')); -Telescope.registerComponent("CategoriesListContainer", require('./containers/CategoriesListContainer.jsx')); -Telescope.registerComponent("PostsSingleContainer", require('./containers/PostsSingleContainer.jsx')); -Telescope.registerComponent("CommentsListContainer", require('./containers/CommentsListContainer.jsx')); -Telescope.registerComponent("UsersSingleContainer", require('./containers/UsersSingleContainer.jsx')); -Telescope.registerComponent("VoteContainer", require('./containers/VoteContainer.jsx')); diff --git a/packages/nova-base-containers/lib/containers/withCategoriesList.js b/packages/nova-base-containers/lib/containers/withCategoriesList.js index ace291f7c..99eefde01 100644 --- a/packages/nova-base-containers/lib/containers/withCategoriesList.js +++ b/packages/nova-base-containers/lib/containers/withCategoriesList.js @@ -8,13 +8,17 @@ export default function withCategoriesList(component, options) { return graphql(gql` query getCategoriesList { categories { - ${Categories.graphQLQueries.single} + ...fullCategoryInfo + parent { + ...fullCategoryInfo + } } } `, { options(ownProps) { return { variables: {}, + fragments: Categories.fragments.full, // pollInterval: 20000, }; }, diff --git a/packages/nova-base-containers/lib/fragments.js b/packages/nova-base-containers/lib/fragments.js new file mode 100644 index 000000000..e202f5f3a --- /dev/null +++ b/packages/nova-base-containers/lib/fragments.js @@ -0,0 +1,2 @@ +import './fragments/users.js'; +import './fragments/categories.js'; \ No newline at end of file diff --git a/packages/nova-base-containers/lib/fragments/categories.js b/packages/nova-base-containers/lib/fragments/categories.js new file mode 100644 index 000000000..38164019d --- /dev/null +++ b/packages/nova-base-containers/lib/fragments/categories.js @@ -0,0 +1,32 @@ +import { createFragment } from 'apollo-client'; +import gql from 'graphql-tag'; +import Categories from 'meteor/nova:categories'; + +Categories.fragments = { + full: createFragment(gql` + fragment fullCategoryInfo on Category { + _id + name + description + order + slug + image + parent { + # feels weird to repeat the same fields... but we cannot call the fragment on itself?! + _id + name + description + order + slug + image + } + } + `), + essential: createFragment(gql` + fragment essentialCategoryInfo on Category { + _id + name + slug + } + `), +}; \ No newline at end of file diff --git a/packages/nova-base-containers/lib/server.js b/packages/nova-base-containers/lib/server.js index 62ae698d4..5600393a8 100644 --- a/packages/nova-base-containers/lib/server.js +++ b/packages/nova-base-containers/lib/server.js @@ -1,4 +1,4 @@ -import './containers.js'; +import './fragments.js'; import withApp from './containers/withApp.js'; import withPostsList from './containers/withPostsList.js'; diff --git a/packages/nova-forms/lib/FormWithMutation.jsx b/packages/nova-forms/lib/FormWithMutation.jsx index f89315ce8..53041edae 100644 --- a/packages/nova-forms/lib/FormWithMutation.jsx +++ b/packages/nova-forms/lib/FormWithMutation.jsx @@ -31,10 +31,11 @@ const FormWithMutation = props => { ComponentWithMutation = graphql(gql` mutation ${props.mutationName}($documentId: String, $set: ${collectionName}Input, $unset: ${collectionName}Unset) { ${props.mutationName}(documentId: $documentId, set: $set, unset: $unset) { - ${props.resultQuery} + ${props.fragment ? `...${props.fragment[0].name.value}` : props.resultQuery} } } `, { + options: (props) => props.fragment ? {fragments: props.fragment} : {}, props: ({ownProps, mutate}) => ({ mutation: ({documentId, set, unset}) => { return mutate({ @@ -50,10 +51,11 @@ const FormWithMutation = props => { ComponentWithMutation = graphql(gql` mutation ${props.mutationName}($document: ${collectionName}Input) { ${props.mutationName}(document: $document) { - ${props.resultQuery} + ${props.fragment ? `...${props.fragment[0].name.value}` : props.resultQuery} } } `, { + options: (props) => props.fragment ? {fragments: props.fragment} : {}, props: ({ownProps, mutate}) => ({ mutation: ({document}) => { return mutate({