• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

EcrituresNumeriques / stylo / 15066626824

16 May 2025 10:41AM UTC coverage: 37.574% (-0.02%) from 37.594%
15066626824

Pull #1517

github

web-flow
Merge e05a1c169 into 607ffe7f9
Pull Request #1517: Mise à jour vers react-router@7

549 of 776 branches covered (70.75%)

Branch coverage included in aggregate %.

13 of 373 new or added lines in 28 files covered. (3.49%)

5 existing lines in 4 files now uncovered.

5319 of 14841 relevant lines covered (35.84%)

2.56 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/front/src/index.jsx
1
import './wdyr.js'
×
2
import 'core-js/modules/web.structured-clone'
×
3
import * as Sentry from '@sentry/react'
×
4
import React, { lazy, Suspense } from 'react'
×
5
import { createRoot } from 'react-dom/client'
×
6
import {
×
7
  createBrowserRouter,
8
  createRoutesFromChildren,
9
  createRoutesFromElements,
10
  Route,
11
  RouterProvider,
12
  matchPath,
13
  useLocation,
14
  useNavigationType,
15
  matchRoutes
16
} from 'react-router'
17
import { Provider } from 'react-redux'
×
18
import { GeistProvider } from '@geist-ui/core'
×
19
import { Helmet } from 'react-helmet'
×
20

21
import './i18n.js'
×
22
import './styles/general.scss'
×
23
import './styles/general.scss'
×
24

25
import { applicationConfig } from './config.js'
×
26
import createStore from './createReduxStore.js'
×
27
import { getUserProfile } from './helpers/user.js'
×
28

NEW
29
import App, { loader as AppLoader } from './layouts/App.jsx'
×
30
import AuthCallback from './components/AuthCallback.jsx'
×
NEW
31
import RequireAuth from './components/PrivateRoute.jsx'
×
NEW
32
import ErrorBoundary from './components/Error.jsx'
×
NEW
33
import Login from './components/Login.jsx'
×
UNCOV
34
import LoadingPage from './components/LoadingPage.jsx'
×
NEW
35
import NotFound from './components/404.jsx'
×
36

