@@ -2,12 +2,134 @@ | |||
ol.breadcrumb { | |||
margin-bottom: 0rem; | |||
} | |||
.zInTop { | |||
z-index: 99; | |||
} | |||
.scrollspy { | |||
padding: 0px; | |||
} | |||
.filterHeader { | |||
z-index: -1; | |||
display: none; | |||
height:0px; | |||
width:100%; | |||
} | |||
.filterHeaderShow { | |||
background-color: aqua; | |||
z-index: -1; | |||
display: block; | |||
witdh:100%; | |||
height:2rem; | |||
animation: filterHeaderAnim .25s; | |||
} | |||
.filterHeaderHide { | |||
z-index: -1; | |||
display: block; | |||
witdh:100%; | |||
animation: filterHeaderAnimRev .25s; | |||
} | |||
.filterHeaderMenu { | |||
display: none; | |||
z-index: 1; | |||
width:100%; | |||
} | |||
.filterHeaderMenuShow { | |||
display: block; | |||
z-index: 1; | |||
position: absolute; | |||
width:100%; | |||
top:6rem; | |||
animation: filterHeaderMenuAnim .25s; | |||
} | |||
.filterHeaderMenuHide { | |||
display: block; | |||
z-index: 1; | |||
position: absolute; | |||
width:100%; | |||
top:4rem; | |||
animation: filterHeaderMenuAnimRev .25s; | |||
} | |||
@keyframes filterHeaderAnim { | |||
0% {height:0rem;} | |||
100% {height:2rem;} | |||
} | |||
@keyframes filterHeaderAnimRev { | |||
0% {height:2rem;} | |||
100% {height:0rem;} | |||
} | |||
@keyframes filterHeaderMenuAnim { | |||
0% {top:4rem;} | |||
100% {top:6rem;} | |||
} | |||
@keyframes filterHeaderMenuAnimRev { | |||
0% {top:6rem;} | |||
100% {top:4rem;} | |||
} | |||
.artToggle { | |||
height:50%; | |||
margin-top:5px; | |||
position: absolute; | |||
right: 10px; | |||
} | |||
.badge { | |||
margin-right: .25rem; | |||
} | |||
.secondary { | |||
color:#6c757d; | |||
} | |||
span.filter { | |||
position:absolute; | |||
right:10px; | |||
transition: .25s; | |||
color:#6c757d; | |||
} | |||
span.filter:hover { | |||
position:absolute; | |||
right:10px; | |||
color:#000; | |||
transition: .25s; | |||
} | |||
.filler { | |||
padding: 16px 8px; | |||
color: white; | |||
-webkit-transition: .35s; | |||
transition: .35s; | |||
} | |||
.navLink:hover { | |||
text-decoration: none; | |||
} | |||
.navActive1 { | |||
background-color: #507DBC; | |||
} | |||
.navActive2 { | |||
background-color: #A1C6EA; | |||
} | |||
.navActive3 { | |||
background-color: #BBD1EA; | |||
} | |||
.navActive4 { | |||
background-color: #DAE3E5; | |||
} | |||
.nav1:hover { | |||
background-color: #507DBC; | |||
} | |||
.nav2:hover { | |||
background-color: #A1C6EA; | |||
} | |||
.nav3:hover { | |||
background-color: #BBD1EA; | |||
color:#888; | |||
} | |||
.nav4:hover { | |||
background-color: #DAE3E5; | |||
color:#444; | |||
} | |||
.greeterJumbotron { | |||
background-image: url('./stedsatnight.jpg'); | |||
background-size: cover; | |||
background-repeat: no-repeat; | |||
color:#fff; | |||
height: 89vh; | |||
background-color: #212529; | |||
margin-bottom: 0px; | |||
border-radius: 0px; | |||
@@ -64,4 +186,39 @@ ul.frontPage { | |||
.inSection { | |||
color: blue; | |||
} | |||
} | |||
.badge.badge-outlined.badge-default { | |||
background: #fff; | |||
color: #B0BEC5 | |||
} | |||
.badge.badge-outlined.badge-primary { | |||
background: #fff; | |||
color: #2196F3 | |||
} | |||
.badge.badge-outlined.badge-secondary { | |||
background: #fff; | |||
color: #323a45 | |||
} | |||
.badge.badge-outlined.badge-success { | |||
background: #fff; | |||
color: #64DD17 | |||
} | |||
.badge.badge-outlined.badge-warning { | |||
background: #fff; | |||
color: #FFD600 | |||
} | |||
.badge.badge-outlined.badge-info { | |||
background: #fff; | |||
color: #29B6F6 | |||
} | |||
.badge.badge-outlined.badge-danger { | |||
background: #fff; | |||
color: #ef1c1c | |||
} |
@@ -2,4 +2,57 @@ | |||
.iconText { | |||
display: none; | |||
} | |||
} | |||
.card-img-top { | |||
height:180px; | |||
} | |||
.flex-div { | |||
width: 100%; | |||
display: flex; | |||
margin-top: 2rem; | |||
flex-wrap: wrap; | |||
align-items: center; | |||
} | |||
@media (max-width:1199px) and (min-width:1001px){ | |||
.cardContainer { | |||
margin-right: 6%; | |||
margin-left: 6%; | |||
margin-bottom: 1rem; | |||
} | |||
} | |||
@media (max-width:1000px) and (min-width:700px){ | |||
.cardContainer { | |||
margin-right: 1%; | |||
margin-left: 1%; | |||
margin-bottom: 1rem; | |||
} | |||
} | |||
@media (max-width:700px) and (min-width:575px){ | |||
.cardContainer { | |||
margin-right: 12%; | |||
margin-left: 12%; | |||
margin-bottom: 1rem; | |||
} | |||
} | |||
@media (min-width:1200px), (max-width:574px){ | |||
.cardContainer { | |||
margin-right: .5rem; | |||
margin-left: .5rem; | |||
margin-bottom: 1rem; | |||
} | |||
} | |||
@media (max-height:1080px) { | |||
.greeterJumbotron { | |||
height: 89vh; | |||
} | |||
} | |||
@media (min-height:1081px) and (max-height:1819px) { | |||
.greeterJumbotron { | |||
height:91vh; | |||
} | |||
} | |||
@media (min-height:1820px){ | |||
.greeterJumbotron { | |||
height:94.5vh; | |||
} | |||
} |
@@ -35,8 +35,9 @@ | |||
<link rel="stylesheet" href="customMediaQuery.css"/> | |||
</head> | |||
<body style="#3300ff"> | |||
<body > | |||
<link rel="stylesheet" href="custom.css"/> | |||
<noscript><h1 class="noScript">Hello, My name is Ruben Ruiz.<br>I'm a Computer Science Student at St. Edward's University.<br>To learn more about me, check out my <a class="noScript" href="https://linkedin.com/in/runlevel0">linkedin</a>, <a class="noScript" href="http://github.com/runlevelzero">github</a>, and <a class="noScript" href="https://git.rubenruiz.org">personal projects</a>.<br>Or enable JavaScript to view my portfolio</h1></noscript> | |||
<div id="root"></div> | |||
<!-- |
@@ -14,5 +14,5 @@ a.noScript { | |||
color: #333333; | |||
} | |||
a.noScript:hover { | |||
color: #999999; | |||
color: #888; | |||
} |
@@ -18,7 +18,7 @@ export class GreeterJumboTron extends Component { | |||
{this.getProperGreeting()}, my name is Ruben Ruiz. | |||
</h1> | |||
<h5> | |||
I am a Computer Science student at St. Edward's University. | |||
I am a Computer Science student at St. Edward's University.<br></br>You can scroll down to learn more about me or click the button below to | |||
</h5> | |||
<br/> | |||
<Link to="/projects"><Button variant="info">Check out some of my projects</Button></Link> |
@@ -6,14 +6,12 @@ class HomePageNav extends Component { | |||
render() { | |||
return ( | |||
<Navbar bg="dark" variant="dark" sticky="top" className=""> | |||
<Navbar bg="dark" variant="dark" sticky="top" className="scrollspy"> | |||
<Navbar.Collapse className="mr-auto"> | |||
<Navbar.Text> | |||
<a style={{"paddingRight":"5px"}} href="#aboutMe">{<span className="">~/AboutMe</span>}</a> | |||
<a style={{"paddingRight":"5px"}} href="#experience">{<span className="">~/Experience</span>}</a> | |||
<a style={{"paddingRight":"5px"}} href="#relevantCoursework">{<span className="">~/Courses</span>}</a> | |||
<a style={{"paddingRight":"5px"}} href="#Skills">{<span className="">~/Skills</span>}</a> | |||
</Navbar.Text> | |||
<a href="#aboutMe" className="navLink">{<div className="filler nav1">~/AboutMe</div>}</a> | |||
<a href="#experience" className="navLink">{<div className="filler nav2">~/Experience</div>}</a> | |||
<a href="#relevantCoursework" className="navLink">{<div className="filler nav3">~/Courses</div>}</a> | |||
<a href="#skills" className="navLink">{<div className="filler nav4">~/Skills</div>}</a> | |||
</Navbar.Collapse> | |||
</Navbar> | |||
); |
@@ -0,0 +1,38 @@ | |||
import React, { Component } from 'react'; | |||
import {Breadcrumb, Badge} from 'react-bootstrap' | |||
import FilterTags from './FilterTags' | |||
class FilterHeader extends Component { | |||
state = { | |||
showArt: true | |||
} | |||
toggleArt = (evt) => { | |||
if(this.state.showArt){ | |||
evt.target.className = "artToggle badge badge-light" | |||
evt.target.innerHTML = "Hiding Art Projects" | |||
this.setState({showArt: false}) | |||
this.props.toggleArt() | |||
} | |||
else { | |||
evt.target.className = "artToggle badge badge-info" | |||
evt.target.innerHTML = "Showing Art Projects" | |||
this.setState({showArt: true}) | |||
this.props.toggleArt() | |||
} | |||
} | |||
render() { | |||
return ( | |||
<React.Fragment> | |||
<div className="filterHeader"></div> | |||
<Breadcrumb className="filterHeaderMenu"> | |||
<FilterTags showOnly={this.props.showOnly} tags={this.props.tags}/> | |||
<Badge variant="info" className="artToggle" onClick={this.toggleArt}>Showing Art Projects</Badge> | |||
</Breadcrumb> | |||
</React.Fragment> | |||
); | |||
} | |||
} | |||
export default FilterHeader; |
@@ -0,0 +1,36 @@ | |||
import React, { Component } from 'react' | |||
import {Badge} from 'react-bootstrap' | |||
export class FilterTags extends Component { | |||
state = { | |||
selected: false | |||
} | |||
showThis = (evt) => { | |||
if(!this.state.selected){ | |||
evt.target.className += " badge-outlined" | |||
this.props.showOnly(this.getTagName(evt.target)) | |||
this.setState({selected:true}) | |||
} | |||
else { | |||
this.props.showOnly(this.getTagName(evt.target)) | |||
evt.target.className = evt.target.className.split(" ").slice(0,-1).join(' ') | |||
this.setState({selected:false}) | |||
} | |||
} | |||
getTagName = (element) => { | |||
return element.innerHTML | |||
} | |||
render() { | |||
return ( | |||
<div style={{paddingLeft:"5px", paddingRight:"5px", marginBottom:"0px"}}> | |||
{this.props.tags.map((tag)=> ( | |||
<Badge onClick={this.showThis} className={(this.state.selected)? "badge-outlined" : ""} variant={tag.variant}> | |||
{tag.title} | |||
</Badge> | |||
))} | |||
</div> | |||
) | |||
} | |||
} | |||
export default FilterTags |
@@ -1,21 +1,163 @@ | |||
import React, { Component } from 'react' | |||
import {Container, Breadcrumb, CardDeck, CardColumns} from 'react-bootstrap' | |||
import {Container, Breadcrumb, CardDeck} from 'react-bootstrap' | |||
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome' | |||
import {faFilter} from '@fortawesome/free-solid-svg-icons' | |||
import FilterHeader from './FilterHeader' | |||
import ProjectCards from './ProjectCards' | |||
import 'whatwg-fetch' | |||
export class ProjectCardView extends Component { | |||
state = { | |||
showFilter: false, | |||
showArt: true, | |||
projects: [], | |||
display:[], | |||
tags:[], | |||
filter:[] | |||
} | |||
showOnly = (tagName) => { | |||
if(this.state.filter.length === 1 && this.state.filter[0].title === tagName) { | |||
if(this.state.showArt) { | |||
this.setState({filter:this.state.tags}) | |||
this.setState({display:this.state.projects}) | |||
this.updateVisibleProjects(this.state.tags) | |||
} | |||
else { | |||
this.setState({showArt:true}) | |||
this.toggleArt() | |||
} | |||
} | |||
else { | |||
var newFilter = [this.findTag(tagName)] | |||
this.setState({filter:newFilter}) | |||
this.updateVisibleProjects(newFilter) | |||
} | |||
} | |||
findTag = (tagName) => { | |||
console.log(tagName) | |||
for(var i = 0; i < this.state.tags.length; i++) { | |||
console.log(this.state.tags[i]) | |||
if(this.state.tags[i].title === tagName) { | |||
return this.state.tags[i] | |||
} | |||
} | |||
return | |||
} | |||
getProjects = async (count) => { | |||
const response = await fetch(`https://api.rubenruiz.org/projects?count=${count}`,{method:"POST"}) | |||
const json = await response.json(); | |||
//console.log(json) | |||
return json | |||
//return [{"_id":"5df91e782ce8904f68a326ba","title":"Kanban","coverImageUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/Kanban/kanban.png","textUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/Kanban/README.md","shortDesc":"A Kanban board app I made with a team as an intern at Inventive","oneLiner":"Making a kanban board web app","tags":[{"title":"React","variant":"primary"}],"viewCount":77,"__v":0},{"_id":"5e463570be1e980bd1581351","title":"Crochet Tag Project","coverImageUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/CrochetTagProject/20200130_164526.jpg","textUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/CrochetTagProject/readme.md","shortDesc":"A crochet tag I placed in the CS lab at St. Eds.","oneLiner":"Taking crochet to the streets","viewCount":76,"tags":[{"title":"Crochet","variant":"info"}],"__v":0},{"_id":"5ea20178c7524c732c5a49e7","title":"Crafting Interpreters: Making a Language","coverImageUrl":"","textUrl":"","shortDesc":"Making a Lox Interpreter in Java","oneLiner":"Putting the 'j' in jLox","viewCount":2,"tags":[{"title":"Java","variant":"secondary"}]},{"_id":"5ea20257c7524c732c5a49e8","title":"Art Supply Display","coverImageUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/artSupplies/e19ba799-d5d4-47c4-b8bd-6d7805f24a6f.jpg","textUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/artSupplies/readme.md","shortDesc":"Supplies that I used for my textile arts class","oneLiner":"Let's get crafty now!","viewCount":13,"tags":[{"title":"Crochet","variant":"info"},{"title":"Embroidery","variant":"info"}]},{"_id":"5eb1bf0eeba5712c5bd97415","title":"Yarn Graffiti Project","coverImageUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/YarnGrafittiProjectFiles/cover.jpg","textUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/YarnGrafittiProjectFiles/readme.md","shortDesc":"A much larger crochet tag that was placed around my local surroundings","oneLiner":"Taking crochet to the streets once more","tags":[{"title":"Crochet","variant":"info"}],"viewCount":14},{"_id":"5eb1cb76eba5712c5bd97416","title":"String Meditation","coverImageUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/StringProject/cover.jpg","textUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/StringProject/readme.md","shortDesc":"Making some string whilst putting everything into context","oneLiner":"Breathe In... Twist Twist Twist... Breathe Out... Turn...","viewCount":18,"tags":[{"title":"Misc Art","variant":"info"}]},{"_id":"5eb1cfdaeba5712c5bd97417","title":"Embroidery Project","coverImageUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/embroideryProject/cover.jpg","textUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/embroideryProject/readme.md","shortDesc":"Taking my first steps into embroidery and putting it all in perspective","oneLiner":"Putting some perspective on boro designs","tags":[{"title":"Embroidery","variant":"info"}],"viewCount":18},{"_id":"5eb1dceeeba5712c5bd97418","title":"Mobile Programming Assignments","coverImageUrl":"","textUrl":"","shortDesc":"Some of the Homework and In class assignments for Mobile Programming","oneLiner":"Swiftly making apps","viewCount":2,"tags":[{"title":"Swift","variant":"danger"}]},{"_id":"5eb1dd80eba5712c5bd97419","title":"Mobile Programming Final Assignment","coverImageUrl":"","textUrl":"","shortDesc":"How I made Coup in Swift","oneLiner":"Swiftly making apps","viewCount":0,"tags":[{"title":"Swift","variant":"danger"},{"title":"NodeJS","variant":"primary"}]}] | |||
//window.fetch("api.rubenruiz.org/projects") | |||
} | |||
getAllProjects = async () => { | |||
await this.getProjects(-1) | |||
.then(res => { | |||
this.setState({projects:res}) | |||
this.setState({display:res}) | |||
this.getTags(res) | |||
return res | |||
}) | |||
} | |||
updateVisibleProjects = (filter) => { | |||
var display = [] | |||
for(var i = 0; i < this.state.projects.length; i++) { | |||
var containsTag = false | |||
for(var j = 0; j < this.state.projects[i].tags.length; j++) { | |||
for (var k = 0; k < filter.length; k++) { | |||
if(containsTag) break; | |||
console.log(`(${this.state.projects[i].title})${this.state.projects[i].tags[j].title}: *${filter[k].title}*`) | |||
if(this.state.projects[i].tags[j].title === filter[k].title) containsTag = true | |||
} | |||
} | |||
if(containsTag) display.push(this.state.projects[i]) | |||
} | |||
this.setState({display}) | |||
} | |||
toggleArt =() => { | |||
if(this.state.showArt) { | |||
this.setState({showArt:false}) | |||
var filter = [] | |||
for(var i =0; i < this.state.tags.length; i++) { | |||
if(this.state.tags[i].variant !== "info") { | |||
filter.push(this.state.tags[i]) | |||
} | |||
} | |||
this.setState({filter}) | |||
this.updateVisibleProjects(filter) | |||
} | |||
else { | |||
this.setState({showArt:true}) | |||
this.setState({filter:this.state.tags}) | |||
this.updateVisibleProjects(this.state.tags) | |||
} | |||
} | |||
getNumProjects = async (num) => { | |||
await this.getProjects(num) | |||
.then(res => { | |||
var projects = res | |||
if(num < res.length) { | |||
projects = res.slice(0,num) | |||
} | |||
return projects | |||
}).then(res=> { | |||
this.setState({projects:res}) | |||
return res | |||
}) | |||
} | |||
getTags = (cards) => { | |||
var cardObj = {}; | |||
for(var i = 0; i < cards.length; i++) { | |||
cards[i].tags.map((tag) => ( | |||
cardObj[tag.title] = tag | |||
)) | |||
} | |||
var cardList = Object.values(cardObj) | |||
cardList.sort((a, b) =>{return (a.variant > b.variant)? 1 : -1}) | |||
this.setState({tags:cardList}) | |||
this.setState({filter:cardList}) | |||
} | |||
toggleFilter = (evt) => { | |||
if(!this.state.showFilter) { | |||
document.querySelector(".filterHeader").className = "filterHeaderShow" | |||
document.querySelector(".filterHeaderMenu").className = "filterHeaderMenuShow" | |||
this.setState({showFilter:true}) | |||
} | |||
else { | |||
document.querySelector(".filterHeaderShow").className = "filterHeaderHide" | |||
document.querySelector(".filterHeaderMenuShow").className = "filterHeaderMenuHide" | |||
window.setTimeout(() => { | |||
document.querySelector(".filterHeaderHide").className = "filterHeader" | |||
document.querySelector(".filterHeaderMenuHide").className = "filterHeaderMenu" | |||
},249); | |||
this.setState({showFilter:false}) | |||
} | |||
} | |||
componentDidMount(){ | |||
this.getAllProjects() | |||
} | |||
render() { | |||
return ( | |||
<React.Fragment> | |||
<Breadcrumb> | |||
<Breadcrumb.Item active>Projects</Breadcrumb.Item> | |||
<Breadcrumb className="zInTop"> | |||
<Breadcrumb.Item active className="zInTop">Projects</Breadcrumb.Item> | |||
<span className="filter" onClick={this.toggleFilter}><FontAwesomeIcon icon={faFilter}/></span> | |||
</Breadcrumb> | |||
<br/> | |||
<FilterHeader showOnly={this.showOnly} tags={this.state.filter} toggleArt={this.toggleArt}/> | |||
<Container> | |||
<CardColumns> | |||
<ProjectCards/> | |||
</CardColumns> | |||
<div className="flex-div"> | |||
<ProjectCards cards={this.state.display}/> | |||
</div> | |||
</Container> | |||
</React.Fragment> | |||
) |
@@ -10,10 +10,11 @@ export class ProjectCards extends Component { | |||
projects : [] | |||
} | |||
getProjects = async (count) => { | |||
const response = await fetch(`https://api.rubenruiz.org/projects?count=${count}`,{method:"POST"}) | |||
const json = await response.json(); | |||
console.log(json) | |||
return json | |||
//const response = await fetch(`https://api.rubenruiz.org/projects?count=${count}`,{method:"POST"}) | |||
//const json = await response.json(); | |||
//console.log(json) | |||
//return json | |||
return [{"_id":"5df91e782ce8904f68a326ba","title":"Kanban","coverImageUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/Kanban/kanban.png","textUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/Kanban/README.md","shortDesc":"A Kanban board app I made with a team as an intern at Inventive","oneLiner":"Making a kanban board web app","tags":[{"title":"React","variant":"primary"}],"viewCount":77,"__v":0},{"_id":"5e463570be1e980bd1581351","title":"Crochet Tag Project","coverImageUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/CrochetTagProject/20200130_164526.jpg","textUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/CrochetTagProject/readme.md","shortDesc":"A crochet tag I placed in the CS lab at St. Eds.","oneLiner":"Taking crochet to the streets","viewCount":76,"tags":[{"title":"Crochet","variant":"info"}],"__v":0},{"_id":"5ea20178c7524c732c5a49e7","title":"Crafting Interpreters: Making a Language","coverImageUrl":"","textUrl":"","shortDesc":"Making a Lox Interpreter in Java","oneLiner":"Putting the 'j' in jLox","viewCount":2,"tags":[{"title":"Java","variant":"secondary"}]},{"_id":"5ea20257c7524c732c5a49e8","title":"Art Supply Display","coverImageUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/artSupplies/e19ba799-d5d4-47c4-b8bd-6d7805f24a6f.jpg","textUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/artSupplies/readme.md","shortDesc":"Supplies that I used for my textile arts class","oneLiner":"Let's get crafty now!","viewCount":13,"tags":[{"title":"Crochet","variant":"info"},{"title":"Embroidery","variant":"info"}]},{"_id":"5eb1bf0eeba5712c5bd97415","title":"Yarn Graffiti Project","coverImageUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/YarnGrafittiProjectFiles/cover.jpg","textUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/YarnGrafittiProjectFiles/readme.md","shortDesc":"A much larger crochet tag that was placed around my local surroundings","oneLiner":"Taking crochet to the streets once more","tags":[{"title":"Crochet","variant":"info"}],"viewCount":14},{"_id":"5eb1cb76eba5712c5bd97416","title":"String Meditation","coverImageUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/StringProject/cover.jpg","textUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/StringProject/readme.md","shortDesc":"Making some string whilst putting everything into context","oneLiner":"Breathe In... Twist Twist Twist... Breathe Out... Turn...","viewCount":18,"tags":[{"title":"Misc Art","variant":"info"}]},{"_id":"5eb1cfdaeba5712c5bd97417","title":"Embroidery Project","coverImageUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/embroideryProject/cover.jpg","textUrl":"https://raw.githubusercontent.com/runlevelzero/Portfolio-WriteUps/master/embroideryProject/readme.md","shortDesc":"Taking my first steps into embroidery and putting it all in perspective","oneLiner":"Putting some perspective on boro designs","tags":[{"title":"Embroidery","variant":"info"}],"viewCount":18},{"_id":"5eb1dceeeba5712c5bd97418","title":"Mobile Programming Assignments","coverImageUrl":"","textUrl":"","shortDesc":"Some of the Homework and In class assignments for Mobile Programming","oneLiner":"Swiftly making apps","viewCount":2,"tags":[{"title":"Swift","variant":"danger"}]},{"_id":"5eb1dd80eba5712c5bd97419","title":"Mobile Programming Final Assignment","coverImageUrl":"","textUrl":"","shortDesc":"How I made Coup in Swift","oneLiner":"Swiftly making apps","viewCount":0,"tags":[{"title":"Swift","variant":"danger"},{"title":"NodeJS","variant":"primary"}]}] | |||
//window.fetch("api.rubenruiz.org/projects") | |||
} | |||
getAllProjects = async () => { | |||
@@ -48,24 +49,23 @@ export class ProjectCards extends Component { | |||
} | |||
} | |||
render() { | |||
console.log(this.state.projects) | |||
return ( | |||
this.state.projects.map((project) =>( | |||
<Link to={`/proj/${project._id}`} style={{ textDecoration: 'none' }}> | |||
<Card style={{width:'20rem','color':'#000'}}> | |||
<Card.Img variant='top' src={project.coverImageUrl}/> | |||
<CardTags tags={project.tags}/> | |||
<Card.Title style={{padding:"5px"}}> | |||
{project.title} | |||
</Card.Title> | |||
<Card.Text style={{paddingLeft:"5px", paddingRight:"5px", paddingBottom:"5px", paddingTop:"0px"}}> | |||
{project.shortDesc} | |||
</Card.Text> | |||
</Card> | |||
</Link> | |||
this.props.cards.map((project) =>( | |||
<div className="cardContainer"> | |||
<Link to={`/proj/${project._id}`} style={{ textDecoration: 'none' }}> | |||
<Card style={{width:'20rem', 'color':'#000'}}> | |||
<Card.Img variant='top' src={project.coverImageUrl}/> | |||
<CardTags tags={project.tags}/> | |||
<Card.Title style={{padding:"5px"}}> | |||
{project.title} | |||
</Card.Title> | |||
<Card.Text style={{paddingLeft:"5px", paddingRight:"5px", paddingBottom:"5px", paddingTop:"0px"}}> | |||
{project.shortDesc} | |||
</Card.Text> | |||
</Card> | |||
</Link> | |||
</div> | |||
) | |||
) | |||
) |