Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(core): Create a react modal wizard (#4695)
- Loading branch information
Justin Reynolds
committed
Jan 22, 2018
1 parent
3b47e26
commit d768df5
Showing
14 changed files
with
498 additions
and
41 deletions.
There are no files selected for viewing
82 changes: 82 additions & 0 deletions
82
app/scripts/modules/core/src/loadBalancer/CreateLoadBalancerButton.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
import * as React from 'react'; | ||
import { BindAll } from 'lodash-decorators'; | ||
|
||
import { Application, ILoadBalancer, ReactInjector, Tooltip } from '@spinnaker/core'; | ||
|
||
export interface ICreateLoadBalancerButtonProps { | ||
app: Application; | ||
} | ||
|
||
export interface ICreateLoadBalancerButtonState { | ||
provider: any; | ||
showModal: boolean; | ||
} | ||
|
||
@BindAll() | ||
export class CreateLoadBalancerButton extends React.Component<ICreateLoadBalancerButtonProps, ICreateLoadBalancerButtonState> { | ||
|
||
constructor(props: ICreateLoadBalancerButtonProps) { | ||
super(props); | ||
this.state = { | ||
provider: null, | ||
showModal: false, | ||
}; | ||
} | ||
|
||
public componentDidMount(): void { | ||
const { providerSelectionService, cloudProviderRegistry, versionSelectionService } = ReactInjector; | ||
const { app } = this.props; | ||
providerSelectionService.selectProvider(app, 'loadBalancer').then((selectedProvider) => { | ||
versionSelectionService.selectVersion(selectedProvider).then((selectedVersion) => { | ||
this.setState({ provider: cloudProviderRegistry.getValue(selectedProvider, 'loadBalancer', selectedVersion) }); | ||
}); | ||
}); | ||
} | ||
|
||
private createLoadBalancer(): void { | ||
const { provider } = this.state; | ||
if (!provider) { return; } | ||
|
||
if (provider.CreateLoadBalancerModal) { | ||
// react | ||
this.setState({ showModal: true }); | ||
} else { | ||
// angular | ||
ReactInjector.modalService.open({ | ||
templateUrl: provider.createLoadBalancerTemplateUrl, | ||
controller: `${provider.createLoadBalancerController} as ctrl`, | ||
size: 'lg', | ||
resolve: { | ||
application: () => this.props.app, | ||
loadBalancer: (): ILoadBalancer => null, | ||
isNew: () => true, | ||
forPipelineConfig: () => false | ||
} | ||
}).result.catch(() => {}); | ||
} | ||
} | ||
|
||
private showModal(show: boolean): void { | ||
this.setState({ showModal: show }); | ||
} | ||
|
||
public render() { | ||
const { app } = this.props; | ||
const { provider, showModal } = this.state; | ||
|
||
const CreateLoadBalancerModal = provider ? provider.CreateLoadBalancerModal : null; | ||
|
||
return ( | ||
<div> | ||
<button className="btn btn-sm btn-default" onClick={this.createLoadBalancer}> | ||
<span className="glyphicon glyphicon-plus-sign visible-lg-inline"/> | ||
<Tooltip value="Create Load Balancer"> | ||
<span className="glyphicon glyphicon-plus-sign visible-md-inline visible-sm-inline"/> | ||
</Tooltip> | ||
<span className="visible-lg-inline"> Create Load Balancer</span> | ||
</button> | ||
{CreateLoadBalancerModal && <CreateLoadBalancerModal app={app} forPipelineConfig={false} loadBalancer={null} show={showModal} showCallback={this.showModal} />} | ||
</div> | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
import * as React from 'react'; | ||
|
||
export interface IModalCloseProps { | ||
dismiss: () => void; | ||
} | ||
|
||
export class ModalClose extends React.Component<IModalCloseProps> { | ||
public render() { | ||
return ( | ||
<div className="modal-close close-button pull-right"> | ||
<button className="link" onClick={this.props.dismiss}> | ||
<span className="glyphicon glyphicon-remove"/> | ||
</button> | ||
</div> | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,6 @@ | ||
export * from './buttons/ModalClose'; | ||
export * from './buttons/SubmitButton'; | ||
export * from './wizard/WizardModal'; | ||
export * from './wizard/WizardPage'; | ||
export { V2_MODAL_WIZARD_COMPONENT, V2ModalWizard } from './wizard/v2modalWizard.component'; | ||
export { WizardPage, V2_MODAL_WIZARD_SERVICE, V2ModalWizardService, WizardPageState } from './wizard/v2modalWizard.service'; |
Oops, something went wrong.