application-context.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import React, { createContext, useContext, useMemo } 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 value = useMemo(() => {
  16. const value = {
  17. gitBridgePublicBaseUrl: window.gitBridgePublicBaseUrl,
  18. }
  19. if (window.user.id) {
  20. value.user = window.user
  21. }
  22. return value
  23. }, [])
  24. return (
  25. <ApplicationContext.Provider value={value}>
  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. }