/
vshmidt
/
label-studio
Обзор
Документация
Войти
/
vshmidt
/
label-studio
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
web/libs/editor/src/tools/Base.jsx
108 строк
3 KB
Yousif Yassi
chore: FIT-1383: Lodash removal (#9372)
14 фев 2026, 00:00
Не верифицирован
14 фев 2026, 00:00
82f1213
Код
Авторство
О чём код?
import { getEnv, getSnapshot, getType, types } from "mobx-state-tree"; import { observer } from "mobx-react"; import { Tool } from "../components/Toolbar/Tool"; import { kebabCase } from "@humansignal/core/lib/utils/string"; const ToolView = observer(({ item }) => { return ( <Tool ariaLabel={kebabCase(getType(item).name)} active={item.selected} icon={item.iconClass} label={item.viewTooltip} shortcut={item.shortcut} extraShortcuts={item.extraShortcuts} tool={item} onClick={() => { item.manager.selectTool(item, true); }} /> ); }); const BaseTool = types .model("BaseTool", { smart: false, unselectRegionOnToolChange: false, removeDuplicatesNamed: types.maybeNull(types.string), }) .volatile(() => ({ dynamic: false, index: 1, canInteractWithRegions: true, })) .views((self) => { return { get toolName() { return getType(self).name; }, get isSeparated() { return self.control.isSeparated; }, get viewClass() { return () => (self.shouldRenderView ? <ToolView item={self} /> : null); }, get viewTooltip() { return null; }, get controls() { return null; }, get shouldRenderView() { return (self.isSeparated || self.smartEnabled) && self.iconClass; }, get iconClass() { if (self.iconComponent) { const Icon = self.iconComponent; return <Icon />; } return null; }, get iconComponent() { return null; }, get smartEnabled() { return self.control?.smartEnabled ?? false; }, }; }) .actions((self) => { return { afterCreate() { if (self.smart && self.control?.smart) { const currentEnv = getEnv(self); const toolType = getType(self); const snapshot = { ...getSnapshot(self), smart: false, default: false, }; const env = { ...currentEnv, }; const smartCopy = toolType.create(snapshot, env); smartCopy.makeDynamic(); getEnv(self).manager.addTool(`${toolType.name}-smart`, smartCopy, self.control.removeDuplicatesNamed); } }, makeDynamic() { self.dynamic = true; }, }; }); export const MIN_SIZE = { X: 3, Y: 3 }; export const DEFAULT_DIMENSIONS = { rect: { width: 30, height: 30 }, ellipse: { radius: 30 }, polygon: { length: 30 }, vector: { length: 30 }, }; export default BaseTool;