import createStream from '../stream';
const store = configureStore();
-
-store.dispatch(hydrateStore(window.INITIAL_STATE));
+const initialState = JSON.parse(document.getElementById("initial-state").textContent);
+store.dispatch(hydrateStore(initialState));
const browserHistory = useRouterHistory(createBrowserHistory)({
basename: '/web'
componentDidMount() {
const { locale } = this.props;
+ const streamingAPIBaseURL = store.getState().getIn(['meta', 'streaming_api_base_url']);
const accessToken = store.getState().getIn(['meta', 'access_token']);
- this.subscription = createStream(accessToken, 'user', {
+ this.subscription = createStream(streamingAPIBaseURL, accessToken, 'user', {
connected () {
store.dispatch(connectTimeline('home'));
const mapStateToProps = state => ({
hasUnread: state.getIn(['timelines', 'community', 'unread']) > 0,
+ streamingAPIBaseURL: state.getIn(['meta', 'streaming_api_base_url']),
accessToken: state.getIn(['meta', 'access_token'])
});
propTypes: {
dispatch: React.PropTypes.func.isRequired,
intl: React.PropTypes.object.isRequired,
+ streamingAPIBaseURL: React.PropTypes.string.isRequired,
accessToken: React.PropTypes.string.isRequired,
hasUnread: React.PropTypes.bool
},
mixins: [PureRenderMixin],
componentDidMount () {
- const { dispatch, accessToken } = this.props;
+ const { dispatch, streamingAPIBaseURL, accessToken } = this.props;
dispatch(refreshTimeline('community'));
return;
}
- subscription = createStream(accessToken, 'public:local', {
+ subscription = createStream(streamingAPIBaseURL, accessToken, 'public:local', {
connected () {
dispatch(connectTimeline('community'));
const mapStateToProps = state => ({
hasUnread: state.getIn(['timelines', 'tag', 'unread']) > 0,
+ streamingAPIBaseURL: state.getIn(['meta', 'streaming_api_base_url']),
accessToken: state.getIn(['meta', 'access_token'])
});
propTypes: {
params: React.PropTypes.object.isRequired,
dispatch: React.PropTypes.func.isRequired,
+ streamingAPIBaseURL: React.PropTypes.string.isRequired,
accessToken: React.PropTypes.string.isRequired,
hasUnread: React.PropTypes.bool
},
mixins: [PureRenderMixin],
_subscribe (dispatch, id) {
- const { accessToken } = this.props;
+ const { streamingAPIBaseURL, accessToken } = this.props;
- this.subscription = createStream(accessToken, `hashtag&tag=${id}`, {
+ this.subscription = createStream(streamingAPIBaseURL, accessToken, `hashtag&tag=${id}`, {
received (data) {
switch(data.event) {
const mapStateToProps = state => ({
hasUnread: state.getIn(['timelines', 'public', 'unread']) > 0,
+ streamingAPIBaseURL: state.getIn(['meta', 'streaming_api_base_url']),
accessToken: state.getIn(['meta', 'access_token'])
});
propTypes: {
dispatch: React.PropTypes.func.isRequired,
intl: React.PropTypes.object.isRequired,
+ streamingAPIBaseURL: React.PropTypes.string.isRequired,
accessToken: React.PropTypes.string.isRequired,
hasUnread: React.PropTypes.bool
},
mixins: [PureRenderMixin],
componentDidMount () {
- const { dispatch, accessToken } = this.props;
+ const { dispatch, streamingAPIBaseURL, accessToken } = this.props;
dispatch(refreshTimeline('public'));
return;
}
- subscription = createStream(accessToken, 'public', {
+ subscription = createStream(streamingAPIBaseURL, accessToken, 'public', {
connected () {
dispatch(connectTimeline('public'));
import Immutable from 'immutable';
const initialState = Immutable.Map({
+ streaming_api_base_url: null,
access_token: null,
me: null
});
return a.href;
};
-export default function getStream(accessToken, stream, { connected, received, disconnected, reconnected }) {
- const ws = new WebSocketClient(`${createWebSocketURL(STREAMING_API_BASE_URL)}/api/v1/streaming/?access_token=${accessToken}&stream=${stream}`);
+export default function getStream(streamingAPIBaseURL, accessToken, stream, { connected, received, disconnected, reconnected }) {
+ const ws = new WebSocketClient(`${createWebSocketURL(streamingAPIBaseURL)}/api/v1/streaming/?access_token=${accessToken}&stream=${stream}`);
ws.onopen = connected;
ws.onmessage = e => received(JSON.parse(e.data));
before_action :authenticate_user!
def index
- @body_classes = 'app-body'
- @token = find_or_create_access_token.token
- @web_settings = Web::Setting.find_by(user: current_user)&.data || {}
+ @body_classes = 'app-body'
+ @token = find_or_create_access_token.token
+ @web_settings = Web::Setting.find_by(user: current_user)&.data || {}
+ @streaming_api_base_url = Rails.configuration.x.streaming_api_base_url
end
private
- content_for :header_tags do
- :javascript
- window.STREAMING_API_BASE_URL = '#{Rails.configuration.x.streaming_api_base_url}';
- window.INITIAL_STATE = #{json_escape(render(file: 'home/initial_state', formats: :json))}
+ %script#initial-state{:type => 'application/json'}!= json_escape(render(file: 'home/initial_state', formats: :json))
= javascript_include_tag 'application', integrity: true
node(:meta) do
{
+ streaming_api_base_url: @streaming_api_base_url,
access_token: @token,
locale: I18n.locale,
me: current_account.id,