FIX;Toaster error for API middleware

This commit is contained in:
Roman Jaroš 2019-07-27 16:07:43 +02:00
parent 35fae22fc3
commit 26b6acdf26
5 changed files with 24 additions and 2 deletions

View file

@ -6,6 +6,7 @@
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@romanjaros/treejs-constants": "^0.0.38", "@romanjaros/treejs-constants": "^0.0.38",
"@romanjaros/treejs-components": "^0.0.38",
"@romanjaros/treejs-types": "^0.0.38", "@romanjaros/treejs-types": "^0.0.38",
"@romanjaros/treejs-utils": "^0.0.38" "@romanjaros/treejs-utils": "^0.0.38"
}, },

View file

@ -0,0 +1,3 @@
import * as React from 'react';
export const UnexpectedError = (): React.ReactElement => <div>Nastala neočekávaná chyba při volání serveru</div>

View file

@ -1,19 +1,26 @@
import * as React from 'react';
import { Middleware } from 'redux'; import { Middleware } from 'redux';
import { is } from 'ramda'; import { is } from 'ramda';
import { addToasterComponent } from '@romanjaros/treejs-components/Toaster/utils/registerToaster';
import { addToaster } from '@romanjaros/treejs-components/Toaster/actions';
import { IAction } from '@romanjaros/treejs-types/redux/actions'; import { IAction } from '@romanjaros/treejs-types/redux/actions';
import { isNilOrEmpty, isJSON } from '@romanjaros/treejs-utils'; import { isNilOrEmpty, isJSON } from '@romanjaros/treejs-utils';
import { STATUS } from '@romanjaros/treejs-types/common';
import { IFetchConfig } from './types'; import { IFetchConfig } from './types';
import { fetchStatusActions } from './actions'; import { fetchStatusActions } from './actions';
import { FetchActions } from './constants'; import { FetchActions } from './constants';
import { resolveParams } from './utils'; import { resolveParams } from './utils';
import { UnexpectedError } from './components/errors';
interface ISettings { interface ISettings {
BASE_ENDPOINT_URL: string; BASE_ENDPOINT_URL: string;
} }
addToasterComponent('fetchUnexpectedError', <UnexpectedError />);
export const FetchEndpoint = (setting: ISettings): Middleware => (store) => (next) => async (action: IAction<IFetchConfig>) => { export const FetchEndpoint = (setting: ISettings): Middleware => (store) => (next) => async (action: IAction<IFetchConfig>) => {
if (action.type === FetchActions.FETCH) { if (action.type === FetchActions.FETCH) {
if (isNilOrEmpty(action.payload.url)) { if (isNilOrEmpty(action.payload.url)) {
@ -45,6 +52,8 @@ export const FetchEndpoint = (setting: ISettings): Middleware => (store) => (nex
store.dispatch(fetchStatusActions.onError(action.payload)); store.dispatch(fetchStatusActions.onError(action.payload));
if (is(Function, action.payload.onError)) { if (is(Function, action.payload.onError)) {
action.payload.onError(error); action.payload.onError(error);
} else {
store.dispatch(addToaster({ name: 'fetchUnexpectedError', status: STATUS.error }));
} }
} }
} }

View file

@ -57,6 +57,15 @@ class PageLayout extends React.PureComponent<IProps, IState> {
}); });
} }
public componentDidUpdate(prevProps: IProps) {
if (this.props.topMenuItems !== prevProps.topMenuItems) {
this.setState({
maxLeftMenuItemCount: this.props.topMenuItems.length,
})
this.updateDimensions();
}
}
public componentWillUnmount() { public componentWillUnmount() {
window.removeEventListener("resize", this.updateDimensions); window.removeEventListener("resize", this.updateDimensions);
} }
@ -65,10 +74,10 @@ class PageLayout extends React.PureComponent<IProps, IState> {
const fullWidth = getComputedStyleInt(this.topMenuRef.current, 'width'); const fullWidth = getComputedStyleInt(this.topMenuRef.current, 'width');
const leftSideWidth = getComputedStyleInt(this.leftSideMenuRef.current, 'width'); const leftSideWidth = getComputedStyleInt(this.leftSideMenuRef.current, 'width');
const leftSideMarginRight = getComputedStyleInt(this.leftSideMenuRef.current, 'marginLeft'); const leftSideMarginRight = getComputedStyleInt(this.leftSideMenuRef.current, 'marginLeft');
const leftMenuItems = this.getTopLeftMenuItemsWidth(this.topMenuRef.current.children);
if (leftSideMarginRight === 0) { if (leftSideMarginRight === 0) {
const requiredWidth = fullWidth - leftSideMarginRight - leftSideWidth; const requiredWidth = fullWidth - leftSideMarginRight - leftSideWidth;
const leftMenuItems = this.getTopLeftMenuItemsWidth(this.topMenuRef.current.children);
let newWidth = this.topMenuRef.current.scrollWidth; let newWidth = this.topMenuRef.current.scrollWidth;
let index = 0; let index = 0;

View file

@ -19,7 +19,7 @@ export const closeToaster = (name: IToasterId) => (dispatch: Dispatch) => {
}); });
}; };
export const addToaster = (options: IToasterOption) => (dispatch: Dispatch<any>) => { export const addToaster = (options: IToasterOption): any => (dispatch: Dispatch<any>) => {
if (!isNilOrEmpty(timeouts[options.name])) { if (!isNilOrEmpty(timeouts[options.name])) {
clearTimeout(timeouts[options.name]); clearTimeout(timeouts[options.name]);
} }