PLT-3638: Fix re-opening of collapsed preview on refresh (#7301)

In this change, user action for toggling the preview is stored in the browser localstorage. Hence If there us a preview visibility value is present
in the localstorage, that will be given the preference compared to the overall preview setting.
Этот коммит содержится в:
atp
2017-08-29 20:17:32 +05:30
коммит произвёл Harrison Healey
родитель 257edc9ea3
Коммит 6a312b2ad4
2 изменённых файлов: 15 добавлений и 5 удалений

Просмотреть файл

@@ -8,6 +8,7 @@ import YoutubeVideo from 'components/youtube_video';
import Constants from 'utils/constants.jsx'; import Constants from 'utils/constants.jsx';
import * as Utils from 'utils/utils.jsx'; import * as Utils from 'utils/utils.jsx';
import BrowserStore from 'stores/browser_store.jsx';
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
@@ -47,7 +48,7 @@ export default class PostBodyAdditionalContent extends React.PureComponent {
this.handleLinkLoaded = this.handleLinkLoaded.bind(this); this.handleLinkLoaded = this.handleLinkLoaded.bind(this);
this.state = { this.state = {
embedVisible: props.previewCollapsed.startsWith('false'), embedVisible: PostBodyAdditionalContent.isEmbedVisible(props),
link: Utils.extractFirstLink(props.post.message), link: Utils.extractFirstLink(props.post.message),
linkLoadError: false, linkLoadError: false,
linkLoaded: false linkLoaded: false
@@ -62,7 +63,7 @@ export default class PostBodyAdditionalContent extends React.PureComponent {
componentWillReceiveProps(nextProps) { componentWillReceiveProps(nextProps) {
if (nextProps.previewCollapsed !== this.props.previewCollapsed || nextProps.post.message !== this.props.post.message) { if (nextProps.previewCollapsed !== this.props.previewCollapsed || nextProps.post.message !== this.props.post.message) {
this.setState({ this.setState({
embedVisible: nextProps.previewCollapsed.startsWith('false'), embedVisible: PostBodyAdditionalContent.isEmbedVisible(nextProps),
link: Utils.extractFirstLink(nextProps.post.message) link: Utils.extractFirstLink(nextProps.post.message)
}, () => { }, () => {
// check the availability of the image link // check the availability of the image link
@@ -72,6 +73,9 @@ export default class PostBodyAdditionalContent extends React.PureComponent {
} }
toggleEmbedVisibility() { toggleEmbedVisibility() {
// save the taggle info in the localstorage
BrowserStore.setItem(`isVisible-${this.props.post.id}`, !this.state.embedVisible);
this.setState((prevState) => { this.setState((prevState) => {
return {embedVisible: !prevState.embedVisible}; return {embedVisible: !prevState.embedVisible};
}); });
@@ -260,4 +264,9 @@ export default class PostBodyAdditionalContent extends React.PureComponent {
return this.props.message; return this.props.message;
} }
static isEmbedVisible(props) {
// check first in localstorage, if not present, consider previewCollapsed from the parent component
return BrowserStore.getItem(`isVisible-${props.post.id}`, props.previewCollapsed.startsWith('false'));
}
} }

Просмотреть файл

@@ -6,8 +6,8 @@ import * as Utils from 'utils/utils.jsx';
import {Constants, ErrorPageTypes} from 'utils/constants.jsx'; import {Constants, ErrorPageTypes} from 'utils/constants.jsx';
function getPrefix() { function getPrefix() {
if (global.window.mm_current_user_id) { if (global.mm_user) {
return global.window.mm_current_user_id + '_'; return global.mm_user.id + '_';
} }
console.warn('BrowserStore tried to operate without user present'); //eslint-disable-line no-console console.warn('BrowserStore tried to operate without user present'); //eslint-disable-line no-console
@@ -50,6 +50,7 @@ class BrowserStoreClass {
getGlobalItem(name, defaultValue = null) { getGlobalItem(name, defaultValue = null) {
var result = null; var result = null;
try { try {
if (this.isLocalStorageSupported()) { if (this.isLocalStorageSupported()) {
result = JSON.parse(localStorage.getItem(name)); result = JSON.parse(localStorage.getItem(name));
@@ -60,7 +61,7 @@ class BrowserStoreClass {
result = null; result = null;
} }
if (!result) { if (typeof result === 'undefined' || result === null) {
result = defaultValue; result = defaultValue;
} }