Spaces:
Running
Running
Update index.html
Browse files- index.html +40 -21
index.html
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
<meta charset="UTF-8">
|
5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 |
<title>Video Gallery with React</title>
|
7 |
-
<!-- CSS -->
|
8 |
<style>
|
9 |
body {
|
10 |
font-family: Arial, sans-serif;
|
@@ -49,6 +49,8 @@
|
|
49 |
margin: 0;
|
50 |
}
|
51 |
</style>
|
|
|
|
|
52 |
</head>
|
53 |
<body>
|
54 |
<!-- Root div for React -->
|
@@ -58,14 +60,13 @@
|
|
58 |
<script src="https://unpkg.com/react@18/umd/react.development.js"></script>
|
59 |
<script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
|
60 |
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
|
61 |
-
<!-- Instagram Embed Script -->
|
62 |
-
<script async src="//www.instagram.com/embed.js"></script>
|
63 |
|
64 |
<!-- React App Script -->
|
65 |
<script type="text/babel">
|
66 |
-
const { useState } = React;
|
|
|
67 |
const App = () => {
|
68 |
-
//
|
69 |
const videos = [
|
70 |
{ src: 'https://www.instagram.com/reel/DHIpd-9uzUc/', tag: 'travel' },
|
71 |
{ src: 'https://www.instagram.com/reel/DFqmJKuhcfy/', tag: 'tech' },
|
@@ -73,13 +74,30 @@
|
|
73 |
{ src: 'https://www.instagram.com/reel/CUYCIzMJGv-/', tag: 'travel' },
|
74 |
{ src: 'https://www.instagram.com/reel/DFms5N5OG7L/', tag: 'tech' },
|
75 |
];
|
76 |
-
|
77 |
const [filter, setFilter] = useState('all');
|
78 |
-
// Filter videos based on tag
|
79 |
const filteredVideos = filter === 'all'
|
80 |
? videos
|
81 |
: videos.filter(video => video.tag === filter);
|
82 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
return (
|
84 |
<div>
|
85 |
<header>
|
@@ -100,20 +118,20 @@
|
|
100 |
data-instgrm-permalink={video.src}
|
101 |
data-instgrm-captioned
|
102 |
data-instgrm-version="14"
|
103 |
-
style={{
|
104 |
-
background: '#FFF',
|
105 |
-
border: 0,
|
106 |
-
borderRadius: '3px',
|
107 |
-
boxShadow: '0 0 1px 0 rgba(0,0,0,0.5), 0 1px 10px 0 rgba(0,0,0,0.15)',
|
108 |
-
margin: '1px',
|
109 |
-
maxWidth: '540px',
|
110 |
-
minWidth: '326px',
|
111 |
-
padding: 0,
|
112 |
-
width: '99.375%',
|
113 |
-
|
114 |
-
width: 'calc(100% - 2px)'
|
115 |
}}
|
116 |
-
|
117 |
<p>{video.src.split('/')[4]}</p>
|
118 |
</div>
|
119 |
))}
|
@@ -122,7 +140,8 @@
|
|
122 |
</div>
|
123 |
);
|
124 |
};
|
125 |
-
|
|
|
126 |
ReactDOM.render(<App />, document.getElementById('root'));
|
127 |
</script>
|
128 |
</body>
|
|
|
4 |
<meta charset="UTF-8">
|
5 |
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6 |
<title>Video Gallery with React</title>
|
7 |
+
<!-- CSS for styling -->
|
8 |
<style>
|
9 |
body {
|
10 |
font-family: Arial, sans-serif;
|
|
|
49 |
margin: 0;
|
50 |
}
|
51 |
</style>
|
52 |
+
<!-- Instagram Embed Script -->
|
53 |
+
<script async src="https://www.instagram.com/embed.js"></script>
|
54 |
</head>
|
55 |
<body>
|
56 |
<!-- Root div for React -->
|
|
|
60 |
<script src="https://unpkg.com/react@18/umd/react.development.js"></script>
|
61 |
<script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
|
62 |
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
|
|
|
|
|
63 |
|
64 |
<!-- React App Script -->
|
65 |
<script type="text/babel">
|
66 |
+
const { useState, useEffect } = React;
|
67 |
+
|
68 |
const App = () => {
|
69 |
+
// Video data
|
70 |
const videos = [
|
71 |
{ src: 'https://www.instagram.com/reel/DHIpd-9uzUc/', tag: 'travel' },
|
72 |
{ src: 'https://www.instagram.com/reel/DFqmJKuhcfy/', tag: 'tech' },
|
|
|
74 |
{ src: 'https://www.instagram.com/reel/CUYCIzMJGv-/', tag: 'travel' },
|
75 |
{ src: 'https://www.instagram.com/reel/DFms5N5OG7L/', tag: 'tech' },
|
76 |
];
|
77 |
+
|
78 |
const [filter, setFilter] = useState('all');
|
|
|
79 |
const filteredVideos = filter === 'all'
|
80 |
? videos
|
81 |
: videos.filter(video => video.tag === filter);
|
82 |
|
83 |
+
// Ensure Instagram embeds are processed after rendering
|
84 |
+
useEffect(() => {
|
85 |
+
// Check if the Instagram embed script is loaded
|
86 |
+
if (window.instgrm && window.instgrm.Embeds) {
|
87 |
+
window.instgrm.Embeds.process();
|
88 |
+
} else {
|
89 |
+
// If the script isn't loaded yet, wait for it
|
90 |
+
const checkScript = setInterval(() => {
|
91 |
+
if (window.instgrm && window.instgrm.Embeds) {
|
92 |
+
window.instgrm.Embeds.process();
|
93 |
+
clearInterval(checkScript);
|
94 |
+
}
|
95 |
+
}, 100);
|
96 |
+
// Cleanup interval on unmount
|
97 |
+
return () => clearInterval(checkScript);
|
98 |
+
}
|
99 |
+
}, [filteredVideos]); // Re-run when filteredVideos changes
|
100 |
+
|
101 |
return (
|
102 |
<div>
|
103 |
<header>
|
|
|
118 |
data-instgrm-permalink={video.src}
|
119 |
data-instgrm-captioned
|
120 |
data-instgrm-version="14"
|
121 |
+
style={{
|
122 |
+
background: '#FFF',
|
123 |
+
border: 0,
|
124 |
+
borderRadius: '3px',
|
125 |
+
boxShadow: '0 0 1px 0 rgba(0,0,0,0.5), 0 1px 10px 0 rgba(0,0,0,0.15)',
|
126 |
+
margin: '1px',
|
127 |
+
maxWidth: '540px',
|
128 |
+
minWidth: '326px',
|
129 |
+
padding: 0,
|
130 |
+
width: '99.375%',
|
131 |
+
WebkitWidth: 'calc(100% - 2px)',
|
132 |
+
width: 'calc(100% - 2px)'
|
133 |
}}
|
134 |
+
></blockquote>
|
135 |
<p>{video.src.split('/')[4]}</p>
|
136 |
</div>
|
137 |
))}
|
|
|
140 |
</div>
|
141 |
);
|
142 |
};
|
143 |
+
|
144 |
+
// Render the app
|
145 |
ReactDOM.render(<App />, document.getElementById('root'));
|
146 |
</script>
|
147 |
</body>
|