release-4.11.8

This commit is contained in:
Ely Lucas
2020-01-13 09:58:01 -07:00
committed by GitHub
15 changed files with 169 additions and 18 deletions

View File

@@ -1,3 +1,14 @@
## [4.11.8](https://github.com/ionic-team/ionic/compare/v4.11.7...v4.11.8) (2020-01-13)
### Bug Fixes
* **react:** add missing react memory router ([8a5aba2](https://github.com/ionic-team/ionic/commit/8a5aba206865ce2af7f8bb85f4e7cd8dec37831d))
* **react:** fixing type of icon in ToastOptions, ActionSheetOptions, fixes [#20100](https://github.com/ionic-team/ionic/issues/20100) ([857bab6](https://github.com/ionic-team/ionic/commit/857bab66419a851c6d189cd1456cd67c1c2d934c))
* **react:** supporting ios and md props on icons ([#20170](https://github.com/ionic-team/ionic/issues/20170)) ([676cc19](https://github.com/ionic-team/ionic/commit/676cc19b89cd6374346aaac9cc3292872c7148fa))
## [4.11.7](https://github.com/ionic-team/ionic/compare/v4.11.6...v4.11.7) (2019-12-12)

View File

@@ -1,6 +1,6 @@
{
"name": "@ionic/angular",
"version": "4.11.7",
"version": "4.11.8",
"description": "Angular specific wrappers for @ionic/core",
"keywords": [
"ionic",
@@ -49,7 +49,7 @@
"css/"
],
"dependencies": {
"@ionic/core": "4.11.7",
"@ionic/core": "4.11.8",
"tslib": "^1.9.3"
},
"peerDependencies": {

View File

@@ -1,6 +1,6 @@
{
"name": "@ionic/core",
"version": "4.11.7",
"version": "4.11.8",
"description": "Base components for Ionic",
"keywords": [
"ionic",

View File

@@ -1,6 +1,6 @@
{
"name": "@ionic/docs",
"version": "4.11.7",
"version": "4.11.8",
"description": "Pre-packaged API documentation for the Ionic docs.",
"main": "core.json",
"types": "core.d.ts",

View File

@@ -1,6 +1,6 @@
{
"name": "@ionic/react-router",
"version": "4.11.7",
"version": "4.11.8",
"description": "React Router wrapper for @ionic/react",
"keywords": [
"ionic",
@@ -39,16 +39,16 @@
"tslib": "*"
},
"peerDependencies": {
"@ionic/core": "4.11.7",
"@ionic/react": "4.11.7",
"@ionic/core": "4.11.8",
"@ionic/react": "4.11.8",
"react": "^16.8.6",
"react-dom": "^16.8.6",
"react-router": "^5.0.1",
"react-router-dom": "^5.0.1"
},
"devDependencies": {
"@ionic/core": "4.11.7",
"@ionic/react": "4.11.7",
"@ionic/core": "4.11.8",
"@ionic/react": "4.11.8",
"@testing-library/jest-dom": "^4.2.4",
"@testing-library/react": "^9.3.2",
"@testing-library/user-event": "^7.1.2",

View File

@@ -0,0 +1,21 @@
import { MemoryHistory } from 'history';
import React from 'react';
import { MemoryRouter, MemoryRouterProps, matchPath } from 'react-router';
import { RouteManager } from './Router';
interface IonReactMemoryRouterProps extends MemoryRouterProps {
history: MemoryHistory;
}
export class IonReactMemoryRouter extends React.Component<IonReactMemoryRouterProps> {
render() {
const { children, history, ...props } = this.props;
const match = matchPath(history.location.pathname, this.props);
return (
<MemoryRouter {...props}>
<RouteManager history={history} location={history.location} match={match!}>{children}</RouteManager>
</MemoryRouter>
);
}
}

View File

@@ -19,7 +19,7 @@ interface RouteManagerState extends RouteManagerContextState {
action?: IonRouteAction;
}
class RouteManager extends React.Component<RouteComponentProps, RouteManagerState> {
export class RouteManager extends React.Component<RouteComponentProps, RouteManagerState> {
listenUnregisterCallback: UnregisterCallback | undefined;
activeIonPageId?: string;
currentIonRouteAction?: IonRouteAction;

View File

@@ -1,2 +1,3 @@
export { IonReactRouter } from './IonReactRouter';
export { IonReactHashRouter } from './IonReactHashRouter';
export { IonReactMemoryRouter } from './IonReactMemoryRouter';

View File

@@ -1,6 +1,6 @@
{
"name": "@ionic/react",
"version": "4.11.7",
"version": "4.11.8",
"description": "React specific wrapper for @ionic/core",
"keywords": [
"ionic",
@@ -39,7 +39,7 @@
"css/"
],
"dependencies": {
"@ionic/core": "4.11.7",
"@ionic/core": "4.11.8",
"tslib": "*"
},
"peerDependencies": {

View File

@@ -1,5 +1,22 @@
import { ActionSheetOptions, actionSheetController } from '@ionic/core';
import { ActionSheetButton as ActionSheetButtonCore, ActionSheetOptions as ActionSheetOptionsCore, actionSheetController as actionSheetControllerCore } from '@ionic/core';
import { createOverlayComponent } from './createOverlayComponent';
export interface ActionSheetButton extends Omit<ActionSheetButtonCore, 'icon'> {
icon?: {
ios: string;
md: string;
};
}
export interface ActionSheetOptions extends Omit<ActionSheetOptionsCore, 'buttons'> {
buttons?: (ActionSheetButton | string)[];
}
const actionSheetController = {
create: (options: ActionSheetOptions) => actionSheetControllerCore.create(options as any),
dismiss: (data?: any, role?: string | undefined, id?: string | undefined) => actionSheetControllerCore.dismiss(data, role, id),
getTop: () => actionSheetControllerCore.getTop()
};
export const IonActionSheet = /*@__PURE__*/createOverlayComponent<ActionSheetOptions, HTMLIonActionSheetElement>('IonActionSheet', actionSheetController);

View File

@@ -0,0 +1,83 @@
import React from 'react';
import { NavContext } from '../contexts/NavContext';
import { IonicReactProps } from './IonicReactProps';
import { IonIconInner } from './inner-proxies';
import { createForwardRef, isPlatform } from './utils';
import { deprecationWarning } from './utils/dev';
interface IonIconProps {
ariaLabel?: string;
color?: string;
flipRtl?: boolean;
icon?: { ios: string; md: string; };
ios?: { ios: string; md: string; };
lazy?: boolean;
md?: { ios: string; md: string; };
mode?: 'ios' | 'md';
name?: string;
size?: string;
src?: string;
}
type InternalProps = IonIconProps & {
forwardedRef?: React.RefObject<HTMLIonIconElement>;
};
class IonIconContainer extends React.PureComponent<InternalProps> {
constructor(props: InternalProps) {
super(props);
if (this.props.name) {
deprecationWarning('icon-name', 'In Ionic React, you import icons from "ionicons/icons" and set the icon you imported to the "icon" property. Setting the "name" property has no effect.');
}
}
setIcon() {
const { icon, ios, md } = this.props;
if (ios || md) {
if (isPlatform('ios')) {
this.setState({
icon: ios ?? md ?? icon
});
} else if (isPlatform('android')) {
this.setState({
icon: md ?? ios ?? icon
});
}
} else {
this.setState({
icon
});
}
}
render() {
const { icon, ios, md, ...rest } = this.props;
let iconToUse: typeof icon;
if (ios || md) {
if (isPlatform('ios')) {
iconToUse = ios ?? md ?? icon;
} else if (isPlatform('android')) {
iconToUse = md ?? ios ?? icon;
}
} else {
iconToUse = icon;
}
return (
<IonIconInner ref={this.props.forwardedRef} icon={iconToUse} {...rest}>
{this.props.children}
</IonIconInner>
);
}
static get contextType() {
return NavContext;
}
}
export const IonIcon = createForwardRef<IonIconProps & IonicReactProps, HTMLIonIconElement>(IonIconContainer, 'IonIcon');

View File

@@ -1,5 +1,22 @@
import { ToastOptions, toastController } from '@ionic/core';
import { ToastButton as ToastButtonCore, ToastOptions as ToastOptionsCore, toastController as toastControllerCore } from '@ionic/core';
import { createControllerComponent } from './createControllerComponent';
export interface ToastButton extends Omit<ToastButtonCore, 'icon'> {
icon?: {
ios: string;
md: string;
};
}
export interface ToastOptions extends Omit<ToastOptionsCore, 'buttons'> {
buttons?: (ToastButton | string)[];
}
const toastController = {
create: (options: ToastOptions) => toastControllerCore.create(options as any),
dismiss: (data?: any, role?: string | undefined, id?: string | undefined) => toastControllerCore.dismiss(data, role, id),
getTop: () => toastControllerCore.getTop()
};
export const IonToast = /*@__PURE__*/createControllerComponent<ToastOptions, HTMLIonToastElement>('IonToast', toastController);

View File

@@ -22,6 +22,7 @@ export { IonTabs } from './navigation/IonTabs';
export { IonTabBar } from './navigation/IonTabBar';
export { IonBackButton } from './navigation/IonBackButton';
export { IonRouterOutlet } from './IonRouterOutlet';
export { IonIcon } from './IonIcon';
// Utils
export { isPlatform, getPlatforms, getConfig } from './utils';

View File

@@ -1,7 +1,11 @@
import { JSX } from '@ionic/core';
import { JSX as IoniconsJSX } from 'ionicons';
import { /*@__PURE__*/ createReactComponent } from './createComponent';
export const IonTabBarInner = /*@__PURE__*/createReactComponent<JSX.IonTabBar, HTMLIonTabBarElement>('ion-tab-bar');
export const IonBackButtonInner = /*@__PURE__*/createReactComponent<Omit<JSX.IonBackButton, 'icon'>, HTMLIonBackButtonElement>('ion-back-button');
export const IonRouterOutletInner = /*@__PURE__*/createReactComponent<JSX.IonRouterOutlet, HTMLIonRouterOutletElement>('ion-router-outlet');
// ionicons
export const IonIconInner = /*@__PURE__*/createReactComponent<IoniconsJSX.IonIcon, HTMLIonIconElement>('ion-icon');

View File

@@ -1,12 +1,8 @@
import { JSX } from '@ionic/core';
import { JSX as IoniconsJSX } from 'ionicons';
import { createReactComponent } from './createComponent';
import { HrefProps } from './hrefprops';
// ionicons
export const IonIcon = /*@__PURE__*/createReactComponent<IoniconsJSX.IonIcon, HTMLIonIconElement>('ion-icon');
// ionic/core
export const IonApp = /*@__PURE__*/createReactComponent<JSX.IonApp, HTMLIonAppElement>('ion-app');
export const IonTab = /*@__PURE__*/createReactComponent<JSX.IonTab, HTMLIonTabElement>('ion-tab');