Skip to content

Commit 6614ca4

Browse files
react-10
1 parent 0cb16cf commit 6614ca4

File tree

8 files changed

+74
-36
lines changed

8 files changed

+74
-36
lines changed

src/App.js

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,60 @@
1-
import { useContext, useReducer, useState } from 'react';
1+
import { useReducer, useState } from 'react';
22
import './App.css';
33
import AddVideo from './components/AddVideo';
44
import videoDB from './data/data';
55
import VideoList from './components/VideoList';
66
import ThemeContext from './context/ThemeContext';
7-
7+
import VideosContext from './context/VideosContext';
8+
import VideoDispatchContext from './context/VideoDispatchContext';
89

910
function App() {
10-
console.log('render App')
11-
const [editableVideo,setEditableVideo] = useState(null);
12-
const [mode,setMode] = useState('darkMode')
13-
function videoReducer(videos,action){
14-
switch(action.type){
11+
console.log('render App');
12+
const [editableVideo, setEditableVideo] = useState(null);
13+
const [mode, setMode] = useState('darkMode');
14+
function videoReducer(videos, action) {
15+
switch (action.type) {
1516
case 'ADD':
16-
return [
17-
...videos,
18-
{...action.payload, id: videos.length+1}
19-
]
17+
return [...videos, { ...action.payload, id: videos.length + 1 }];
2018
case 'DELETE':
21-
return videos.filter(video=>video.id!==action.payload)
19+
return videos.filter((video) => video.id !== action.payload);
2220
case 'UPDATE':
23-
const index = videos.findIndex(v=>v.id===action.payload.id)
24-
const newVideos = [...videos]
25-
newVideos.splice(index,1,action.payload)
21+
const index = videos.findIndex((v) => v.id === action.payload.id);
22+
const newVideos = [...videos];
23+
newVideos.splice(index, 1, action.payload);
2624
setEditableVideo(null);
2725
return newVideos;
2826
default:
29-
return videos
27+
return videos;
3028
}
31-
3229
}
33-
const [videos,dispatch] = useReducer(videoReducer,videoDB)
34-
35-
30+
const [videos, dispatch] = useReducer(videoReducer, videoDB);
3631

37-
38-
function editVideo(id){
39-
setEditableVideo(videos.find(video=>video.id===id))
32+
function editVideo(id) {
33+
setEditableVideo(videos.find((video) => video.id === id));
4034
}
4135

4236
return (
4337
<ThemeContext.Provider value={mode}>
44-
<div className={`App ${mode}`} onClick={()=>console.log('App')}>
45-
<button onClick={()=>setMode(mode==='darkMode'? 'lightMode':'darkMode')}>Mode</button>
46-
<AddVideo dispatch={dispatch} editableVideo={editableVideo}></AddVideo>
47-
<VideoList dispatch={dispatch} editVideo={editVideo} videos={videos}></VideoList>
48-
49-
</div>
38+
<VideosContext.Provider value={videos}>
39+
<VideoDispatchContext.Provider value={dispatch}>
40+
<div className={`App ${mode}`} onClick={() => console.log('App')}>
41+
<button
42+
onClick={() =>
43+
setMode(mode === 'darkMode' ? 'lightMode' : 'darkMode')
44+
}
45+
>
46+
Mode
47+
</button>
48+
<AddVideo
49+
editableVideo={editableVideo}
50+
></AddVideo>
51+
<VideoList
52+
editVideo={editVideo}
53+
></VideoList>
54+
</div>
55+
</VideoDispatchContext.Provider>
56+
</VideosContext.Provider>
5057
</ThemeContext.Provider>
51-
5258
);
5359
}
5460

src/components/AddVideo.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import './AddVideo.css';
2-
import {useEffect, useState} from 'react';
2+
import { useEffect, useState} from 'react';
3+
import useVideoDispatch from '../hooks/VideoDispatch';
34

45
const initialState = {
56
time: '1 month ago',
@@ -9,8 +10,9 @@ const initialState = {
910
views:''
1011
}
1112

12-
function AddVideo({dispatch,editableVideo}) {
13+
function AddVideo({editableVideo}) {
1314
const [video, setVideo] = useState(initialState);
15+
const dispatch = useVideoDispatch();
1416

1517
function handleSubmit(e) {
1618
e.preventDefault();

src/components/Video.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import { useContext } from 'react';
22
import ThemeContext from '../context/ThemeContext';
3+
import useVideoDispatch from '../hooks/VideoDispatch';
34
import './Video.css';
45

5-
function Video({title,id,channel="Coder Dost",views,time,verified,children,dispatch,editVideo}) {
6+
function Video({title,id,channel="Coder Dost",views,time,verified,children,editVideo}) {
67
console.log('render Video')
78
const theme = useContext(ThemeContext)
9+
const dispatch = useVideoDispatch()
810

911
return (
1012
<>

src/components/VideoList.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import Video from "./Video";
22
import PlayButton from "./PlayButton";
3+
import useVideos from "../hooks/Videos";
34

4-
function VideoList({videos,dispatch,editVideo}){
5-
5+
function VideoList({editVideo}){
6+
const videos = useVideos()
67
return(
78
<>
89
{videos.map((video) => (
@@ -15,7 +16,6 @@ function VideoList({videos,dispatch,editVideo}){
1516
verified={video.verified}
1617
id={video.id}
1718
editVideo={editVideo}
18-
dispatch={dispatch}
1919
>
2020
<PlayButton
2121
onPlay={() => console.log('Playing..',video.title)}

src/context/VideoDispatchContext.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { createContext } from "react";
2+
3+
const VideoDispatchContext = createContext(null)
4+
5+
export default VideoDispatchContext;

src/context/VideosContext.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { createContext } from "react";
2+
3+
const VideosContext = createContext(null)
4+
5+
export default VideosContext;

src/hooks/VideoDispatch.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { useContext } from "react";
2+
import VideoDispatchContext from "../context/VideoDispatchContext";
3+
4+
5+
function useVideoDispatch(){
6+
return useContext(VideoDispatchContext)
7+
}
8+
9+
export default useVideoDispatch

src/hooks/Videos.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { useContext } from "react";
2+
import VideosContext from "../context/VideosContext";
3+
4+
5+
function useVideos(){
6+
return useContext(VideosContext)
7+
}
8+
9+
export default useVideos

0 commit comments

Comments
 (0)