Skip to content
This repository was archived by the owner on Apr 21, 2026. It is now read-only.

Commit 88c6bdc

Browse files
author
dpatanin
committed
Create own component for sidebar
1 parent add02ef commit 88c6bdc

2 files changed

Lines changed: 95 additions & 40 deletions

File tree

src/components/Sidebar.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import React, { Fragment } from 'react';
2+
import { Link } from 'gatsby';
3+
4+
// Determine the naming of Sidebar categories
5+
function getCategoryTitle(category) {
6+
let categoryTitle = '';
7+
8+
switch (category[0].node.frontmatter.category) {
9+
case 'scanner':
10+
categoryTitle = 'Scanners';
11+
break;
12+
13+
case 'hook':
14+
category[0].node.frontmatter.type === 'persistenceProvider' ? categoryTitle = 'Persistence Providers' : categoryTitle = 'Hooks';
15+
break;
16+
17+
default:
18+
categoryTitle = 'Unknown Category';
19+
break;
20+
}
21+
22+
return categoryTitle;
23+
}
24+
25+
const Sidebar = (props) => {
26+
return (
27+
<nav className="sidebar">
28+
{props.dataArray.map((category, index) => (
29+
<Fragment key={index}>
30+
<h1 className="sidebar-header">{getCategoryTitle(category)}</h1>
31+
<ul className="list-unstyled components">
32+
{category.map((element) => (
33+
<li key={element.node.frontmatter.title}>
34+
<Link
35+
to={`/integrations/${element.node.frontmatter.path}`}
36+
activeClassName="active-Link"
37+
>
38+
{element.node.frontmatter.title}
39+
</Link>
40+
</li>
41+
))}
42+
</ul>
43+
</Fragment>
44+
))}
45+
</nav>
46+
);
47+
};
48+
49+
export default Sidebar;

src/templates/integration.js

Lines changed: 46 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,28 @@
1-
import React from "react";
2-
import { graphql, Link } from "gatsby";
3-
import Layout from "../components/Layout";
4-
import ScannerExamples from "../components/ScannerExamples.js";
1+
import React from 'react';
2+
import { graphql } from 'gatsby';
3+
import Layout from '../components/Layout';
4+
import ScannerExamples from '../components/ScannerExamples.js';
5+
import Sidebar from '../components/Sidebar.js'
56

6-
const Integration = props => {
7+
const Integration = (props) => {
78
const { title } = props.data.markdownRemark.frontmatter;
89
const { html } = props.data.markdownRemark;
9-
const scanner = props.data.scanner.edges;
10-
const persistenceProvider = props.data.persistenceProvider.edges;
10+
const scanners = props.data.scanner.edges;
11+
const persistenceProviders = props.data.persistenceProvider.edges;
12+
const hooks = props.data.hook.edges;
1113

1214
return (
1315
<Layout bodyClass="integration">
1416
<div className="sidebar-wrapper">
15-
<nav className="sidebar">
16-
<h1 className="sidebar-header">Scanner</h1>
17-
<ul className="list-unstyled components">
18-
{scanner.map(scanner => (
19-
<li key={scanner.node.frontmatter.title}>
20-
<Link
21-
to={`/integrations/${scanner.node.frontmatter.path}`}
22-
activeClassName="active-Link"
23-
>
24-
{scanner.node.frontmatter.title}
25-
</Link>
26-
</li>
27-
))}
28-
</ul>
29-
<h1 className="sidebar-header">Hooks</h1>
30-
<ul className="list-unstyled components">
31-
{persistenceProvider.map(persistenceProvider => (
32-
<li key={persistenceProvider.node.frontmatter.title}>
33-
<Link
34-
to={`/integrations/${persistenceProvider.node.frontmatter.path}`}
35-
activeClassName="active-Link"
36-
>
37-
{persistenceProvider.node.frontmatter.title}
38-
</Link>
39-
</li>
40-
))}
41-
</ul>
42-
</nav>
43-
17+
<Sidebar dataArray={[scanners, persistenceProviders, hooks]}/>
4418
<div id="content">
4519
<div className="container-fluid" id="integration-doc">
4620
<h1 className="title">{title}</h1>
4721
<div
4822
className="content"
4923
dangerouslySetInnerHTML={{ __html: html }}
5024
/>
51-
<ScannerExamples scanner={props.path} />
25+
<ScannerExamples scanner={props.path} />
5226
</div>
5327
</div>
5428
</div>
@@ -76,24 +50,56 @@ export const query = graphql`
7650
path
7751
category
7852
usecase
53+
type
54+
state
55+
appVersion
7956
}
8057
}
8158
}
8259
}
83-
persistenceProvider: allMarkdownRemark(
60+
hook: allMarkdownRemark(
8461
filter: {
85-
fileAbsolutePath: { regex: "/integrations/persistence-provider/" }
62+
frontmatter: {
63+
category: { eq: "hook" }
64+
type: { ne: "persistenceProvider" }
65+
}
8666
}
67+
sort: { fields: [frontmatter___title], order: ASC }
8768
) {
8869
edges {
8970
node {
71+
html
9072
frontmatter {
9173
title
9274
path
9375
category
76+
usecase
77+
type
78+
state
9479
}
95-
id
80+
}
81+
}
82+
}
83+
persistenceProvider: allMarkdownRemark(
84+
filter: {
85+
frontmatter: {
86+
category: { eq: "hook" }
87+
type: { eq: "persistenceProvider" }
88+
}
89+
}
90+
sort: { fields: [frontmatter___title], order: ASC }
91+
) {
92+
edges {
93+
node {
9694
html
95+
frontmatter {
96+
title
97+
path
98+
category
99+
usecase
100+
type
101+
state
102+
}
97103
}
98104
}
99105
}

0 commit comments

Comments
 (0)