Skip to content

Commit 2609408

Browse files
committed
fix of #636 - ability to set percent height to IFrameDialog
1 parent 45d255c commit 2609408

File tree

3 files changed

+38
-4
lines changed

3 files changed

+38
-4
lines changed

src/controls/iFrameDialog/IFrameDialog.tsx

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import * as React from "react";
22
import * as ReactDOM from "react-dom";
3-
import { Dialog, IDialogProps } from 'office-ui-fabric-react/lib/Dialog';
3+
import { Dialog, IDialogContentProps, IDialogProps, IDialogStyleProps, IDialogStyles } from 'office-ui-fabric-react/lib/Dialog';
44
import { IFrameDialogContent } from './IFrameDialogContent';
55
import * as telemetry from '../../common/telemetry';
66
import { Guid } from "@microsoft/sp-core-library";
77
import omit from 'lodash/omit';
8+
import merge from 'lodash/merge';
9+
import { IStyleFunctionOrObject } from "office-ui-fabric-react/lib/Utilities";
810

911
export interface IFrameDialogProps extends IDialogProps {
1012
/**
@@ -110,6 +112,7 @@ export class IFrameDialog extends React.Component<IFrameDialogProps, IFrameDialo
110112
const {
111113
iframeOnLoad,
112114
height,
115+
width,
113116
allowFullScreen,
114117
allowTransparency,
115118
marginHeight,
@@ -119,6 +122,7 @@ export class IFrameDialog extends React.Component<IFrameDialogProps, IFrameDialo
119122
scrolling,
120123
seamless,
121124
modalProps,
125+
dialogContentProps,
122126
className
123127
} = this.props;
124128

@@ -127,11 +131,40 @@ export class IFrameDialog extends React.Component<IFrameDialogProps, IFrameDialo
127131
onLayerDidMount: () => { this.setDialogStyling(); }
128132
};
129133

134+
const dlgContentProps = merge<IDialogContentProps, IDialogContentProps, IDialogContentProps>({}, dialogContentProps, {
135+
styles: {
136+
content: {
137+
display: 'flex',
138+
flexDirection: 'column',
139+
height: '100%'
140+
},
141+
inner: {
142+
flexGrow: 1
143+
},
144+
innerContent: {
145+
height: '100%'
146+
}
147+
}
148+
});
149+
150+
151+
const dlgStyles: IStyleFunctionOrObject<IDialogStyleProps, IDialogStyles> = {
152+
main: {
153+
width: width,
154+
maxWidth: width,
155+
minWidth: width,
156+
height: height
157+
}
158+
};
159+
130160
return (
131161
<Dialog
132162
className={`${this.state.dialogId} ${className || ''}`}
163+
164+
styles={dlgStyles}
133165
modalProps={dlgModalProps}
134-
{...omit(this.props, 'className', 'modalProps')}>
166+
dialogContentProps={dlgContentProps}
167+
{...omit(this.props, 'className', 'modalProps', 'dialogContentProps')}>
135168
<IFrameDialogContent src={this.props.url}
136169
iframeOnLoad={iframeOnLoad}
137170
close={this.props.onDismiss}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
.iFrameDialog {
33
border: none;
4+
height: 100%;
45

56
.spinnerContainer {
67
position: absolute;
@@ -9,4 +10,4 @@
910
margin-left: -14px;
1011
margin-top: -14px;
1112
}
12-
}
13+
}

src/controls/iFrameDialog/IFrameDialogContent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export class IFrameDialogContent extends React.Component<IIFrameDialogContentPro
2828

2929
public render(): JSX.Element {
3030
return (<div className={styles.iFrameDialog}>
31-
<iframe ref={(iframe) => { this._iframe = iframe; }} frameBorder={0} onLoad={this._iframeOnLoad.bind(this)} style={{ width: '100%', height: this.props.height, visibility: this.state.isContentVisible ? 'visible' : 'hidden' }} {...omit(this.props, 'height')} />
31+
<iframe ref={(iframe) => { this._iframe = iframe; }} frameBorder={0} onLoad={this._iframeOnLoad.bind(this)} style={{ width: '100%', height: '100%', visibility: this.state.isContentVisible ? 'visible' : 'hidden' }} {...omit(this.props, 'height')} />
3232
{!this.state.isContentVisible &&
3333
<div className={styles.spinnerContainer}>
3434
<Spinner size={SpinnerSize.large} />

0 commit comments

Comments
 (0)