import { BoxIcon, BriefcaseIcon, Building1Icon, Building2Icon, Building3Icon, BulbIcon, Calendar1Icon, Calendar2Icon, Calendar3Icon, Calendar4Icon, CallIcon, Chart1Icon, Chart2Icon, Clock1Icon, Clock2Icon, CrownIcon, EqualizerIcon, HandIcon, InOutIcon, LightningIcon, MailIcon, Product1Icon, Product2Icon, Rocket1Icon, Rocket2Icon, Rocket3Icon, Settings1Icon, Settings2Icon, Settings3Icon, Settings4Icon, Shapes1Icon, Shapes2Icon, Shapes3Icon, Shapes4Icon, SiteFormIcon, SoundIcon, Star1Icon, Star2Icon, Star3Icon, Target1Icon, Target2Icon, Tick1Icon, Tick2Icon, Tie1Icon, Tie2Icon, User1Icon, User2Icon, User3Icon, User4Icon, type Icon, } from '@/shared'; import { EntityCategory } from '@/shared/lib/models/EntityType/EntityCategory'; import { IconName } from '@/shared/lib/models/Icon/IconName'; interface IconWithColor { icon: Icon; color: string; } class IconStore { icons: Icon[] = [ { name: IconName.ROCKET_1, icon: , }, { name: IconName.ROCKET_2, icon: , }, { name: IconName.ROCKET_3, icon: , }, { name: IconName.CROWN, icon: , }, { name: IconName.LIGHTNING, icon: , }, { name: IconName.TICK_1, icon: , }, { name: IconName.TICK_2, icon: , }, { name: IconName.BULB, icon: , }, { name: IconName.TARGET_1, icon: , }, { name: IconName.TARGET_2, icon: , }, { name: IconName.STAR_1, icon: , }, { name: IconName.STAR_2, icon: , }, { name: IconName.STAR_3, icon: , }, { name: IconName.CHART_1, icon: , }, { name: IconName.CHART_2, icon: , }, { name: IconName.CLOCK_1, icon: , }, { name: IconName.CLOCK_2, icon: , }, { name: IconName.SHAPES_1, icon: , }, { name: IconName.SHAPES_2, icon: , }, { name: IconName.SHAPES_3, icon: , }, { name: IconName.SHAPES_4, icon: , }, { name: IconName.USER_1, icon: , }, { name: IconName.USER_2, icon: , }, { name: IconName.USER_3, icon: , }, { name: IconName.USER_4, icon: , }, { name: IconName.HAND, icon: , }, { name: IconName.BUILDING_1, icon: , }, { name: IconName.BUILDING_2, icon: , }, { name: IconName.BUILDING_3, icon: , }, { name: IconName.TIE_1, icon: , }, { name: IconName.TIE_2, icon: , }, { name: IconName.IN_OUT, icon: , }, { name: IconName.PRODUCT_1, icon: , }, { name: IconName.PRODUCT_2, icon: , }, { name: IconName.BOX, icon: , }, { name: IconName.BRIEFCASE, icon: , }, { name: IconName.CALENDAR_1, icon: , }, { name: IconName.CALENDAR_2, icon: , }, { name: IconName.CALENDAR_3, icon: , }, { name: IconName.CALENDAR_4, icon: , }, { name: IconName.EQUALIZER, icon: , }, { name: IconName.SOUND, icon: , }, { name: IconName.MAIL, icon: , }, { name: IconName.SETTINGS_1, icon: , }, { name: IconName.SETTINGS_2, icon: , }, { name: IconName.SETTINGS_3, icon: , }, { name: IconName.SETTINGS_4, icon: , }, { name: IconName.CALL, icon: , }, { name: IconName.SITE_FORM, icon: , }, ]; defaultEntityIconWithColor: Map = new Map([ [ EntityCategory.COMPANY, { icon: { name: IconName.BUILDING_2, icon: , }, color: 'var(--primary-statuses-orange-440)', }, ], [ EntityCategory.CONTACT, { icon: { name: IconName.USER_2, icon: , }, color: 'var(--primary-statuses-noun-440)', }, ], [ EntityCategory.CONTRACTOR, { icon: { name: IconName.TIE_2, icon: , }, color: 'var(--primary-statuses-amethyst-360)', }, ], [ EntityCategory.DEAL, { icon: { name: IconName.CROWN, icon: , }, color: 'var(--primary-statuses-pink-360)', }, ], [ EntityCategory.HR, { icon: { name: IconName.STAR_2, icon: , }, color: 'var(--primary-statuses-purple-360)', }, ], [ EntityCategory.PARTNER, { icon: { name: IconName.SHAPES_3, icon: , }, color: 'var(--primary-statuses-amethyst-360)', }, ], [ EntityCategory.PROJECT, { icon: { name: IconName.BULB, icon: , }, color: 'var(--primary-statuses-blue-360)', }, ], [ EntityCategory.SUPPLIER, { icon: { name: IconName.PRODUCT_1, icon: , }, color: 'var(--primary-statuses-amethyst-360)', }, ], [ EntityCategory.UNIVERSAL, { icon: { name: IconName.STAR_1, icon: , }, color: 'var(--primary-statuses-malachite-480)', }, ], ]); get firstIcon(): Icon { const firstIcon = this.icons[0]; if (!firstIcon) throw new Error('IconStore has no icons, failed to get the first icon'); return firstIcon; } getByName = (name: IconName): Icon => { const icon = this.icons.find(i => i.name === name); if (!icon) { console.error(`Icon with name ${name} was not found`); return this.firstIcon; } return icon; }; get defaultModuleColor(): string { return 'var(--primary-statuses-crimson-360)'; } get defaultSchedulerIcon(): Icon { const icon = this.icons.find(i => i.name === IconName.CALENDAR_4); return icon ?? this.firstIcon; } get defaultProductsIcon(): Icon { const icon = this.icons.find(i => i.name === IconName.BOX); return icon ?? this.firstIcon; } get schedulerColor(): string { return 'var(--primary-statuses-crimson-360)'; } get productsColor(): string { return 'var(--primary-statuses-salad-480)'; } get systemModuleColor(): string { return 'var(--primary-statuses-green-520)'; } getDefaultIconByEntityCategory = (entityCategory: EntityCategory): Icon => { const icon = this.defaultEntityIconWithColor.get(entityCategory)?.icon; return icon ?? this.firstIcon; }; getEntityColorByEntityCategory = (entityCategory: EntityCategory): string => { return this.defaultEntityIconWithColor.get(entityCategory)?.color ?? this.defaultModuleColor; }; } export const iconStore = new IconStore();