2019-12-18 23:54:23 +01:00
|
|
|
import React, { StatelessComponent, ReactElement } from 'react';
|
|
|
|
import NodeContext from '../contexts/NodeContext';
|
|
|
|
import { useStaticQuery, graphql } from 'gatsby';
|
|
|
|
import { HierarchyQuery } from '../types';
|
|
|
|
import {
|
|
|
|
getChildren,
|
|
|
|
getCurrentNode,
|
|
|
|
getCurrentVersion,
|
|
|
|
getHomePage,
|
|
|
|
getNavChildren,
|
|
|
|
getNodes,
|
|
|
|
getParent,
|
|
|
|
getSiblings,
|
|
|
|
initialise,
|
2020-06-30 23:14:19 +02:00
|
|
|
getVersionPath,
|
2019-12-18 23:54:23 +01:00
|
|
|
setCurrentPath,
|
2022-07-22 02:16:07 +02:00
|
|
|
getDefaultVersion,
|
2022-07-22 02:18:04 +02:00
|
|
|
getVersionMessage,
|
2019-12-18 23:54:23 +01:00
|
|
|
} from '../utils/nodes';
|
|
|
|
|
|
|
|
const NodeProvider: StatelessComponent<{}> = ({ children, pageContext: { slug } }): ReactElement => {
|
|
|
|
const result:HierarchyQuery = useStaticQuery(graphql`
|
|
|
|
{
|
|
|
|
allSilverstripeDocument {
|
|
|
|
nodes {
|
|
|
|
title
|
|
|
|
summary
|
|
|
|
isIndex
|
|
|
|
introduction
|
|
|
|
icon
|
|
|
|
iconBrand
|
|
|
|
hideChildren
|
|
|
|
slug
|
|
|
|
parentSlug
|
|
|
|
fileTitle
|
|
|
|
fileAbsolutePath
|
|
|
|
category
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
`
|
|
|
|
);
|
|
|
|
if (!getNodes()) {
|
|
|
|
const nodes = result.allSilverstripeDocument.nodes.map(node => ({
|
|
|
|
...node,
|
|
|
|
}));
|
|
|
|
initialise(nodes);
|
|
|
|
}
|
|
|
|
|
|
|
|
setCurrentPath(slug);
|
|
|
|
|
|
|
|
return (
|
|
|
|
<NodeContext.Provider value={{
|
|
|
|
getChildren,
|
|
|
|
getCurrentNode,
|
|
|
|
getCurrentVersion,
|
|
|
|
getHomePage,
|
|
|
|
getNavChildren,
|
|
|
|
getNodes,
|
|
|
|
getParent,
|
|
|
|
getSiblings,
|
2020-06-30 23:14:19 +02:00
|
|
|
getVersionPath,
|
2019-12-18 23:54:23 +01:00
|
|
|
setCurrentPath,
|
2022-07-22 02:16:07 +02:00
|
|
|
getDefaultVersion,
|
2022-07-22 02:18:04 +02:00
|
|
|
getVersionMessage,
|
2019-12-18 23:54:23 +01:00
|
|
|
}}>
|
|
|
|
{children}
|
|
|
|
</NodeContext.Provider>
|
|
|
|
)
|
|
|
|
};
|
|
|
|
|
|
|
|
export default NodeProvider;
|