Add translations, close button and make Giphy modal more beautiful

This commit is contained in:
koyu 2021-01-19 17:51:44 +01:00 committed by Essem
parent 6da827ace9
commit 4d57353991
No known key found for this signature in database
GPG key ID: 7D497397CC3A2A8C
2 changed files with 27 additions and 108 deletions

View file

@ -1,15 +1,20 @@
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import Button from 'flavours/glitch/components/button';
import ImmutablePureComponent from 'react-immutable-pure-component'; import ImmutablePureComponent from 'react-immutable-pure-component';
import { connect } from 'react-redux'; import { connect } from 'react-redux';
import ImmutablePropTypes from 'react-immutable-proptypes'; import ImmutablePropTypes from 'react-immutable-proptypes';
import { giphySet, uploadCompose } from 'flavours/glitch/actions/compose'; import { giphySet, uploadCompose } from 'flavours/glitch/actions/compose';
import IconButton from 'flavours/glitch/components/icon_button'; import IconButton from 'flavours/glitch/components/icon_button';
import { debounce, mapValues } from 'lodash';
import classNames from 'classnames';
import ReactGiphySearchbox from 'react-giphy-searchbox' import ReactGiphySearchbox from 'react-giphy-searchbox'
import { changeCompose } from 'flavours/glitch/actions/compose'; import { defineMessages, injectIntl } from 'react-intl';
const messages = defineMessages({
search: { id: 'giphy.search', defaultMessage: 'Search for GIFs' },
error: { id: 'giphy.error', defaultMessage: 'Oops! Something went wrong. Please, try again.' },
loading: { id: 'giphy.loading', defaultMessage: 'Loading...'},
nomatches: { id: 'giphy.nomatches', defaultMessage: 'No matches found.' },
close: { id: 'settings.close', defaultMessage: 'Close' },
});
// Utility for converting base64 image to binary for upload // Utility for converting base64 image to binary for upload
// https://stackoverflow.com/questions/35940290/how-to-convert-base64-string-to-javascript-file-object-like-as-from-file-input-f // https://stackoverflow.com/questions/35940290/how-to-convert-base64-string-to-javascript-file-object-like-as-from-file-input-f
@ -34,19 +39,17 @@ const mapDispatchToProps = dispatch => ({
}); });
export default @connect(mapStateToProps, mapDispatchToProps) export default @connect(mapStateToProps, mapDispatchToProps)
@injectIntl
class GIFModal extends ImmutablePureComponent { class GIFModal extends ImmutablePureComponent {
static propTypes = { static propTypes = {
intl: PropTypes.object.isRequired,
options: ImmutablePropTypes.map, options: ImmutablePropTypes.map,
onClose: PropTypes.func.isRequired, onClose: PropTypes.func.isRequired,
setOpt: PropTypes.func.isRequired, setOpt: PropTypes.func.isRequired,
submit: PropTypes.func.isRequired, submit: PropTypes.func.isRequired,
}; };
componentDidMount() {
//If component mounted
}
onDoneButton = (item) => { onDoneButton = (item) => {
const url = item["images"]["original"]["mp4"]; const url = item["images"]["original"]["mp4"];
var modal = this; var modal = this;
@ -64,31 +67,14 @@ class GIFModal extends ImmutablePureComponent {
}); });
}; };
handleClick = () => {
this.props.onClose();
}
handleCancel = () => {
this.props.onClose();
}
setRef = (c) => {
this.button = c;
}
toggleNotifications = () => {
this.props.onToggleNotifications();
}
changeMuteDuration = (e) => {
this.props.onChangeMuteDuration(e);
}
render () { render () {
const { intl } = this.props;
return ( return (
<div className='modal-root__modal mute-modal'> <div className='modal-root__modal giphy-modal'>
<div className='mute-modal__container'> <div className='giphy-modal__container'>
<IconButton title={intl.formatMessage(messages.close)} icon="close" size="16" onClick={this.props.onClose} style={{float: "right"}} /><br />
<ReactGiphySearchbox <ReactGiphySearchbox
apiKey="1ttK05MF98dLllFFknTAVo0U4CGcQb4J" apiKey="1ttK05MF98dLllFFknTAVo0U4CGcQb4J"
onSelect={item => this.onDoneButton(item)} onSelect={item => this.onDoneButton(item)}
@ -96,6 +82,12 @@ class GIFModal extends ImmutablePureComponent {
{ columns: 2, imageWidth: 190, gutter: 5 }, { columns: 2, imageWidth: 190, gutter: 5 },
{ mq: "700px", columns: 2, imageWidth: 210, gutter: 5 } { mq: "700px", columns: 2, imageWidth: 210, gutter: 5 }
]} ]}
autoFocus="true"
searchPlaceholder={intl.formatMessage(messages.search)}
messageError={intl.formatMessage(messages.error)}
messageLoading={intl.formatMessage(messages.loading)}
messageNoMatches={intl.formatMessage(messages.nomatches)}
wrapperClassName="giphy-modal__searchbox"
/> />
</div> </div>
</div> </div>

View file

@ -1,86 +1,13 @@
$giphyBg: #d9e1e8;
.giphy-modal { .giphy-modal {
@extend .boost-modal; @extend .boost-modal;
width: unset; width: 500px;
} }
.giphy-modal__container { .giphy-modal__container {
background: $giphyBg;
text-align: center; text-align: center;
line-height: 0; // remove weird gap under canvas padding: 20px;
canvas {
border: 5px solid $giphyBg;
}
} }
.giphy-modal__action-bar { .giphy-modal__searchbox {
@extend .boost-modal__action-bar; width: 450px !important;
}
.filler {
flex-grow: 1;
margin: 0;
padding: 0;
}
.giphy-toolbar {
line-height: 1;
display: flex;
flex-direction: column;
flex-grow: 0;
justify-content: space-around;
&.with-inputs {
label {
display: inline-block;
width: 70px;
text-align: right;
margin-right: 2px;
}
input[type="number"],input[type="text"] {
width: 40px;
}
span.val {
display: inline-block;
text-align: left;
width: 50px;
}
}
}
.giphy-palette {
padding-right: 0 !important;
border: 1px solid black;
line-height: .2rem;
flex-grow: 0;
background: white;
button {
appearance: none;
width: 1rem;
height: 1rem;
margin: 0; padding: 0;
text-align: center;
color: black;
text-shadow: 0 0 1px white;
cursor: pointer;
box-shadow: inset 0 0 1px rgba(white, .5);
border: 1px solid black;
outline-offset:-1px;
&.foreground {
outline: 1px dashed white;
}
&.background {
outline: 1px dashed red;
}
&.foreground.background {
outline: 1px dashed red;
border-color: white;
}
}
}
}