diff options
author | crupest <crupest@outlook.com> | 2020-05-30 23:41:31 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-30 23:41:31 +0800 |
commit | c8d71a3b5e7aef4fcf75bad44b7be90b45aaaf0b (patch) | |
tree | f76ecd77c99c4136d1ab4771b91a92f1e5ad4a35 /Timeline/ClientApp/src/home/TimelineBoard.tsx | |
parent | 7e393559d2883a37b1be0c82cccc06bc97c3d102 (diff) | |
parent | 83de798e74323e96e81b8196b04e23ed2bd4efbf (diff) | |
download | timeline-c8d71a3b5e7aef4fcf75bad44b7be90b45aaaf0b.tar.gz timeline-c8d71a3b5e7aef4fcf75bad44b7be90b45aaaf0b.tar.bz2 timeline-c8d71a3b5e7aef4fcf75bad44b7be90b45aaaf0b.zip |
Merge pull request #72 from crupest/merge-frontend
Merge frontend repo into this repo.
Diffstat (limited to 'Timeline/ClientApp/src/home/TimelineBoard.tsx')
-rw-r--r-- | Timeline/ClientApp/src/home/TimelineBoard.tsx | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/Timeline/ClientApp/src/home/TimelineBoard.tsx b/Timeline/ClientApp/src/home/TimelineBoard.tsx new file mode 100644 index 00000000..38a5fcf8 --- /dev/null +++ b/Timeline/ClientApp/src/home/TimelineBoard.tsx @@ -0,0 +1,54 @@ +import React from 'react';
+import clsx from 'clsx';
+import { Link } from 'react-router-dom';
+import { Spinner } from 'reactstrap';
+
+import { TimelineInfo } from '../data/timeline';
+
+import TimelineLogo from '../common/TimelineLogo';
+import UserTimelineLogo from '../common/UserTimelineLogo';
+
+export interface TimelineBoardProps {
+ title?: string;
+ timelines?: TimelineInfo[];
+ className?: string;
+}
+
+const TimelineBoard: React.FC<TimelineBoardProps> = props => {
+ const { title, timelines, className } = props;
+
+ return (
+ <div className={clsx('timeline-board', className)}>
+ {title != null && <h3 className="text-center">{title}</h3>}
+ {(() => {
+ if (timelines == null) {
+ return (
+ <div className="d-flex flex-grow-1 justify-content-center align-items-center">
+ <Spinner color="primary" />
+ </div>
+ );
+ } else {
+ return timelines.map(timeline => {
+ const { name } = timeline;
+ const isPersonal = name.startsWith('@');
+ const url = isPersonal
+ ? `/users/${timeline.owner.username}`
+ : `/timelines/${name}`;
+ return (
+ <div key={name} className="timeline-item">
+ {isPersonal ? (
+ <UserTimelineLogo className="icon" />
+ ) : (
+ <TimelineLogo className="icon" />
+ )}
+ <Link to={url}>{name}</Link>
+ </div>
+ );
+ });
+ }
+ })()}
+ </div>
+ );
+};
+
+export default TimelineBoard;
|