diff --git a/src/utils/tldraw/cc-base/cc-graph/CCJournalNodeShapeUtil.tsx b/src/utils/tldraw/cc-base/cc-graph/CCJournalNodeShapeUtil.tsx new file mode 100644 index 0000000..a5aa92a --- /dev/null +++ b/src/utils/tldraw/cc-base/cc-graph/CCJournalNodeShapeUtil.tsx @@ -0,0 +1,36 @@ +import { CCBaseShapeUtil } from '../CCBaseShapeUtil' +import { CCBaseShape } from '../cc-types' +import { ccGraphShapeProps, getDefaultCCJournalNodeProps } from './cc-graph-props' +import { getNodeStyles, NODE_THEMES, NODE_TYPE_THEMES } from './cc-graph-styles' +import { CCJournalNodeProps } from './cc-graph-types' + +export interface CCJournalNodeShape extends CCBaseShape { + type: 'cc-journal-node' + props: CCJournalNodeProps +} + +export class CCJournalNodeShapeUtil extends CCBaseShapeUtil { + static type = 'cc-journal-node' as const + static props = ccGraphShapeProps['cc-journal-node'] + + getDefaultProps(): CCJournalNodeShape['props'] { + const defaultProps = getDefaultCCJournalNodeProps() + const theme = NODE_THEMES[NODE_TYPE_THEMES[CCJournalNodeShapeUtil.type]] ?? NODE_THEMES.resource + return { + ...defaultProps, + headerColor: theme.headerColor, + } + } + + DefaultComponent = () => null + + renderContent = (shape: CCJournalNodeShape) => { + const styles = getNodeStyles(shape.type) + return ( +
+
Journal
+
Personal teaching journal
+
+ ) + } +} diff --git a/src/utils/tldraw/cc-base/cc-graph/CCPlannerNodeShapeUtil.tsx b/src/utils/tldraw/cc-base/cc-graph/CCPlannerNodeShapeUtil.tsx new file mode 100644 index 0000000..9fea6be --- /dev/null +++ b/src/utils/tldraw/cc-base/cc-graph/CCPlannerNodeShapeUtil.tsx @@ -0,0 +1,36 @@ +import { CCBaseShapeUtil } from '../CCBaseShapeUtil' +import { CCBaseShape } from '../cc-types' +import { ccGraphShapeProps, getDefaultCCPlannerNodeProps } from './cc-graph-props' +import { getNodeStyles, NODE_THEMES, NODE_TYPE_THEMES } from './cc-graph-styles' +import { CCPlannerNodeProps } from './cc-graph-types' + +export interface CCPlannerNodeShape extends CCBaseShape { + type: 'cc-planner-node' + props: CCPlannerNodeProps +} + +export class CCPlannerNodeShapeUtil extends CCBaseShapeUtil { + static type = 'cc-planner-node' as const + static props = ccGraphShapeProps['cc-planner-node'] + + getDefaultProps(): CCPlannerNodeShape['props'] { + const defaultProps = getDefaultCCPlannerNodeProps() + const theme = NODE_THEMES[NODE_TYPE_THEMES[CCPlannerNodeShapeUtil.type]] ?? NODE_THEMES.resource + return { + ...defaultProps, + headerColor: theme.headerColor, + } + } + + DefaultComponent = () => null + + renderContent = (shape: CCPlannerNodeShape) => { + const styles = getNodeStyles(shape.type) + return ( +
+
Planner
+
Lesson and weekly planner
+
+ ) + } +} diff --git a/src/utils/tldraw/cc-base/cc-graph/cc-graph-props.ts b/src/utils/tldraw/cc-base/cc-graph/cc-graph-props.ts index 6cb7689..a413a02 100644 --- a/src/utils/tldraw/cc-base/cc-graph/cc-graph-props.ts +++ b/src/utils/tldraw/cc-base/cc-graph/cc-graph-props.ts @@ -272,6 +272,14 @@ export const ccGraphShapeProps = { school_db_name: T.string, school_period_id: T.string, }, + 'cc-journal-node': { + ...graphBaseProps, + path: T.string, + }, + 'cc-planner-node': { + ...graphBaseProps, + path: T.string, + }, } as const // Default props getters @@ -640,3 +648,17 @@ export const getDefaultCCUserTeacherTimetableNodeProps = () => ({ school_db_name: '', school_timetable_id: '', }) + +export const getDefaultCCJournalNodeProps = () => ({ + ...getDefaultBaseProps(), + title: 'Journal', + __primarylabel__: 'Journal', + path: '', +}) + +export const getDefaultCCPlannerNodeProps = () => ({ + ...getDefaultBaseProps(), + title: 'Planner', + __primarylabel__: 'Planner', + path: '', +}) \ No newline at end of file diff --git a/src/utils/tldraw/cc-base/cc-graph/cc-graph-styles.ts b/src/utils/tldraw/cc-base/cc-graph/cc-graph-styles.ts index 7244fd8..6a65ca2 100644 --- a/src/utils/tldraw/cc-base/cc-graph/cc-graph-styles.ts +++ b/src/utils/tldraw/cc-base/cc-graph/cc-graph-styles.ts @@ -148,12 +148,18 @@ export const NODE_TYPE_THEMES: Record = { 'cc-department-node': 'resource', 'cc-room-node': 'resource', 'cc-subject-class-node': 'resource', + // Timetable nodes (missing from original map) + 'cc-teacher-timetable-node': 'academic', + 'cc-department-structure-node': 'resource', + // Personal nodes + 'cc-journal-node': 'calendar', + 'cc-planner-node': 'calendar', } as const // Helper function to get theme for a node type export const getNodeTheme = (nodeType: string) => { const themeKey = NODE_TYPE_THEMES[nodeType] - return themeKey ? NODE_THEMES[themeKey] : NODE_THEMES.resource // Default to resource theme + return (themeKey ? NODE_THEMES[themeKey] : null) ?? NODE_THEMES.resource } // Helper function to get theme from primary label diff --git a/src/utils/tldraw/cc-base/cc-graph/cc-graph-types.ts b/src/utils/tldraw/cc-base/cc-graph/cc-graph-types.ts index bd67ca8..43cef6a 100644 --- a/src/utils/tldraw/cc-base/cc-graph/cc-graph-types.ts +++ b/src/utils/tldraw/cc-base/cc-graph/cc-graph-types.ts @@ -279,6 +279,14 @@ export type CCTimetableLessonNodeProps = CCGraphShapeProps & { } // Define a type-safe mapping of node types to their configurations +export type CCJournalNodeProps = CCGraphShapeProps & { + path: string +} + +export type CCPlannerNodeProps = CCGraphShapeProps & { + path: string +} + export type CCNodeTypes = { User: { props: CCUserNodeProps } Developer: { props: CCUserNodeProps } @@ -316,6 +324,8 @@ export type CCNodeTypes = { DepartmentStructure: { props: CCDepartmentStructureNodeProps } UserTeacherTimetable: { props: CCUserTeacherTimetableNodeProps } UserTimetableLesson: { props: CCTimetableLessonNodeProps } + Journal: { props: CCJournalNodeProps } + Planner: { props: CCPlannerNodeProps } } // Helper function to get shape type from node type @@ -376,5 +386,7 @@ export const isValidNodeType = (type: string): type is keyof CCNodeTypes => { DepartmentStructure: true, UserTeacherTimetable: true, UserTimetableLesson: true, + Journal: true, + Planner: true, }; } \ No newline at end of file diff --git a/src/utils/tldraw/shapes.ts b/src/utils/tldraw/shapes.ts index 1cc0169..12afcec 100644 --- a/src/utils/tldraw/shapes.ts +++ b/src/utils/tldraw/shapes.ts @@ -43,6 +43,8 @@ import { CCDepartmentStructureNodeShapeUtil } from './cc-base/cc-graph/CCDepartm import { CCUserTeacherTimetableNodeShapeUtil } from './cc-base/cc-graph/CCUserTeacherTimetableNodeShapeUtil' import { CCSearchShapeUtil } from './cc-base/cc-search/CCSearchShapeUtil' import { CCWebBrowserShapeUtil } from './cc-base/cc-web-browser/CCWebBrowserUtil' +import { CCJournalNodeShapeUtil } from './cc-base/cc-graph/CCJournalNodeShapeUtil' +import { CCPlannerNodeShapeUtil } from './cc-base/cc-graph/CCPlannerNodeShapeUtil' // Define all shape utils in a single object for easy maintenance export const ShapeUtils = { CCSlideShow: CCSlideShowShapeUtil, @@ -89,6 +91,8 @@ export const ShapeUtils = { CCUserTeacherTimetableNode: CCUserTeacherTimetableNodeShapeUtil, CCSearch: CCSearchShapeUtil, CCWebBrowser: CCWebBrowserShapeUtil, + CCJournalNode: CCJournalNodeShapeUtil, + CCPlannerNode: CCPlannerNodeShapeUtil, } export const allShapeUtils = Object.values(ShapeUtils) \ No newline at end of file diff --git a/src/utils/tldraw/ui-overrides/components/shared/navigation/CCGraphNavPanel.tsx b/src/utils/tldraw/ui-overrides/components/shared/navigation/CCGraphNavPanel.tsx index e9bc327..06bc82a 100644 --- a/src/utils/tldraw/ui-overrides/components/shared/navigation/CCGraphNavPanel.tsx +++ b/src/utils/tldraw/ui-overrides/components/shared/navigation/CCGraphNavPanel.tsx @@ -137,7 +137,6 @@ function TreeItem({ node, depth, onSelect, onExpand }: TreeItemProps) { const canExpand = node.has_children !== false && node.node_type !== 'CalendarDay' - && node.node_type !== 'AcademicWeek' && node.status !== 'empty' && node.status !== 'no_school' && node.status !== 'not_initialized';