mirror of
https://github.com/LukeHagar/developer.sailpoint.com.git
synced 2025-12-06 12:27:46 +00:00
Merge pull request #280 from sailpoint-oss/feature/blog-marketplace-filter
switch filter to be AND instead of OR
This commit is contained in:
@@ -31,6 +31,7 @@ export default function AmbassadorCards({
|
|||||||
setLoadingCards(false);
|
setLoadingCards(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
getPosts();
|
getPosts();
|
||||||
setCardData(undefined);
|
setCardData(undefined);
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ export default function BlogCards({
|
|||||||
const [loadingCards, setLoadingCards] = React.useState(true);
|
const [loadingCards, setLoadingCards] = React.useState(true);
|
||||||
|
|
||||||
const getPosts = async () => {
|
const getPosts = async () => {
|
||||||
const data = await getBlogPosts(filterCallback.join(','));
|
const data = await getBlogPosts(filterCallback.join('+'));
|
||||||
const resultset = []
|
const resultset = []
|
||||||
if (data.topics) {
|
if (data.topics) {
|
||||||
for (const topic of data.topics) {
|
for (const topic of data.topics) {
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ export default function MarketplaceCards({filterCallback}) {
|
|||||||
const [loadingCards, setLoadingCards] = React.useState(true);
|
const [loadingCards, setLoadingCards] = React.useState(true);
|
||||||
|
|
||||||
const getPosts = async () => {
|
const getPosts = async () => {
|
||||||
const data = await getMarketplacePosts(filterCallback.join(','));
|
const data = await getMarketplacePosts(filterCallback.tags.join('+'), filterCallback.category);
|
||||||
console.log(data)
|
console.log(data)
|
||||||
const resultset = [];
|
const resultset = [];
|
||||||
if (data.topics) {
|
if (data.topics) {
|
||||||
|
|||||||
@@ -4,14 +4,35 @@ import styles from './styles.module.css';
|
|||||||
|
|
||||||
export default function MarketplaceSidebarButton({
|
export default function MarketplaceSidebarButton({
|
||||||
filterCallback,
|
filterCallback,
|
||||||
text
|
text,
|
||||||
|
id,
|
||||||
|
isCategory,
|
||||||
|
category
|
||||||
}) {
|
}) {
|
||||||
const [isActive, setIsActive] = React.useState(false);
|
const [isActive, setIsActive] = React.useState(false);
|
||||||
const activeClass = isActive ? styles.tagSelected : ''
|
let activeClass = ''
|
||||||
function setFilters(e, f) {
|
if (isCategory && category === id) {
|
||||||
filterCallback(f)
|
activeClass = styles.tagSelected
|
||||||
setIsActive(current => !current);
|
} else if (isCategory && category !== id) {
|
||||||
|
activeClass = ''
|
||||||
|
} else {
|
||||||
|
activeClass = isActive ? styles.tagSelected : ''
|
||||||
}
|
}
|
||||||
return <div key={text} onClick={(e) => setFilters(e, text)} className={activeClass + ' ' + styles.tag}>{text}</div>
|
//const activeClass = isActive ? styles.tagSelected : ''
|
||||||
|
function setFilters(e, id) {
|
||||||
|
if (isCategory) {
|
||||||
|
if (category === id) {
|
||||||
|
filterCallback({"category": "marketplace"})
|
||||||
|
} else {
|
||||||
|
filterCallback({"category": id})
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
filterCallback({"tag": id})
|
||||||
|
}
|
||||||
|
setIsActive(current => !current);
|
||||||
|
|
||||||
|
}
|
||||||
|
return <div key={text} onClick={(e) => setFilters(e, id)} className={activeClass + ' ' + styles.tag}>{text}</div>
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,21 +3,37 @@ import clsx from 'clsx';
|
|||||||
import styles from './styles.module.css';
|
import styles from './styles.module.css';
|
||||||
import useBaseUrl from '@docusaurus/useBaseUrl';
|
import useBaseUrl from '@docusaurus/useBaseUrl';
|
||||||
import Link from '@docusaurus/Link';
|
import Link from '@docusaurus/Link';
|
||||||
import { getTags } from '../../../services/DiscourseService';
|
import { getCatagories, getTags } from '../../../services/DiscourseService';
|
||||||
import MarketplaceSidebarButton from './MarketplaceSidebarButton';
|
import MarketplaceSidebarButton from './MarketplaceSidebarButton';
|
||||||
|
|
||||||
export default function MarketplaceSidebar({
|
export default function MarketplaceSidebar({
|
||||||
filterCallback
|
filterCallback,
|
||||||
|
selectedCategory
|
||||||
}) {
|
}) {
|
||||||
const [tagProductData, setTagProductData] = React.useState();
|
const [tagProductData, setTagProductData] = React.useState();
|
||||||
const [tagTechnologyData, setTagTechnologyData] = React.useState();
|
const [tagTechnologyData, setTagTechnologyData] = React.useState();
|
||||||
|
const [catIntegrationTypeData, setCatIntegrationTypeData] = React.useState();
|
||||||
const [filterTags, setFilterTags] = React.useState(true);
|
const [filterTags, setFilterTags] = React.useState(true);
|
||||||
|
|
||||||
const getTagData = async () => {
|
const getTagData = async () => {
|
||||||
const data = await getTags();
|
const tagData = await getTags();
|
||||||
|
const categoryData = await getCatagories();
|
||||||
|
|
||||||
const tagTechnologyResultset = []
|
const tagTechnologyResultset = []
|
||||||
const tagProductResultset = []
|
const tagProductResultset = []
|
||||||
for (const tagGroup of data.extras.tag_groups) {
|
const catIntegrationType = []
|
||||||
|
|
||||||
|
for (const category of categoryData.category_list.categories) {
|
||||||
|
// 59 for marketplace
|
||||||
|
if (category.id === 59) {
|
||||||
|
for (const subCategory of category.subcategory_list) {
|
||||||
|
|
||||||
|
catIntegrationType.push({"name": subCategory.name, "slug": subCategory.slug})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const tagGroup of tagData.extras.tag_groups) {
|
||||||
if (tagGroup.id === 20) {
|
if (tagGroup.id === 20) {
|
||||||
for (const tag of tagGroup.tags) {
|
for (const tag of tagGroup.tags) {
|
||||||
tagProductResultset.push(tag.text)
|
tagProductResultset.push(tag.text)
|
||||||
@@ -31,6 +47,7 @@ export default function MarketplaceSidebar({
|
|||||||
}
|
}
|
||||||
setTagProductData(tagProductResultset)
|
setTagProductData(tagProductResultset)
|
||||||
setTagTechnologyData(tagTechnologyResultset)
|
setTagTechnologyData(tagTechnologyResultset)
|
||||||
|
setCatIntegrationTypeData(catIntegrationType)
|
||||||
};
|
};
|
||||||
|
|
||||||
function toggleSeeAll() {
|
function toggleSeeAll() {
|
||||||
@@ -44,19 +61,19 @@ export default function MarketplaceSidebar({
|
|||||||
|
|
||||||
const filterText = filterTags ? 'See All Tags' : 'See Less Tags'
|
const filterText = filterTags ? 'See All Tags' : 'See Less Tags'
|
||||||
|
|
||||||
if (tagProductData && tagTechnologyData) {
|
if (tagProductData && catIntegrationTypeData) {
|
||||||
return (
|
return (
|
||||||
<div className={styles.sidebar}>
|
<div className={styles.sidebar}>
|
||||||
<div className={styles.tagHeader}>Items by Product</div>
|
<div className={styles.tagHeader}>Items by Product</div>
|
||||||
<div className={styles.tagContainer}>
|
<div className={styles.tagContainer}>
|
||||||
{tagProductData.map(function(a, index){
|
{tagProductData.map(function(a, index){
|
||||||
return <MarketplaceSidebarButton key={a} text={a} filterCallback={filterCallback}></MarketplaceSidebarButton>
|
return <MarketplaceSidebarButton key={a} text={a} id={a} filterCallback={filterCallback}></MarketplaceSidebarButton>
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.tagHeader}>Items by Identity Governance</div>
|
<div className={styles.tagHeader}>Items by Integration Type</div>
|
||||||
<div className={styles.tagContainer}>
|
<div className={styles.tagContainer}>
|
||||||
{tagTechnologyData.map(function(a, index){
|
{catIntegrationTypeData.map(function(a, index){
|
||||||
return <div key={'div' + a} className={index > 10 && filterTags ? styles.hidden : ''} > <MarketplaceSidebarButton key={a} text={a} filterCallback={filterCallback}></MarketplaceSidebarButton></div>
|
return <div key={'div' + a.slug} className={index > 10 && filterTags ? styles.hidden : ''} > <MarketplaceSidebarButton category={selectedCategory} isCategory={true} key={a.slug} text={a.name} id={a.slug} filterCallback={filterCallback}></MarketplaceSidebarButton></div>
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.seeAll} onClick={(e) => toggleSeeAll()}>
|
<div className={styles.seeAll} onClick={(e) => toggleSeeAll()}>
|
||||||
|
|||||||
@@ -10,28 +10,37 @@ import MarketplaceCards from '../components/marketplace/MarketplaceCards';
|
|||||||
import MarketplaceSidebar from '../components/marketplace/MarketplaceSidebar';
|
import MarketplaceSidebar from '../components/marketplace/MarketplaceSidebar';
|
||||||
|
|
||||||
export default function Marketplace() {
|
export default function Marketplace() {
|
||||||
const [filteredProduct, setFilteredProduct] = React.useState([]);
|
const [filteredProduct, setFilteredProduct] = React.useState({"category": "marketplace", "tags": []});
|
||||||
|
|
||||||
const {siteConfig} = useDocusaurusContext();
|
const {siteConfig} = useDocusaurusContext();
|
||||||
|
|
||||||
const handleClick = (data) => {
|
const handleClick = (data) => {
|
||||||
var tempFilter = filteredProduct.slice()
|
var tempFilter = filteredProduct.tags.slice()
|
||||||
|
|
||||||
const index = tempFilter.indexOf(data);
|
if (data.tag) {
|
||||||
if (index !== -1) {
|
const index = tempFilter.indexOf(data.tag);
|
||||||
tempFilter.splice(index, 1);
|
if (index !== -1) {
|
||||||
} else {
|
tempFilter.splice(index, 1);
|
||||||
tempFilter.push(data)
|
} else {
|
||||||
|
tempFilter.push(data.tag)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setFilteredProduct(tempFilter)
|
|
||||||
|
if (data.category) {
|
||||||
|
setFilteredProduct({"category": data.category, "tags": [tempFilter]})
|
||||||
|
} else {
|
||||||
|
setFilteredProduct({"category": filteredProduct.category, "tags": [tempFilter]})
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<Layout description="The SailPoint Developer Community has everything you need to build, extend, and automate scalable identity solutions.">
|
<Layout description="The SailPoint Developer Community has everything you need to build, extend, and automate scalable identity solutions.">
|
||||||
<main>
|
<main>
|
||||||
<MarketplaceBanner />
|
<MarketplaceBanner />
|
||||||
<div className={styles.blogContainer}>
|
<div className={styles.blogContainer}>
|
||||||
<div className={styles.blogSidbarContainer}><MarketplaceSidebar filterCallback={handleClick}/></div>
|
<div className={styles.blogSidbarContainer}><MarketplaceSidebar selectedCategory={filteredProduct.category} filterCallback={handleClick}/></div>
|
||||||
<div className={styles.blogCardContainer}><MarketplaceCards filterCallback={filteredProduct}/></div>
|
<div className={styles.blogCardContainer}><MarketplaceCards filterCallback={filteredProduct}/></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,6 @@ export async function checkImage(url) {
|
|||||||
const response = await fetch(
|
const response = await fetch(
|
||||||
url,
|
url,
|
||||||
);
|
);
|
||||||
console.log(response)
|
|
||||||
return true
|
return true
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return false;
|
return false;
|
||||||
@@ -69,12 +68,16 @@ export async function getBlogPosts(tags) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getMarketplacePosts(tags) {
|
export async function getMarketplacePosts(tags, category) {
|
||||||
|
let filterCategory = 'marketplace'
|
||||||
|
if (category) {
|
||||||
|
filterCategory = category
|
||||||
|
}
|
||||||
let url = ''
|
let url = ''
|
||||||
if (tags) {
|
if (tags) {
|
||||||
url = 'https://developer.sailpoint.com/discuss/search.json?q=category:marketplace+tags:' + tags
|
url = 'https://developer.sailpoint.com/discuss/search.json?q=category:' + filterCategory + '+tags:' + tags
|
||||||
} else {
|
} else {
|
||||||
url = 'https://developer.sailpoint.com/discuss/search.json?q=category:marketplace'
|
url = 'https://developer.sailpoint.com/discuss/search.json?q=category:' + filterCategory
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const response = await fetch(
|
const response = await fetch(
|
||||||
@@ -129,3 +132,14 @@ export async function getTags() {
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function getCatagories() {
|
||||||
|
try {
|
||||||
|
const response = await fetch(
|
||||||
|
'https://developer.sailpoint.com/discuss/categories.json',
|
||||||
|
);
|
||||||
|
return await response.json();
|
||||||
|
} catch (error) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user