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();