application-context.js 1.2 KB

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