feat: storybook for Icon component (#10515)

* storybook for Icon component

* fixing webpack aliases

* linting 

* Icons are now in a nice little grid.

* lint

* EOF fix for alert.txt. Ugh.
This commit is contained in:
Evan Rusackas 2020-08-04 22:39:14 -07:00 committed by GitHub
parent 514b29f6df
commit 3d74c3ce56
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 92 additions and 2 deletions

View File

@ -36,6 +36,10 @@ module.exports = {
...config.module,
rules: customConfig.module.rules,
},
resolve: {
...config.resolve,
...customConfig.resolve,
},
plugins: [...config.plugins, ...customConfig.plugins],
}),
};

View File

@ -0,0 +1,86 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import React from 'react';
import { withKnobs, select } from '@storybook/addon-knobs';
import { styled, supersetTheme } from '@superset-ui/style';
import Icon, { iconsRegistry } from './';
export default {
title: 'Icon',
component: Icon,
decorators: [withKnobs],
};
const palette = {};
Object.entries(supersetTheme.colors).forEach(([familyName, family]) => {
Object.entries(family).forEach(([colorName, colorValue]) => {
palette[`${familyName} / ${colorName}`] = colorValue;
});
});
const colorKnob = {
label: 'Color',
options: {
Default: null,
...palette,
},
defaultValue: null,
};
const IconSet = styled.div`
display: flex;
flex-direction: row;
flex-wrap: wrap;
`;
const IconBlock = styled.div`
flex-grow: 0;
flex-shrink: 0;
flex-basis: 10%;
text-align: center;
padding: ${({ theme }) => theme.gridUnit * 2}px;
div {
white-space: nowrap;
font-size: ${({ theme }) => theme.typography.sizes.s}px;
}
`;
export const SupersetIcon = () => {
return (
<IconSet>
{Object.keys(iconsRegistry)
.sort()
.map(iconName => (
<IconBlock>
<Icon
name={iconName}
key={iconName}
color={select(
colorKnob.label,
colorKnob.options,
colorKnob.defaultValue,
colorKnob.groupId,
)}
/>
<div>{iconName}</div>
</IconBlock>
))}
</IconSet>
);
};

View File

@ -64,7 +64,7 @@ type IconName =
| 'share'
| 'warning';
const iconsRegistry: Record<
export const iconsRegistry: Record<
IconName,
React.ComponentType<SVGProps<SVGSVGElement>>
> = {

View File

@ -23,4 +23,4 @@
<p>Click <a href="{{image_url}}">here</a> or the image below to view the chart related to this alert.</p>
<a href="{{image_url}}">
<img src="cid:screenshot" alt="{{label}}" />
</a>
</a>