updated a lot of css and changes for marketplace

This commit is contained in:
Philip Ellis
2023-07-13 15:59:22 -05:00
parent 3d2f42e095
commit 2d740a3f47
12 changed files with 123 additions and 80 deletions

View File

@@ -30,6 +30,20 @@ export default function MarketplaceCard({
<div onClick={(e) => setFilters(e)}> <div onClick={(e) => setFilters(e)}>
<div className={styles.card} > <div className={styles.card} >
<div className={styles.cardText}>
<img className={styles.cardImage} src={useBaseUrl(post.image)}></img>
<div className={styles.cardTitle}>{post.title}</div>
<div className={styles.tags}>
{post.tags?.map((tag, index) => {
if (index > 2) {
return '';
}
return <div key={tag} className={styles.tag}>{tag}</div>;
})}
</div>
<div className={styles.cardBody}>{post.excerpt}</div>
</div>
<div className={styles.cardData}> <div className={styles.cardData}>
<img className={styles.cardEye} src={useBaseUrl('/blog/eye-regular.svg')}></img> <img className={styles.cardEye} src={useBaseUrl('/blog/eye-regular.svg')}></img>
<div className={styles.cardCommentText}>{post.views}</div> <div className={styles.cardCommentText}>{post.views}</div>
@@ -45,19 +59,7 @@ export default function MarketplaceCard({
{badge} {badge}
<div className={styles.cardText}>
<img className={styles.cardImage} src={useBaseUrl(post.image)}></img>
<div className={styles.cardTitle}>{post.title}</div>
<div className={styles.tags}>
{post.tags?.map((tag, index) => {
if (index > 2) {
return '';
}
return <div key={tag} className={styles.tag}>{tag}</div>;
})}
</div>
<ReactMarkdown className={styles.cardBody}>{post.excerpt}</ReactMarkdown>
</div>

View File

@@ -2,7 +2,7 @@
.card { .card {
position: relative; position: relative;
margin-top: 20px; margin-top: 20px;
height: 650px; min-height: 460px;
/* UI Properties */ /* UI Properties */
background: var(--dev-card-background); background: var(--dev-card-background);
box-shadow: var(--dev-card-shadow); box-shadow: var(--dev-card-shadow);
@@ -24,11 +24,17 @@
.cardText { .cardText {
position: absolute; display: flex;
flex-direction: column;
margin: 22px; margin: 22px;
min-width: 170px; min-width: 170px;
top: 10px; margin-bottom: 75px;
left: 0; }
.cardImage {
border-radius: 4px;
justify-content: center;
aspect-ratio: 16/9;
} }
@@ -50,7 +56,7 @@
color: var(--dev-secondary-text); color: var(--dev-secondary-text);
background-color: var(--dev-tag-highlight); background-color: var(--dev-tag-highlight);
padding: 0px 8px; padding: 0px 8px;
margin-left: 5px; margin-right: 5px;
margin-top: 5px; margin-top: 5px;
} }
@@ -59,6 +65,7 @@
width: 100%; width: 100%;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
margin-bottom: 10px;
} }
@@ -133,6 +140,6 @@
right: 5px; right: 5px;
bottom: 0px; bottom: 0px;
margin-left: 5px; margin-left: 5px;
height: 120px; height: 80px;
width: 120px; width: 80px;
} }

View File

