You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import React, { useEffect, lazy, Suspense, useRef, useState } from 'react';
  2. import './App.css';
  3. import { Route, Routes, useLocation, useNavigate } from 'react-router-dom';
  4. import Navigation from './components/shared/Navigation';
  5. import CookieBanner from './components/shared/CookieBanner';
  6. import Footer from './components/shared/Footer';
  7. import Loader from './components/shared/Loader';
  8. import ScrollToTop from './components/root/ScrollToTop';
  9. import ReactGA from 'react-ga4';
  10. import { useCookies, Cookies } from 'react-cookie';
  11. import routes from './routes';
  12. const Home = lazy(() => import('./pages/Home'));
  13. const Portfolio = lazy(() => import('./pages/Portfolio'));
  14. const Services = lazy(() => import('./pages/Services'));
  15. const Careers = lazy(() => import('./pages/Careers'));
  16. const DiligentLife = lazy(() => import('./pages/DiligentLife'));
  17. const DiligentMinds = lazy(() => import('./pages/DiligentMinds'));
  18. const EventsTimeline = lazy(() => import('./pages/EventsTimeline'));
  19. const About = lazy(() => import('./pages/About'));
  20. const Blog = lazy(() => import('./pages/Blog'));
  21. const BlogPost = lazy(() => import('./components/BlogPost'));
  22. const ProcessPage = lazy(() => import('./pages/ProcessPage'));
  23. const ContactPage = lazy(() => import('./pages/ContactPage'));
  24. const CaseStudyBI = lazy(() => import('./pages/CaseStudyBI'));
  25. const CaseStudyFinantial = lazy(() => import('./pages/CaseStudyFinantial'));
  26. const CaseStudyTicketing = lazy(() => import('./pages/CaseStudyTicketing'));
  27. const CaseStudyCentralized = lazy(() => import('./pages/CaseStudyCentralized'));
  28. const CaseStudyResource = lazy(() => import('./pages/CaseStudyResource'));
  29. const CaseStudyStrata = lazy(() => import('./pages/CaseStudyStrata'));
  30. const PrivacyPolicy = lazy(() => import('./pages/PrivacyPolicy'));
  31. const WorkWithUs = lazy(() => import('./pages/WorkWithUs'));
  32. import NavigationNew from './components/shared/NavigationNew';
  33. import ArticlePage from './pages/ArticlePage';
  34. import NotFoundPage from './pages/NotFoundPage';
  35. // Navigation Links
  36. const links = routes.filter(item => item.nav === true);
  37. function App() {
  38. //tabs for contact form
  39. const link = useNavigate();
  40. const [cookies, setCookie, removeCookie] = useCookies(['user']);
  41. const [diligentCookie, setDiligentCookie] = useState(cookies.diligent_ga);
  42. //scroll to Contact segment
  43. const forwardedRef = useRef(null);
  44. useEffect(() => {
  45. if (diligentCookie === 'true') {
  46. ReactGA.initialize(process.env.REACT_APP_MEASUREMENT_ID);
  47. }
  48. }, [diligentCookie]);
  49. //scroll to Contact fn
  50. function scrollToView(event) {
  51. event.preventDefault();
  52. if (forwardedRef) {
  53. window.scrollTo({ behavior: 'smooth', top: forwardedRef.current.offsetTop });
  54. } else {
  55. link('/contact');
  56. }
  57. }
  58. //nav active links
  59. function activeLinks(activePage, bool = true) {
  60. const text = 'text-gray-500 ';
  61. if (bool === true) {
  62. return activePage ? 'activeLink dg-primary-900 ' : text;
  63. } else {
  64. return text;
  65. }
  66. }
  67. const handleAccept = () => {
  68. setCookie('diligent_ga', 'true', { path: '/' });
  69. setDiligentCookie(prevValue => !prevValue);
  70. };
  71. const handleDecline = () => {
  72. setCookie('diligent_ga', 'false', { path: '/' });
  73. setDiligentCookie(prevValue => !prevValue);
  74. };
  75. return (
  76. <div>
  77. <ScrollToTop />
  78. <Navigation
  79. links={links}
  80. scrollToView={scrollToView}
  81. activeLinks={activeLinks}
  82. forwardedRef={forwardedRef}
  83. ></Navigation>
  84. {diligentCookie === undefined && (
  85. <CookieBanner handleAccept={handleAccept} handleDecline={handleDecline} />
  86. )}
  87. <Suspense fallback={<Loader />}>
  88. <Routes>
  89. <Route path="*" element={<NotFoundPage />}/>
  90. <Route exact path="/" element={<Home forwardedRef={forwardedRef} />} />
  91. <Route exact path="/workwithus" element={<WorkWithUs />} />
  92. <Route exact path="/portfolio" element={<Portfolio />} />
  93. <Route exact path="/process" element={<ProcessPage />} />
  94. <Route exact path="/careers" element={<Careers />}/>
  95. <Route exact path="/diligentlife" element={<DiligentLife />}/>
  96. <Route exact path="/diligentminds" element={<DiligentMinds />}/>
  97. <Route exact path="/eventstimeline" element={<EventsTimeline />}/>
  98. <Route exact path="/about" element={<About />}/>
  99. <Route exact path="/blog" element={<Blog />}/>
  100. <Route exact path="/articles/:slug" element={<ArticlePage />} />
  101. <Route exact path="/contact" element={<ContactPage />}/>
  102. <Route exact path="/casestudybi" element={<CaseStudyBI />}/>
  103. <Route exact path="/casestudystrata" element={<CaseStudyStrata />}/>
  104. <Route exact path="/casestudyfinancial" element={<CaseStudyFinantial />}/>
  105. <Route exact path="/casestudycentralized" element={<CaseStudyCentralized />}/>
  106. <Route exact path="/casestudyresource" element={<CaseStudyResource />}/>
  107. <Route exact path="/casestudyticketing" element={<CaseStudyTicketing />}/>
  108. <Route exact path="/privacypolicy" element={<PrivacyPolicy />}/>
  109. </Routes>
  110. </Suspense>
  111. <Footer
  112. links={links}
  113. activeLinks={activeLinks}
  114. scrollToView={scrollToView}
  115. forwardedRef={forwardedRef}
  116. />
  117. </div>
  118. );
  119. }
  120. export default App;