diff --git a/src/components/blog/BlogCard/styles.module.css b/src/components/blog/BlogCard/styles.module.css
index f5add8e44..297b6c43b 100644
--- a/src/components/blog/BlogCard/styles.module.css
+++ b/src/components/blog/BlogCard/styles.module.css
@@ -9,11 +9,13 @@
border: 1px solid var(--dev-card-background);
border-radius: 40px;
opacity: 1;
+ transition: all 0.3s;
+ max-width: 600px;
}
.card:hover {
cursor: pointer;
- top: -2px;
+ transform: translate(0px, -5px);
box-shadow: var(--dev-card-selected);
}
@@ -29,6 +31,7 @@
left: 0;
}
+
.cardTitle {
font-size: 22px;
font-weight: 700;
@@ -45,7 +48,7 @@
font-size: 16px;
font-weight: 500;
color: var(--dev-secondary-text);
- background-color: #eaeef1;
+ background-color: var(--dev-tag-highlight);
padding: 0px 8px;
}
diff --git a/src/components/blog/BlogCards/index.js b/src/components/blog/BlogCards/index.js
index 083abc8fd..508631b39 100644
--- a/src/components/blog/BlogCards/index.js
+++ b/src/components/blog/BlogCards/index.js
@@ -3,30 +3,30 @@ import styles from './styles.module.css';
import BlogCard from '../BlogCard';
import {getBlogPosts, getTopic} from '../../../services/DiscourseService';
-export default function BlogCards() {
- const [ans, setAns] = React.useState();
+export default function BlogCards({
+ filterCallback
+ }) {
+ const [cardData, setCardData] = React.useState();
const getPosts = async () => {
- const data = await getBlogPosts();
+ const data = await getBlogPosts(filterCallback);
console.log(data.topics)
const resultset = []
- let i = 0;
for (const topic of data.topics) {
- resultset.push(await getPostList(topic))
- i++
+ resultset.push(await getPostList(topic))
}
- setAns(resultset);
+ setCardData(resultset);
};
React.useEffect(() => {
getPosts();
- }, []);
+ }, [filterCallback]);
- if (ans) {
+ if (cardData) {
return (
- {ans.map(function(a, index){
+ {cardData.map(function(a, index){
return
!current);
+ }
+ return setFilters(e, text)} className={activeClass + ' ' + styles.tag}>{text}
+
+}
diff --git a/src/components/blog/BlogSidebar/BlogSidebarButton/styles.module.css b/src/components/blog/BlogSidebar/BlogSidebarButton/styles.module.css
new file mode 100644
index 000000000..847f4ead7
--- /dev/null
+++ b/src/components/blog/BlogSidebar/BlogSidebarButton/styles.module.css
@@ -0,0 +1,32 @@
+
+.tag {
+ font-size: 16px;
+ font-weight: 500;
+ color: var(--dev-secondary-text);
+ padding: 8px;
+ margin: 5px;
+ border-style: solid;
+ border-width: 1px;
+ border-color: var(--dev-text-color-normal);
+ transition: background-color 500ms;
+}
+
+.tagSelected {
+ font-size: 16px;
+ font-weight: 500;
+ background-color: var(--dev-secondary-text);
+ color: var(--dev-card-background);
+ padding: 8px;
+ margin: 5px;
+ border-style: solid;
+ border-width: 1px;
+ border-color: var(--dev-text-color-normal);
+ transition: background-color 500ms;
+}
+
+.tag:hover {
+ cursor: pointer;
+ background-color: var(--dev-text-color-normal);
+ color: var(--dev-card-background);
+}
+
diff --git a/src/components/blog/BlogSidebar/index.js b/src/components/blog/BlogSidebar/index.js
index c774ce522..baf4f5412 100644
--- a/src/components/blog/BlogSidebar/index.js
+++ b/src/components/blog/BlogSidebar/index.js
@@ -3,17 +3,60 @@ import clsx from 'clsx';
import styles from './styles.module.css';
import useBaseUrl from '@docusaurus/useBaseUrl';
import Link from '@docusaurus/Link';
+import { getTags } from '../../../services/DiscourseService';
+import BlogSidebarButton from './BlogSidebarButton';
-export default function BlogSidebar() {
- return (
-
+export default function BlogSidebar({
+ filterCallback
+ }) {
+ const [tagProductData, setTagProductData] = React.useState();
+ const [tagTechnologyData, setTagTechnologyData] = React.useState();
+ const [filteredProduct, setFilteredProduct] = React.useState();
-
- sidebar Works!
-
+ const getTagData = async () => {
+ const data = await getTags();
+ console.log(data.extras.tag_groups)
+ const tagTechnologyResultset = []
+ const tagProductResultset = []
+ for (const tagGroup of data.extras.tag_groups) {
+ if (tagGroup.id === 20) {
+ for (const tag of tagGroup.tags) {
+ tagProductResultset.push(tag.text)
+ }
+ }
+ if (tagGroup.id === 17) {
+ for (const tag of tagGroup.tags) {
+ tagTechnologyResultset.push(tag.text)
+ }
+ }
+ }
+ setTagProductData(tagProductResultset)
+ setTagTechnologyData(tagTechnologyResultset)
+ };
+ React.useEffect(() => {
+ getTagData();
+ }, []);
+ function setFilters(e, f) {
+ e.currentTarget.classList.toggle('selected');
+ console.log(e)
+ filterCallback(f)
+ }
-
- );
+ if (tagProductData && tagTechnologyData) {
+ return (
+
+
Posts by Product
+
+ {tagProductData.map(function(a, index){
+ return
+ // return
setFilters(e, a)} className={styles.tag}>{a}
+ })}
+
+
+ );
+ } else {
+ return ;
+ }
}
diff --git a/src/components/blog/BlogSidebar/styles.module.css b/src/components/blog/BlogSidebar/styles.module.css
index 3fee58941..1c9bcd27b 100644
--- a/src/components/blog/BlogSidebar/styles.module.css
+++ b/src/components/blog/BlogSidebar/styles.module.css
@@ -1,7 +1,34 @@
-
-
-.sideBarContainer {
+.sidebar {
width: 300px;
height: 100%;
-}
\ No newline at end of file
+ margin: 50px;
+}
+
+.tagHeader {
+ font-size: 22px;
+ font-weight: 700;
+}
+
+.tagContainer {
+ display: flex;
+}
+
+.tag {
+ font-size: 16px;
+ font-weight: 500;
+ color: var(--dev-secondary-text);
+ padding: 8px;
+ margin: 5px;
+ border-style: solid;
+ border-width: 1px;
+ border-color: var(--dev-text-color-normal);
+ transition: background-color 500ms;
+}
+
+.tag:hover {
+ cursor: pointer;
+ background-color: var(--dev-text-color-normal);
+ color: var(--dev-card-background);
+}
+
diff --git a/src/css/custom.css b/src/css/custom.css
index d543c0a18..31ad70df0 100644
--- a/src/css/custom.css
+++ b/src/css/custom.css
@@ -244,6 +244,7 @@
--dev-text-color-secondary: #0033a1;
--dev-secondary-text: #415364;
+ --dev-tag-highlight: #eaeef1;
--text-on-primary: #ffffff;
@@ -286,6 +287,7 @@
--dev-card-shadow: 0 4px 5px rgba(0, 0, 0, 0.2);
--dev-card-selected: 0 5px 5px rgba(107, 107, 107, 0.2);
--dev-secondary-text: #dae1e9;
+ --dev-tag-highlight: #00000075;
/*main hero card*/
--main-hero-card-background: #202122;
diff --git a/src/pages/blog.js b/src/pages/blog.js
index 25cb80f23..1fcb1df97 100644
--- a/src/pages/blog.js
+++ b/src/pages/blog.js
@@ -10,14 +10,22 @@ import BlogCards from '../components/blog/BlogCards';
import BlogSidebar from '../components/blog/BlogSidebar';
export default function Blog() {
+ const [filteredProduct, setFilteredProduct] = React.useState();
+
const {siteConfig} = useDocusaurusContext();
+
+ const handleClick = (data) => {
+ console.log(data)
+
+ setFilteredProduct(data)
+ };
return (
diff --git a/src/pages/blog.module.css b/src/pages/blog.module.css
index 403c5e36a..782d0c460 100644
--- a/src/pages/blog.module.css
+++ b/src/pages/blog.module.css
@@ -3,9 +3,9 @@
}
.blogSidbarContainer {
- flex: 10%;
+ flex: 5%;
}
.blogCardContainer {
- flex: 90%;
+ flex: 95%;
}
\ No newline at end of file
diff --git a/src/services/DiscourseService.js b/src/services/DiscourseService.js
index 6c2f5de42..a76335aa3 100644
--- a/src/services/DiscourseService.js
+++ b/src/services/DiscourseService.js
@@ -9,10 +9,16 @@ export async function getTopPosts() {
}
}
-export async function getBlogPosts() {
+export async function getBlogPosts(tags) {
+ let url = ''
+ if (tags) {
+ url = 'https://developer.sailpoint.com/discuss/search.json?q=category:blog+tags:' + tags
+ } else {
+ url = 'https://developer.sailpoint.com/discuss/search.json?q=category:blog'
+ }
try {
const response = await fetch(
- 'https://developer.sailpoint.com/discuss/search.json?q=category:blog',
+ url,
);
return await response.json();
} catch (error) {
@@ -30,3 +36,14 @@ export async function getTopic(id) {
return [];
}
}
+
+export async function getTags() {
+ try {
+ const response = await fetch(
+ 'https://developer.sailpoint.com/discuss/tags.json',
+ );
+ return await response.json();
+ } catch (error) {
+ return [];
+ }
+}
\ No newline at end of file