overleaf/services/web/frontend/js/shared/context/project-context.js
June Kelly 4737982cdd Merge pull request #4675 from overleaf/msm-fix-review-button-ce
Remove Track Changes button in CE

GitOrigin-RevId: 7e682ea9cce8d23ba0fffc95cfb379588f0fd42e
2021-08-13 12:57:17 +00:00

72 lines
1.8 KiB
JavaScript

import { createContext, useContext } from 'react'
import PropTypes from 'prop-types'
import useScopeValue from './util/scope-value-hook'
const ProjectContext = createContext()
ProjectContext.Provider.propTypes = {
value: PropTypes.shape({
_id: PropTypes.string.isRequired,
name: PropTypes.string.isRequired,
rootDoc_id: PropTypes.string,
members: PropTypes.arrayOf(
PropTypes.shape({
_id: PropTypes.string.isRequired,
})
),
invites: PropTypes.arrayOf(
PropTypes.shape({
_id: PropTypes.string.isRequired,
})
),
features: PropTypes.shape({
collaborators: PropTypes.number,
compileGroup: PropTypes.oneOf(['alpha', 'standard', 'priority']),
trackChangesVisible: PropTypes.bool,
}),
publicAccesLevel: PropTypes.string,
tokens: PropTypes.shape({
readOnly: PropTypes.string,
readAndWrite: PropTypes.string,
}),
owner: PropTypes.shape({
_id: PropTypes.string.isRequired,
email: PropTypes.string.isRequired,
}),
}),
}
export function useProjectContext(propTypes) {
const context = useContext(ProjectContext)
if (!context) {
throw new Error(
'useProjectContext is only available inside ProjectProvider'
)
}
PropTypes.checkPropTypes(
propTypes,
context,
'data',
'ProjectContext.Provider'
)
return context
}
export function ProjectProvider({ children }) {
const [project] = useScopeValue('project', true)
// when the provider is created the project is still not added to the Angular scope.
// Name is also populated to prevent errors in existing React components
const value = project || { _id: window.project_id, name: '', features: {} }
return (
<ProjectContext.Provider value={value}>{children}</ProjectContext.Provider>
)
}
ProjectProvider.propTypes = {
children: PropTypes.any,
}