📦 EqualifyEverything / equalify-dashboard

📄 main.tsx · 160 lines
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160import React from 'react';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
import { PostHogProvider } from 'posthog-js/react';
import { createRoot } from 'react-dom/client';
import { HelmetProvider } from 'react-helmet-async';
import {
  createBrowserRouter,
  Navigate,
  RouterProvider,
} from 'react-router-dom';

import '~/globals.css';
import '~/amplify.config';

import { initAnalytics } from '~/analytics';
import { NotFound } from '~/components/layout';
import {
  AccessibilityStatement,
  Account,
  AddProperty,
  CreateReport,
  EditProperty,
  EditReport,
  Login,
  MessageDetails,
  PageDetails,
  Properties,
  ReportDetails,
  Reports,
  Root,
  Scans,
  Signup,
  TagDetails,
  Forgot,
  Reset,
  BulkProperty,
} from '~/routes';
import {
  addPropertyAction,
  createReportAction,
  messageDetailsLoader,
  pageDetailsLoader,
  propertiesLoader,
  propertyLoader,
  reportDetailsLoader,
  reportLoader,
  reportsLoader,
  scansLoader,
  tagDetailsLoader,
  updatePropertyAction,
  updateReportAction,
  authenticatedLoader,
} from '~/routes/route-handlers';

const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      staleTime: 1000,
      refetchOnWindowFocus: true,
      refetchOnMount: true,
    },
  },
});

initAnalytics();

const router = createBrowserRouter([
  {
    path: '/',
    element: <Root />,
    errorElement: <NotFound />,
    children: [
      { index: true, element: <Navigate to="/reports" replace /> },
      {
        path: 'reports',
        element: <Reports />,
        loader: authenticatedLoader(reportsLoader(queryClient)),
      },
      {
        path: 'reports/create',
        element: <CreateReport />,
        action: createReportAction(queryClient),
      },
      {
        path: 'reports/:reportId',
        element: <ReportDetails />,
        loader: authenticatedLoader(reportDetailsLoader(queryClient)),
      },
      {
        path: 'reports/:reportId/edit',
        element: <EditReport />,
        loader: reportLoader(queryClient),
        action: updateReportAction(queryClient),
      },
      {
        path: 'reports/:reportId/messages/:messageId',
        element: <MessageDetails />,
        loader: authenticatedLoader(messageDetailsLoader(queryClient)),
      },
      {
        path: 'reports/:reportId/tags/:tagId',
        element: <TagDetails />,
        loader: authenticatedLoader(tagDetailsLoader(queryClient)),
      },
      {
        path: 'reports/:reportId/pages/:pageId',
        element: <PageDetails />,
        loader: authenticatedLoader(pageDetailsLoader(queryClient)),
      },
      { path: 'account', element: <Account /> },
      { path: 'accessibility', element: <AccessibilityStatement /> },
      { path: 'scans', element: <Scans />, loader: authenticatedLoader(scansLoader(queryClient)) },
      {
        path: 'properties',
        element: <Properties />,
        loader: authenticatedLoader(propertiesLoader(queryClient)),
      },
      {
        path: 'properties/add',
        element: <AddProperty />,
        action: addPropertyAction(queryClient),
      },
      {
        path: 'properties/bulk',
        element: <BulkProperty />,
      },
      {
        path: 'properties/:propertyId/edit',
        element: <EditProperty />,
        loader: authenticatedLoader(propertyLoader(queryClient)),
        action: updatePropertyAction(queryClient),
      },
    ],
  },
  { path: '/login', element: <Login />, errorElement: <NotFound /> },
  { path: '/signup', element: <Signup />, errorElement: <NotFound /> },
  { path: '/forgot', element: <Forgot />, errorElement: <NotFound /> },
  { path: '/reset', element: <Reset />, errorElement: <NotFound /> },
]);

const domNode = document.getElementById('root')!;
const root = createRoot(domNode);

root.render(
  <React.StrictMode>
    <PostHogProvider
      apiKey={'phc_WuMMQol0KMzQSfbxU5l7Zv4LZHCT5EDSO89SeM4QP4O'}
      options={{ api_host: 'https://us.i.posthog.com' }}
    >
      <QueryClientProvider client={queryClient}>
        <HelmetProvider>
          <RouterProvider router={router} />
        </HelmetProvider>
        <ReactQueryDevtools initialIsOpen={false} />
      </QueryClientProvider>
    </PostHogProvider>
  </React.StrictMode>,
);