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