I'm building a React front end which allows users to select an "active" query from a list of static queries and flattens to the result to be displayed in a table. What is the best way to pass the GraphQL query from a higher-order component into a nested child component?
Most of the documentation/solutions that I've seen focus on binding a static query with dynamical conditions from component states to a component, which would not work for my purpose as the different static queries have varying fields and query different node types.
What is the best-practice/recommended approach here? I feel like this is not a very unique use case, but I can't seem to find any examples that would do something similar.
I'm using Apollo-Client/Redux as my client-side store.
Below is the rough outline of the component:
class GridViewPage extends React.Component{
constructor(props, context) {
super(props, context);
this.state = {
activeQuery = ... Stores the selected query ...
};
}
render() {
return (
<div className="gridContainer">
...Component here allows users to select a query from the active list and saves it/it's ID/Index to the state...
<Panel collapsible>
...Some toolbar components...
</Panel>
...Component here displays the result of the query (Ideally by receiving the query or the result of as a prop?)...
</div>
);
}
}
GridViewPage.propTypes = {
grids: PropTypes.array.isRequired,
actions: PropTypes.object.isRequired
};
function mapStateToProps(state, ownProps) {
return {
// Receives list of available queries as a prop
grids: state.grids
};
}
Let's take, for example, the following component:
ProfileWithData.js
It would be quite easily wrapping it with a higher order component:
Profile.js
createProfileWithData.js
You would then use it like this:
Page.js
I think you get the point.
Of course, your Profile would not received
props.data.currentUser
, rather it would beprops.data.*
depending on the root queries, and you would handle it appropriately depending on the contents.Note: this was written directly in Stack Overflow, so if you encounter any problems - lmk and I'll fix it.