Skip to content

Commit

Permalink
fix: Add harvest route
Browse files Browse the repository at this point in the history
Since the addition of the HarvestBanner we can configure a
konnector from the banner but in order to do that, we need
to add the harvest route component.

It's been a bit of a struggle, because of the Routes. But
Celestin found the answer:

When we `useLocation` from a component, if this component
is used on the parent route, then its navigation will be
based of this route, not the closest.

Before, if we did: navigate('./harvest') from the DriveView
component, even if the route matched /folder/:folderId,
the result was: /folder/harvest and not /folder/:folderId/harvest

This is why we changed the route definition.

We also remove the need of /folder/file/:fileid since this is not needed
anymore because now even if the folder is not defined (aka root dir)
we redirect to /folder/root.dir/file/:fileid

Since we import Harvestroutes, we need to install leaflet for now...
  • Loading branch information
Crash-- committed Dec 29, 2023
1 parent ca14084 commit 8624431
Show file tree
Hide file tree
Showing 5 changed files with 1,338 additions and 618 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@
"filesize": "3.6.1",
"justified-layout": "2.1.2",
"kd-tree-javascript": "1.0.3",
"leaflet": "^1.9.4",
"localforage": "1.10.0",
"lodash": "4.17.21",
"log-prefix": "0.1.1",
Expand Down
14 changes: 5 additions & 9 deletions src/drive/web/modules/navigation/AppRoute.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ import { ShareFileView } from 'drive/web/modules/views/Modal/ShareFileView'
import { QualifyFileView } from 'drive/web/modules/views/Modal/QualifyFileView'
import { MoveFilesView } from 'drive/web/modules/views/Modal/MoveFilesView'
import { UploaderComponent } from 'drive/web/modules//views/Upload/UploaderComponent'

import HarvestRoutes from 'drive/web/modules/views/Drive/HarvestRoutes'
const FilesRedirect = () => {
const { folderId } = useParams()
return <Navigate to={`/folder/${folderId}`} replace={true} />
Expand All @@ -47,22 +47,18 @@ const AppRoute = () => (
<Route path="/files/:folderId" element={<FilesRedirect />} />
<Route path="/" element={<Index />} />

<Route path="folder" element={<DriveView />}>
{/* For FilesViewer and FileHistory, we want 2 routes to match: `/folder/:folderId/file/:fileId` and `/folder/file/:fileId`. The `:folderId` is not present when opening a file from the root folder. */}
<Route path="move" element={<MoveFilesView />} />
<Route path=":folderId">
<Route path="folder">
<Route index element={<DriveView />} />
<Route path=":folderId" element={<DriveView />}>
<Route path="file/:fileId" element={<FilesViewerDrive />} />
<Route path="file/:fileId/revision" element={<FileHistory />} />
<Route path="file/:fileId/share" element={<ShareFileView />} />
<Route path="file/:fileId/qualify" element={<QualifyFileView />} />
<Route path="paywall" element={<OnlyOfficePaywallView />} />
<Route path="share" element={<ShareDisplayedFolderView />} />
<Route path="move" element={<MoveFilesView />} />
<Route path="harvest/:konnectorSlug/*" element={<HarvestRoutes />} />
</Route>
<Route path="file/:fileId" element={<FilesViewerDrive />} />
<Route path="file/:fileId/revision" element={<FileHistory />} />
<Route path="file/:fileId/share" element={<ShareFileView />} />
<Route path="file/:fileId/qualify" element={<QualifyFileView />} />
</Route>

<Route path="recent" element={<RecentView />}>
Expand Down
23 changes: 23 additions & 0 deletions src/drive/web/modules/queries.js
Original file line number Diff line number Diff line change
Expand Up @@ -384,3 +384,26 @@ export const buildTriggersQueryByAccountId = (accountId, enabled) => ({
fetchPolicy: defaultFetchPolicy
}
})

export const buildKonnectorsQueryById = (id, enabled = true) => ({
definition: () => Q('io.cozy.konnectors').getById(id),
options: {
as: `io.cozy.konnectors/${id}`,
fetchPolicy: defaultFetchPolicy,
enabled
}
})

export const buildTriggersQueryByKonnectorSlug = (slug, enabled) => ({
definition: () =>
Q('io.cozy.triggers')
.where({
'message.konnector': slug
})
.indexFields(['message.konnector']),
options: {
as: `io.cozy.triggers/slug/${slug}`,
fetchPolicy: defaultFetchPolicy,
enabled
}
})
55 changes: 55 additions & 0 deletions src/drive/web/modules/views/Drive/HarvestRoutes.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import React from 'react'
import { useParams, useNavigate } from 'react-router-dom'

import { useQuery } from 'cozy-client'
import { Routes } from 'cozy-harvest-lib'
import datacardOptions from 'cozy-harvest-lib/dist/datacards/datacardOptions'

import {
buildTriggersQueryByKonnectorSlug,
buildKonnectorsQueryById
} from 'drive/web/modules/queries'

const HarvestRoutes = () => {
const { konnectorSlug } = useParams()
const navigate = useNavigate()

const queryTriggers = buildTriggersQueryByKonnectorSlug(
konnectorSlug,
Boolean(konnectorSlug)
)
const { data: triggers } = useQuery(
queryTriggers.definition,
queryTriggers.options
)
const trigger = triggers?.[0]

const queryKonnector = buildKonnectorsQueryById(
`io.cozy.konnectors/${konnectorSlug}`,
Boolean(trigger)
)
const { data: konnectors } = useQuery(
queryKonnector.definition,
queryKonnector.options
)
const konnector = konnectors?.[0]

const konnectorWithTriggers = konnector
? { ...konnector, triggers: { data: triggers } }
: undefined

const onDismiss = () => navigate('..')

return (
<Routes
konnector={konnectorWithTriggers}
konnectorSlug={konnectorSlug}
datacardOptions={datacardOptions}
onSuccess={onDismiss}
onDismiss={onDismiss}
konnectorRoot={`harvest/${konnectorSlug}`}
/>
)
}

export default HarvestRoutes
Loading

0 comments on commit 8624431

Please sign in to comment.