63 lines
1.5 KiB
TypeScript
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;
|
|
}
|