Skip to content

Commit b4d73e2

Browse files
Uzhastin-Nikitathe-homeless-god
authored andcommitted
feat: relocate Icon atom from WEB
1 parent c7e0de4 commit b4d73e2

File tree

6 files changed

+174
-0
lines changed

6 files changed

+174
-0
lines changed

src/components/atoms/Icon/Icon.tsx

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import React from 'react'
2+
3+
import { Icons } from 'src/components/atoms/Icon/Icon.types'
4+
5+
import { getIcon } from 'src/components/atoms/Icon/Icon.utils'
6+
7+
export type IconProps = {
8+
name: Icons | string
9+
tooltip?: string
10+
onClick?: () => void
11+
className?: string
12+
}
13+
14+
export const Icon = ({ name, onClick, className, tooltip }: IconProps) => {
15+
const IconComponent = getIcon(name)
16+
17+
return (
18+
<div className={className} onClick={onClick} title={tooltip}>
19+
<IconComponent />
20+
</div>
21+
)
22+
}
+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
export enum Icons {
2+
// social
3+
telegram = 'telegram',
4+
facebook = 'facebook',
5+
vkontakte = 'vkontakte',
6+
twitter = 'twitter',
7+
github = 'github',
8+
9+
// common
10+
gamepad = 'gamepad',
11+
work = 'work',
12+
house = 'house',
13+
star = 'star',
14+
domain = 'domain',
15+
graphics = 'graphics',
16+
17+
// details
18+
processor = 'processor',
19+
motherboard = 'motherboard',
20+
videocard = 'videocard',
21+
ram = 'ram',
22+
close = 'close',
23+
24+
// navLinks
25+
call = 'call',
26+
catalog = 'catalog',
27+
delivery = 'delivery',
28+
home = 'home',
29+
30+
// benefit
31+
dollar = 'dollar',
32+
guality = 'guality',
33+
tool = 'tool',
34+
modules = 'modules',
35+
vector = 'vector',
36+
envelope = 'envelope'
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { ICONS } from './Icon.utils'
2+
3+
describe('Icon.utils', () => {
4+
it('should match snapshot', () => {
5+
expect(ICONS).toMatchSnapshot()
6+
})
7+
})
+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
// benefit
2+
import DollarImage from '../../../../public/images/benefit/dollar.svg'
3+
import EnvelopeImage from '../../../../public/images/benefit/envelope.svg'
4+
import GualityImage from '../../../../public/images/benefit/guality.svg'
5+
import ModulesImage from '../../../../public/images/benefit/modules.svg'
6+
import ToolImage from '../../../../public/images/benefit/tool.svg'
7+
import VectorImage from '../../../../public/images/benefit/vector.svg'
8+
9+
// common
10+
import CloseImage from '../../../../public/images/common/close.svg'
11+
import DomainImage from '../../../../public/images/common/domain.svg'
12+
import GamepadImage from '../../../../public/images/common/gamepad.svg'
13+
import GraphicsImage from '../../../../public/images/common/graphics.svg'
14+
15+
import HouseImage from '../../../../public/images/common/house.svg'
16+
import MotherboardImage from '../../../../public/images/common/motherboard.svg'
17+
import ProcessorImage from '../../../../public/images/common/processor.svg'
18+
import RamImage from '../../../../public/images/common/ram.svg'
19+
import StarImage from '../../../../public/images/common/star.svg'
20+
import VideocardImage from '../../../../public/images/common/videocard.svg'
21+
import WorkImage from '../../../../public/images/common/work.svg'
22+
23+
// navLinks
24+
import CallImage from '../../../../public/images/navLinks/call.svg'
25+
import CatalogImage from '../../../../public/images/navLinks/catalog.svg'
26+
import DeliveryImage from '../../../../public/images/navLinks/delivery.svg'
27+
import HomeImage from '../../../../public/images/navLinks/home.svg'
28+
29+
// social
30+
import FacebookImage from '../../../../public/images/social/facebook.svg'
31+
import GithubImage from '../../../../public/images/social/github.svg'
32+
import TelegramImage from '../../../../public/images/social/telegram.svg'
33+
import TwitterImage from '../../../../public/images/social/twitter.svg'
34+
import VKImage from '../../../../public/images/social/vkontakte.svg'
35+
36+
import { Icons } from './Icon.types'
37+
38+
export const ICONS: Record<Icons | string, string> = {
39+
[Icons.telegram]: TelegramImage,
40+
[Icons.facebook]: FacebookImage,
41+
[Icons.vkontakte]: VKImage,
42+
[Icons.twitter]: TwitterImage,
43+
[Icons.github]: GithubImage,
44+
// common
45+
[Icons.gamepad]: GamepadImage,
46+
[Icons.work]: WorkImage,
47+
[Icons.house]: HouseImage,
48+
[Icons.star]: StarImage,
49+
[Icons.domain]: DomainImage,
50+
[Icons.graphics]: GraphicsImage,
51+
// details
52+
[Icons.processor]: ProcessorImage,
53+
[Icons.motherboard]: MotherboardImage,
54+
[Icons.videocard]: VideocardImage,
55+
[Icons.ram]: RamImage,
56+
[Icons.close]: CloseImage,
57+
// navLinks
58+
[Icons.call]: CallImage,
59+
[Icons.catalog]: CatalogImage,
60+
[Icons.delivery]: DeliveryImage,
61+
[Icons.home]: HomeImage,
62+
// benefit
63+
[Icons.dollar]: DollarImage,
64+
[Icons.guality]: GualityImage,
65+
[Icons.tool]: ToolImage,
66+
[Icons.modules]: ModulesImage,
67+
[Icons.vector]: VectorImage,
68+
[Icons.envelope]: EnvelopeImage
69+
}
70+
71+
export const getIcon = (name: Icons | string) => {
72+
return ICONS[name]
73+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// Jest Snapshot v1, https://goo.gl/fbAQLP
2+
3+
exports[`Icon.utils should match snapshot 1`] = `
4+
Object {
5+
"call": "svg",
6+
"catalog": "svg",
7+
"close": "svg",
8+
"delivery": "svg",
9+
"dollar": "svg",
10+
"domain": "svg",
11+
"envelope": "svg",
12+
"facebook": "svg",
13+
"gamepad": "svg",
14+
"github": "svg",
15+
"graphics": "svg",
16+
"guality": "svg",
17+
"home": "svg",
18+
"house": "svg",
19+
"modules": "svg",
20+
"motherboard": "svg",
21+
"processor": "svg",
22+
"ram": "svg",
23+
"star": "svg",
24+
"telegram": "svg",
25+
"tool": "svg",
26+
"twitter": "svg",
27+
"vector": "svg",
28+
"videocard": "svg",
29+
"vkontakte": "svg",
30+
"work": "svg",
31+
}
32+
`;

src/components/atoms/Icon/index.ts

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export * from './Icon'
2+
export * from './Icon.types'
3+
export * from './Icon.utils'

0 commit comments

Comments
 (0)