diff --git a/app/components/App.jsx b/app/components/App.jsx
index 4ed4c9c46..1d217e0d3 100644
--- a/app/components/App.jsx
+++ b/app/components/App.jsx
@@ -12,7 +12,7 @@ import { createGlobalStyle } from 'styled-components'
import AppPropTypes from 'app/utils/AppPropTypes';
import Header from 'app/components/modules/Header';
import Footer from 'app/components/modules/Footer';
-import AppReminder from 'app/components/elements/app/AppReminder'
+import NewsPopups from 'app/components/elements/NewsPopups'
import URLLoader from 'app/components/elements/app/URLLoader';
import TooltipManager from 'app/components/elements/common/TooltipManager';
import user from 'app/redux/User';
@@ -33,8 +33,6 @@ import { APP_ICON, VEST_TICKER, } from 'app/client_config';
import session from 'app/utils/session'
import { loadGrayHideSettings } from 'app/utils/ContentAccess'
-const APP_REMINDER_INTERVAL = 30*24*60*60*1000
-
const GlobalStyle = createGlobalStyle`
body {
fill: currentColor;
@@ -100,17 +98,6 @@ class App extends React.Component {
}
}
- showAppReminder = () => {
- if (process.env.IS_APP || typeof(localStorage) === 'undefined'
- || location.pathname.startsWith('/submit')) {
- return false
- }
- const now = Date.now()
- let reminded = localStorage.getItem('app_reminder') || 0
- reminded = parseInt(reminded)
- return !reminded || (now - reminded > APP_REMINDER_INTERVAL)
- }
-
constructor(props) {
super(props)
if (process.env.BROWSER) {
@@ -381,8 +368,6 @@ class App extends React.Component {
const noHeader = isApp
const noFooter = isApp || location.pathname.startsWith('/submit')
- const reminder = this.showAppReminder() ? : null
-
return (
{children}
{noFooter ? null : }
- {reminder}
+
diff --git a/app/components/all.scss b/app/components/all.scss
index d03054e88..aa90959f3 100644
--- a/app/components/all.scss
+++ b/app/components/all.scss
@@ -39,7 +39,7 @@
@import "./elements/VerticalMenu";
@import "./elements/VotesAndComments";
@import "./elements/Voting";
-@import "./elements/app/AppReminder";
+@import "./elements/NewsPopups";
@import "./elements/common/YoutubePlayer/YoutubePlayer";
@import "./elements/common/TelegramPlayer/TelegramPlayer";
@import "./elements/common/Button/index";
diff --git a/app/components/elements/NewsPopups.jsx b/app/components/elements/NewsPopups.jsx
new file mode 100644
index 000000000..d548ffb54
--- /dev/null
+++ b/app/components/elements/NewsPopups.jsx
@@ -0,0 +1,172 @@
+import React from 'react'
+import tt from 'counterpart'
+import { connect } from 'react-redux'
+import { api } from 'golos-lib-js'
+
+import CloseButton from 'react-foundation-components/lib/global/close-button'
+
+import user from 'app/redux/User'
+
+const APP_REMINDER_INTERVAL = 30*24*60*60*1000
+
+class NewsPopups extends React.Component {
+ state = {
+ hidden: false,
+ hiddenNews: []
+ }
+
+ checkNews = async () => {
+ if (typeof(localStorage) === 'undefined') {
+ this.setState({ news: [] })
+ return
+ }
+ let news_read = localStorage.getItem('news_read') || ''
+ news_read = news_read.split(',')
+ if ($STM_Config.golos_news && $STM_Config.golos_news.account) {
+ const acc = $STM_Config.golos_news.account
+ const entries = await api.getBlogEntriesAsync(acc, 0, 5, ['fm-'], {})
+ const news_to_load = []
+ for (const post of entries) {
+ const { author, hashlink } = post
+ if (news_read.includes(hashlink)) {
+ continue
+ }
+ news_to_load.push({
+ author,
+ hashlink
+ })
+ }
+ if (news_to_load.length) {
+ const news = await api.getContentPreviewsAsync(news_to_load)
+ this.setState({
+ news
+ })
+ } else {
+ this.setState({
+ news: []
+ })
+ }
+ }
+ }
+
+ componentDidMount() {
+ this.checkNews()
+ }
+
+ hideMe = (i) => {
+ if (i) {
+ let { hiddenNews } = this.state
+ hiddenNews = [...hiddenNews]
+ hiddenNews.push(i)
+ this.setState({
+ hiddenNews
+ })
+ let news_read = localStorage.getItem('news_read') || ''
+ news_read = news_read.split(',')
+ news_read.push(i)
+ localStorage.setItem('news_read', news_read.join(','))
+ return
+ }
+ const now = Date.now()
+ localStorage.setItem('app_reminder', now)
+ this.setState({
+ hidden: true
+ })
+ }
+
+ openNew = (e, i, url) => {
+ e.preventDefault()
+ this.hideMe(i)
+ window.open(url, '_blank')
+ }
+
+ showModal = (e) => {
+ e.preventDefault()
+ this.props.showModal()
+ this.hideMe()
+ }
+
+ showAppReminder = () => {
+ if (process.env.IS_APP || typeof(localStorage) === 'undefined'
+ || location.pathname.startsWith('/submit')) {
+ return false
+ }
+ const now = Date.now()
+ let reminded = localStorage.getItem('app_reminder') || 0
+ reminded = parseInt(reminded)
+ return !reminded || (now - reminded > APP_REMINDER_INTERVAL)
+ }
+
+ render() {
+ const { news,hiddenNews } = this.state
+
+ let appReminder = null
+ if (news && this.showAppReminder() && !this.state.hidden) {
+ appReminder =
+ {
+ e.stopPropagation()
+ this.hideMe()
+ }}
+ />
+ {tt('app_reminder.text')}
+
+ }
+
+ let newItems = []
+ if (news) {
+ let newCount = 0
+ for (const ne of news) {
+ if (hiddenNews.includes(ne.hashlink)) {
+ continue
+ }
+ newCount++
+ }
+ newCount -= 1
+ for (const ne of news) {
+ if (hiddenNews.includes(ne.hashlink)) {
+ continue
+ }
+ let title = ne.title
+ if (title.length > 100) {
+ title = title.substring(0, 100) + '...'
+ }
+ let bottom = newCount * 65
+ if (appReminder) {
+ bottom += 65
+ } else {
+ bottom += 2
+ }
+ newItems.push( this.openNew(e, ne.hashlink, ne.url)} target='_blank' rel='noopener noreferrer nofollow'>
+
+ {
+ e.stopPropagation()
+ e.preventDefault()
+ this.hideMe(ne.hashlink)
+ }}
+ />
+ {title}
+
+ )
+ --newCount
+ }
+ }
+
+ return
+ {appReminder}
+ {newItems}
+
+ }
+}
+
+export default connect(
+ state => {
+ return {}
+ },
+ dispatch => ({
+ showModal: () => {
+ dispatch(user.actions.showAppDownload())
+ }
+ })
+)(NewsPopups)
diff --git a/app/components/elements/app/AppReminder.scss b/app/components/elements/NewsPopups.scss
similarity index 95%
rename from app/components/elements/app/AppReminder.scss
rename to app/components/elements/NewsPopups.scss
index 227071e5b..fe5c9b22a 100644
--- a/app/components/elements/app/AppReminder.scss
+++ b/app/components/elements/NewsPopups.scss
@@ -1,4 +1,4 @@
-.AppReminder {
+.NewsPopups {
@include themify($themes) {
background-color: themed('modalReminder') !important;
}
diff --git a/app/components/elements/app/AppReminder.jsx b/app/components/elements/app/AppReminder.jsx
deleted file mode 100644
index 7043fc288..000000000
--- a/app/components/elements/app/AppReminder.jsx
+++ /dev/null
@@ -1,53 +0,0 @@
-import React from 'react'
-import tt from 'counterpart'
-import { connect } from 'react-redux'
-
-import CloseButton from 'react-foundation-components/lib/global/close-button'
-
-import user from 'app/redux/User'
-
-class AppReminder extends React.Component {
- state = {
- hidden: false
- }
-
- hideMe = () => {
- const now = Date.now()
- localStorage.setItem('app_reminder', now)
- this.setState({
- hidden: true
- })
- }
-
- showModal = (e) => {
- e.preventDefault()
- this.props.showModal()
- this.hideMe()
- }
-
- render() {
- if (this.state.hidden) {
- return null
- }
- return
- {
- e.stopPropagation()
- this.hideMe()
- }}
- />
- {tt('app_reminder.text')}
-
- }
-}
-
-export default connect(
- state => {
- return {}
- },
- dispatch => ({
- showModal: () => {
- dispatch(user.actions.showAppDownload())
- }
- })
-)(AppReminder)
diff --git a/config/default.json b/config/default.json
index 3d0bc1949..cd6cab3be 100644
--- a/config/default.json
+++ b/config/default.json
@@ -58,6 +58,9 @@
"apidex_service": {
"host": "https://api-dex.golos.app"
},
+ "golos_news": {
+ "account": "progolos"
+ },
"forums": {
"white_list": ["fm-golostalk", "fm-prizmtalk", "fm-graphenetalks"],
"fm-golostalk": {"domain": "golostalk.com"},
diff --git a/server/index.js b/server/index.js
index 8ad28a7e7..c325c4a3e 100755
--- a/server/index.js
+++ b/server/index.js
@@ -46,6 +46,9 @@ global.$STM_Config = {
wallet_service: config.get('wallet_service'),
messenger_service: config.get('messenger_service'),
apidex_service: config.get('apidex_service'),
+ golos_news: config.has('golos_news') ? config.get('golos_news') : {
+ account: 'progolos'
+ },
forums: config.get('forums'),
blocked_users,
blocked_posts,