Move project context out of scope value store (#26615)

* Refactor project context to not use scope store

* Fix Cypress tests for project context changes

* Fix frontend React Testing Library tests for project context changes

* Remove redundant code

* Fix some project types in tests

* Remove unused import and fix a type

* Throw an error if updating the project in the project context before joining the project

* Fix some review panel tests

* Remove unused imports

GitOrigin-RevId: 2f0c928b651f387aa980c29aef7d1ba0649790a7
This commit is contained in:
Tim Down
2025-07-10 08:06:31 +00:00
committed by Copybot
parent 9237d8227b
commit 905cc5d45f
79 changed files with 806 additions and 703 deletions
@@ -96,7 +96,7 @@ export function FolderUploadConflicts({
setError: (error: string) => void
}) {
const { t } = useTranslation()
const { _id: projectId } = useProjectContext()
const { projectId } = useProjectContext()
// Don't allow overwriting files with a folder
const hasFileConflict = conflicts.some(conflict => conflict.type === 'file')
@@ -191,7 +191,7 @@ function SelectProject({
setSelectedProject,
}: SelectProjectProps) {
const { t } = useTranslation()
const { _id: projectId } = useProjectContext()
const { projectId } = useProjectContext()
const { data, error, loading } = useUserProjects()
@@ -28,7 +28,7 @@ export default function FileTreeUploadDoc() {
const { parentFolderId, cancel, droppedFiles, setDroppedFiles } =
useFileTreeActionable()
const { fileTreeData } = useFileTreeData()
const { _id: projectId } = useProjectContext()
const { projectId } = useProjectContext()
const [error, setError] = useState<string>()
@@ -6,7 +6,7 @@ import { useLocation } from '../../../../shared/hooks/use-location'
// handle "not-logged-in" errors by redirecting to the login page
export default function RedirectToLogin() {
const { t } = useTranslation()
const { _id: projectId } = useProjectContext()
const { projectId } = useProjectContext()
const [secondsToRedirect, setSecondsToRedirect] = useState(10)
const location = useLocation()
@@ -25,14 +25,15 @@ function FileTreeItemMenuItems() {
selectedFileName,
} = useFileTreeActionable()
const { owner } = useProjectContext()
const { project } = useProjectContext()
const projectOwner = project?.owner?._id
const downloadWithAnalytics = useCallback(() => {
// we are only interested in downloads of bib files WRT analytics, for the purposes of promoting the tpr integrations
if (selectedFileName?.endsWith('.bib')) {
eventTracking.sendMB('download-bib-file', { projectOwner: owner._id })
eventTracking.sendMB('download-bib-file', { projectOwner })
}
}, [selectedFileName, owner])
}, [selectedFileName, projectOwner])
const createWithAnalytics = useCallback(() => {
eventTracking.sendMB('new-file-click', { location: 'file-menu' })
@@ -40,7 +40,7 @@ const FileTreeRoot = React.memo<{
}) {
const [fileTreeContainer, setFileTreeContainer] =
useState<HTMLDivElement | null>(null)
const { _id: projectId } = useProjectContext()
const { projectId } = useProjectContext()
const { fileTreeData } = useFileTreeData()
const isReady = Boolean(projectId && fileTreeData)
const newEditor = useIsNewEditorEnabled()
@@ -222,7 +222,7 @@ function fileTreeActionableReducer(state: State, action: Action) {
export const FileTreeActionableProvider: FC<React.PropsWithChildren> = ({
children,
}) => {
const { _id: projectId } = useProjectContext()
const { projectId } = useProjectContext()
const { fileTreeReadOnly } = useFileTreeData()
const { indexAllReferences } = useReferencesContext()
const { write } = usePermissionsContext()
@@ -128,7 +128,8 @@ export const FileTreeSelectableProvider: FC<
onSelect: (value: FindResult[]) => void
}>
> = ({ onSelect, children }) => {
const { _id: projectId, rootDocId } = useProjectContext()
const { projectId, project } = useProjectContext()
const rootDocId = project?.rootDocId
const [initialSelectedEntityId] = usePersistedState(
`doc.open_id.${projectId}`,