|
| 1 | +import*asReactfrom'react' |
| 2 | + |
| 3 | +typeProps={ |
| 4 | +children:React.ReactElement |
| 5 | +} |
| 6 | + |
| 7 | +typeState={ |
| 8 | +adminMode:boolean |
| 9 | +} |
| 10 | + |
| 11 | +typeAction={type:'ADMIN_MODE_ON'|'ADMIN_MODE_OFF'} |
| 12 | + |
| 13 | +constAdminContext=React.createContext<{state:State;dispatch:(action:Action)=>void}>({ |
| 14 | +state:{adminMode:false}, |
| 15 | +dispatch:()=>{}, |
| 16 | +}) |
| 17 | + |
| 18 | +exportconstAdminProvider=(props:Props)=>{ |
| 19 | +const[state,dispatch]=React.useReducer( |
| 20 | +(state:State,action:Action)=>{ |
| 21 | +switch(action.type){ |
| 22 | +case'ADMIN_MODE_ON': |
| 23 | +return{ ...state,adminMode:true} |
| 24 | +case'ADMIN_MODE_OFF': |
| 25 | +return{ ...state,adminMode:false} |
| 26 | +default: |
| 27 | +thrownewError() |
| 28 | +} |
| 29 | +}, |
| 30 | +{adminMode:false}, |
| 31 | +) |
| 32 | +return<AdminContext.Providervalue={{ state, dispatch}}>{props.children}</AdminContext.Provider> |
| 33 | +} |
| 34 | + |
| 35 | +exportconstAdminConsumer=AdminContext.Consumer |