Skip to content

Commit

Permalink
feat(fab): typescript support (#495)
Browse files Browse the repository at this point in the history
  • Loading branch information
Matt Goo committed Dec 28, 2018
1 parent 764ed40 commit b62c36f
Show file tree
Hide file tree
Showing 6 changed files with 414 additions and 303 deletions.
112 changes: 0 additions & 112 deletions packages/fab/index.js

This file was deleted.

80 changes: 80 additions & 0 deletions packages/fab/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
// The MIT License
//
// Copyright (c) 2018 Google, Inc.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

import * as React from 'react';
import * as classnames from 'classnames';
import * as Ripple from '@material/react-ripple';

export interface FabProps extends Ripple.InjectedProps<HTMLButtonElement> {
mini?: boolean;
icon?: React.ReactElement<HTMLElement>;
textLabel?: string;
className?: string;
initRipple: React.Ref<HTMLButtonElement>;
unbounded: boolean;

This comment has been minimized.

Copy link
@Maxim-Mazurok

Maxim-Mazurok Apr 13, 2019

Contributor

Are initRipple and unbounded really required? Shouldn't they be optional instead?

This comment has been minimized.

Copy link
@moog16

moog16 Apr 15, 2019

Contributor

They should be optional. Feel free to open a PR, otherwise I can open an issue and address it in a bit.

This comment has been minimized.

Copy link
@Maxim-Mazurok

Maxim-Mazurok Apr 15, 2019

Contributor

Cool, will open PR right away, thanks for your reply!

This comment has been minimized.

Copy link
@Maxim-Mazurok

Maxim-Mazurok Apr 15, 2019

Contributor

Here it is: #810

This comment has been minimized.

Copy link
@moog16

moog16 Apr 15, 2019

Contributor

That was quick!

}

const Icon: React.FunctionComponent<{icon?: React.ReactElement<HTMLElement>}> = ({icon}) => {
if (!icon) {
return null;
}
const updatedProps = {
className: classnames('mdc-fab__icon', icon.props.className),
};
return React.cloneElement(icon, updatedProps);
};

const TextLabel: React.FunctionComponent<{textLabel: string}> = ({
textLabel, // eslint-disable-line react/prop-types
}) => {
if (textLabel.length === 0) {
return null;
}
return <span className='mdc-fab__label'>{textLabel}</span>;
};

export const Fab: React.FunctionComponent<FabProps & React.HTMLProps<HTMLButtonElement>> = ({
/* eslint-disable react/prop-types */
mini = false,
icon,
textLabel = '',
className = '',
initRipple = () => {},
unbounded,
/* eslint-enable react/prop-types */
...otherProps
}) => {
const extended = textLabel.length > 0;
const classes = classnames('mdc-fab', className, {
'mdc-fab--mini': mini,
'mdc-fab--extended': extended,
});

return (
<button className={classes} ref={initRipple} {...otherProps}>
<Icon icon={icon} />
<TextLabel textLabel={textLabel} />
</button>
);
};

export default Ripple.withRipple<FabProps, HTMLButtonElement>(Fab);
114 changes: 0 additions & 114 deletions test/screenshot/fab/index.js

This file was deleted.

0 comments on commit b62c36f

Please sign in to comment.