[Glitch] Replace `Status#translatable?` with language matrix in separate endpoint
Port bd047acc35
to glitch-soc
Signed-off-by: Claire <claire.github-309c@sitedethib.com>
pull/59/head
parent
193250556c
commit
8f97ffe91e
|
@ -5,6 +5,10 @@ export const SERVER_FETCH_REQUEST = 'Server_FETCH_REQUEST';
|
||||||
export const SERVER_FETCH_SUCCESS = 'Server_FETCH_SUCCESS';
|
export const SERVER_FETCH_SUCCESS = 'Server_FETCH_SUCCESS';
|
||||||
export const SERVER_FETCH_FAIL = 'Server_FETCH_FAIL';
|
export const SERVER_FETCH_FAIL = 'Server_FETCH_FAIL';
|
||||||
|
|
||||||
|
export const SERVER_TRANSLATION_LANGUAGES_FETCH_REQUEST = 'SERVER_TRANSLATION_LANGUAGES_FETCH_REQUEST';
|
||||||
|
export const SERVER_TRANSLATION_LANGUAGES_FETCH_SUCCESS = 'SERVER_TRANSLATION_LANGUAGES_FETCH_SUCCESS';
|
||||||
|
export const SERVER_TRANSLATION_LANGUAGES_FETCH_FAIL = 'SERVER_TRANSLATION_LANGUAGES_FETCH_FAIL';
|
||||||
|
|
||||||
export const EXTENDED_DESCRIPTION_REQUEST = 'EXTENDED_DESCRIPTION_REQUEST';
|
export const EXTENDED_DESCRIPTION_REQUEST = 'EXTENDED_DESCRIPTION_REQUEST';
|
||||||
export const EXTENDED_DESCRIPTION_SUCCESS = 'EXTENDED_DESCRIPTION_SUCCESS';
|
export const EXTENDED_DESCRIPTION_SUCCESS = 'EXTENDED_DESCRIPTION_SUCCESS';
|
||||||
export const EXTENDED_DESCRIPTION_FAIL = 'EXTENDED_DESCRIPTION_FAIL';
|
export const EXTENDED_DESCRIPTION_FAIL = 'EXTENDED_DESCRIPTION_FAIL';
|
||||||
|
@ -37,6 +41,29 @@ const fetchServerFail = error => ({
|
||||||
error,
|
error,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const fetchServerTranslationLanguages = () => (dispatch, getState) => {
|
||||||
|
dispatch(fetchServerTranslationLanguagesRequest());
|
||||||
|
|
||||||
|
api(getState)
|
||||||
|
.get('/api/v1/instance/translation_languages').then(({ data }) => {
|
||||||
|
dispatch(fetchServerTranslationLanguagesSuccess(data));
|
||||||
|
}).catch(err => dispatch(fetchServerTranslationLanguagesFail(err)));
|
||||||
|
};
|
||||||
|
|
||||||
|
const fetchServerTranslationLanguagesRequest = () => ({
|
||||||
|
type: SERVER_TRANSLATION_LANGUAGES_FETCH_REQUEST,
|
||||||
|
});
|
||||||
|
|
||||||
|
const fetchServerTranslationLanguagesSuccess = translationLanguages => ({
|
||||||
|
type: SERVER_TRANSLATION_LANGUAGES_FETCH_SUCCESS,
|
||||||
|
translationLanguages,
|
||||||
|
});
|
||||||
|
|
||||||
|
const fetchServerTranslationLanguagesFail = error => ({
|
||||||
|
type: SERVER_TRANSLATION_LANGUAGES_FETCH_FAIL,
|
||||||
|
error,
|
||||||
|
});
|
||||||
|
|
||||||
export const fetchExtendedDescription = () => (dispatch, getState) => {
|
export const fetchExtendedDescription = () => (dispatch, getState) => {
|
||||||
dispatch(fetchExtendedDescriptionRequest());
|
dispatch(fetchExtendedDescriptionRequest());
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { FormattedMessage, injectIntl } from 'react-intl';
|
import { FormattedMessage, injectIntl } from 'react-intl';
|
||||||
import Permalink from './permalink';
|
import Permalink from './permalink';
|
||||||
|
import { connect } from 'react-redux';
|
||||||
import classnames from 'classnames';
|
import classnames from 'classnames';
|
||||||
import Icon from 'flavours/glitch/components/icon';
|
import Icon from 'flavours/glitch/components/icon';
|
||||||
import { autoPlayGif, languages as preloadedLanguages } from 'flavours/glitch/initial_state';
|
import { autoPlayGif, languages as preloadedLanguages } from 'flavours/glitch/initial_state';
|
||||||
|
@ -99,7 +100,12 @@ class TranslateButton extends React.PureComponent {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default @injectIntl
|
const mapStateToProps = state => ({
|
||||||
|
languages: state.getIn(['server', 'translationLanguages', 'items']),
|
||||||
|
});
|
||||||
|
|
||||||
|
export default @connect(mapStateToProps)
|
||||||
|
@injectIntl
|
||||||
class StatusContent extends React.PureComponent {
|
class StatusContent extends React.PureComponent {
|
||||||
|
|
||||||
static contextTypes = {
|
static contextTypes = {
|
||||||
|
@ -120,6 +126,7 @@ class StatusContent extends React.PureComponent {
|
||||||
onUpdate: PropTypes.func,
|
onUpdate: PropTypes.func,
|
||||||
tagLinks: PropTypes.bool,
|
tagLinks: PropTypes.bool,
|
||||||
rewriteMentions: PropTypes.string,
|
rewriteMentions: PropTypes.string,
|
||||||
|
languages: ImmutablePropTypes.map,
|
||||||
intl: PropTypes.object,
|
intl: PropTypes.object,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -315,7 +322,9 @@ class StatusContent extends React.PureComponent {
|
||||||
} = this.props;
|
} = this.props;
|
||||||
|
|
||||||
const hidden = this.props.onExpandedToggle ? !this.props.expanded : this.state.hidden;
|
const hidden = this.props.onExpandedToggle ? !this.props.expanded : this.state.hidden;
|
||||||
const renderTranslate = this.props.onTranslate && status.get('translatable');
|
const contentLocale = intl.locale.replace(/[_-].*/, '');
|
||||||
|
const targetLanguages = this.props.languages?.get(status.get('language') || 'und');
|
||||||
|
const renderTranslate = this.props.onTranslate && this.context.identity.signedIn && ['public', 'unlisted'].includes(status.get('visibility')) && status.get('contentHtml').length > 0 && targetLanguages?.includes(contentLocale);
|
||||||
|
|
||||||
const content = { __html: status.get('translation') ? status.getIn(['translation', 'content']) : status.get('contentHtml') };
|
const content = { __html: status.get('translation') ? status.getIn(['translation', 'content']) : status.get('contentHtml') };
|
||||||
const spoilerContent = { __html: status.get('spoilerHtml') };
|
const spoilerContent = { __html: status.get('spoilerHtml') };
|
||||||
|
|
|
@ -10,7 +10,7 @@ import { debounce } from 'lodash';
|
||||||
import { uploadCompose, resetCompose, changeComposeSpoilerness } from 'flavours/glitch/actions/compose';
|
import { uploadCompose, resetCompose, changeComposeSpoilerness } from 'flavours/glitch/actions/compose';
|
||||||
import { expandHomeTimeline } from 'flavours/glitch/actions/timelines';
|
import { expandHomeTimeline } from 'flavours/glitch/actions/timelines';
|
||||||
import { expandNotifications, notificationsSetVisibility } from 'flavours/glitch/actions/notifications';
|
import { expandNotifications, notificationsSetVisibility } from 'flavours/glitch/actions/notifications';
|
||||||
import { fetchServer } from 'flavours/glitch/actions/server';
|
import { fetchServer, fetchServerTranslationLanguages } from 'flavours/glitch/actions/server';
|
||||||
import { clearHeight } from 'flavours/glitch/actions/height_cache';
|
import { clearHeight } from 'flavours/glitch/actions/height_cache';
|
||||||
import { changeLayout } from 'flavours/glitch/actions/app';
|
import { changeLayout } from 'flavours/glitch/actions/app';
|
||||||
import { synchronouslySubmitMarkers, submitMarkers, fetchMarkers } from 'flavours/glitch/actions/markers';
|
import { synchronouslySubmitMarkers, submitMarkers, fetchMarkers } from 'flavours/glitch/actions/markers';
|
||||||
|
@ -419,6 +419,7 @@ class UI extends React.Component {
|
||||||
this.props.dispatch(fetchMarkers());
|
this.props.dispatch(fetchMarkers());
|
||||||
this.props.dispatch(expandHomeTimeline());
|
this.props.dispatch(expandHomeTimeline());
|
||||||
this.props.dispatch(expandNotifications());
|
this.props.dispatch(expandNotifications());
|
||||||
|
this.props.dispatch(fetchServerTranslationLanguages());
|
||||||
|
|
||||||
setTimeout(() => this.props.dispatch(fetchServer()), 3000);
|
setTimeout(() => this.props.dispatch(fetchServer()), 3000);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,9 @@ import {
|
||||||
SERVER_FETCH_REQUEST,
|
SERVER_FETCH_REQUEST,
|
||||||
SERVER_FETCH_SUCCESS,
|
SERVER_FETCH_SUCCESS,
|
||||||
SERVER_FETCH_FAIL,
|
SERVER_FETCH_FAIL,
|
||||||
|
SERVER_TRANSLATION_LANGUAGES_FETCH_REQUEST,
|
||||||
|
SERVER_TRANSLATION_LANGUAGES_FETCH_SUCCESS,
|
||||||
|
SERVER_TRANSLATION_LANGUAGES_FETCH_FAIL,
|
||||||
EXTENDED_DESCRIPTION_REQUEST,
|
EXTENDED_DESCRIPTION_REQUEST,
|
||||||
EXTENDED_DESCRIPTION_SUCCESS,
|
EXTENDED_DESCRIPTION_SUCCESS,
|
||||||
EXTENDED_DESCRIPTION_FAIL,
|
EXTENDED_DESCRIPTION_FAIL,
|
||||||
|
@ -35,6 +38,12 @@ export default function server(state = initialState, action) {
|
||||||
return state.set('server', fromJS(action.server)).setIn(['server', 'isLoading'], false);
|
return state.set('server', fromJS(action.server)).setIn(['server', 'isLoading'], false);
|
||||||
case SERVER_FETCH_FAIL:
|
case SERVER_FETCH_FAIL:
|
||||||
return state.setIn(['server', 'isLoading'], false);
|
return state.setIn(['server', 'isLoading'], false);
|
||||||
|
case SERVER_TRANSLATION_LANGUAGES_FETCH_REQUEST:
|
||||||
|
return state.setIn(['translationLanguages', 'isLoading'], true);
|
||||||
|
case SERVER_TRANSLATION_LANGUAGES_FETCH_SUCCESS:
|
||||||
|
return state.setIn(['translationLanguages', 'items'], fromJS(action.translationLanguages)).setIn(['translationLanguages', 'isLoading'], false);
|
||||||
|
case SERVER_TRANSLATION_LANGUAGES_FETCH_FAIL:
|
||||||
|
return state.setIn(['translationLanguages', 'isLoading'], false);
|
||||||
case EXTENDED_DESCRIPTION_REQUEST:
|
case EXTENDED_DESCRIPTION_REQUEST:
|
||||||
return state.setIn(['extendedDescription', 'isLoading'], true);
|
return state.setIn(['extendedDescription', 'isLoading'], true);
|
||||||
case EXTENDED_DESCRIPTION_SUCCESS:
|
case EXTENDED_DESCRIPTION_SUCCESS:
|
||||||
|
|
Loading…
Reference in New Issue