Skip to content

Commit 551e117

Browse files
author
Alex Patterson
committed
percentage works
1 parent 102f46d commit 551e117

File tree

3 files changed

+84
-8
lines changed

3 files changed

+84
-8
lines changed

frontend/admin/src/components/Admin/EditPost.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,10 @@ export default function EditPost({
312312
gap: '0.5rem',
313313
}}
314314
>
315-
<YouTubeUpload />
315+
<YouTubeUpload
316+
history={history}
317+
setHistory={setHistory}
318+
/>
316319

317320
<CloudinaryUpload
318321
setHistory={setHistory}

frontend/admin/src/components/YouTube/YouTubeUpload.tsx

Lines changed: 63 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,17 @@ import {
66
Button,
77
Box,
88
Theme,
9+
IconButton,
910
} from '@material-ui/core';
1011
import { red, grey } from '@material-ui/core/colors';
1112

1213
import YouTubeIcon from '@material-ui/icons/YouTube';
13-
import { uploadVideo, userYouTubeApiToken } from '@/services/api';
14+
import {
15+
getVideoMetaData,
16+
getVideoUrl,
17+
uploadVideo,
18+
userYouTubeApiToken,
19+
} from '@/services/api';
1420
import { UserInfoExtended } from '@/models/user.model';
1521
import { useUser } from '@/utils/auth/useUser';
1622
import React, { useEffect, useMemo, useState } from 'react';
@@ -23,8 +29,12 @@ import DialogContentText from '@material-ui/core/DialogContentText';
2329
import DialogTitle from '@material-ui/core/DialogTitle';
2430
import DialogActions from '@material-ui/core/DialogActions';
2531
import Snackbar from '@material-ui/core/Snackbar';
32+
import CloseIcon from '@material-ui/icons/Close';
2633

2734
import firebase from 'firebase/app';
35+
import { Course } from '@/models/course.model.ts';
36+
import { Post } from '@/models/post.model';
37+
import { take } from 'rxjs/operators';
2838

2939
const useStyles = makeStyles((theme: Theme) =>
3040
createStyles({
@@ -64,10 +74,19 @@ const useStyles = makeStyles((theme: Theme) =>
6474
rejectStyle: {
6575
borderColor: '#ff1744',
6676
},
77+
close: {
78+
padding: theme.spacing(0.5),
79+
},
6780
})
6881
);
6982

70-
export default function YouTubeUpload(): JSX.Element {
83+
export default function YouTubeUpload({
84+
setHistory,
85+
history,
86+
}: {
87+
setHistory: React.Dispatch<React.SetStateAction<Post | Course | undefined>>;
88+
history: Post;
89+
}): JSX.Element {
7190
const { user }: { user: UserInfoExtended | null | undefined } = useUser();
7291
const [token, setToken] = useState<{ refresh_token: string } | null>(null);
7392
const [userToken$, setUserToken$] = useState<Observable<{
@@ -110,7 +129,7 @@ export default function YouTubeUpload(): JSX.Element {
110129
setSnackOpen(true);
111130
};
112131
const handleSnackClose = () => {
113-
setSnackOpen(true);
132+
setSnackOpen(false);
114133
};
115134

116135
const [upload$, setUpload$] = useState<Observable<{
@@ -121,17 +140,35 @@ export default function YouTubeUpload(): JSX.Element {
121140
if (!upload$) {
122141
return;
123142
}
124-
const sub = upload$?.subscribe((u) => {
143+
const sub = upload$?.subscribe((m) => {
125144
handleClose();
126145
handleSnackOpen();
127-
setUploadPercentage(u.progress);
128-
console.log('Snapshot', u.snapshot);
146+
setUploadPercentage(m.progress);
147+
if (m.progress === 100) {
148+
getVideoUrl(m.snapshot.ref.fullPath)
149+
.pipe(take(1))
150+
.subscribe((u) => console.log(u));
151+
getVideoMetaData(m.snapshot.ref.fullPath)
152+
.pipe(take(1))
153+
.subscribe((d) => console.log(d));
154+
if (sub) {
155+
sub.unsubscribe();
156+
setUpload$(null);
157+
}
158+
}
129159
});
130160
return () => {
131161
if (sub) sub.unsubscribe();
132162
};
133163
}, [upload$]);
134164

165+
const handleVidoUploadCancel = () => {
166+
upload$?.pipe(take(1)).subscribe((m) => {
167+
console.log(m.snapshot.task);
168+
console.log(m.snapshot.task.cancel());
169+
});
170+
};
171+
135172
const onUploadVideo = () => {
136173
acceptedFiles.map((file: any) => setUpload$(uploadVideo('/alex', file)));
137174
};
@@ -246,7 +283,26 @@ export default function YouTubeUpload(): JSX.Element {
246283
open={snackOpen}
247284
onClose={handleSnackClose}
248285
message={`Uploading ${uploadPercentage}`}
249-
/>
286+
action={
287+
<React.Fragment>
288+
<Button
289+
color="secondary"
290+
size="small"
291+
onClick={handleVidoUploadCancel}
292+
>
293+
CANCEL
294+
</Button>
295+
<IconButton
296+
aria-label="close"
297+
color="inherit"
298+
className={classes.close}
299+
onClick={handleSnackClose}
300+
>
301+
<CloseIcon />
302+
</IconButton>
303+
</React.Fragment>
304+
}
305+
></Snackbar>
250306
</>
251307
)}
252308
</>

frontend/admin/src/services/api.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,3 +458,20 @@ export const uploadVideo = (
458458
})
459459
);
460460
};
461+
462+
export const getVideoUrl = (storagePath: string): Observable<string> => {
463+
return storage$.pipe(
464+
switchMap((storage) => {
465+
const dataRef = storage.ref(storagePath);
466+
return getDownloadURL(dataRef);
467+
})
468+
);
469+
};
470+
export const getVideoMetaData = (storagePath: string): Observable<any> => {
471+
return storage$.pipe(
472+
switchMap((storage) => {
473+
const dataRef = storage.ref(storagePath);
474+
return getMetadata(dataRef);
475+
})
476+
);
477+
};

0 commit comments

Comments
 (0)