app/src/types/nodes.ts
2025-07-11 13:21:49 +00:00

63 lines
1.5 KiB
TypeScript

import { CCNodeTypes } from '../utils/tldraw/cc-base/cc-graph/cc-graph-types';
import { NavigationNode } from './navigation';
// Node Type Groups
export type CalendarNodeType =
| 'Calendar'
| 'CalendarYear'
| 'CalendarMonth'
| 'CalendarWeek'
| 'CalendarDay';
export type WorkerNodeType =
| 'Teacher'
| 'UserTeacherTimetable'
| 'UserTimetableLesson';
// Node Types
export type CalendarNode = NavigationNode & {
type: CalendarNodeType;
data: CCNodeTypes[CalendarNodeType]['props'];
};
export type WorkerNode = NavigationNode & {
type: WorkerNodeType;
data: CCNodeTypes[WorkerNodeType]['props'];
};
// Type Guards
export const isCalendarNodeType = (type: string): type is CalendarNodeType => {
return [
'Calendar',
'CalendarYear',
'CalendarMonth',
'CalendarWeek',
'CalendarDay'
].includes(type);
};
export const isWorkerNodeType = (type: string): type is WorkerNodeType => {
return [
'Teacher',
'UserTeacherTimetable',
'UserTimetableLesson'
].includes(type);
};
export const isCalendarNode = (node: NavigationNode): node is CalendarNode => {
return isCalendarNodeType(node.type);
};
export const isWorkerNode = (node: NavigationNode): node is WorkerNode => {
return isWorkerNodeType(node.type);
};
// Backend Response Types
export interface ConnectedNodesResponse {
calendar?: CCNodeTypes['Calendar']['props'];
teacher?: CCNodeTypes['Teacher']['props'];
}
export interface UserNodesResponse {
connectedNodes: ConnectedNodesResponse;
}