/** * @file Icon * @description * @author fex */ import React from 'react'; // @ts-ignore import CloseIcon from '../icons/close.svg'; // @ts-ignore import UnDoIcon from '../icons/undo.svg'; // @ts-ignore import ReDoIcon from '../icons/redo.svg'; // @ts-ignore import EnterIcon from '../icons/enter.svg'; // @ts-ignore import VolumeIcon from '../icons/volume.svg'; // @ts-ignore import MuteIcon from '../icons/mute.svg'; // @ts-ignore import PlayIcon from '../icons/play.svg'; // @ts-ignore import PauseIcon from '../icons/pause.svg'; // @ts-ignore import LeftArrowIcon from '../icons/left-arrow.svg'; // @ts-ignore import RightArrowIcon from '../icons/right-arrow.svg'; // @ts-ignore import CheckIcon from '../icons/check.svg'; // @ts-ignore import PlusIcon from '../icons/plus.svg'; // @ts-ignore import MinusIcon from '../icons/minus.svg'; // @ts-ignore import PencilIcon from '../icons/pencil.svg'; // @ts-ignore import ViewIcon from '../icons/view.svg'; // @ts-ignore import RemoveIcon from '../icons/remove.svg'; // @ts-ignore import RetryIcon from '../icons/retry.svg'; // @ts-ignore import UploadIcon from '../icons/upload.svg'; // @ts-ignore import FileIcon from '../icons/file.svg'; // @ts-ignore import SuccessIcon from '../icons/success.svg'; // @ts-ignore import FailIcon from '../icons/fail.svg'; // @ts-ignore import SearchIcon from '../icons/search.svg'; // @ts-ignore import BackIcon from '../icons/back.svg'; // @ts-ignore import MoveIcon from '../icons/move.svg'; // @ts-ignore import InfoIcon from '../icons/info.svg'; // @ts-ignore import LocationIcon from '../icons/location.svg'; // @ts-ignore import DragBarIcon from '../icons/drag-bar.svg'; // @ts-ignore import ReloadIcon from '../icons/reload.svg'; // @ts-ignore import ExchangeIcon from '../icons/exchange.svg'; // @ts-ignore import ColmunsIcon from '../icons/columns.svg'; // @ts-ignore import CalendarIcon from '../icons/calendar.svg'; // @ts-ignore import CopyIcon from '../icons/copy.svg'; // @ts-ignore import FilterIcon from '../icons/filter.svg'; // @ts-ignore import CaretIcon from '../icons/caret.svg'; // @ts-ignore import RightArrowBoldIcon from '../icons/right-arrow-bold.svg'; // @ts-ignore import ColumnFilterIcon from '../icons/column-filter.svg'; // @ts-ignore import ZoomInIcon from '../icons/zoom-in.svg'; // @ts-ignore import ZoomOutIcon from '../icons/zoom-out.svg'; // @ts-ignore import QuestionIcon from '../icons/question.svg'; // @ts-ignore import QuestionMarkIcon from '../icons/question-mark.svg'; // @ts-ignore import WindowRestoreIcon from '../icons/window-restore.svg'; // @ts-ignore import InfoCircleIcon from '../icons/info-circle.svg'; // @ts-ignore import WarningIcon from '../icons/warning.svg'; // @ts-ignore import WarningMarkIcon from '../icons/warning-mark.svg'; // @ts-ignore import ScheduleIcon from '../icons/schedule.svg'; // @ts-ignore import HomeIcon from '../icons/home.svg'; // @ts-ignore import FolderIcon from '../icons/folder.svg'; // @ts-ignore import SortDefaultIcon from '../icons/sort-default.svg'; // @ts-ignore import SortAscIcon from '../icons/sort-asc.svg'; // @ts-ignore import SortDescIcon from '../icons/sort-desc.svg'; // @ts-ignore import SettingIcon from '../icons/setting.svg'; // @ts-ignore import PlusCicleIcon from '../icons/plus-cicle.svg'; // @ts-ignore import EllipsisVIcon from '../icons/ellipsis-v.svg'; // 兼容原来的用法,后续不直接试用。 // @ts-ignore export const closeIcon = ; // @ts-ignore export const unDoIcon = ; // @ts-ignore export const reDoIcon = ; // @ts-ignore export const enterIcon = ; // @ts-ignore export const volumeIcon = ; // @ts-ignore export const muteIcon = ; // @ts-ignore export const playIcon = ; // @ts-ignore export const pauseIcon = ; // @ts-ignore export const leftArrowIcon = ; // @ts-ignore export const rightArrowIcon = ; const iconFactory: { [propName: string]: React.ReactType<{}>; } = {}; export function getIcon(key: string) { return iconFactory[key]; } export function hasIcon(iconName: string) { return !!getIcon(iconName); } export function registerIcon(key: string, component: React.ReactType<{}>) { iconFactory[key] = component; } registerIcon('close', CloseIcon); registerIcon('undo', UnDoIcon); registerIcon('redo', ReDoIcon); registerIcon('enter', EnterIcon); registerIcon('volume', VolumeIcon); registerIcon('mute', MuteIcon); registerIcon('play', PlayIcon); registerIcon('pause', PauseIcon); registerIcon('left-arrow', LeftArrowIcon); registerIcon('right-arrow', RightArrowIcon); registerIcon('prev', LeftArrowIcon); registerIcon('next', RightArrowIcon); registerIcon('check', CheckIcon); registerIcon('plus', PlusIcon); registerIcon('add', PlusIcon); registerIcon('minus', MinusIcon); registerIcon('pencil', PencilIcon); registerIcon('view', ViewIcon); registerIcon('remove', RemoveIcon); registerIcon('retry', RetryIcon); registerIcon('upload', UploadIcon); registerIcon('file', FileIcon); registerIcon('success', SuccessIcon); registerIcon('fail', FailIcon); registerIcon('warning', WarningIcon); registerIcon('warning-mark', WarningMarkIcon); registerIcon('search', SearchIcon); registerIcon('back', BackIcon); registerIcon('move', MoveIcon); registerIcon('info', InfoIcon); registerIcon('info-circle', InfoCircleIcon); registerIcon('location', LocationIcon); registerIcon('drag-bar', DragBarIcon); registerIcon('reload', ReloadIcon); registerIcon('exchange', ExchangeIcon); registerIcon('columns', ColmunsIcon); registerIcon('calendar', CalendarIcon); registerIcon('copy', CopyIcon); registerIcon('filter', FilterIcon); registerIcon('column-filter', ColumnFilterIcon); registerIcon('caret', CaretIcon); registerIcon('right-arrow-bold', RightArrowBoldIcon); registerIcon('zoom-in', ZoomInIcon); registerIcon('zoom-out', ZoomOutIcon); registerIcon('question', QuestionIcon); registerIcon('question-mark', QuestionMarkIcon); registerIcon('window-restore', WindowRestoreIcon); registerIcon('schedule', ScheduleIcon); registerIcon('home', HomeIcon); registerIcon('folder', FolderIcon); registerIcon('sort-default', SortDefaultIcon); registerIcon('sort-asc', SortAscIcon); registerIcon('sort-desc', SortDescIcon); registerIcon('setting', SettingIcon); registerIcon('plus-cicle', PlusCicleIcon); registerIcon('ellipsis-v', EllipsisVIcon); export function Icon({ icon, className, ...rest }: { icon: string; } & React.ComponentProps) { // jest 运行环境下,把指定的 icon 也输出到 snapshot 中。 if (typeof jest !== 'undefined') { rest.icon = icon; } const Component = getIcon(icon); return Component ? ( ) : ( 没有 icon {icon} ); } export { CloseIcon, UnDoIcon, ReDoIcon, EnterIcon, VolumeIcon, MuteIcon, PlayIcon, PauseIcon, LeftArrowIcon, RightArrowIcon, CheckIcon, PlusIcon, MinusIcon, PencilIcon };