-
-
Notifications
You must be signed in to change notification settings - Fork 9.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Migrate @storybook/addon-events to Typescript #7190
Changes from all commits
063792b
1d0821f
33f1960
fa27db5
f420cbb
220b17e
ca48248
c7690c6
39dc4ff
b691002
7d0510a
75c48a3
b2fd52f
0e75121
387d025
a9d7353
fa96f9e
4cadcc9
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -5,10 +5,19 @@ import isEqual from 'lodash/isEqual'; | |||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
import { styled } from '@storybook/theming'; | ||||||||||||||||||||||||||||||||||||
import json from 'format-json'; | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
import Textarea from 'react-textarea-autosize'; | ||||||||||||||||||||||||||||||||||||
import { OnEmitEvent } from '../index'; | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
interface StyledTextareaProps { | ||||||||||||||||||||||||||||||||||||
shown: boolean; | ||||||||||||||||||||||||||||||||||||
failed: boolean; | ||||||||||||||||||||||||||||||||||||
value?: string; | ||||||||||||||||||||||||||||||||||||
onChange?: (event: React.ChangeEvent<HTMLTextAreaElement>) => void; | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
const StyledTextarea = styled(Textarea)( | ||||||||||||||||||||||||||||||||||||
const StyledTextarea = styled(({ shown, failed, ...rest }: StyledTextareaProps) => ( | ||||||||||||||||||||||||||||||||||||
<Textarea {...rest} /> | ||||||||||||||||||||||||||||||||||||
))( | ||||||||||||||||||||||||||||||||||||
{ | ||||||||||||||||||||||||||||||||||||
flex: '1 0 0', | ||||||||||||||||||||||||||||||||||||
boxSizing: 'border-box', | ||||||||||||||||||||||||||||||||||||
|
@@ -67,7 +76,7 @@ const Label = styled.label({ | |||||||||||||||||||||||||||||||||||
textAlign: 'right', | ||||||||||||||||||||||||||||||||||||
width: 100, | ||||||||||||||||||||||||||||||||||||
fontWeight: '600', | ||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||
} as any); | ||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This one also gives me errors and I couldn't resolve it. Error goes like this
Changing code like this also didn't work
Similar code is already used at other parts storybook/addons/a11y/src/components/Tabs.tsx Lines 18 to 24 in 8aae29d
storybook/lib/components/src/form/field/field.tsx Lines 4 to 13 in 2887028
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
const Wrapper = styled.div({ | ||||||||||||||||||||||||||||||||||||
display: 'flex', | ||||||||||||||||||||||||||||||||||||
|
@@ -77,15 +86,29 @@ const Wrapper = styled.div({ | |||||||||||||||||||||||||||||||||||
width: '100%', | ||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
function getJSONFromString(str) { | ||||||||||||||||||||||||||||||||||||
function getJSONFromString(str: string) { | ||||||||||||||||||||||||||||||||||||
try { | ||||||||||||||||||||||||||||||||||||
return JSON.parse(str); | ||||||||||||||||||||||||||||||||||||
} catch (e) { | ||||||||||||||||||||||||||||||||||||
return str; | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
interface ItemProps { | ||||||||||||||||||||||||||||||||||||
name: string; | ||||||||||||||||||||||||||||||||||||
title: string; | ||||||||||||||||||||||||||||||||||||
onEmit: (event: OnEmitEvent) => void; | ||||||||||||||||||||||||||||||||||||
payload: unknown; | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
interface ItemState { | ||||||||||||||||||||||||||||||||||||
isTextAreaShowed: boolean; | ||||||||||||||||||||||||||||||||||||
failed: boolean; | ||||||||||||||||||||||||||||||||||||
payload: unknown; | ||||||||||||||||||||||||||||||||||||
payloadString: string; | ||||||||||||||||||||||||||||||||||||
prevPayload: unknown; | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
class Item extends Component { | ||||||||||||||||||||||||||||||||||||
class Item extends Component<ItemProps, ItemState> { | ||||||||||||||||||||||||||||||||||||
static propTypes = { | ||||||||||||||||||||||||||||||||||||
name: PropTypes.string.isRequired, | ||||||||||||||||||||||||||||||||||||
title: PropTypes.string.isRequired, | ||||||||||||||||||||||||||||||||||||
|
@@ -98,12 +121,16 @@ class Item extends Component { | |||||||||||||||||||||||||||||||||||
payload: {}, | ||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
state = { | ||||||||||||||||||||||||||||||||||||
state: ItemState = { | ||||||||||||||||||||||||||||||||||||
isTextAreaShowed: false, | ||||||||||||||||||||||||||||||||||||
failed: false, | ||||||||||||||||||||||||||||||||||||
payload: null, | ||||||||||||||||||||||||||||||||||||
payloadString: '', | ||||||||||||||||||||||||||||||||||||
prevPayload: null, | ||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
onChange = ({ target: { value } }) => { | ||||||||||||||||||||||||||||||||||||
const newState = { | ||||||||||||||||||||||||||||||||||||
onChange = ({ target: { value } }: React.ChangeEvent<HTMLTextAreaElement>) => { | ||||||||||||||||||||||||||||||||||||
const newState: Partial<ItemState> = { | ||||||||||||||||||||||||||||||||||||
lonyele marked this conversation as resolved.
Show resolved
Hide resolved
|
||||||||||||||||||||||||||||||||||||
payloadString: value, | ||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
|
@@ -114,7 +141,7 @@ class Item extends Component { | |||||||||||||||||||||||||||||||||||
newState.failed = true; | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
this.setState(newState); | ||||||||||||||||||||||||||||||||||||
this.setState(state => ({ ...state, ...newState })); | ||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
onEmitClick = () => { | ||||||||||||||||||||||||||||||||||||
|
@@ -133,7 +160,7 @@ class Item extends Component { | |||||||||||||||||||||||||||||||||||
})); | ||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
static getDerivedStateFromProps = ({ payload }, { prevPayload }) => { | ||||||||||||||||||||||||||||||||||||
static getDerivedStateFromProps = ({ payload }: ItemProps, { prevPayload }: ItemState) => { | ||||||||||||||||||||||||||||||||||||
if (!isEqual(payload, prevPayload)) { | ||||||||||||||||||||||||||||||||||||
const payloadString = json.plain(payload); | ||||||||||||||||||||||||||||||||||||
const refinedPayload = getJSONFromString(payloadString); | ||||||||||||||||||||||||||||||||||||
|
@@ -150,7 +177,6 @@ class Item extends Component { | |||||||||||||||||||||||||||||||||||
render() { | ||||||||||||||||||||||||||||||||||||
const { title, name } = this.props; | ||||||||||||||||||||||||||||||||||||
const { failed, isTextAreaShowed, payloadString } = this.state; | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
return ( | ||||||||||||||||||||||||||||||||||||
<Wrapper> | ||||||||||||||||||||||||||||||||||||
<Label htmlFor={`addon-event-${name}`}>{title}</Label> | ||||||||||||||||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
declare module 'react-lifecycles-compat'; | ||
declare module 'format-json'; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
{ | ||
"extends": "../../tsconfig.json", | ||
"compilerOptions": { | ||
"rootDir": "./src", | ||
"types": ["webpack-env"] | ||
}, | ||
"include": [ | ||
"src/**/*" | ||
], | ||
"exclude": [ | ||
"src/__tests__/**/*" | ||
] | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Probably I missed something... but putting only
...rest
didn't work. I also had to addvalue
,onChange
which seems unnecessary.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can also use something like
React.HTMLProps<HTMLTextAreaElement>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, I'll try that!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
hm... It didn't work for me. Maybe I implemented in a wrong way?