diff --git a/src/assets/images/openSourceCarousel.png b/src/assets/images/openSourceCarousel.png new file mode 100644 index 00000000..d99ecc6a Binary files /dev/null and b/src/assets/images/openSourceCarousel.png differ diff --git a/src/assets/stylesheets/main.scss b/src/assets/stylesheets/main.scss index 9f75088a..939a5b02 100644 --- a/src/assets/stylesheets/main.scss +++ b/src/assets/stylesheets/main.scss @@ -35,5 +35,6 @@ @import "pages/about-us"; @import "pages/contact-us"; @import "pages/testimonial"; +@import "pages/opensource"; /* offcanvas */ @import "offcanvas"; diff --git a/src/assets/stylesheets/pages/_opensource.scss b/src/assets/stylesheets/pages/_opensource.scss new file mode 100644 index 00000000..83cbfe42 --- /dev/null +++ b/src/assets/stylesheets/pages/_opensource.scss @@ -0,0 +1,107 @@ +.section-opensource { + margin-top: rem(75px); + .section-content { + padding: rem(150px 0); + + @include media-breakpoint-down(sm) { + padding: 0; + } + + &.section-even { + background-color: #fafafa; + } + &.section-odd { + background-color: #f4f4f4; + } + @include flexbox(); + @include flex-direction(column); + @include justify-content(center); + + .section-heading { + font-family: Lato-Bold; + text-transform: uppercase; + font-size: 26pt; + color: #333333; + margin-bottom: rem(32px); + @include media-breakpoint-down(sm) { + font-size: 24pt; + margin: rem(42px) rem(5px); + } + } + + .txt-info { + font-family: Lato-Light; + font-size: 14pt; + color: #333333; + margin-bottom: rem(42px); + @include media-breakpoint-down(sm) { + margin: rem(42px) rem(5px); + text-align: center; + } + } + + .btn-wrap { + @include media-breakpoint-down(sm) { + margin: rem(62px) rem(5px); + text-align: center; + } + } + + .card-carousel { + border-radius: rem(20px); + @include media-breakpoint-down(sm) { + text-align: center; + } + .card-carousel-title { + font-family: Lato-Bold; + color: #333333; + font-size: 18pt; + } + .card-carousel-description { + font-family: Lato-Light; + color: #808080; + font-size: 14px; + } + .card-carousel-domain { + padding: 8px; + border: 1px solid #cf4338; + border-radius: 15px; + color: #cf4338; + font-size: 11px; + } + .tech-tag { + margin: 5px; + font-size: 11pt; + } + } + + .card { + &.card-community-event { + border-radius: 2rem; + width: 75%; + margin: auto; + } + + .card-body { + padding: 0.75rem; + } + + .community-event-description { + font-size: 11pt; + } + + .card-title { + font-family: Lato-Bold; + font-size: 14pt; + margin-bottom: 0.4rem; + } + + .card-video { + // border-radius: 2.25rem; + height: 96px; + border-top-left-radius: 2.25rem; + border-top-right-radius: 2.25rem; + } + } + } +} diff --git a/src/components/layout/Navbar.js b/src/components/layout/Navbar.js index 91ca2151..b977aeb8 100644 --- a/src/components/layout/Navbar.js +++ b/src/components/layout/Navbar.js @@ -75,6 +75,11 @@ Component.defaultProps = { title: "Success Stories", url: routes.SUCCESS_STORIES_URL }, + { + id: 10, + title: "Open Source", + url: routes.OPEN_SOURCE_URL + }, { id: 5, title: "Blogs", diff --git a/src/components/opensource/communityEvents.jsx b/src/components/opensource/communityEvents.jsx new file mode 100644 index 00000000..0601319b --- /dev/null +++ b/src/components/opensource/communityEvents.jsx @@ -0,0 +1,80 @@ +import React, { useState, useEffect } from "react"; +import { Spinner } from "reactstrap"; +import { API_BASE_URL } from "../../globalConstants"; + +const CommunityEvents = (props) => { + const [loading, setLoading] = useState(false); + const [events, setEvents] = useState([]); + + // helper function to fetch community events + const fetchEvents = () => { + setLoading(true); + return fetch(`${API_BASE_URL}community_events`, { + method: "GET", + headers: { + Accept: "application/json", + "Content-Type": "application/json", + }, + }).then((response) => response.json()); + }; + + // useEffect to fetch and store the events data + useEffect(() => { + const promise = fetchEvents(); + promise + .then((responseData) => { + setEvents(responseData.community_events); + setLoading(false); + }) + .catch((error) => console.log(error)); + }, []); + + return ( +
+
+

+ Organising Community Events +

+ {loading && ( +
+ +
+ )} + {loading === false && ( +
+ {events.map((event, index) => { + return ( +
+
+