application-context.js 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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. gitBridgePublicBaseUrl: PropTypes.string.isRequired,
  12. }),
  13. }
  14. export function ApplicationProvider({ children }) {
  15. const applicationContextValue = {
  16. gitBridgePublicBaseUrl: window.gitBridgePublicBaseUrl,
  17. }
  18. if (window.user.id) {
  19. applicationContextValue.user = window.user
  20. }
  21. return (
  22. <ApplicationContext.Provider value={applicationContextValue}>
  23. {children}
  24. </ApplicationContext.Provider>
  25. )
  26. }
  27. ApplicationProvider.propTypes = {
  28. children: PropTypes.any,
  29. }
  30. export function useApplicationContext(propTypes) {
  31. const data = useContext(ApplicationContext)
  32. PropTypes.checkPropTypes(
  33. propTypes,
  34. data,
  35. 'data',
  36. 'ApplicationContext.Provider'
  37. )
  38. return data
  39. }