@@ -3,12 +3,12 @@ import styles from './styles.module.css';
import Link from '@docusaurus/Link'; import Link from '@docusaurus/Link';
import useBaseUrl from '@docusaurus/useBaseUrl'; import useBaseUrl from '@docusaurus/useBaseUrl';
import ThemedImage from '@theme/ThemedImage'; import ThemedImage from '@theme/ThemedImage';
import {addDarkToFileName} from '../../../util/util'; import { addDarkToFileName } from '../../../util/util';
import {Tab, Tabs, TabList, TabPanel} from 'react-tabs'; import { Tab, Tabs, TabList, TabPanel } from 'react-tabs';
import 'react-tabs/style/react-tabs.css'; import 'react-tabs/style/react-tabs.css';
import ReactMarkdown from 'react-markdown'; import ReactMarkdown from 'react-markdown';
import BounceLoader from 'react-spinners/BounceLoader'; import BounceLoader from 'react-spinners/BounceLoader';
export default function MarketplaceCardDetail({details, rawPost}) { export default function MarketplaceCardDetail({ details, rawPost }) {
const getDivText = (data, id) => { const getDivText = (data, id) => {
const requirementPosition = data.indexOf('id="' + id + '"'); const requirementPosition = data.indexOf('id="' + id + '"');
const requirementEndPosition = data.indexOf('</div>', requirementPosition); const requirementEndPosition = data.indexOf('</div>', requirementPosition);
@@ -19,13 +19,11 @@ export default function MarketplaceCardDetail({details, rawPost}) {
); );
const incorrectURLPattern = /upload:\/\/([^"]+)/g; const incorrectURLPattern = /upload:\/\/([^"]+)/g;
const correctURLPattern = const correctURLPattern =
'https://developer.identitysoon.com/discuss/uploads/short-url/$1'; 'https://developer.sailpoint.com/discuss/uploads/short-url/$1';
return validContent.replace(incorrectURLPattern, correctURLPattern); return validContent.replace(incorrectURLPattern, correctURLPattern);
} else { } else {
return 'No requirements found for this marketplace item'; return 'No requirements found for this marketplace item';
} }
// https://developer.identitysoon.com/discuss/uploads/short-url/f9rlt0eoj7RnpndvL0CHjcEesV0.png?dl=1\
// upload://f9rlt0eoj7RnpndvL0CHjcEesV0.png
}; };
const goToLink = (link) => { const goToLink = (link) => {
@@ -40,19 +38,10 @@ export default function MarketplaceCardDetail({details, rawPost}) {
<img <img
className={styles.detailImage} className={styles.detailImage}
src={useBaseUrl(details.image)}></img> src={useBaseUrl(details.image)}></img>
</div> </div>
<Tabs className={styles.detailTabs}> <Tabs className={styles.detailTabs}>
<TabList>
<Tab>Details</Tab>
<Tab>Requirements</Tab>
<Tab>Support</Tab>
</TabList>
<TabPanel>
<ReactMarkdown className={styles.detailTabContent}>
{getDivText(rawPost, 'details')}
</ReactMarkdown>
<button <button
className={styles.modalButton} className={styles.modalButton}
onClick={async () => { onClick={async () => {
@@ -65,20 +54,16 @@ export default function MarketplaceCardDetail({details, rawPost}) {
See More See More
</div> </div>
</button> </button>
<button <TabList>
className={styles.modalButton} <Tab>Details</Tab>
onClick={async () => { <Tab>Requirements</Tab>
console.log(getDivText(rawPost,'github')) <Tab>Support</Tab>
const regex = /\(([^)]+)\)/; </TabList>
goToLink(getDivText(rawPost,'github').match(regex)[1]);
}}> <TabPanel>
<div className={styles.modalButtonText}> <ReactMarkdown className={styles.detailTabContent}>
<img {getDivText(rawPost, 'details')}
className={styles.buttonImage} </ReactMarkdown>
src={useBaseUrl('/icons/github.svg')}></img>
GitHub
</div>
</button>
</TabPanel> </TabPanel>
<TabPanel> <TabPanel>
<ReactMarkdown className={styles.detailTabContent}> <ReactMarkdown className={styles.detailTabContent}>

View File

@@ -6,9 +6,13 @@
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
margin: 20px; margin: 20px 20px 0px 20px;
} }
.detailImageContainor {
display: flex;
flex-direction: column;
}
.detailImage { .detailImage {
border-radius: 40px; border-radius: 40px;
max-width: 400px; max-width: 400px;
@@ -28,7 +32,8 @@
} }
.detailTabs { .detailTabs {
margin: 10px; margin: 20px 10px 10px 10px;
position: relative;
} }
@@ -47,11 +52,15 @@
text-align: center; text-align: center;
width: 125px; width: 125px;
background-color: #ffffff31; background-color: #ffffff31;
position: absolute;
right: 0px;
top: -25px;
transition: all 0.3s;
} }
.modalButton:hover { .modalButton:hover {
cursor: pointer; cursor: pointer;
top: -2px; top: -23px;
box-shadow: 0 4px 5px rgba(0, 0, 0, 0.4); box-shadow: 0 4px 5px rgba(0, 0, 0, 0.4);
background-color: #dae1e9; background-color: #dae1e9;
color: #005fc4; color: #005fc4;

View File

@@ -19,7 +19,6 @@ export default function MarketplaceCards({filterCallback}) {
const getPosts = async () => { const getPosts = async () => {
const data = await getMarketplacePosts(filterCallback.tags.join('+'), filterCallback.category); const data = await getMarketplacePosts(filterCallback.tags.join('+'), filterCallback.category);
console.log(data)
const resultset = []; const resultset = [];
if (data.topics) { if (data.topics) {
for (const topic of data.topics) { for (const topic of data.topics) {
@@ -136,13 +135,22 @@ async function getPostList(topic) {
} }
function getavatarURL(avatar) { function getavatarURL(avatar) {
return 'https://developer.sailpoint.com' + avatar.replace('{size}', '120'); if (avatar.includes("developer.sailpoint.com")) {
return "https://developer.sailpoint.com" + avatar.replace("{size}", "120")
} else {
return avatar.replace("{size}", "120")
}
} }
function styleExcerpt(excerpt) { function styleExcerpt(excerpt) {
if (excerpt) { if (excerpt) {
// remove any strings that have colons between them // remove any strings that have colons between them
excerpt = excerpt.replace(/:[^:]*:/g, ''); excerpt = excerpt.replace(/:[^:]*:/g, '');
// get text between "summary" and "Repository Link"
const match = excerpt.match(/Summary([\s\S]*?)Repository Link/)
if (match) {
excerpt = match[1].trim()
}
if (excerpt.length > 150) { if (excerpt.length > 150) {
return excerpt.slice(0, 100) + '...'; return excerpt.slice(0, 100) + '...';
} else { } else {

View File

@@ -39,8 +39,8 @@
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
box-shadow: 2px 3px 10px rgba(0, 0, 0, 0.25); box-shadow: 2px 3px 10px rgba(0, 0, 0, 0.25);
border-radius: 20px; border-radius: 20px;
background-color: var(--dev-card-background); background-color: var(--dev-popup-background);
max-height: 100%; max-height: 80%;
max-width: 90%; max-width: 90%;
min-height: 80%; min-height: 80%;
scroll-behavior: auto; scroll-behavior: auto;

View File

@@ -10,6 +10,11 @@ export default function MarketplaceSidebarButton({
category category
}) { }) {
const [isActive, setIsActive] = React.useState(false); const [isActive, setIsActive] = React.useState(false);
const [checked, setChecked] = React.useState(false);
const handleChange = () => {
setChecked(!checked);
};
let activeClass = '' let activeClass = ''
if (isCategory && category === id) { if (isCategory && category === id) {
activeClass = styles.tagSelected activeClass = styles.tagSelected
@@ -18,21 +23,30 @@ export default function MarketplaceSidebarButton({
} else { } else {
activeClass = isActive ? styles.tagSelected : '' activeClass = isActive ? styles.tagSelected : ''
} }
let radioClass = styles.checkbox
if (isCategory) {
radioClass = styles.radio
}
//const activeClass = isActive ? styles.tagSelected : '' //const activeClass = isActive ? styles.tagSelected : ''
function setFilters(e, id) { function setFilters(e, id) {
if (isCategory) { if (isCategory) {
if (category === id) { if (category === id) {
filterCallback({"category": "marketplace"}) filterCallback({"category": "marketplace"})
setIsActive(false)
} else { } else {
filterCallback({"category": id}) filterCallback({"category": id})
setIsActive(true)
} }
} else { } else {
filterCallback({"tag": id}) filterCallback({"tag": id})
}
setIsActive(current => !current); setIsActive(current => !current);
}
} }
// return <div><input id={id} type='checkbox' className={radioClass} checked={activeClass != ''} onChange={handleChange}></input><label htmlFor={id} onClick={(e) => setFilters(e, id)} className={activeClass + ' ' + styles.tag} key={text}>{text}</label></div>
return <div key={text} onClick={(e) => setFilters(e, id)} className={activeClass + ' ' + styles.tag}>{text}</div> return <div key={text} onClick={(e) => setFilters(e, id)} className={activeClass + ' ' + styles.tag}>{text}</div>
} }

View File

@@ -17,7 +17,7 @@
font-size: 16px; font-size: 16px;
font-weight: 500; font-weight: 500;
background-color: var(--dev-secondary-text); background-color: var(--dev-secondary-text);
color: var(--dev-card-background); color: var(--dev-tag-selected-text);
padding: 8px; padding: 8px;
margin-right: 5px; margin-right: 5px;
margin-bottom: 5px; margin-bottom: 5px;
@@ -31,6 +31,25 @@
.tag:hover { .tag:hover {
cursor: pointer; cursor: pointer;
background-color: var(--dev-text-color-normal); background-color: var(--dev-text-color-normal);
color: var(--dev-card-background); color: var(--dev-tag-selected-text);
} }
/* .radio {
visibility: hidden;
position: absolute;
}
.radio + label:before{
height:12px;
width:12px;
margin-right: 2px;
content: " ";
display:inline-block;
vertical-align: baseline;
border:1px solid #777;
}
.radio:checked + label:before{
background-color: var(--ifm-color-primary);
}
.radio + label:before{
border-radius:50%;
} */

View File

@@ -24,16 +24,16 @@ export default function MarketplaceSidebar({
const catIntegrationType = [] const catIntegrationType = []
for (const category of categoryData.category_list.categories) { for (const category of categoryData.category_list.categories) {
// 59 for marketplace // 59 for production marketplace, 57 for staging marketplace
if (category.id === 57) { if (category.id === 59) {
for (const subCategory of category.subcategory_list) { for (const subCategory of category.subcategory_list) {
catIntegrationType.push({"name": subCategory.name, "slug": subCategory.slug}) catIntegrationType.push({"name": subCategory.name, "slug": subCategory.slug})
} }
} }
} }
for (const tagGroup of tagData.extras.tag_groups) { for (const tagGroup of tagData.extras.tag_groups) {
// 20 for production marketplace, 11 for staging marketplace
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)
@@ -73,13 +73,9 @@ export default function MarketplaceSidebar({
<div className={styles.tagHeader}>Items by Integration Type</div> <div className={styles.tagHeader}>Items by Integration Type</div>
<div className={styles.tagContainer}> <div className={styles.tagContainer}>
{catIntegrationTypeData.map(function(a, index){ {catIntegrationTypeData.map(function(a, index){
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> return <MarketplaceSidebarButton category={selectedCategory} isCategory={true} key={a.slug} text={a.name} id={a.slug} filterCallback={filterCallback}></MarketplaceSidebarButton>
})} })}
</div> </div>
<div className={styles.seeAll} onClick={(e) => toggleSeeAll()}>
{filterText}
{/* <img className={styles.caretDown} src={useBaseUrl('/blog/caret-down-thin.svg')}></img> */}
</div>
</div> </div>
); );

View File

@@ -251,6 +251,8 @@
/*card css*/ /*card css*/
--dev-card-background: #e9e9e963; --dev-card-background: #e9e9e963;
--dev-tag-selected-text: #ffffffef;
--dev-popup-background: #fdfdfd;
--dev-card-shadow: 0px 0px 0px #6b6b6b15; --dev-card-shadow: 0px 0px 0px #6b6b6b15;
--dev-main-card-shadow: 0px 20px 60px #00000015; --dev-main-card-shadow: 0px 20px 60px #00000015;
--dev-card-selected: 0 4px 5px rgba(0, 0, 0, 0.2); --dev-card-selected: 0 4px 5px rgba(0, 0, 0, 0.2);
@@ -288,12 +290,14 @@
/*card css*/ /*card css*/
--dev-card-background: #2a2b2d; --dev-card-background: #2a2b2d;
--dev-popup-background: #2a2b2d;
--dev-card-shadow: 0 0px 0px rgba(0, 0, 0, 0.2); --dev-card-shadow: 0 0px 0px rgba(0, 0, 0, 0.2);
--dev-main-card-shadow: 0 4px 5px rgba(0, 0, 0, 0.2); --dev-main-card-shadow: 0 4px 5px rgba(0, 0, 0, 0.2);
--dev-card-selected: 0 5px 5px rgba(151, 151, 151, 0.2); --dev-card-selected: 0 5px 5px rgba(151, 151, 151, 0.2);
--dev-secondary-text: #dae1e9; --dev-secondary-text: #dae1e9;
--dev-tag-highlight: #00000075; --dev-tag-highlight: #00000075;
--dev-button-hover: #c552ae40; --dev-button-hover: #c552ae40;
--dev-tag-selected-text: #2a2b2d;
/*main hero card*/ /*main hero card*/
--main-hero-card-background: #202122; --main-hero-card-background: #202122;

View File

@@ -26,11 +26,10 @@ export default function Marketplace() {
} }
} }
if (data.category) { if (data.category) {
setFilteredProduct({"category": data.category, "tags": [tempFilter]}) setFilteredProduct({"category": data.category, "tags": tempFilter})
} else { } else {
setFilteredProduct({"category": filteredProduct.category, "tags": [tempFilter]}) setFilteredProduct({"category": filteredProduct.category, "tags": tempFilter})
} }

View File

@@ -75,9 +75,9 @@ export async function getMarketplacePosts(tags, category) {
} }
let url = '' let url = ''
if (tags) { if (tags) {
url = 'https://developer.identitysoon.com/discuss/search.json?q=category:' + filterCategory + '+tags:' + tags url = 'https://developer.sailpoint.com/discuss/search.json?q=category:' + filterCategory + '+tags:' + tags
} else { } else {
url = 'https://developer.identitysoon.com/discuss/search.json?q=category:' + filterCategory url = 'https://developer.sailpoint.com/discuss/search.json?q=category:' + filterCategory
} }
try { try {
const response = await fetch( const response = await fetch(
@@ -92,7 +92,7 @@ export async function getMarketplacePosts(tags, category) {
export async function getTopic(id) { export async function getTopic(id) {
try { try {
const response = await fetch( const response = await fetch(
'https://developer.identitysoon.com/discuss/t/' + id + '.json', 'https://developer.sailpoint.com/discuss/t/' + id + '.json',
); );
return await response.json(); return await response.json();
} catch (error) { } catch (error) {
@@ -103,7 +103,7 @@ export async function getTopic(id) {
export async function getMarketplaceTopic(id) { export async function getMarketplaceTopic(id) {
try { try {
const response = await fetch( const response = await fetch(
'https://developer.identitysoon.com/discuss/t/' + id + '.json', 'https://developer.sailpoint.com/discuss/t/' + id + '.json',
); );
return await response.json(); return await response.json();
} catch (error) { } catch (error) {
@@ -114,7 +114,7 @@ export async function getMarketplaceTopic(id) {
export async function getMarketplaceTopicRaw(id) { export async function getMarketplaceTopicRaw(id) {
try { try {
const response = await fetch( const response = await fetch(
'https://developer.identitysoon.com/discuss/raw/' + id + '.json', 'https://developer.sailpoint.com/discuss/raw/' + id + '.json',
); );
return await response.text(); return await response.text();
} catch (error) { } catch (error) {
@@ -125,7 +125,7 @@ export async function getMarketplaceTopicRaw(id) {
export async function getTags() { export async function getTags() {
try { try {
const response = await fetch( const response = await fetch(
'https://developer.identitysoon.com/discuss/tags.json', 'https://developer.sailpoint.com/discuss/tags.json',
); );
return await response.json(); return await response.json();
} catch (error) { } catch (error) {
@@ -136,7 +136,7 @@ export async function getTags() {
export async function getCatagories() { export async function getCatagories() {
try { try {
const response = await fetch( const response = await fetch(
'https://developer.identitysoon.com/discuss/categories.json', 'https://developer.sailpoint.com/discuss/categories.json',
); );
return await response.json(); return await response.json();
} catch (error) { } catch (error) {