2025-02-18 19:39:54 +03:00
|
|
|
import { LocationHead } from '@/features/library/models/library';
|
|
|
|
import { ExpressionStatus } from '@/features/rsform/models/rsform';
|
2025-02-10 01:32:16 +03:00
|
|
|
import { CstMatchMode, DependencyMode } from '@/features/rsform/stores/cstSearch';
|
2024-06-07 20:17:03 +03:00
|
|
|
|
|
|
|
import {
|
|
|
|
IconAlias,
|
|
|
|
IconBusiness,
|
|
|
|
IconFilter,
|
|
|
|
IconFormula,
|
|
|
|
IconGraphCollapse,
|
|
|
|
IconGraphExpand,
|
|
|
|
IconGraphInputs,
|
|
|
|
IconGraphOutputs,
|
|
|
|
IconHide,
|
2024-10-28 23:55:12 +03:00
|
|
|
IconMoveDown,
|
|
|
|
IconMoveUp,
|
2025-02-20 20:22:05 +03:00
|
|
|
type IconProps,
|
2024-06-07 20:17:03 +03:00
|
|
|
IconPublic,
|
|
|
|
IconSettings,
|
|
|
|
IconShow,
|
|
|
|
IconStatusError,
|
|
|
|
IconStatusIncalculable,
|
|
|
|
IconStatusOK,
|
|
|
|
IconStatusUnknown,
|
2024-08-21 16:49:04 +03:00
|
|
|
IconSubfolders,
|
2024-06-07 20:17:03 +03:00
|
|
|
IconTemplates,
|
|
|
|
IconTerm,
|
|
|
|
IconText,
|
|
|
|
IconUser
|
|
|
|
} from './Icons';
|
|
|
|
|
|
|
|
export interface DomIconProps<RequestData> extends IconProps {
|
|
|
|
value: RequestData;
|
|
|
|
}
|
|
|
|
|
2024-11-21 15:09:31 +03:00
|
|
|
/** Icon for visibility. */
|
2024-06-07 20:17:03 +03:00
|
|
|
export function VisibilityIcon({ value, size = '1.25rem', className }: DomIconProps<boolean>) {
|
|
|
|
if (value) {
|
2024-12-16 23:51:31 +03:00
|
|
|
return <IconShow size={size} className={className ?? 'text-ok-600'} />;
|
2024-06-07 20:17:03 +03:00
|
|
|
} else {
|
2024-12-16 23:51:31 +03:00
|
|
|
return <IconHide size={size} className={className ?? 'text-warn-600'} />;
|
2024-06-07 20:17:03 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-11-21 15:09:31 +03:00
|
|
|
/** Icon for subfolders. */
|
2024-08-21 16:49:04 +03:00
|
|
|
export function SubfoldersIcon({ value, size = '1.25rem', className }: DomIconProps<boolean>) {
|
|
|
|
if (value) {
|
2024-12-16 23:51:31 +03:00
|
|
|
return <IconSubfolders size={size} className={className ?? 'text-ok-600'} />;
|
2024-08-21 16:49:04 +03:00
|
|
|
} else {
|
2024-12-17 10:52:36 +03:00
|
|
|
return <IconSubfolders size={size} className={className ?? 'text-sec-600'} />;
|
2024-08-21 16:49:04 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-11-21 15:09:31 +03:00
|
|
|
/** Icon for location. */
|
2024-06-07 20:17:03 +03:00
|
|
|
export function LocationIcon({ value, size = '1.25rem', className }: DomIconProps<string>) {
|
|
|
|
switch (value.substring(0, 2) as LocationHead) {
|
|
|
|
case LocationHead.COMMON:
|
2024-12-17 10:52:36 +03:00
|
|
|
return <IconPublic size={size} className={className ?? 'text-sec-600'} />;
|
2024-06-07 20:17:03 +03:00
|
|
|
case LocationHead.LIBRARY:
|
2024-12-16 23:51:31 +03:00
|
|
|
return <IconTemplates size={size} className={className ?? 'text-warn-600'} />;
|
2024-06-07 20:17:03 +03:00
|
|
|
case LocationHead.PROJECTS:
|
2024-12-17 10:52:36 +03:00
|
|
|
return <IconBusiness size={size} className={className ?? 'text-sec-600'} />;
|
2024-06-07 20:17:03 +03:00
|
|
|
case LocationHead.USER:
|
2024-12-16 23:51:31 +03:00
|
|
|
return <IconUser size={size} className={className ?? 'text-ok-600'} />;
|
2024-06-07 20:17:03 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-11-21 15:09:31 +03:00
|
|
|
/** Icon for term graph dependency mode. */
|
2024-06-07 20:17:03 +03:00
|
|
|
export function DependencyIcon({ value, size = '1.25rem', className }: DomIconProps<DependencyMode>) {
|
|
|
|
switch (value) {
|
|
|
|
case DependencyMode.ALL:
|
|
|
|
return <IconSettings size={size} className={className} />;
|
|
|
|
case DependencyMode.OUTPUTS:
|
2024-12-17 10:52:36 +03:00
|
|
|
return <IconGraphOutputs size={size} className={className ?? 'text-sec-600'} />;
|
2024-06-07 20:17:03 +03:00
|
|
|
case DependencyMode.INPUTS:
|
2024-12-17 10:52:36 +03:00
|
|
|
return <IconGraphInputs size={size} className={className ?? 'text-sec-600'} />;
|
2024-06-07 20:17:03 +03:00
|
|
|
case DependencyMode.EXPAND_OUTPUTS:
|
2024-12-17 10:52:36 +03:00
|
|
|
return <IconGraphExpand size={size} className={className ?? 'text-sec-600'} />;
|
2024-06-07 20:17:03 +03:00
|
|
|
case DependencyMode.EXPAND_INPUTS:
|
2024-12-17 10:52:36 +03:00
|
|
|
return <IconGraphCollapse size={size} className={className ?? 'text-sec-600'} />;
|
2024-06-07 20:17:03 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-11-21 15:09:31 +03:00
|
|
|
/** Icon for constituenta match mode. */
|
2024-06-07 20:17:03 +03:00
|
|
|
export function MatchModeIcon({ value, size = '1.25rem', className }: DomIconProps<CstMatchMode>) {
|
|
|
|
switch (value) {
|
|
|
|
case CstMatchMode.ALL:
|
|
|
|
return <IconFilter size={size} className={className} />;
|
|
|
|
case CstMatchMode.TEXT:
|
2024-12-17 10:52:36 +03:00
|
|
|
return <IconText size={size} className={className ?? 'text-sec-600'} />;
|
2024-06-07 20:17:03 +03:00
|
|
|
case CstMatchMode.EXPR:
|
2024-12-17 10:52:36 +03:00
|
|
|
return <IconFormula size={size} className={className ?? 'text-sec-600'} />;
|
2024-06-07 20:17:03 +03:00
|
|
|
case CstMatchMode.TERM:
|
2024-12-17 10:52:36 +03:00
|
|
|
return <IconTerm size={size} className={className ?? 'text-sec-600'} />;
|
2024-06-07 20:17:03 +03:00
|
|
|
case CstMatchMode.NAME:
|
2024-12-17 10:52:36 +03:00
|
|
|
return <IconAlias size={size} className={className ?? 'text-sec-600'} />;
|
2024-06-07 20:17:03 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-11-21 15:09:31 +03:00
|
|
|
/** Icon for expression status. */
|
2024-06-07 20:17:03 +03:00
|
|
|
export function StatusIcon({ value, size = '1.25rem', className }: DomIconProps<ExpressionStatus>) {
|
|
|
|
switch (value) {
|
|
|
|
case ExpressionStatus.VERIFIED:
|
|
|
|
case ExpressionStatus.PROPERTY:
|
|
|
|
return <IconStatusOK size={size} className={className} />;
|
|
|
|
|
|
|
|
case ExpressionStatus.UNKNOWN:
|
|
|
|
return <IconStatusUnknown size={size} className={className} />;
|
|
|
|
case ExpressionStatus.INCALCULABLE:
|
|
|
|
return <IconStatusIncalculable size={size} className={className} />;
|
|
|
|
|
|
|
|
case ExpressionStatus.INCORRECT:
|
|
|
|
case ExpressionStatus.UNDEFINED:
|
|
|
|
return <IconStatusError size={size} className={className} />;
|
|
|
|
}
|
|
|
|
}
|
2024-08-25 13:45:32 +03:00
|
|
|
|
2024-11-21 15:09:31 +03:00
|
|
|
/** Icon for relocation direction. */
|
2024-10-28 23:55:12 +03:00
|
|
|
export function RelocateUpIcon({ value, size = '1.25rem', className }: DomIconProps<boolean>) {
|
|
|
|
if (value) {
|
2024-12-17 10:52:36 +03:00
|
|
|
return <IconMoveUp size={size} className={className ?? 'text-sec-600'} />;
|
2024-10-28 23:55:12 +03:00
|
|
|
} else {
|
2024-12-17 10:52:36 +03:00
|
|
|
return <IconMoveDown size={size} className={className ?? 'text-sec-600'} />;
|
2024-10-28 23:55:12 +03:00
|
|
|
}
|
|
|
|
}
|