Parcourir la source

enable blog and gbi case study

staging
Pavle Golubovic il y a 2 ans
Parent
révision
b3edd1b5a4

+ 1
- 1
frontend/package.json Voir le fichier

{ {
"name": "frontend", "name": "frontend",
"version": "1.3.3",
"version": "1.3.4",
"private": true, "private": true,
"dependencies": { "dependencies": {
"@faceless-ui/slider": "^1.1.14", "@faceless-ui/slider": "^1.1.14",

+ 3
- 21
frontend/src/App.js Voir le fichier

const Services = lazy(() => import('./pages/Services')); const Services = lazy(() => import('./pages/Services'));
const Careers = lazy(() => import('./pages/Careers')); const Careers = lazy(() => import('./pages/Careers'));
const Culture = lazy(() => import('./pages/Culture')); const Culture = lazy(() => import('./pages/Culture'));
const DiligentMinds = lazy(() => import('./pages/DiligentMinds'));
const EventsTimeline = lazy(() => import('./pages/EventsTimeline'));

const About = lazy(() => import('./pages/About')); const About = lazy(() => import('./pages/About'));
const Blog = lazy(() => import('./pages/Blog')); const Blog = lazy(() => import('./pages/Blog'));
const BlogPost = lazy(() => import('./components/BlogPost'));
const ProcessPage = lazy(() => import('./pages/ProcessPage')); const ProcessPage = lazy(() => import('./pages/ProcessPage'));
const ContactPage = lazy(() => import('./pages/ContactPage')); const ContactPage = lazy(() => import('./pages/ContactPage'));
const CaseStudyBI = lazy(() => import('./pages/CaseStudyBI'));
const CaseStudyFinantial = lazy(() => import('./pages/CaseStudyFinantial'));
const CaseStudyTicketing = lazy(() => import('./pages/CaseStudyTicketing'));
const CaseStudyCentralized = lazy(() => import('./pages/CaseStudyCentralized'));
const CaseStudyResource = lazy(() => import('./pages/CaseStudyResource'));
const CaseStudyStrata = lazy(() => import('./pages/CaseStudyStrata'));
const PrivacyPolicy = lazy(() => import('./pages/PrivacyPolicy')); const PrivacyPolicy = lazy(() => import('./pages/PrivacyPolicy'));
const WorkWithUs = lazy(() => import('./pages/WorkWithUs')); const WorkWithUs = lazy(() => import('./pages/WorkWithUs'));
const NotFoundPage = lazy(() => import('./pages/NotFoundPage')); const NotFoundPage = lazy(() => import('./pages/NotFoundPage'));
<Route exact path="/careers" element={<Careers />} /> <Route exact path="/careers" element={<Careers />} />
<Route exact path="/culture" element={<Culture />} /> <Route exact path="/culture" element={<Culture />} />
<Route exact path="/about" element={<About />} /> <Route exact path="/about" element={<About />} />
{/* <Route exact path="/blog" element={<Blog />}/> */}
{/* <Route exact path="/articles/:slug" element={<ArticlePage />} /> */}
<Route exact path="/blog" element={<Blog />}/>
<Route exact path="/articles/:slug" element={<ArticlePage />} />
<Route exact path="/contact" element={<ContactPage />} /> <Route exact path="/contact" element={<ContactPage />} />
<Route exact path="/casestudybi" element={<CaseStudyBI />} />
<Route exact path="/casestudystrata" element={<CaseStudyStrata />} />
<Route exact path="/casestudyfinancial" element={<CaseStudyFinantial />} />
<Route
exact
path="/casestudycentralized"
element={<CaseStudyCentralized />}
/>
<Route exact path="/casestudyresource" element={<CaseStudyResource />} />
<Route exact path="/casestudyticketing" element={<CaseStudyTicketing />} />
<Route exact path="/privacypolicy" element={<PrivacyPolicy />} /> <Route exact path="/privacypolicy" element={<PrivacyPolicy />} />
</Routes> </Routes>
</Suspense> </Suspense>

+ 3
- 3
frontend/src/components/ArticleAuthorSection.jsx Voir le fichier



const ArticleAuthorSection = ({data}) => { const ArticleAuthorSection = ({data}) => {
return ( return (
<div className="flex gap-2 mb-32p">
<div className="flex gap-4 mb-32p items-center">
<img <img
className="max-h-[90px] object-fit rounded-full"
className="max-h-[60px] object-fit rounded-full"
src={api_url + data.AuthorImage.data.attributes.url} src={api_url + data.AuthorImage.data.attributes.url}
alt={api_url + data.AuthorImage.data.attributes.alternativeText} alt={api_url + data.AuthorImage.data.attributes.alternativeText}
/> />
<div className="flex flex-col items-start">
<div className="flex flex-col items-start align-middle">
<p className="paragraph">{data.Author}</p> <p className="paragraph">{data.Author}</p>
<p className="text-small-subhead text-gray-400 leading-normal"> <p className="text-small-subhead text-gray-400 leading-normal">
{data.AuthorTitle} {data.AuthorTitle}

+ 8
- 6
frontend/src/components/blog-micro-components/ImageGrid.jsx Voir le fichier

import React from 'react';
import React, { Fragment } from 'react';


const api_url = process.env.REACT_APP_API_URL; const api_url = process.env.REACT_APP_API_URL;


const ImageGrid = ({ data }) => { const ImageGrid = ({ data }) => {
const leng = data.data.length; const leng = data.data.length;

return ( return (
<div className="grid grid-cols-2 gap-4 pb-4">
<div className='flex justify-center'>
<div className="grid grid-cols-2 gap-4 pb-4 mx-auto">
{data.data && {data.data &&
data.data.length > 0 && data.data.length > 0 &&
data.data.map((item, index) => ( data.data.map((item, index) => (
<div key={index}>
<Fragment key={index}>
{leng % 2 != 0 ? ( {leng % 2 != 0 ? (
index == leng - 1 ? ( index == leng - 1 ? (
<img <img
className="col-span-2 w-full rounded-md"
className="col-start-1 col-span-2 row-start-1 row-span-1 w-full rounded-md"
src={api_url + item.attributes.url} src={api_url + item.attributes.url}
alt={item.attributes.alternativeText} alt={item.attributes.alternativeText}
/> />
alt={item.attributes.alternativeText} alt={item.attributes.alternativeText}
/> />
)} )}
</div>
</Fragment>
))} ))}
</div> </div>
</div>
); );
}; };



+ 1
- 1
frontend/src/components/blog-micro-components/RichText.jsx Voir le fichier

const RichText = ({ data }) => { const RichText = ({ data }) => {
return ( return (
// eslint-disable-next-line react/no-children-prop // eslint-disable-next-line react/no-children-prop
<ReactMarkdown className="article n-paragraph" children={data} />
<ReactMarkdown className="article n-paragraph" linkTarget="_blank" children={data} />
); );
}; };



+ 32
- 21
frontend/src/components/shared/ReactHelmet.jsx Voir le fichier

import { Helmet } from 'react-helmet-async'; import { Helmet } from 'react-helmet-async';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import '../../styles/cards.css'; import '../../styles/cards.css';
import { useEffect } from 'react';
import { Fragment, useEffect } from 'react';


const api_url = process.env.REACT_APP_API_URL; const api_url = process.env.REACT_APP_API_URL;


const ReactHelmet = ({ seo }) => { const ReactHelmet = ({ seo }) => {
return ( return (
<Helmet>
<title>{seo.metaTitle}</title>
<meta name="description" content={seo.metaDescription} />
<link rel="canonical" href={seo.canonicalURL} />
<meta name="keywords" content={seo.keywords} />
<meta name="viewport" content={seo.metaViewport} />
<meta name="robots" content={seo.metaRobots} />
<meta property="og:title" content={seo.metaSocial[0]?.title} />
<meta
property="og:image"
content={`${api_url}${seo.metaSocial[0]?.image?.data?.attributes?.url}`}
/>
<meta property="og:description" content={seo.metaSocial[0]?.description} />
<meta property="twitter:title" content={seo.metaSocial[1]?.title} />
<meta
property="twitter:image"
content={`${api_url}${seo.metaSocial[1]?.image?.data?.attributes?.url}`}
/>
<meta property="twitter:description" content={seo.metaSocial[1]?.description} />
</Helmet>
<Fragment>
{seo && (
<Helmet>
<title>{seo.metaTitle}</title>
<meta name="description" content={seo.metaDescription} />
<link rel="canonical" href={seo.canonicalURL} />
<meta name="keywords" content={seo.keywords} />
<meta name="viewport" content={seo.metaViewport} />
<meta name="robots" content={seo.metaRobots} />
{seo.metaSocial && seo.metaSocial.lenght > 0 && (
<Fragment>
<meta property="og:title" content={seo.metaSocial[0]?.title} />
<meta
property="og:image"
content={`${api_url}${seo.metaSocial[0]?.image?.data?.attributes?.url}`}
/>
<meta property="og:description" content={seo.metaSocial[0]?.description} />
<meta property="twitter:title" content={seo.metaSocial[1]?.title} />
<meta
property="twitter:image"
content={`${api_url}${seo.metaSocial[1]?.image?.data?.attributes?.url}`}
/>
<meta
property="twitter:description"
content={seo.metaSocial[1]?.description}
/>
</Fragment>
)}
</Helmet>
)}
</Fragment>
); );
}; };



+ 3
- 3
frontend/src/pages/ArticlePage.jsx Voir le fichier



const [{ data, isLoading, isError }, doFetch] = useFetchCollections(strapi); const [{ data, isLoading, isError }, doFetch] = useFetchCollections(strapi);


useAnalytics('');
useAnalytics(helperString);


useEffect(() => { useEffect(() => {
document.title = '';
}, []);
if (data && data[0].attributes) document.title = `${data[0].attributes.ArticleTitle}`;
}, [data]);


if (isLoading) { if (isLoading) {
return ( return (

+ 138
- 139
frontend/src/routes.js Voir le fichier

import CaseStudy from "./components/CaseStudy";
import About from "./pages/About";
import Careers from "./pages/Careers";
import CaseStudyBI from "./pages/CaseStudyBI";
import CaseStudyCentralized from "./pages/CaseStudyCentralized";
import CaseStudyFinantial from "./pages/CaseStudyFinantial";
import CaseStudyResource from "./pages/CaseStudyResource";
import CaseStudyStrata from "./pages/CaseStudyStrata";
import CaseStudyTicketing from "./pages/CaseStudyTicketing";
import ContactPage from "./pages/ContactPage";
import Home from "./pages/Home";
import Portfolio from "./pages/Portfolio";
import PrivacyPolicy from "./pages/PrivacyPolicy";
import ProcessPage from "./pages/ProcessPage";
import WorkWithUs from "./pages/WorkWithUs";
import EventsTimeline from "./pages/EventsTimeline";
import DiligentLife from "./pages/Culture";
import DiligentMinds from "./pages/DiligentMinds";
import CaseStudy from './components/CaseStudy';
import About from './pages/About';
import Careers from './pages/Careers';
import CaseStudyBI from './pages/CaseStudyBI';
import CaseStudyCentralized from './pages/CaseStudyCentralized';
import CaseStudyFinantial from './pages/CaseStudyFinantial';
import CaseStudyResource from './pages/CaseStudyResource';
import CaseStudyStrata from './pages/CaseStudyStrata';
import CaseStudyTicketing from './pages/CaseStudyTicketing';
import ContactPage from './pages/ContactPage';
import Home from './pages/Home';
import Portfolio from './pages/Portfolio';
import PrivacyPolicy from './pages/PrivacyPolicy';
import ProcessPage from './pages/ProcessPage';
import WorkWithUs from './pages/WorkWithUs';
import EventsTimeline from './pages/EventsTimeline';
import DiligentLife from './pages/Culture';
import DiligentMinds from './pages/DiligentMinds';
import Blog from './pages/Blog'; import Blog from './pages/Blog';
import Culture from "./pages/Culture";
import Culture from './pages/Culture';
const routes = [ const routes = [
{
path: '/',
component: <Home/>,
title: 'Diligent Software',
exact: true,
},
{
path: '/workwithus',
component: <WorkWithUs/>,
title: 'Work with Us',
exact: true,
nav:true
},
{
path: '/portfolio',
component: <Portfolio/>,
title: 'Case Studies',
exact: true,
nav:true
},
{
path: '/process',
component: <ProcessPage />,
title: 'Process',
exact: true,
nav:true,
},
{
path: '/casestudybi',
component: <CaseStudyBI/>,
title: 'BI Healthcare System',
exact: true
},
{
path: '/casestudystrata',
component: <CaseStudyStrata/>,
title: 'Health Tracking Software',
exact: true
},
{
path: '/casestudyfinancial',
component: <CaseStudyFinantial/>,
title: 'Financial Engine',
exact: true
},
{
path: '/casestudyticketing',
component: <CaseStudyTicketing/>,
title: 'Ticketing System for Passengers',
exact: true
},
{
path: '/casestudycentralized',
component: <CaseStudyCentralized/>,
title: 'Centralized Monitoring System',
exact: true
},
{
path: '/casestudyresource',
component: <CaseStudyResource/>,
title: 'Resource Planning System',
exact: true
},
{
path: '/',
component: <Home />,
title: 'Diligent Software',
exact: true,
},
{
path: '/workwithus',
component: <WorkWithUs />,
title: 'Work with Us',
exact: true,
nav: true,
},
{
path: '/portfolio',
component: <Portfolio />,
title: 'Case Studies',
exact: true,
nav: true,
},
{
path: '/process',
component: <ProcessPage />,
title: 'Process',
exact: true,
nav: true,
},
{
path: '/casestudybi',
component: <CaseStudyBI />,
title: 'BI Healthcare System',
exact: true,
},
{
path: '/casestudystrata',
component: <CaseStudyStrata />,
title: 'Health Tracking Software',
exact: true,
},
{
path: '/casestudyfinancial',
component: <CaseStudyFinantial />,
title: 'Financial Engine',
exact: true,
},
{
path: '/casestudyticketing',
component: <CaseStudyTicketing />,
title: 'Ticketing System for Passengers',
exact: true,
},
{
path: '/casestudycentralized',
component: <CaseStudyCentralized />,
title: 'Centralized Monitoring System',
exact: true,
},
{
path: '/casestudyresource',
component: <CaseStudyResource />,
title: 'Resource Planning System',
exact: true,
},
{
path: '/careers',
component: <Careers />,
title: 'Careers',
exact: true,
nav: true,
drop: [
{ {
path: '/careers',
component: <Careers/>,
title: 'Careers',
path: '/culture',
component: <Culture />,
title: 'Culture',
exact: true, exact: true,
nav:true,
drop: [
{
path:'/culture',
component: <Culture />,
title: 'Culture',
exact: true,
nav:true,
},
//enable after we add content
// {
// path:"/diligentminds",
// component: <DiligentMinds />,
// title: 'Diligent Minds',
// exact: true,
// nav:true,
// },
// {
// path:"/eventstimeline",
// component: <EventsTimeline />,
// title: 'Events Timeline',
// exact: true,
// nav:true,
// },
],
},
// {
// path: '/blog',
// component: <Blog />,
// title: 'Blog',
// exact: true,
// nav:true,
// },
{
path: '/about',
component: <About/>,
title: 'About Us',
exact: true,
nav:true,
},
{
path: '/contact',
component: <ContactPage/>,
title: 'Contact Us',
exact: true,
},
{
path: '/privacypolicy',
component: <PrivacyPolicy/>,
title: 'Privacy Policy',
exact: true
nav: true,
}, },
];
//enable after we add content
// {
// path:"/diligentminds",
// component: <DiligentMinds />,
// title: 'Diligent Minds',
// exact: true,
// nav:true,
// },
// {
// path:"/eventstimeline",
// component: <EventsTimeline />,
// title: 'Events Timeline',
// exact: true,
// nav:true,
// },
],
},
{
path: '/blog',
component: <Blog />,
title: 'Blog',
exact: true,
nav: true,
},
{
path: '/about',
component: <About />,
title: 'About Us',
exact: true,
nav: true,
},
{
path: '/contact',
component: <ContactPage />,
title: 'Contact Us',
exact: true,
},
{
path: '/privacypolicy',
component: <PrivacyPolicy />,
title: 'Privacy Policy',
exact: true,
},
];


export default routes;
export default routes;

Chargement…
Annuler
Enregistrer