Pavle Golubovic 3 år sedan
förälder
incheckning
a7f5c71fbe

+ 2
- 18
frontend/package-lock.json Visa fil

{ {
"name": "frontend", "name": "frontend",
"version": "1.0.13",
"version": "1.0.18",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "frontend", "name": "frontend",
"version": "1.0.13",
"version": "1.0.18",
"dependencies": { "dependencies": {
"@faceless-ui/slider": "^1.1.14", "@faceless-ui/slider": "^1.1.14",
"@faceless-ui/window-info": "^2.1.1", "@faceless-ui/window-info": "^2.1.1",
"react": "^17.0.2", "react": "^17.0.2",
"react-dom": "^17.0.2", "react-dom": "^17.0.2",
"react-dropzone": "^12.0.5", "react-dropzone": "^12.0.5",
"react-ga": "^3.3.1",
"react-mailchimp-subscribe": "^2.1.3", "react-mailchimp-subscribe": "^2.1.3",
"react-markdown": "^8.0.0", "react-markdown": "^8.0.0",
"react-router-dom": "^6.2.1", "react-router-dom": "^6.2.1",
"resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz",
"integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw=="
}, },
"node_modules/react-ga": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/react-ga/-/react-ga-3.3.1.tgz",
"integrity": "sha512-4Vc0W5EvXAXUN/wWyxvsAKDLLgtJ3oLmhYYssx+YzphJpejtOst6cbIHCIyF50Fdxuf5DDKqRYny24yJ2y7GFQ==",
"peerDependencies": {
"prop-types": "^15.6.0",
"react": "^15.6.2 || ^16.0 || ^17 || ^18"
}
},
"node_modules/react-is": { "node_modules/react-is": {
"version": "16.13.1", "version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz",
"integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw=="
}, },
"react-ga": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/react-ga/-/react-ga-3.3.1.tgz",
"integrity": "sha512-4Vc0W5EvXAXUN/wWyxvsAKDLLgtJ3oLmhYYssx+YzphJpejtOst6cbIHCIyF50Fdxuf5DDKqRYny24yJ2y7GFQ==",
"requires": {}
},
"react-is": { "react-is": {
"version": "16.13.1", "version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",

+ 1
- 2
frontend/package.json Visa fil

{ {
"name": "frontend", "name": "frontend",
"version": "1.0.17",
"version": "1.0.18",
"private": true, "private": true,
"dependencies": { "dependencies": {
"@faceless-ui/slider": "^1.1.14", "@faceless-ui/slider": "^1.1.14",
"react": "^17.0.2", "react": "^17.0.2",
"react-dom": "^17.0.2", "react-dom": "^17.0.2",
"react-dropzone": "^12.0.5", "react-dropzone": "^12.0.5",
"react-ga": "^3.3.1",
"react-mailchimp-subscribe": "^2.1.3", "react-mailchimp-subscribe": "^2.1.3",
"react-markdown": "^8.0.0", "react-markdown": "^8.0.0",
"react-router-dom": "^6.2.1", "react-router-dom": "^6.2.1",

+ 11
- 0
frontend/public/index.html Visa fil

Learn how to configure a non-root public URL by running `npm run build`. Learn how to configure a non-root public URL by running `npm run build`.
--> -->
<title>Diligent Software</title> <title>Diligent Software</title>

<!-- Google tag (gtag.js) -->
<script async src='https://www.googletagmanager.com/gtag/js?id=G-PTZC3WLTZ1'></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'G-PTZC3WLTZ1');
</script>

</head> </head>
<body> <body>
<noscript>You need to enable JavaScript to run this app.</noscript> <noscript>You need to enable JavaScript to run this app.</noscript>

+ 17
- 41
frontend/src/App.js Visa fil

import React, { useEffect, lazy, Suspense, useRef, useState } from 'react';
import React, { useEffect, lazy, Suspense, useRef, useState } from 'react';
import './App.css'; import './App.css';
import { Route, Routes, useLocation, useNavigate } from 'react-router-dom'; import { Route, Routes, useLocation, useNavigate } from 'react-router-dom';
import Navigation from './components/shared/Navigation'; import Navigation from './components/shared/Navigation';
import Loader from './components/shared/Loader'; import Loader from './components/shared/Loader';
import ScrollToTop from './components/root/ScrollToTop'; import ScrollToTop from './components/root/ScrollToTop';


import ReactGA from 'react-ga';
//import usePageTracking from './hooks/usePageTracking';
import routes from './routes';


const Home = lazy(() => import('./pages/Home')); const Home = lazy(() => import('./pages/Home'));
const Portfolio = lazy(() => import('./pages/Portfolio')); const Portfolio = lazy(() => import('./pages/Portfolio'));
const WorkWithUs = lazy(() => import('./pages/WorkWithUs')); const WorkWithUs = lazy(() => import('./pages/WorkWithUs'));


// Navigation Links // Navigation Links
const links = [
{
name: 'Work with Us',
description: '',
href: '/workwithus',
icon: '',
},
{
name: 'Case Studies',
description: '',
href: '/portfolio',
icon: '',
},
{
name: 'Process',
description: '',
href: '/process',
icon: '',
},
{
name: 'Careers',
description: '',
href: '/careers',
icon: '',
},
{
name: 'About us',
description: '',
href: '/about',
icon: '',
},
];
const links = routes.filter(item => item.nav === true);



//analytics
ReactGA.initialize(process.env.GOOGLE_TRACKING_ID);


function App() { function App() {
//tabs for contact form //tabs for contact form
} }
} }




return ( return (
<div> <div>
<ScrollToTop /> <ScrollToTop />
></Navigation> ></Navigation>
<Suspense fallback={<Loader />}> <Suspense fallback={<Loader />}>
<Routes> <Routes>
<Route
{routes.map((route, index) => (
<Route
key={index}
path={route.path}
title={route.title}
element={route.component}
exact={route.exact}
/>
))}

{/* <Route
exact exact
path="/" path="/"
element={ element={
<Route exact path="/process" element={<ProcessPage />} /> <Route exact path="/process" element={<ProcessPage />} />
<Route exact path="/contact" element={<ContactPage />} /> <Route exact path="/contact" element={<ContactPage />} />
<Route exact path="/privacypolicy" element={<PrivacyPolicy />} /> <Route exact path="/privacypolicy" element={<PrivacyPolicy />} />
<Route exact path="/workwithus" element={<WorkWithUs />} />
<Route exact path="/workwithus" element={<WorkWithUs />} /> */}
</Routes> </Routes>
</Suspense> </Suspense>



+ 6
- 5
frontend/src/components/shared/Footer.jsx Visa fil

import bg_socials from '../../assets/logos/socials_bg.png'; import bg_socials from '../../assets/logos/socials_bg.png';
import SocialMediaLinks from './SocialMediaLinks'; import SocialMediaLinks from './SocialMediaLinks';
import { Popover } from '@headlessui/react'; import { Popover } from '@headlessui/react';
import { NavLink, useNavigate } from 'react-router-dom';
import { NavLink, useLocation, useNavigate } from 'react-router-dom';


const footerText = const footerText =
'Custom software solutions for variety of industries with the emphasis on reliability, innovation and top quality.'; 'Custom software solutions for variety of industries with the emphasis on reliability, innovation and top quality.';


export default function Footer({ links, scrollToView, activeLinks }) { export default function Footer({ links, scrollToView, activeLinks }) {
const home = useNavigate(); const home = useNavigate();
const location = useLocation();


function handleLogo() { function handleLogo() {
home('/'); home('/');
{footerText} {footerText}
</p> </p>
<Popover.Group as="nav" className="hidden md:flex space-x-10 z-10"> <Popover.Group as="nav" className="hidden md:flex space-x-10 z-10">
{links.map(item => (
{links.map((item,index) => (
<NavLink <NavLink
key={item.name}
to={item.href}
key={index}
to={item.path}
className={({ isActive }) => { className={({ isActive }) => {
return `text-base font-medium hover:text-dg-primary-900 focus:text-dg-primary-900 active:text-dg-primary-900 capitalize ${activeLinks( return `text-base font-medium hover:text-dg-primary-900 focus:text-dg-primary-900 active:text-dg-primary-900 capitalize ${activeLinks(
isActive, isActive,
)}`; )}`;
}} }}
> >
{item.name}
{item.title}
</NavLink> </NavLink>
))} ))}
{/* React Router Link does not support Anchor tags */} {/* React Router Link does not support Anchor tags */}

+ 9
- 12
frontend/src/components/shared/Navigation.jsx Visa fil

import '../../App.css'; import '../../App.css';
import Wrapper from '../../layout/Wrapper'; import Wrapper from '../../layout/Wrapper';
import menuIcon from './../../assets/icons/menu.svg'; import menuIcon from './../../assets/icons/menu.svg';
import useAnalyticsEventTracker from '../../hooks/useAnalyticsEventTracker';


export default function Navigation({ links, scrollToView, activeLinks }) { export default function Navigation({ links, scrollToView, activeLinks }) {
const location = useLocation(); const location = useLocation();
home('/'); home('/');
} }


const gaEventTracker = useAnalyticsEventTracker('Contact Us')




// Check if you are on HomePage to scroll to Contact us, or open a sepperate Contact us Page // Check if you are on HomePage to scroll to Contact us, or open a sepperate Contact us Page
as="nav" as="nav"
className="hidden md:flex space-x-8 lg:space-x-10 items-center" className="hidden md:flex space-x-8 lg:space-x-10 items-center"
> >
{links.map(item => (
{links.map((item,index) => (
<NavLink <NavLink
key={item.name}
to={item.href}
key={index}
to={item.path}
className={({ isActive }) => { className={({ isActive }) => {
return `text-p font-medium dark:text-white hover:text-dg-primary-900 focus:text-dg-primary-900 active:text-dg-primary-900 capitalize ${activeLinks( return `text-p font-medium dark:text-white hover:text-dg-primary-900 focus:text-dg-primary-900 active:text-dg-primary-900 capitalize ${activeLinks(
isActive, isActive,
)}`; )}`;
}} }}
> >
{item.name}
{item.title}
</NavLink> </NavLink>
))} ))}
{/* React Router Link does not support Anchor tags */} {/* React Router Link does not support Anchor tags */}
<div <div
// onClick={event => scrollToView(event)} // onClick={event => scrollToView(event)}
onClick={event => {gaEventTracker('contact');checkUrl(event)}}
onClick={event => checkUrl(event)}
href="#contact" href="#contact"
className="contact-us-link text-p" className="contact-us-link text-p"
> >
</div> </div>
<div className="mt-6"> <div className="mt-6">
<nav className="grid gap-y-8"> <nav className="grid gap-y-8">
{links.map(item => (
{links.map((item,index) => (
<NavLink <NavLink
onClick={() => close()} onClick={() => close()}
key={item.name}
to={item.href}
key={index}
to={item.path}
className="text-p p-3 flex justify-center items-center rounded-md transition-all hover:transition-all hover:bg-dg-primary-900 hover:text-white" className="text-p p-3 flex justify-center items-center rounded-md transition-all hover:transition-all hover:bg-dg-primary-900 hover:text-white"
> >
<div aria-hidden="true" /> <div aria-hidden="true" />
<span className="ml-3 text-base font-medium text-inherit"> <span className="ml-3 text-base font-medium text-inherit">
{item.name}
{item.title}
</span> </span>
</NavLink> </NavLink>
))} ))}
<a <a
href="#contact" href="#contact"
onClick={event => { onClick={event => {
gaEventTracker('contact');
close(); close();
checkUrl(event); checkUrl(event);
}} }}

+ 16
- 0
frontend/src/hooks/useAnalytics.js Visa fil

import React, { useEffect } from "react";
import { useLocation } from "react-router-dom";

const useAnalytics = () => {
const location = useLocation();

useEffect(() => {
window.gtag('event', 'page_view', {
page_title: document.title,
page_path: location.pathname + location.search,
page_location: window.location.href
})
}, [location]);
}

export default useAnalytics;

+ 0
- 10
frontend/src/hooks/useAnalyticsEventTracker.js Visa fil

import React from "react";
import ReactGA from 'react-ga';

const useAnalyticsEventTracker = (category="Contact category") => {
const eventTracker = (action = "test action", label = "test label") => {
ReactGA.event({category, action, label});
}
return eventTracker;
}
export default useAnalyticsEventTracker;

+ 0
- 25
frontend/src/hooks/usePageTracking.js Visa fil

import { useEffect, useState } from 'react';
import ReactGA from 'react-ga';
import { useLocation } from 'react-router';

const initialiseAnalytics = () => {
const TRACKING_ID = process.env.GOOGLE_TRACKING_ID;
ReactGA.initialize(TRACKING_ID);
}
export const usePageTracking = () => {
const location = useLocation();
const [initialized, setInitialized] = useState(false);
useEffect(() => {
initialiseAnalytics();
setInitialized(true);
}, []);
useEffect(() => {
if (initialized) {
ReactGA.pageview(location.pathname + location.search);
}
}, [initialized, location]);
}

export default usePageTracking;

+ 3
- 0
frontend/src/pages/About.jsx Visa fil

import TimelineCardsWrapper2 from '../components/TimelineWrapper2'; import TimelineCardsWrapper2 from '../components/TimelineWrapper2';
import TimelineLogo from '../components/TimelineLogo'; import TimelineLogo from '../components/TimelineLogo';
import PageLayout from '../layout/PageLayout'; import PageLayout from '../layout/PageLayout';
import useAnalytics from '../hooks/useAnalytics';
const _data = { const _data = {
heading: { heading: {
subheading: 'About Us', subheading: 'About Us',
}; };


export default function About() { export default function About() {

useAnalytics();
useEffect(() => { useEffect(() => {
document.title = 'About Us'; document.title = 'About Us';
}, []); }, []);

+ 3
- 0
frontend/src/pages/Careers.jsx Visa fil

import CardCareers2 from '../components/CardCareers2'; import CardCareers2 from '../components/CardCareers2';
import OrbitOnScroll from '../components/shared/graphics/OrbitOnScroll'; import OrbitOnScroll from '../components/shared/graphics/OrbitOnScroll';
import PageLayout from '../layout/PageLayout'; import PageLayout from '../layout/PageLayout';
import useAnalytics from '../hooks/useAnalytics';


// eslint-disable-next-line no-underscore-dangle // eslint-disable-next-line no-underscore-dangle
const _data = { const _data = {


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


useAnalytics();

useEffect(() => { useEffect(() => {
document.title = 'Careers'; document.title = 'Careers';
}, []); }, []);

+ 3
- 0
frontend/src/pages/CaseStudy.jsx Visa fil

import ActionCard from '../components/shared/ActionCard'; import ActionCard from '../components/shared/ActionCard';
import useAnalytics from '../hooks/useAnalytics';
import PageLayout from '../layout/PageLayout'; import PageLayout from '../layout/PageLayout';


const technologies = [ const technologies = [
]; ];


export default function CaseStudy() { export default function CaseStudy() {
useAnalytics();
return ( return (
<PageLayout> <PageLayout>
<div className="bg-baby-blue dark:bg-dg-primary-1700 w-full pt-20 md:pt-24"> <div className="bg-baby-blue dark:bg-dg-primary-1700 w-full pt-20 md:pt-24">

+ 3
- 0
frontend/src/pages/CaseStudyBI.jsx Visa fil

import Wrapper from '../layout/Wrapper'; import Wrapper from '../layout/Wrapper';
import TechNuggets from '../components/shared/TechNuggets'; import TechNuggets from '../components/shared/TechNuggets';
import { motion } from 'framer-motion'; import { motion } from 'framer-motion';
import useAnalytics from '../hooks/useAnalytics';


const numbers = [ const numbers = [
{ {
}; };


export default function CaseStudyBI() { export default function CaseStudyBI() {
useAnalytics();
useEffect(() => { useEffect(() => {
document.title = 'Case Study: BI Healthcare Solution'; document.title = 'Case Study: BI Healthcare Solution';
}, []); }, []);

+ 3
- 0
frontend/src/pages/CaseStudyCentralized.jsx Visa fil

import Wrapper from '../layout/Wrapper'; import Wrapper from '../layout/Wrapper';
import { motion } from 'framer-motion'; import { motion } from 'framer-motion';
import TechNuggets from '../components/shared/TechNuggets'; import TechNuggets from '../components/shared/TechNuggets';
import useAnalytics from '../hooks/useAnalytics';


const numbers = [ const numbers = [
{ {
}; };


export default function CaseStudyCentralized() { export default function CaseStudyCentralized() {
useAnalytics();
useEffect(() => { useEffect(() => {
document.title = 'Case Study: Centralized Monitoring System'; document.title = 'Case Study: Centralized Monitoring System';
}, []); }, []);

+ 2
- 0
frontend/src/pages/CaseStudyFinantial.jsx Visa fil

import { motion } from 'framer-motion'; import { motion } from 'framer-motion';
import Wrapper from '../layout/Wrapper'; import Wrapper from '../layout/Wrapper';
import TechNuggets from '../components/shared/TechNuggets'; import TechNuggets from '../components/shared/TechNuggets';
import useAnalytics from '../hooks/useAnalytics';
const numbers = [ const numbers = [
{ {
value: 5, value: 5,
}; };


export default function CaseStudyFinantial() { export default function CaseStudyFinantial() {
useAnalytics();
useEffect(() => { useEffect(() => {
document.title = 'Case Study: Financial Engine'; document.title = 'Case Study: Financial Engine';
}, []); }, []);

+ 3
- 0
frontend/src/pages/CaseStudyResource.jsx Visa fil

import { motion } from 'framer-motion'; import { motion } from 'framer-motion';
import Wrapper from '../layout/Wrapper'; import Wrapper from '../layout/Wrapper';
import TechNuggets from '../components/shared/TechNuggets'; import TechNuggets from '../components/shared/TechNuggets';
import useAnalytics from '../hooks/useAnalytics';


const numbers = [ const numbers = [
{ {
}; };


export default function CaseStudyResource() { export default function CaseStudyResource() {
useAnalytics();

useEffect(() => { useEffect(() => {
document.title = 'Case Study: Resource Planning System'; document.title = 'Case Study: Resource Planning System';
}, []); }, []);

+ 3
- 0
frontend/src/pages/CaseStudyStrata.jsx Visa fil

import { motion } from 'framer-motion'; import { motion } from 'framer-motion';
import Wrapper from '../layout/Wrapper'; import Wrapper from '../layout/Wrapper';
import TechNuggets from '../components/shared/TechNuggets'; import TechNuggets from '../components/shared/TechNuggets';
import useAnalytics from '../hooks/useAnalytics';


const numbers = [ const numbers = [
{ {
}; };


export default function CaseStudyStrata() { export default function CaseStudyStrata() {
useAnalytics();

useEffect(() => { useEffect(() => {
document.title = 'Case Study: Healthcare Tracking Software'; document.title = 'Case Study: Healthcare Tracking Software';
}, []); }, []);

+ 3
- 0
frontend/src/pages/CaseStudyTicketing.jsx Visa fil

import { useEffect } from 'react'; import { useEffect } from 'react';
import { motion } from 'framer-motion'; import { motion } from 'framer-motion';
import TechNuggets from '../components/shared/TechNuggets'; import TechNuggets from '../components/shared/TechNuggets';
import useAnalytics from '../hooks/useAnalytics';
const numbers = [ const numbers = [
{ {
value: 10, value: 10,
}; };


export default function CaseStudyTicketing() { export default function CaseStudyTicketing() {
useAnalytics();
useEffect(() => { useEffect(() => {
document.title = 'Case Study: Ticketing System For Passengers'; document.title = 'Case Study: Ticketing System For Passengers';
}, []); }, []);

+ 2
- 0
frontend/src/pages/ContactPage.jsx Visa fil

import Layout from '../layout/PageLayout'; import Layout from '../layout/PageLayout';
import axios from 'axios'; import axios from 'axios';
import useDataApi from '../hooks/useDataApi'; import useDataApi from '../hooks/useDataApi';
import useAnalytics from '../hooks/useAnalytics';


function ContactPage() { function ContactPage() {
const [data, setData] = useState(''); const [data, setData] = useState('');
const [isLoaded, setIsLoaded] = useState(''); const [isLoaded, setIsLoaded] = useState('');


//const hookdata = useDataApi(`${api_url}/api/job-submissions`); //const hookdata = useDataApi(`${api_url}/api/job-submissions`);
useAnalytics();


useEffect(() => { useEffect(() => {
document.title = 'Contact Us'; document.title = 'Contact Us';

+ 3
- 2
frontend/src/pages/Home.jsx Visa fil

import HiringWidget from '../components/HiringWidget'; import HiringWidget from '../components/HiringWidget';


import Animation_Diligent from '../assets/animation_diligent.webm'; import Animation_Diligent from '../assets/animation_diligent.webm';
import ReactGA from 'react-ga';


import '../styles/buttons.css'; import '../styles/buttons.css';
import '../styles/cards.css'; import '../styles/cards.css';
import PortfolioSection from '../components/PortfolioSection'; import PortfolioSection from '../components/PortfolioSection';
import PageLayout from '../layout/PageLayout'; import PageLayout from '../layout/PageLayout';
import MapDilig from '../components/Map'; import MapDilig from '../components/Map';
import useAnalytics from '../hooks/useAnalytics';


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


const [contactRef, setRef] = useState(forwardedRef) const [contactRef, setRef] = useState(forwardedRef)
const [contactElement, setContactElement] = useState(0); const [contactElement, setContactElement] = useState(0);


useAnalytics();

// const UIContext = useContext(UIContext); // const UIContext = useContext(UIContext);


// const initUIValues = UIContext ?? { // const initUIValues = UIContext ?? {
//set Tab Title //set Tab Title
useEffect(() => { useEffect(() => {
document.title = 'Diligent Software'; document.title = 'Diligent Software';
ReactGA.pageview(window.location.pathname);
},[]); },[]);





+ 2
- 86
frontend/src/pages/Portfolio.jsx Visa fil

import PageLayout from '../layout/PageLayout'; import PageLayout from '../layout/PageLayout';


import StrataThumb from './../assets/images/CaseStudy/StrataThumb.jpg'; import StrataThumb from './../assets/images/CaseStudy/StrataThumb.jpg';
import useAnalytics from '../hooks/useAnalytics';


const _data = { const _data = {
heading: { heading: {
}; };


export default function Portfolio() { export default function Portfolio() {
// const [cntPortfolio, setCntPortfolio] = useState('');
// const [array,setArray] = useState([]);
// const [smallArray, setSmallArray] = useState([]);
// const [largeArray, setLargeArray] = useState([]);
// const [current, setCurrent] = useState([]);
// const [isLoaded, setIsLoaded] = useState('');

// const api_url = process.env.REACT_APP_API_URL;

// const handleArray = (array) => {
// if (array == undefined) return;
// if (array.length <= 0) return;

// let left = false;
// let largeIndex = 4;
// let largeArray = [];
// let smallArray=[];
// let current = [];

// //ako je desno onda je 5
// //ako je levo onda je 7

// array.map((item) => {
// if (item.attributes.IsLarge === true) {
// largeArray.push(item);
// } else {
// smallArray.push(item);
// }
// })

// const index = smallArray.length + largeArray.length;

// for (let i = 0; i < index; i++) {
// //console.log(index)
// if(largeIndex - i == 0) {
// current.push(largeArray.shift());
// left = !left;
// if(!left) {
// largeIndex = largeIndex + 6;
// } else {
// largeIndex = largeIndex + 4;
// }

// } else {
// current.push(smallArray.shift());
// }
// }
// setCurrent(current);
// }

// useEffect(async () => {
// var vid = document.getElementById('animation');
// vid.playbackRate = 2;
// var temp = [];
// axios
// .get(
// `${api_url}/api/portfoliopage?populate[0]=heading&&populate[1]=case_studies&&populate[2]=case_studies.img`,
// )
// .then(res => {
// //console.log(res.data.data.attributes);
// setCntPortfolio(res.data.data.attributes);
// setArray(res.data.data.attributes.case_studies.data)
// setIsLoaded(true);
// })
// .catch(err => {
// console.log(err);
// setIsLoaded(false);
// });

// }, []);

// useEffect(() => {
// console.log(array);
// handleArray(array);
// },[array]);

// if (!isLoaded) {
// return (
// <div className="z-50 w-full h-screen bg-white dark:bg-dg-primary-1700 dark:text-white flex items-center justify-center text-3xl font-semibold">
// <video id="animation" width="540" height="540" autoPlay muted loop>
// <source src={Animation_Diligent} type="video/webm" />
// Loading...
// </video>
// </div>
// );
// }
useAnalytics();


useEffect(() => { useEffect(() => {
document.title = 'Case Studies'; document.title = 'Case Studies';

+ 2
- 0
frontend/src/pages/PrivacyPolicy.jsx Visa fil

import React, { useEffect } from 'react'; import React, { useEffect } from 'react';
import useAnalytics from '../hooks/useAnalytics';
import Wrapper from '../layout/Wrapper'; import Wrapper from '../layout/Wrapper';


const PrivacyPolicy = () => { const PrivacyPolicy = () => {
useAnalytics;


useEffect(() => { useEffect(() => {
document.title = 'Privacy Policy'; document.title = 'Privacy Policy';

+ 3
- 34
frontend/src/pages/ProcessPage.jsx Visa fil

import ProcessFacelessSlider from '../components/shared/ProcessFacelessSlider'; import ProcessFacelessSlider from '../components/shared/ProcessFacelessSlider';
import useWindowSize from '../hooks/useWindowSize'; import useWindowSize from '../hooks/useWindowSize';
import ProcessSlider from '../components/ProcessSlider'; import ProcessSlider from '../components/ProcessSlider';
import useAnalytics from '../hooks/useAnalytics';


const _data = { const _data = {
heading: { heading: {
}; };


const ProcessPage = () => { const ProcessPage = () => {
//const api_url = process.env.REACT_APP_API_URL;
// const [cntProcess, setCntProcess] = useState('');
// const [isLoaded, setIsLoaded] = useState('');
// useEffect(() => {
// var vid = document.getElementById('animation');
// vid.playbackRate = 2;
// async function fetch() {
// axios
// .get(
// `${api_url}/api/process-page`,
// )
// .then(res => {
// setCntProcess(res.data.data.attributes);
// //console.log(res.data.data.attributes);
// setIsLoaded(true);
// })
// .catch(err => {
// console.log(err);
// setIsLoaded(false);
// });
// }
// fetch();
// }, []);

// if (!isLoaded) {
// return (
// <div className="z-50 w-full h-screen bg-white dark:bg-dg-primary-1700 dark:text-white flex items-center justify-center text-3xl font-semibold">
// <video id="animation" width="540" height="540" autoPlay muted loop>
// <source src={Animation_Diligent} type="video/webm" />
// Loading...
// </video>
// </div>
// );
// }


const [isMobile, setIsMobile] = useState(false); const [isMobile, setIsMobile] = useState(false);


const windowInfo = useWindowSize(); const windowInfo = useWindowSize();


useAnalytics

useEffect(() => { useEffect(() => {
document.title = 'Process'; document.title = 'Process';
}, []); }, []);

+ 6
- 3
frontend/src/pages/WorkWithUs.jsx Visa fil

import PageHeading from '../components/shared/PageHeading' import PageHeading from '../components/shared/PageHeading'
import PageTitle from '../components/shared/PageTitle' import PageTitle from '../components/shared/PageTitle'
import Testimonials from '../components/Testimonials' import Testimonials from '../components/Testimonials'
import useAnalytics from '../hooks/useAnalytics'
import Wrapper from '../layout/Wrapper' import Wrapper from '../layout/Wrapper'
import {ReactComponent as DownalodIcon } from './../assets/download-icon.svg' import {ReactComponent as DownalodIcon } from './../assets/download-icon.svg'
import {ReactComponent as BusIcon } from './../assets/icons/workwithus/bus.svg' import {ReactComponent as BusIcon } from './../assets/icons/workwithus/bus.svg'
</div> </div>
) )
} }
const HelpParagraph = ({title, paragraph, key}) => {
const HelpParagraph = ({title, paragraph}) => {
return ( return (
<div className='' key={key}>
<div className=''>
<h4 className='font-semibold text-title'>{title}</h4> <h4 className='font-semibold text-title'>{title}</h4>
<p>{paragraph}</p> <p>{paragraph}</p>
</div> </div>
} }


const WorkWithUs = () => { const WorkWithUs = () => {
useAnalytics();


useEffect(() => { useEffect(() => {
document.title = 'Work With Us'; document.title = 'Work With Us';
<li className='my-32p list-disc'>Deliverables are <b className='text-[#9B32CE]'>on time and within budget</b></li> <li className='my-32p list-disc'>Deliverables are <b className='text-[#9B32CE]'>on time and within budget</b></li>
<li className='my-32p list-disc'>Deliverables are <b className='text-[#9B32CE]'>what the client needs</b>. We produce meaningful and positive contributions, we do not want to tick the checkboxes just so that we can call it done.</li> <li className='my-32p list-disc'>Deliverables are <b className='text-[#9B32CE]'>what the client needs</b>. We produce meaningful and positive contributions, we do not want to tick the checkboxes just so that we can call it done.</li>
<li className='my-32p list-disc'>Our resources involved with the client <b className='text-[#9B32CE]'>have gained knowledge in the process</b>, they understand the client’s business, what they’ve created and most importantly - why it was created</li> <li className='my-32p list-disc'>Our resources involved with the client <b className='text-[#9B32CE]'>have gained knowledge in the process</b>, they understand the client’s business, what they’ve created and most importantly - why it was created</li>
<li className='my-32p list-disc'>Our clients can <b className='text-[#9B32CE]'>demonstratively measure the improvements</b> in stability, volume, earnings, their client/user satisfaction…as a result of our contributions. </li>
<li className='my-32p list-disc'>Our clients can <b className='text-[#9B32CE]'>demonstratively measure the improvements</b> in stability, volume, earnings, their client/user satisfaction…as a result of our contribimport useAnalytics from './../hooks/useAnalytics';
utions. </li>


</ul> </ul>
</Wrapper> </Wrapper>

+ 103
- 0
frontend/src/routes.js Visa fil

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 WorkWithUs from "./pages/WorkWithUs";

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: '/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,
},
{
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;

+ 2
- 7
frontend/yarn.lock Visa fil

"kleur" "^3.0.3" "kleur" "^3.0.3"
"sisteransi" "^1.0.5" "sisteransi" "^1.0.5"


"prop-types@^15.0.0", "prop-types@^15.5.10", "prop-types@^15.6.0", "prop-types@^15.7.2", "prop-types@^15.8.1":
"prop-types@^15.0.0", "prop-types@^15.5.10", "prop-types@^15.7.2", "prop-types@^15.8.1":
"integrity" "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==" "integrity" "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg=="
"resolved" "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" "resolved" "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz"
"version" "15.8.1" "version" "15.8.1"
"resolved" "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz" "resolved" "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz"
"version" "2.0.4" "version" "2.0.4"


"react-ga@^3.3.1":
"integrity" "sha512-4Vc0W5EvXAXUN/wWyxvsAKDLLgtJ3oLmhYYssx+YzphJpejtOst6cbIHCIyF50Fdxuf5DDKqRYny24yJ2y7GFQ=="
"resolved" "https://registry.npmjs.org/react-ga/-/react-ga-3.3.1.tgz"
"version" "3.3.1"

"react-is@^16.13.1", "react-is@^16.7.0", "react-is@>= 16.8.0": "react-is@^16.13.1", "react-is@^16.7.0", "react-is@>= 16.8.0":
"integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" "integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
"resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" "resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz"
optionalDependencies: optionalDependencies:
"fsevents" "^2.3.2" "fsevents" "^2.3.2"


"react@*", "react@^15.6.2 || ^16.0 || ^17 || ^18", "react@^16 || ^17 || ^18", "react@^16.8 || ^17 || ^18", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^17.0.2", "react@>= 16", "react@>= 16.8", "react@>= 16.8.0", "react@>=15", "react@>=16", "react@>=16.8", "react@>=16.8 || ^17.0.0 || ^18.0.0", "react@>=16.8.0", "react@17.0.2":
"react@*", "react@^16 || ^17 || ^18", "react@^16.8 || ^17 || ^18", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^17.0.2", "react@>= 16", "react@>= 16.8", "react@>= 16.8.0", "react@>=15", "react@>=16", "react@>=16.8", "react@>=16.8 || ^17.0.0 || ^18.0.0", "react@>=16.8.0", "react@17.0.2":
"integrity" "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==" "integrity" "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA=="
"resolved" "https://registry.npmjs.org/react/-/react-17.0.2.tgz" "resolved" "https://registry.npmjs.org/react/-/react-17.0.2.tgz"
"version" "17.0.2" "version" "17.0.2"

Laddar…
Avbryt
Spara