37
if (SENTRY_DSN) {
×
38
  Sentry.init({
×
39
    dsn: SENTRY_DSN,
×
40
    release: `stylo-front@${APP_VERSION}`,
×
41
    environment: APP_ENVIRONMENT,
×
42
    integrations: [
×
43
      Sentry.browserTracingIntegration(),
×
NEW
44
      Sentry.reactRouterV7BrowserTracingIntegration({
×
NEW
45
        useEffect: React.useEffect,
×
NEW
46
        useLocation,
×
NEW
47
        useNavigationType,
×
NEW
48
        createRoutesFromChildren,
×
NEW
49
        matchRoutes,
×
NEW
50
      }),
×
51
      Sentry.replayIntegration(),
×
52
      Sentry.replayCanvasIntegration(),
×
53
      Sentry.captureConsoleIntegration({ levels: ['warn', 'error', 'assert'] }),
×
54
    ],
×
55
    tracesSampleRate: 1.0,
×
56
    replaysSessionSampleRate: 0.1,
×
57
    replaysOnErrorSampleRate: 1.0,
×
58
    tracePropagationTargets: [/^\//],
×
59
  })
×
60
}
×
61

62
// lazy loaded routes
63
const Home = lazy(() => import('./components/Home.jsx'))
×
64
const Register = lazy(() => import('./components/Register.jsx'))
×
65
const RegisterWithAuthProvider = lazy(
×
66
  () => import('./components/RegisterWithAuthProvider.jsx')
×
67
)
×
68
const Corpus = lazy(() => import('./components/corpus/Corpus.jsx'))
×
69
const Articles = lazy(() => import('./components/Articles.jsx'))
×
70
const Workspaces = lazy(() => import('./components/workspace/Workspaces.jsx'))
×
71
const Credentials = lazy(() => import('./components/Credentials.jsx'))
×
72
const Annotate = lazy(() => import('./components/Annotate.jsx'))
×
73
const Privacy = lazy(() => import('./components/Privacy.jsx'))
×
74
const Story = lazy(() => import('./stories/Story.jsx'))
×
75
const CollaborativeEditor = lazy(
×
76
  () => import('./components/collaborative/CollaborativeEditor.jsx')
×
77
)
×
78

79
let sessionToken = new URLSearchParams(location.hash).get('#auth-token')
×
80

81
const initialStoreData = {
×
82
  ...(sessionToken ? { sessionToken } : {}),
×
NEW
83
  activeWorkspaceId: matchPath('/workspaces/:workspaceId', location.pathname)?.params?.workspaceId
×
84
}
×
85

86
const store = createStore(initialStoreData)
×
87

88
getUserProfile({
×
89
  applicationConfig,
×
90
  sessionToken,
×
91
}).then(({ user }) => store.dispatch({ type: 'PROFILE', user }))
×
92

93
// refresh session profile whenever something happens to the session token
94
// maybe there is a better way to do this
95
store.subscribe(() => {
×
96
  const previousValue = sessionToken
×
97
  const { sessionToken: currentValue } = store.getState()
×
98

99
  if (currentValue !== previousValue) {
×
100
    sessionToken = currentValue
×
101
    getUserProfile({ sessionToken }).then((response) =>
×
102
      store.dispatch({ type: 'PROFILE', ...response })
×
103
    )
×
104
  }
×
105
})
×
106

107
const root = createRoot(document.getElementById('root'), {
×
108
  onUncaughtError: Sentry.reactErrorHandler(),
×
109
  onCaughtError: Sentry.reactErrorHandler(),
×
110
  onRecoverableError: Sentry.reactErrorHandler(),
×
111
})
×
112

NEW
113
const router = createBrowserRouter(Sentry.withSentryReactRouterV7Routing(createRoutesFromElements(
×
NEW
114
  <Route path="/" element={<App />} loader={AppLoader} ErrorBoundary={ErrorBoundary}>
×
NEW
115
    <Route index element={<Home />} />
×
NEW
116
    <Route path="login" element={<Login />} />
×
NEW
117
    <Route path="register" element={<Register />}>
×
NEW
118
      <Route
×
NEW
119
        path=":service"
×
NEW
120
        element={<RegisterWithAuthProvider />}
×
NEW
121
      />
×
NEW
122
    </Route>
×
123

124
    {/* Articles */}
NEW
125
    <Route path="articles" element={<RequireAuth />}>
×
NEW
126
      <Route index element={<Articles />} />
×
NEW
127
    </Route>
×
128

NEW
129
    <Route path="article/:id">
×
NEW
130
      <Route index element={<CollaborativeEditor />} />
×
NEW
131
      <Route path="preview" element={<CollaborativeEditor mode="preview" />} />
×
NEW
132
      <Route path="annotate" element={<Annotate strategy="article" />} />
×
NEW
133
      <Route path="compare/:compareTo" element={<CollaborativeEditor mode="compare" />} />
×
134

NEW
135
      <Route path="version/:version">
×
NEW
136
        <Route index element={<CollaborativeEditor />} />
×
NEW
137
        <Route path="preview" element={<CollaborativeEditor mode="preview" />} />
×
NEW
138
        <Route path="annotate" element={<Annotate strategy="article" />} />
×
NEW
139
        <Route path="compare/:compareTo?" element={<CollaborativeEditor mode="compare" />} />
×
NEW
140
      </Route>
×
NEW
141
    </Route>
×
142

143

144
    {/* Corpus */}
NEW
145
    <Route path="corpus" element={<RequireAuth />}>
×
NEW
146
      <Route index element={<Corpus />} />
×
NEW
147
      <Route path=":id">
×
NEW
148
        <Route path="annotate" element={<Annotate strategy="corpus" />} />
×
NEW
149
      </Route>
×
NEW
150
    </Route>
×
151

152
    {/* Workspaces */}
NEW
153
    <Route path="workspaces" element={<RequireAuth />}>
×
NEW
154
      <Route index element={<Workspaces />} />
×
155

NEW
156
      <Route path=":workspaceId">
×
NEW
157
        <Route path="articles" element={<Articles />} />
×
NEW
158
        <Route path="corpus" element={<Corpus />} />
×
NEW
159
      </Route>
×
NEW
160
    </Route>
×
161

162
    {/* Credentials and auth callbacks */}
NEW
163
    <Route path="credentials" element={<RequireAuth />}>
×
NEW
164
      <Route index element={<Credentials />} />
×
NEW
165
      <Route path="auth-callback/:service" element={<AuthCallback />} />
×
NEW
166
    </Route>
×
167

168
    {/* Generic pages */}
NEW
169
    <Route path="privacy" element={<Privacy />} />
×
170

NEW
171
    <Route path="ux">
×
NEW
172
      <Route index element={<Story />} />
×
NEW
173
      {import.meta.env.DEV && (
×
NEW
174
        <Route exact path="loading" element={<LoadingPage />} />
×
175
      )}
NEW
176
    </Route>
×
177

NEW
178
    <Route path="*" element={<NotFound />} />
×
NEW
179
  </Route>
×
NEW
180
)))
×
181

182
root.render(
×
183
  <React.StrictMode>
×
184
    <Helmet defaultTitle="Stylo" titleTemplate="%s - Stylo" />
×
185
    <GeistProvider>
×
186
      <Provider store={store}>
×
NEW
187
        <RouterProvider router={router} />
×
188
      </Provider>
×
189
    </GeistProvider>
×
190
  </React.StrictMode>
×
191
)
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc