Current File : /home/quantums/durdanatariq.com/wp-content/plugins/goal-tracker-ga/apps/basic/src/index.tsx
declare var wp: any;
declare var wpGoalTrackerGa: any;

/**
 * Lets webpack process CSS, SASS or SCSS files referenced in JavaScript files.
 * All files containing `style` keyword are bundled together. The code used
 * gets applied both to the front of your site and to the editor.
 *
 * @see https://www.npmjs.com/package/@wordpress/scripts#using-css
 */
import { createRoot } from 'react-dom/client';

import {
  AdjustmentsIcon,
  QuestionMarkCircleIcon,
} from '@heroicons/react/solid';
import classNames from 'classnames';
import { TabContextProvider } from 'ui/src/context/TabContext';
import logoHelper from './assets/images/Logo-helper.svg';
import './main.css';

/*Code goes here
 * Output : build/index.js
 * */

const { __ } = wp.i18n;

const { render, useState } = wp.element;

const { apiFetch } = wp;

const {
  TabPanel,
  Notice,
  Button,
  Card,
  CardHeader,
  CardBody,
  CardDivider,
  CardFooter,
  Spinner,
} = wp.components;

// import {
// 	GetTab,
// 	RenderTab
// } from "./components/tabs";

import { HashRouter, Route, Routes } from 'react-router-dom';

import { PluginFooter } from 'ui';
import PluginNav from 'ui/src/components/nav';

import { GettingStartedGuide } from 'ui';
import CustomEvents from './components/CustomEvents';
import ProPromo from './components/ProPromo';
import Settings from './components/Settings';
import { GeneralSettingsProvider } from 'ui/src/context/GeneralSettingsContext';
import { NavigationProvider } from 'ui/src/context/NavigationContext';
import { PromoContextProvider } from 'ui/src/context/PromoContext';
import HelpSliderProvider from 'ui/src/context/HelpSliderProvider';
import { MigrateToGoalTracker } from 'ui/src/components/MigrateToGoalTracker';

const initialTabs = [
  {
    name: 'Tracker',
    href: '/tracker',
    current: true,
    primary: true,
    hasIssue: false,
    isPromo: false,
    rootTab: false,
  },
  {
    name: 'Migrate',
    href: '/migrate',
    hasIssue: false,
    rootTab: false,
  },
  {
    name: (
      <span
        data-component="tab-title"
        className="text-xl uppercase flex-1 flex items-center"
      >
        <img
          // absolute -top-7 -left-1
          className="w-12 h-12"
          src={logoHelper}
        ></img>
        <span className="mx-4">Track More...</span>
        <span
          className={classNames(
            'bg-slate-500',
            // 'bg-brand-primary',
            'text-white',
            'text-xs px-2 py-1',
            'rounded uppercase',
            'ml-4',
          )}
        >{`PRO`}</span>
      </span>
    ),
    href: '/pro',
    firstTime: true,
    hasIssue: false,
    isPro: true,
    isPromo: true,
    rootTab: false,

    // icon: <AdjustmentsIcon className="h-8 w-8" aria-hidden="true" />,
  },
  {
    name: 'Settings',
    href: '/settings',
    isFirstTime: true,
    hasIssue: false,
    rootTab: false,
    icon: <AdjustmentsIcon className="h-8 w-8" aria-hidden="true" />,
  },
  {
    name: 'Help',
    showTitle: false,
    href: '/help',
    firstTime: true,
    hasIssue: false,
    rootTab: false,
    icon: <QuestionMarkCircleIcon className="h-8 w-8" aria-hidden="true" />,
  },
];

const navLinks = [
  {
    label: 'Click',
    path: '/tracker/click-tracking',
    default: true,
  },
  {
    label: 'Visibility',
    path: '/tracker/visibility-tracking',
    default: false,
  },
  {
    label: 'WooCommerce',
    path: '/tracker/ecommerce-tracking',
    default: false,
  },
  { label: 'Video', path: '/tracker/video-tracking', default: false },
  { label: 'Forms', path: '/tracker/form-tracking', default: false },
];

const getComponentForRootPath = (tabName: string) => {
  switch (tabName) {
    case 'Tracker':
      return <CustomEvents />;
    case 'Settings':
      return <Settings />;
    default:
      return <Settings />;
  }
};

const AddSettings = () => {
  const rootElement = document.getElementById(wpGoalTrackerGa.root_id);
  const initialPrimaryTab = rootElement?.getAttribute('data-primary-tab');

  const componentForRootPath = getComponentForRootPath(initialPrimaryTab ?? '');

  const modifiedInitialTabs = initialTabs.map(tab => ({
    ...tab,
    rootTab: tab.name === initialPrimaryTab ? true : tab.rootTab,
  }));

  return (
    <TabContextProvider initialTabs={modifiedInitialTabs}>
      <GeneralSettingsProvider>
        <NavigationProvider navLinks={navLinks}>
          <PromoContextProvider>
            <HelpSliderProvider>
              <section data-component="PluginMain" className="relative">
                <HashRouter>
                  <PluginNav />
                  <Routes>
                    <Route path="/tracker/*" element={<CustomEvents />} />
                    <Route
                      path={'/migrate'}
                      element={<MigrateToGoalTracker />}
                    ></Route>
                    <Route path={'/pro'} element={<ProPromo />}></Route>
                    <Route
                      path={'/help'}
                      element={<GettingStartedGuide />}
                    ></Route>
                    <Route path={'/settings'} element={<Settings />}></Route>
                    <Route path="/" element={componentForRootPath} />
                  </Routes>
                </HashRouter>
                <PluginFooter></PluginFooter>
              </section>
            </HelpSliderProvider>
          </PromoContextProvider>
        </NavigationProvider>
      </GeneralSettingsProvider>
    </TabContextProvider>
  );
};

import React from 'react';

document.addEventListener('DOMContentLoaded', () => {
  const reactVersion = React.version.split('.').map(Number);
  if (reactVersion[0] >= 18) {
    const rootElement = document.getElementById(wpGoalTrackerGa.root_id);
    if (rootElement) {
      const root = createRoot(rootElement);
      root.render(<AddSettings />);
    }
  } else {
    if (
      'undefined' !== typeof document.getElementById(wpGoalTrackerGa.root_id) &&
      null !== document.getElementById(wpGoalTrackerGa.root_id)
    ) {
      render(<AddSettings />, document.getElementById(wpGoalTrackerGa.root_id));
    }
  }
});