ide-context.js 802 B

123456789101112131415161718192021222324252627282930313233
  1. import { createContext, useContext, useState } from 'react'
  2. import PropTypes from 'prop-types'
  3. import { getMockIde } from './mock/mock-ide'
  4. const IdeContext = createContext()
  5. IdeContext.Provider.propTypes = {
  6. value: PropTypes.shape({
  7. $scope: PropTypes.object.isRequired,
  8. }),
  9. }
  10. export function useIdeContext() {
  11. const context = useContext(IdeContext)
  12. if (!context) {
  13. throw new Error('useIdeContext is only available inside IdeProvider')
  14. }
  15. return context
  16. }
  17. export function IdeProvider({ ide, children }) {
  18. const [value] = useState(() => ide || getMockIde())
  19. return <IdeContext.Provider value={value}>{children}</IdeContext.Provider>
  20. }
  21. IdeProvider.propTypes = {
  22. children: PropTypes.any.isRequired,
  23. ide: PropTypes.shape({
  24. $scope: PropTypes.object.isRequired,
  25. }),
  26. }