mirror of
https://github.com/lidarr/lidarr.git
synced 2025-07-11 15:47:09 -07:00
Misc Frontend Updates
This commit is contained in:
parent
729d1142b0
commit
f69559e4da
11 changed files with 107 additions and 46 deletions
|
@ -1,6 +1,7 @@
|
|||
import PropTypes from 'prop-types';
|
||||
import React from 'react';
|
||||
import styles from './Form.css';
|
||||
import { kinds } from 'Helpers/Props';
|
||||
import Alert from 'Components/Alert';
|
||||
|
||||
function Form({ children, validationErrors, validationWarnings, ...otherProps }) {
|
||||
return (
|
||||
|
@ -9,12 +10,12 @@ function Form({ children, validationErrors, validationWarnings, ...otherProps })
|
|||
{
|
||||
validationErrors.map((error, index) => {
|
||||
return (
|
||||
<div
|
||||
<Alert
|
||||
key={index}
|
||||
className={styles.error}
|
||||
kind={kinds.DANGER}
|
||||
>
|
||||
{error.errorMessage}
|
||||
</div>
|
||||
</Alert>
|
||||
);
|
||||
})
|
||||
}
|
||||
|
@ -22,12 +23,12 @@ function Form({ children, validationErrors, validationWarnings, ...otherProps })
|
|||
{
|
||||
validationWarnings.map((warning, index) => {
|
||||
return (
|
||||
<div
|
||||
<Alert
|
||||
key={index}
|
||||
className={styles.error}
|
||||
kind={kinds.WARNING}
|
||||
>
|
||||
{warning.errorMessage}
|
||||
</div>
|
||||
</Alert>
|
||||
);
|
||||
})
|
||||
}
|
||||
|
|
|
@ -247,9 +247,9 @@ class PageSidebar extends Component {
|
|||
window.addEventListener('click', this.onWindowClick, { capture: true });
|
||||
window.addEventListener('scroll', this.onWindowScroll);
|
||||
window.addEventListener('touchstart', this.onTouchStart);
|
||||
window.addEventListener('touchmove', this.onTouchMove);
|
||||
window.addEventListener('touchend', this.onTouchEnd);
|
||||
window.addEventListener('touchcancel', this.onTouchCancel);
|
||||
window.addEventListener('touchmove', this.onTouchMove);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -274,9 +274,9 @@ class PageSidebar extends Component {
|
|||
window.removeEventListener('click', this.onWindowClick, { capture: true });
|
||||
window.removeEventListener('scroll', this.onWindowScroll);
|
||||
window.removeEventListener('touchstart', this.onTouchStart);
|
||||
window.removeEventListener('touchmove', this.onTouchMove);
|
||||
window.removeEventListener('touchend', this.onTouchEnd);
|
||||
window.removeEventListener('touchcancel', this.onTouchCancel);
|
||||
window.removeEventListener('touchmove', this.onTouchMove);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -322,20 +322,22 @@ class PageSidebar extends Component {
|
|||
|
||||
onTouchStart = (event) => {
|
||||
const touches = event.touches;
|
||||
const touchStart = touches[0].pageX;
|
||||
const touchStartX = touches[0].pageX;
|
||||
const touchStartY = touches[0].pageY;
|
||||
const isSidebarVisible = this.props.isSidebarVisible;
|
||||
|
||||
if (touches.length !== 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (isSidebarVisible && (touchStart > 210 || touchStart < 50)) {
|
||||
if (isSidebarVisible && (touchStartX > 210 || touchStartX < 50)) {
|
||||
return;
|
||||
} else if (!isSidebarVisible && touchStart > 50) {
|
||||
} else if (!isSidebarVisible && touchStartX > 50) {
|
||||
return;
|
||||
}
|
||||
|
||||
this._touchStartX = touchStart;
|
||||
this._touchStartX = touchStartX;
|
||||
this._touchStartY = touchStartY;
|
||||
}
|
||||
|
||||
onTouchEnd = (event) => {
|
||||
|
|
|
@ -54,7 +54,7 @@ class SelectAlbumModalContentConnector extends Component {
|
|||
this.props.updateInteractiveImportItem({
|
||||
id,
|
||||
album,
|
||||
episodes: []
|
||||
tracks: []
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -33,6 +33,24 @@
|
|||
|
||||
@media only screen and (max-width: $breakpointSmall) {
|
||||
.footer {
|
||||
.leftButtons,
|
||||
.centerButtons,
|
||||
.rightButtons {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.leftButtons {
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.centerButtons {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.rightButtons {
|
||||
align-items: flex-end;
|
||||
}
|
||||
|
||||
a,
|
||||
button {
|
||||
margin-left: 0;
|
||||
|
|
|
@ -74,7 +74,7 @@ class InteractiveImportRow extends Component {
|
|||
|
||||
const isValid = !!(
|
||||
artist &&
|
||||
album != null &&
|
||||
album &&
|
||||
tracks.length &&
|
||||
quality &&
|
||||
language
|
||||
|
|
|
@ -6,17 +6,19 @@ import { cancelTestDownloadClient, cancelSaveDownloadClient } from 'Store/Action
|
|||
import EditDownloadClientModal from './EditDownloadClientModal';
|
||||
|
||||
function createMapDispatchToProps(dispatch, props) {
|
||||
const section = 'downloadClients';
|
||||
|
||||
return {
|
||||
dispatchClearPendingChanges() {
|
||||
dispatch(clearPendingChanges);
|
||||
dispatch(clearPendingChanges({ section }));
|
||||
},
|
||||
|
||||
dispatchCancelTestDownloadClient() {
|
||||
dispatch(cancelTestDownloadClient);
|
||||
dispatch(cancelTestDownloadClient({ section }));
|
||||
},
|
||||
|
||||
dispatchCancelSaveDownloadClient() {
|
||||
dispatch(cancelSaveDownloadClient);
|
||||
dispatch(cancelSaveDownloadClient({ section }));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -27,9 +29,9 @@ class EditDownloadClientModalConnector extends Component {
|
|||
// Listeners
|
||||
|
||||
onModalClose = () => {
|
||||
this.props.dispatchClearPendingChanges({ section: 'downloadClients' });
|
||||
this.props.dispatchCancelTestDownloadClient({ section: 'downloadClients' });
|
||||
this.props.dispatchCancelSaveDownloadClient({ section: 'downloadClients' });
|
||||
this.props.dispatchClearPendingChanges();
|
||||
this.props.dispatchCancelTestDownloadClient();
|
||||
this.props.dispatchCancelSaveDownloadClient();
|
||||
this.props.onModalClose();
|
||||
}
|
||||
|
||||
|
|
|
@ -6,17 +6,19 @@ import { cancelTestIndexer, cancelSaveIndexer } from 'Store/Actions/settingsActi
|
|||
import EditIndexerModal from './EditIndexerModal';
|
||||
|
||||
function createMapDispatchToProps(dispatch, props) {
|
||||
const section = 'indexers';
|
||||
|
||||
return {
|
||||
dispatchClearPendingChanges() {
|
||||
dispatch(clearPendingChanges);
|
||||
dispatch(clearPendingChanges)({ section });
|
||||
},
|
||||
|
||||
dispatchCancelTestIndexer() {
|
||||
dispatch(cancelTestIndexer);
|
||||
dispatch(cancelTestIndexer({ section }));
|
||||
},
|
||||
|
||||
dispatchCancelSaveIndexer() {
|
||||
dispatch(cancelSaveIndexer);
|
||||
dispatch(cancelSaveIndexer({ section }));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -27,9 +29,9 @@ class EditIndexerModalConnector extends Component {
|
|||
// Listeners
|
||||
|
||||
onModalClose = () => {
|
||||
this.props.dispatchClearPendingChanges({ section: 'indexers' });
|
||||
this.props.dispatchCancelTestIndexer({ section: 'indexers' });
|
||||
this.props.dispatchCancelSaveIndexer({ section: 'indexers' });
|
||||
this.props.dispatchClearPendingChanges();
|
||||
this.props.dispatchCancelTestIndexer();
|
||||
this.props.dispatchCancelSaveIndexer();
|
||||
this.props.onModalClose();
|
||||
}
|
||||
|
||||
|
|
|
@ -4,9 +4,15 @@ import { connect } from 'react-redux';
|
|||
import { clearPendingChanges } from 'Store/Actions/baseActions';
|
||||
import EditMetadataModal from './EditMetadataModal';
|
||||
|
||||
const mapDispatchToProps = {
|
||||
clearPendingChanges
|
||||
};
|
||||
function createMapDispatchToProps(dispatch, props) {
|
||||
const section = 'metadata';
|
||||
|
||||
return {
|
||||
dispatchClearPendingChanges() {
|
||||
dispatch(clearPendingChanges)({ section });
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
class EditMetadataModalConnector extends Component {
|
||||
|
||||
|
@ -36,4 +42,4 @@ EditMetadataModalConnector.propTypes = {
|
|||
clearPendingChanges: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
export default connect(null, mapDispatchToProps)(EditMetadataModalConnector);
|
||||
export default connect(null, createMapDispatchToProps)(EditMetadataModalConnector);
|
||||
|
|
|
@ -2,11 +2,26 @@ import PropTypes from 'prop-types';
|
|||
import React, { Component } from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
import { clearPendingChanges } from 'Store/Actions/baseActions';
|
||||
import { cancelTestNotification, cancelSaveNotification } from 'Store/Actions/settingsActions';
|
||||
import EditNotificationModal from './EditNotificationModal';
|
||||
|
||||
const mapDispatchToProps = {
|
||||
clearPendingChanges
|
||||
};
|
||||
function createMapDispatchToProps(dispatch, props) {
|
||||
const section = 'notifications';
|
||||
|
||||
return {
|
||||
dispatchClearPendingChanges() {
|
||||
dispatch(clearPendingChanges({ section }));
|
||||
},
|
||||
|
||||
dispatchCancelTestNotification() {
|
||||
dispatch(cancelTestNotification({ section }));
|
||||
},
|
||||
|
||||
dispatchCancelSaveNotification() {
|
||||
dispatch(cancelSaveNotification({ section }));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
class EditNotificationModalConnector extends Component {
|
||||
|
||||
|
@ -14,7 +29,9 @@ class EditNotificationModalConnector extends Component {
|
|||
// Listeners
|
||||
|
||||
onModalClose = () => {
|
||||
this.props.clearPendingChanges({ section: 'notifications' });
|
||||
this.props.dispatchClearPendingChanges();
|
||||
this.props.dispatchCancelTestNotification();
|
||||
this.props.dispatchCancelSaveNotification();
|
||||
this.props.onModalClose();
|
||||
}
|
||||
|
||||
|
@ -22,9 +39,16 @@ class EditNotificationModalConnector extends Component {
|
|||
// Render
|
||||
|
||||
render() {
|
||||
const {
|
||||
dispatchClearPendingChanges,
|
||||
dispatchCancelTestNotification,
|
||||
dispatchCancelSaveNotification,
|
||||
...otherProps
|
||||
} = this.props;
|
||||
|
||||
return (
|
||||
<EditNotificationModal
|
||||
{...this.props}
|
||||
{...otherProps}
|
||||
onModalClose={this.onModalClose}
|
||||
/>
|
||||
);
|
||||
|
@ -33,7 +57,9 @@ class EditNotificationModalConnector extends Component {
|
|||
|
||||
EditNotificationModalConnector.propTypes = {
|
||||
onModalClose: PropTypes.func.isRequired,
|
||||
clearPendingChanges: PropTypes.func.isRequired
|
||||
dispatchClearPendingChanges: PropTypes.func.isRequired,
|
||||
dispatchCancelTestNotification: PropTypes.func.isRequired,
|
||||
dispatchCancelSaveNotification: PropTypes.func.isRequired
|
||||
};
|
||||
|
||||
export default connect(null, mapDispatchToProps)(EditNotificationModalConnector);
|
||||
export default connect(null, createMapDispatchToProps)(EditNotificationModalConnector);
|
||||
|
|
|
@ -7,11 +7,13 @@ const abortCurrentRequests = {};
|
|||
|
||||
export function createCancelSaveProviderHandler(section) {
|
||||
return function(payload) {
|
||||
return function(dispatch, getState) {
|
||||
if (abortCurrentRequests[section]) {
|
||||
abortCurrentRequests[section]();
|
||||
abortCurrentRequests[section] = null;
|
||||
}
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
function createSaveProviderHandler(section, url, getFromState) {
|
||||
|
|
|
@ -6,11 +6,13 @@ const abortCurrentRequests = {};
|
|||
|
||||
export function createCancelTestProviderHandler(section) {
|
||||
return function(payload) {
|
||||
return function(dispatch, getState) {
|
||||
if (abortCurrentRequests[section]) {
|
||||
abortCurrentRequests[section]();
|
||||
abortCurrentRequests[section] = null;
|
||||
}
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
function createTestProviderHandler(section, url, getFromState) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue