82 lines
2.2 KiB
TypeScript
82 lines
2.2 KiB
TypeScript
import { Editor, createShapeId, TLShapeId, IndexKey } from '@tldraw/tldraw'
|
|
import { ccGraphShapeProps, getDefaultCCUserNodeProps } from '../cc-graph/cc-graph-props'
|
|
import { NODE_THEMES, NODE_TYPE_THEMES } from '../cc-graph/cc-graph-styles'
|
|
import { GraphShapeType, CCUserNodeProps } from '../cc-graph/cc-graph-types'
|
|
import { logger } from '../../../../debugConfig'
|
|
|
|
// Create a graph shape on the canvas
|
|
export const createGraphShape = (
|
|
editor: Editor,
|
|
shapeType: GraphShapeType,
|
|
point = { x: 0, y: 0 }
|
|
) => {
|
|
if (!ccGraphShapeProps || !ccGraphShapeProps[shapeType]) {
|
|
console.warn(`Invalid shape type: ${shapeType}`);
|
|
return;
|
|
}
|
|
|
|
editor.createShape({
|
|
id: createShapeId(),
|
|
type: shapeType,
|
|
x: point.x,
|
|
y: point.y,
|
|
});
|
|
}
|
|
|
|
export const createUserNodeFromProfile = (
|
|
editor: Editor,
|
|
userNode: CCUserNodeProps,
|
|
x: number = 0,
|
|
y: number = 0
|
|
): TLShapeId | null => {
|
|
try {
|
|
if (!userNode) {
|
|
logger.error('graph-shape-user', '❌ Cannot create user node - no user data')
|
|
return null
|
|
}
|
|
|
|
const id = createShapeId()
|
|
const theme = NODE_THEMES[NODE_TYPE_THEMES['cc-user-node']]
|
|
editor.createShape({
|
|
id,
|
|
type: 'cc-user-node' as const,
|
|
x,
|
|
y,
|
|
rotation: 0,
|
|
index: 'a1' as IndexKey,
|
|
isLocked: false,
|
|
opacity: 1,
|
|
props: {
|
|
...getDefaultCCUserNodeProps(),
|
|
headerColor: theme.headerColor,
|
|
title: userNode.user_email,
|
|
uuid_string: userNode.uuid_string,
|
|
user_name: userNode.user_name,
|
|
user_email: userNode.user_email,
|
|
user_type: userNode.user_type,
|
|
user_id: userNode.user_id,
|
|
node_storage_path: userNode.node_storage_path,
|
|
worker_node_data: userNode.worker_node_data,
|
|
state: {
|
|
parentId: null,
|
|
isPageChild: true,
|
|
hasChildren: null,
|
|
bindings: null
|
|
},
|
|
defaultComponent: true
|
|
}
|
|
})
|
|
|
|
logger.debug('graph-shape-user', '🔄 Creating user node', {
|
|
userId: userNode.user_id,
|
|
email: userNode.user_email,
|
|
type: userNode.user_type
|
|
})
|
|
|
|
return id
|
|
} catch (error) {
|
|
logger.error('graph-shape-user', '❌ Failed to create user node', error)
|
|
return null
|
|
}
|
|
}
|