-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathprofile.tsx
99 lines (92 loc) · 2.34 KB
/
profile.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/**
* _____ __
* / ___// /_ _____
* \__ \/ / / / / _ \
* ___/ / / /_/ / __/
* /____/_/\__, /\___/
* /____/
* Copyright 2018 Parsa Ghadimi. All Rights Reserved.
* Licence: MIT License
*/
import React, { Component } from "react";
import { Img } from "./async";
import { Consumer } from "./context";
import { db } from "./fs";
import * as types from "./types";
// tslint:disable-next-line:variable-name
const Preview = ({ info, editable }) => (
<div className="preview">
<a href={ "#/view/" + info.id } >
<Img src={ db.getThumbnailLink(info) } />
</a>
{ !editable ? null : (
<a href={ "#/editor/" + info.id } className="edit" />
) }
</div>
);
interface ProfileState {
isLoading: boolean;
presentations: types.PresentationInfo[];
user: types.User;
}
export class Profile extends Component<{}, ProfileState> {
state = {
isLoading: true,
presentations: null,
user: null
};
uid: string;
async componentWillMount() {
this.uid = (this.props as any).match.params.uid;
const presentations = await db.queryProfile(this.uid);
let user;
if (presentations.length > 0) {
user = presentations[0].data.owner;
} else {
// TODO Save users info in some document.
// user = await db.getUser(uid);
}
this.setState({
isLoading: false,
presentations,
user
});
}
renderProfile(currentUser) {
if (this.state.isLoading) {
return <div className="loader" />;
}
const { presentations } = this.state;
const currentUserProfile = currentUser && this.uid === currentUser.uid;
let { user } = this.state;
if (!user && currentUserProfile) {
user = currentUser;
}
if (!user) {
return <div>Not found</div>;
}
return (
<div id="profile-page">
<div className="user">
<img src={ user.photoURL } />
<h3>{ user.displayName }</h3>
</div>
<div className="list">
{ presentations.map(p => <Preview
info={ p } key={ "p-" + p.id }
editable={ currentUserProfile } />) }
{ presentations.length > 0 ? null : (
"There is nothing in here!"
) }
</div>
</div>
);
}
render() {
return (
<Consumer>
{({values}) => this.renderProfile(values.Auth.currentUser)}
</Consumer>
);
}
}