application-context.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import React, { createContext, useContext } from 'react'
  2. import PropTypes from 'prop-types'
  3. import ExposedSettings from '../../main/exposed-settings'
  4. export const ApplicationContext = createContext()
  5. ApplicationContext.Provider.propTypes = {
  6. value: PropTypes.shape({
  7. user: PropTypes.shape({
  8. id: PropTypes.string.isRequired
  9. }),
  10. exposedSettings: PropTypes.shape({
  11. appName: PropTypes.string.isRequired,
  12. enableSubscriptions: PropTypes.bool
  13. }),
  14. gitBridgePublicBaseUrl: PropTypes.string.isRequired
  15. })
  16. }
  17. export function ApplicationProvider({ children }) {
  18. const applicationContextValue = {
  19. user: window.user,
  20. exposedSettings: ExposedSettings,
  21. gitBridgePublicBaseUrl: window.gitBridgePublicBaseUrl
  22. }
  23. return (
  24. <ApplicationContext.Provider value={applicationContextValue}>
  25. {children}
  26. </ApplicationContext.Provider>
  27. )
  28. }
  29. ApplicationProvider.propTypes = {
  30. children: PropTypes.any
  31. }
  32. export function useApplicationContext(propTypes) {
  33. const data = useContext(ApplicationContext)
  34. PropTypes.checkPropTypes(
  35. propTypes,
  36. data,
  37. 'data',
  38. 'ApplicationContext.Provider'
  39. )
  40. return data
  41. }