/* eslint-disable jsx-a11y/no-redundant-roles */
/* eslint-disable react/button-has-type */
/* eslint-disable jsx-a11y/mouse-events-have-key-events */
/* eslint-disable jsx-a11y/click-events-have-key-events */
/* eslint-disable jsx-a11y/interactive-supports-focus */
import React from 'react';
import { text, boolean, withKnobs, number, select, button } from '@storybook/addon-knobs';
import { action } from '@storybook/addon-actions';
import { storiesOf } from '@storybook/react';
import Countdown from '../src/components/Countdown';
import Wrapper from '../src/components/Wrapper';
import Freeze from '../src/components/Freeze';
import Memo from '../src/components/Memo';
import Try from '../src/components/Try';
import { If, Then, Else } from '../src/components/If';
import { EventProxy } from '../src/components/EventProxy';
import { AttributeProxy } from '../src/components/AttributeProxy';
const stories = storiesOf('Components', module);
stories.addDecorator(withKnobs({ escapeHTML: false }));
const Children = () => {
const counter = React.useRef(0);
counter.current += 1;
return (
event.stopPropagation()}>
I was rendered
{counter.current}
times
);
};
stories.add('If', () => (
nothing
));
stories.add('Memo', () => {
const value1 = text('value1', 'default-value');
const value2 = text('value2', 'default-value');
return (
{value1}
{' '}
changes
{value2}
{' '}
does not
);
});
stories.add('Memo2', () => {
const [state1, setState1] = React.useState(0);
const [state2, setState2] = React.useState(0);
React.useEffect(
() => {
const interval = setInterval(() => {
setState2(old => old + 1);
}, 100);
return () => {
clearInterval(interval);
};
},
[],
);
return (
{state2}
This value doesn't change, until you press
);
});
stories.add('Freeze', () => {
const [state, setState] = React.useState(0);
React.useEffect(() => {
const interval = setInterval(() => {
setState(v => v + 1);
}, 1000);
return () => clearInterval(interval);
}, []);
return (
I was rendered:
{' '}
{state}
{' '}
times
);
});
stories.add('EventProxy', () => (
));
stories.add('AttributeProxy', () => (
));
const ErrorComponent = ({ shouldThrow }: { shouldThrow?: boolean }) => {
if (shouldThrow) {
throw new Error('💣');
} else {
return <>Everything fine>;
}
};
stories.add('Try', () => (
{
action('catch')(error);
return 'Exception caught';
}}
>
));
const WrapperComponent: React.FC = ({ children }) => (
{'< Обнимашка>'}
{children}
{'Обнимашка>'}
);
stories.add('Wrapper', () => (
));
stories.add('Countdown', () => (
));