-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathBlogRouter.js
More file actions
165 lines (148 loc) · 4.16 KB
/
BlogRouter.js
File metadata and controls
165 lines (148 loc) · 4.16 KB
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
import React from "react"
import ReactDOM from "react-dom"
import { connect } from 'react-redux'
import isUndefined from 'lodash/isUndefined';
import { redirects_map } from '../../../redirects';
import {get_podcasts_by_guid} from '../../utils/redux_loader'
import NotFound from '../../NotFound/Components/NotFound'
import BlogTopNav from "../Components/BlogTopNav"
import BlogItem from "../Components/BlogItem"
import BlogList from "../Components/BlogList"
import BlogBreadCrumbs from '../Components/BlogBreadCrumbs'
import NoBlogs from "../Components/NoBlogs"
import Loading from "../../Common/Components/Loading"
import transform_pathname from "../../utils/transform_pathname"
class BlogRouter extends React.Component {
constructor(props) {
super(props)
}
handle_reload(pathname) {
const dispatch = this.props.dispatch
var pname = pathname.substring(5, pathname.length)
var ocms = this.props.cms.toJS()
var blogs = ocms['recent_blogs']
var exact = undefined
for (var blog of blogs) {
var pn = blog['prettyname']
if (pname == pn) {
exact = blog
}
}
if (exact) {
// This means the current state contains the single page requested, so it need not be reloaded
} else {
var payload = {limit: 10, offset: 0, prefix: pname, dispatch}
var loaded_prettyname = ocms.loaded_prettyname
console.log("Asking blogs to reload")
console.log(payload)
dispatch({type: "CMS_LOAD_RECENT_BLOGS", payload })
}
}
componentWillReceiveProps(nextProps) {
var opathname = this.props.location.pathname
var npathname = nextProps.location.pathname
if (opathname != npathname) {
console.log("Going to reload")
this.handle_reload(npathname)
} else {
console.log("Not reloading since " + opathname + "=" + npathname)
}
}
componentDidMount() {
console.log("BR did mount")
var pathname = this.props.location.pathname
this.handle_reload(pathname)
}
static getPageMeta(state) {
var ocms = state.cms.toJS()
var blogs = ocms['recent_blogs']
let meta = {}
if (blogs.length === 0) {
return {
title: 'Blog Not Found'
}
}
if (blogs.length === 1) {
const post = blogs[0]
const isEpisode = !isUndefined(post.guid)
meta.title = `Data Skeptic`
meta.description = post.desc
if (isEpisode) {
meta.image = post.preview;
}
}
return meta;
}
filter_blogs(allblogs, pathname) {
// ????
//var redirect = redirects_map[pathname]
//if (redirect) {
// pathname = redirect
//}
var k = '/blog'
var path = pathname.substring(k.length, pathname.length)
console.log("inject_blog router path=" + path)
var limit = 100
var count = 0
var i = 0
var l = allblogs.length
console.log("l="+l)
var blogs = []
while (i < l && count < limit) {
var blog = allblogs[i]
var pn = blog['prettyname']
if (pn.indexOf(path) == 0) {
blogs.push(blog)
count += 1
}
i += 1
}
return blogs
}
render() {
var pathname = this.props.location.pathname
console.log("BlogRouter render " + pathname)
var pname = pathname.substring(5, pathname.length)
var ocms = this.props.cms.toJS()
var blogs = ocms['recent_blogs']
var exact = undefined
for (var blog of blogs) {
var pn = blog['prettyname']
if (pname == pn) {
exact = blog
}
}
if (exact != undefined) {
blogs = [exact]
}
var blog_state = ocms.blog_state
if (blog_state == "" || blog_state == "loading" && blogs.length == 0) {
return <Loading />
}
if (blogs.length == 0) {
console.log("NO BLOGS IN MEMORY!")
return <NoBlogs />
}
if (blogs.length == 1) {
return <BlogItem blog={blogs[0]} />
} else {
return (
<div className="center">
<BlogTopNav pathname={pathname} blogs={blogs} />
<div className="center">
<BlogList blogs={blogs} />
</div>
</div>
)
}
}
}
export default connect(
(state, ownProps) => ({
player: state.player,
blogs: state.blogs,
cms: state.cms,
episodes: state.episodes,
site: state.site
}))
(BlogRouter)