mirror of
https://github.com/grafana/grafana.git
synced 2025-08-06 05:19:25 +08:00

* Babel: Updates babel dependencies to latest version * Emotion: Upgrade form 10 to 11 * Fixing tests * Updated to use emotion/css instead in test
71 lines
1.7 KiB
TypeScript
71 lines
1.7 KiB
TypeScript
import React from 'react';
|
|
import { number, select } from '@storybook/addon-knobs';
|
|
import { List } from './List';
|
|
import { css, cx } from '@emotion/css';
|
|
import tinycolor from 'tinycolor2';
|
|
import { InlineList } from './InlineList';
|
|
|
|
export default {
|
|
title: 'Layout/List',
|
|
component: List,
|
|
};
|
|
|
|
const generateListItems = (numberOfItems: number) => {
|
|
return [...new Array(numberOfItems)].map((item, i) => {
|
|
return {
|
|
name: `Item-${i}`,
|
|
id: `item-${i}`,
|
|
};
|
|
});
|
|
};
|
|
|
|
const getStoriesKnobs = (inline = false) => {
|
|
const numberOfItems = number('Number of items', 3);
|
|
const rawRenderer = (item: any) => <>{item.name}</>;
|
|
const customRenderer = (item: any, index: number) => (
|
|
<div
|
|
className={cx([
|
|
css`
|
|
color: white;
|
|
font-weight: bold;
|
|
background: ${tinycolor.fromRatio({ h: index / 26, s: 1, v: 1 }).toHexString()};
|
|
padding: 10px;
|
|
`,
|
|
inline
|
|
? css`
|
|
margin-right: 20px;
|
|
`
|
|
: css`
|
|
margin-bottom: 20px;
|
|
`,
|
|
])}
|
|
>
|
|
{item.name}
|
|
</div>
|
|
);
|
|
|
|
const itemRenderer = select(
|
|
'Item rendered',
|
|
{
|
|
'Raw renderer': 'raw',
|
|
'Custom renderer': 'custom',
|
|
},
|
|
'raw'
|
|
);
|
|
|
|
return {
|
|
numberOfItems,
|
|
renderItem: itemRenderer === 'raw' ? rawRenderer : customRenderer,
|
|
};
|
|
};
|
|
|
|
export const basic = () => {
|
|
const { numberOfItems, renderItem } = getStoriesKnobs();
|
|
return <List items={generateListItems(numberOfItems)} renderItem={renderItem} />;
|
|
};
|
|
|
|
export const inline = () => {
|
|
const { numberOfItems, renderItem } = getStoriesKnobs(true);
|
|
return <InlineList items={generateListItems(numberOfItems)} renderItem={renderItem} />;
|
|
};
|