feat(Try it out): switch button implemented

react-switch added to the project to use in try it out component
This commit is contained in:
Arian Rahimi 2020-01-20 12:55:22 +03:30
parent cad8197a81
commit 705cea6a35
4 changed files with 75 additions and 23 deletions

View File

@ -135,10 +135,10 @@
"styled-components": "^4.1.1" "styled-components": "^4.1.1"
}, },
"dependencies": { "dependencies": {
"classnames": "^2.2.6",
"ajv": "^6.4.0", "ajv": "^6.4.0",
"ajv-errors": "^1.0.0", "ajv-errors": "^1.0.0",
"brace": "^0.11.1", "brace": "^0.11.1",
"classnames": "^2.2.6",
"decko": "^1.2.0", "decko": "^1.2.0",
"dompurify": "^1.0.11", "dompurify": "^1.0.11",
"eventemitter3": "^4.0.0", "eventemitter3": "^4.0.0",
@ -154,12 +154,13 @@
"polished": "^3.4.1", "polished": "^3.4.1",
"prismjs": "^1.17.1", "prismjs": "^1.17.1",
"prop-types": "^15.7.2", "prop-types": "^15.7.2",
"react-dropdown": "^1.6.4",
"react-hot-loader": "^4.12.10",
"react-tabs": "^3.0.0",
"slugify": "^1.3.4",
"qs": "^6.5.2", "qs": "^6.5.2",
"react-ace": "^6.0.0", "react-ace": "^6.0.0",
"react-dropdown": "^1.6.4",
"react-hot-loader": "^4.12.10",
"react-switch": "^5.0.1",
"react-tabs": "^3.0.0",
"slugify": "^1.3.4",
"stickyfill": "^1.1.1", "stickyfill": "^1.1.1",
"swagger2openapi": "^5.3.1", "swagger2openapi": "^5.3.1",
"tslib": "^1.10.0", "tslib": "^1.10.0",

View File

@ -0,0 +1,43 @@
import * as React from 'react';
import Switch from 'react-switch';
import {FlexLayout} from './index';
import styled from '../styled-components';
const CustomFlexLayout = styled(FlexLayout)`
align-items: center;
`;
interface LabelProps {
active: boolean;
}
const Label = styled.label<LabelProps>`
color: ${props => props.active ? props.theme.colors.success.main : props.theme.colors.text.secondary}
margin-left: 10px;
font-size: 120%;
`;
interface TryItOutProps {
label: string;
checked: boolean;
onClick: () => void;
}
export class SwitchBox extends React.PureComponent<TryItOutProps> {
id = 'toggle-id-' + Date.now();
render() {
const { label, checked, onClick } = this.props;
return (
<CustomFlexLayout>
<Switch
id={this.id}
onChange={onClick}
checked={checked}
uncheckedIcon={false}
/>
<Label active={checked} htmlFor={this.id}>{label}</Label>
</CustomFlexLayout>
);
}
}

View File

@ -1,25 +1,25 @@
import * as React from 'react';
import { SecurityRequirements } from '../SecurityRequirement/SecurityRequirement';
import { observer } from 'mobx-react'; import { observer } from 'mobx-react';
import * as React from 'react';
import { Badge, ConsoleButton, DarkRightPanel, FlexLayoutReverse, H2, MiddlePanel, Row } from '../../common-elements'; import { Badge, DarkRightPanel, H2, MiddlePanel, Row } from '../../common-elements';
import { OptionsContext } from '../OptionsProvider';
import { ShareLink } from '../../common-elements/linkify'; import { ShareLink } from '../../common-elements/linkify';
import { ConsoleViewer } from '../Console/ConsoleViewer';
import { Endpoint } from '../Endpoint/Endpoint';
import { ExternalDocumentation } from '../ExternalDocumentation/ExternalDocumentation';
import { Markdown } from '../Markdown/Markdown';
import { Parameters } from '../Parameters/Parameters';
import { RequestSamples } from '../RequestSamples/RequestSamples';
import { ResponsesList } from '../Responses/ResponsesList';
import { ResponseSamples } from '../ResponseSamples/ResponseSamples';
import { OperationModel as OperationType } from '../../services/models'; import { OperationModel as OperationType } from '../../services/models';
import styled from '../../styled-components'; import styled from '../../styled-components';
import { ConsoleViewer } from '../Console/ConsoleViewer';
import { Endpoint } from '../Endpoint/Endpoint';
import { ExternalDocumentation } from '../ExternalDocumentation/ExternalDocumentation';
import { Extensions } from '../Fields/Extensions'; import { Extensions } from '../Fields/Extensions';
import { Markdown } from '../Markdown/Markdown';
import {SwitchBox} from '../../common-elements/SwitchBox';
import {OptionsContext } from '../OptionsProvider';
import {Parameters } from '../Parameters/Parameters';
import {RequestSamples } from '../RequestSamples/RequestSamples';
import {ResponsesList } from '../Responses/ResponsesList';
import {ResponseSamples } from '../ResponseSamples/ResponseSamples';
import {SecurityRequirements } from '../SecurityRequirement/SecurityRequirement';
const OperationRow = styled(Row)` const OperationRow = styled(Row)`
backface-visibility: hidden; backface-visibility: hidden;
@ -62,7 +62,6 @@ export class Operation extends React.Component<OperationProps, OperationState> {
const { name: summary, description, deprecated, externalDocs } = operation; const { name: summary, description, deprecated, externalDocs } = operation;
const hasDescription = !!(description || externalDocs); const hasDescription = !!(description || externalDocs);
const consoleButtonLabel = (executeMode) ? 'Hide Console' : 'Show Console';
return ( return (
<OptionsContext.Consumer> <OptionsContext.Consumer>
@ -74,9 +73,11 @@ export class Operation extends React.Component<OperationProps, OperationState> {
{summary} {deprecated && <Badge type="warning"> Deprecated </Badge>} {summary} {deprecated && <Badge type="warning"> Deprecated </Badge>}
</H2> </H2>
{options.enableConsole && {options.enableConsole &&
<FlexLayoutReverse> <SwitchBox
<ConsoleButton onClick={this.onConsoleClick}>{consoleButtonLabel}</ConsoleButton> onClick={this.onConsoleClick}
</FlexLayoutReverse> checked={this.state.executeMode}
label="Try it out!"
/>
} }
{options.pathInMiddlePanel && <Endpoint operation={operation} inverted={true} />} {options.pathInMiddlePanel && <Endpoint operation={operation} inverted={true} />}
{hasDescription && ( {hasDescription && (

View File

@ -8072,6 +8072,13 @@ react-lifecycles-compat@^3.0.4:
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
react-switch@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/react-switch/-/react-switch-5.0.1.tgz#449277f4c3aed5286fffd0f50d5cbc2a23330406"
integrity sha512-Pa5kvqRfX85QUCK1Jv0rxyeElbC3aNpCP5hV0LoJpU/Y6kydf0t4kRriQ6ZYA4kxWwAYk/cH51T4/sPzV9mCgQ==
dependencies:
prop-types "^15.6.2"
react-tabs@^3.0.0: react-tabs@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-3.0.0.tgz#60311a17c755eb6aa9b3310123e67db421605127" resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-3.0.0.tgz#60311a17c755eb6aa9b3310123e67db421605127"