application-context.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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. firstName: PropTypes.string,
  10. lastName: PropTypes.string,
  11. }),
  12. exposedSettings: PropTypes.shape({
  13. appName: PropTypes.string.isRequired,
  14. enableSubscriptions: PropTypes.bool,
  15. }),
  16. gitBridgePublicBaseUrl: PropTypes.string.isRequired,
  17. }),
  18. }
  19. export function ApplicationProvider({ children }) {
  20. const applicationContextValue = {
  21. user: window.user,
  22. exposedSettings: ExposedSettings,
  23. gitBridgePublicBaseUrl: window.gitBridgePublicBaseUrl,
  24. }
  25. return (
  26. <ApplicationContext.Provider value={applicationContextValue}>
  27. {children}
  28. </ApplicationContext.Provider>
  29. )
  30. }
  31. ApplicationProvider.propTypes = {
  32. children: PropTypes.any,
  33. }
  34. export function useApplicationContext(propTypes) {
  35. const data = useContext(ApplicationContext)
  36. PropTypes.checkPropTypes(
  37. propTypes,
  38. data,
  39. 'data',
  40. 'ApplicationContext.Provider'
  41. )
  42. return data
  43. }