Skip to content

Commit

Permalink
style: 💄 eslint and typescript errors
Browse files Browse the repository at this point in the history
  • Loading branch information
emersonlaurentino committed Apr 9, 2020
1 parent 5b86dfb commit b6f515c
Showing 1 changed file with 17 additions and 21 deletions.
38 changes: 17 additions & 21 deletions react/modules/deprecated.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,12 @@
* */
import React, { Component, ComponentType } from 'react'

interface UseNewProps {
submitFilterLable: string
newFilterLable: string
}

interface UseNewComponent {
old: string
new: string
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
type genericObj = Record<string, any>

interface DeprecatedProps {
useNewProps?: UseNewProps
useNewComponent?: UseNewComponent
useNewProps?: genericObj
useNewComponent?: genericObj
}

// Attempt to get the wrapped component's name
Expand All @@ -38,21 +31,23 @@ function getComponentName<T>(target: ComponentType<T>) {
return target.name || 'Unamed component'
}

const mapNewProps = (propsMap, props) => {
const newProps = {}
const mapNewProps = (propsMap: genericObj, props: genericObj) => {
const newProps: genericObj = {}
Object.keys(propsMap).map(deprecatedProp => {
if (props[deprecatedProp]) {
newProps[propsMap[deprecatedProp]] = props[deprecatedProp]
}
return null
})
return { ...props, ...newProps }
}

export default function deprecated<
T extends DeprecatedProps = DeprecatedProps
>({ useNewComponent, useNewProps }: T) {
return (WrappedComponent: React.ComponentType<T>) => {
return class Deprecated extends Component {
export default function deprecated<T extends DeprecatedProps>({
useNewComponent,
useNewProps,
}: T) {
return (WrappedComponent: ComponentType<T>) => {
return class Deprecated extends Component<T> {
public componentDidMount() {
if (useNewComponent) {
console.warn(
Expand All @@ -63,22 +58,23 @@ export default function deprecated<
}
if (useNewProps) {
Object.keys(useNewProps).map(deprecatedProp => {
if (this.props[deprecatedProp]) {
if (deprecatedProp in this.props) {
console.warn(
'"%s" prop "%s" is deprecated, you should use "%s" instead',
getComponentName(WrappedComponent),
deprecatedProp,
useNewProps[deprecatedProp]
)
}
return null
})
}
}

public render() {
const newProps = useNewProps
const newProps = (useNewProps
? mapNewProps(useNewProps, this.props)
: this.props
: this.props) as T
return <WrappedComponent {...newProps} />
}
}
Expand Down

0 comments on commit b6f515c

Please sign in to comment.