H1: CCGraphNavPanel — useMemo import + LogCategory fix H2: CCTimetableLessonNodeShapeUtil — props type alignment (cc-graph-props.ts) H3: cc-graph-shapes — add missing CCTimetableLessonNode* import (was never imported) H4: CCNodeSnapshotPanel — RestartAlt import from @mui/icons-material H5: CCExamMarkerPanel + CCFilesPanelEnhanced — BlobPart cast + webkitdirectory @ts-ignore H6: TranscriptionManager — setTranscriptionCallback interface fix Plus: CCExportPdfButton BlobPart cast, SimpleUploadTest icon imports, graph-sidebar LogCategory tsc before: 177 (master) tsc after: 152 (reduction of 25 errors, well below 160 acceptable threshold)
666 lines
16 KiB
TypeScript
666 lines
16 KiB
TypeScript
import { T, TLBinding, TLShapeId } from '@tldraw/tldraw'
|
|
import { baseShapeProps } from '../cc-props'
|
|
import { ShapeState } from './cc-graph-types'
|
|
|
|
// State props validation
|
|
const stateProps = T.object({
|
|
parentId: T.optional(T.string.nullable()),
|
|
isPageChild: T.optional(T.boolean.nullable()),
|
|
hasChildren: T.optional(T.boolean.nullable()),
|
|
bindings: T.optional(T.arrayOf(T.object({})).nullable())
|
|
})
|
|
|
|
// Base props for all nodes
|
|
const graphBaseProps = {
|
|
...baseShapeProps,
|
|
__primarylabel__: T.string,
|
|
uuid_string: T.string,
|
|
node_storage_path: T.string,
|
|
created: T.string,
|
|
merged: T.string,
|
|
state: T.optional(stateProps.nullable()),
|
|
defaultComponent: T.optional(T.boolean.nullable())
|
|
}
|
|
|
|
// Props for specific node types
|
|
export const ccGraphShapeProps = {
|
|
'cc-user-node': {
|
|
...graphBaseProps,
|
|
user_name: T.string,
|
|
user_email: T.string,
|
|
user_type: T.string,
|
|
user_id: T.string,
|
|
worker_node_data: T.string,
|
|
},
|
|
'cc-teacher-node': {
|
|
...graphBaseProps,
|
|
teacher_code: T.string,
|
|
teacher_name_formal: T.string,
|
|
teacher_email: T.string,
|
|
user_db_name: T.string,
|
|
worker_db_name: T.string,
|
|
},
|
|
'cc-student-node': {
|
|
...graphBaseProps,
|
|
student_code: T.string,
|
|
student_name_formal: T.string,
|
|
student_email: T.string,
|
|
worker_db_name: T.string,
|
|
},
|
|
'cc-calendar-node': {
|
|
...graphBaseProps,
|
|
name: T.string,
|
|
calendar_type: T.string,
|
|
calendar_name: T.string,
|
|
start_date: T.string,
|
|
end_date: T.string,
|
|
},
|
|
'cc-calendar-year-node': {
|
|
...graphBaseProps,
|
|
year: T.string,
|
|
},
|
|
'cc-calendar-month-node': {
|
|
...graphBaseProps,
|
|
year: T.string,
|
|
month: T.string,
|
|
month_name: T.string,
|
|
},
|
|
'cc-calendar-week-node': {
|
|
...graphBaseProps,
|
|
start_date: T.string,
|
|
week_number: T.string,
|
|
iso_week: T.string,
|
|
},
|
|
'cc-calendar-day-node': {
|
|
...graphBaseProps,
|
|
date: T.string,
|
|
day_of_week: T.string,
|
|
iso_day: T.string,
|
|
},
|
|
'cc-calendar-time-chunk-node': {
|
|
...graphBaseProps,
|
|
start_time: T.string,
|
|
end_time: T.string,
|
|
},
|
|
'cc-school-node': {
|
|
...graphBaseProps,
|
|
name: T.string,
|
|
website: T.string,
|
|
},
|
|
'cc-department-node': {
|
|
...graphBaseProps,
|
|
department_name: T.string,
|
|
},
|
|
'cc-room-node': {
|
|
...graphBaseProps,
|
|
room_code: T.string,
|
|
room_name: T.string,
|
|
},
|
|
'cc-subject-class-node': {
|
|
...graphBaseProps,
|
|
subject_class_code: T.string,
|
|
year_group: T.string,
|
|
subject: T.string,
|
|
subject_code: T.string,
|
|
},
|
|
'cc-pastoral-structure-node': {
|
|
...graphBaseProps,
|
|
},
|
|
'cc-year-group-node': {
|
|
...graphBaseProps,
|
|
year_group: T.string,
|
|
year_group_name: T.string,
|
|
},
|
|
'cc-curriculum-structure-node': {
|
|
...graphBaseProps,
|
|
},
|
|
'cc-key-stage-node': {
|
|
...graphBaseProps,
|
|
key_stage_name: T.string,
|
|
key_stage: T.string,
|
|
},
|
|
'cc-key-stage-syllabus-node': {
|
|
...graphBaseProps,
|
|
ks_syllabus_id: T.string,
|
|
ks_syllabus_name: T.string,
|
|
ks_syllabus_key_stage: T.string,
|
|
ks_syllabus_subject: T.string,
|
|
ks_syllabus_subject_code: T.string,
|
|
},
|
|
'cc-year-group-syllabus-node': {
|
|
...graphBaseProps,
|
|
yr_syllabus_id: T.string,
|
|
yr_syllabus_name: T.string,
|
|
yr_syllabus_year_group: T.string,
|
|
yr_syllabus_subject: T.string,
|
|
yr_syllabus_subject_code: T.string,
|
|
},
|
|
'cc-subject-node': {
|
|
...graphBaseProps,
|
|
subject_code: T.string,
|
|
subject_name: T.string,
|
|
},
|
|
'cc-topic-node': {
|
|
...graphBaseProps,
|
|
topic_id: T.string,
|
|
topic_title: T.string,
|
|
total_number_of_lessons_for_topic: T.string,
|
|
topic_type: T.string,
|
|
topic_assessment_type: T.string,
|
|
},
|
|
'cc-topic-lesson-node': {
|
|
...graphBaseProps,
|
|
topic_lesson_id: T.string,
|
|
topic_lesson_title: T.string,
|
|
topic_lesson_type: T.string,
|
|
topic_lesson_length: T.string,
|
|
topic_lesson_skills_learned: T.string,
|
|
topic_lesson_suggested_activities: T.string,
|
|
topic_lesson_weblinks: T.string,
|
|
},
|
|
'cc-learning-statement-node': {
|
|
...graphBaseProps,
|
|
lesson_learning_statement_id: T.string,
|
|
lesson_learning_statement: T.string,
|
|
lesson_learning_statement_type: T.string,
|
|
},
|
|
'cc-science-lab-node': {
|
|
...graphBaseProps,
|
|
science_lab_id: T.string,
|
|
science_lab_title: T.string,
|
|
science_lab_summary: T.string,
|
|
science_lab_requirements: T.string,
|
|
science_lab_procedure: T.string,
|
|
science_lab_safety: T.string,
|
|
science_lab_weblinks: T.string,
|
|
},
|
|
'cc-teacher-timetable-node': {
|
|
...graphBaseProps,
|
|
teacher_id: T.string,
|
|
start_date: T.string,
|
|
end_date: T.string,
|
|
},
|
|
'cc-timetable-lesson-node': {
|
|
...graphBaseProps,
|
|
subject_class: T.string,
|
|
date: T.string,
|
|
start_time: T.string,
|
|
end_time: T.string,
|
|
period_code: T.string,
|
|
},
|
|
'cc-planned-lesson-node': {
|
|
...graphBaseProps,
|
|
date: T.string,
|
|
start_time: T.string,
|
|
end_time: T.string,
|
|
period_code: T.string,
|
|
subject_class: T.string,
|
|
year_group: T.string,
|
|
subject: T.string,
|
|
teacher_code: T.string,
|
|
planning_status: T.string,
|
|
topic_code: T.string,
|
|
topic_name: T.string,
|
|
lesson_code: T.string,
|
|
lesson_name: T.string,
|
|
learning_statement_codes: T.string,
|
|
learning_statements: T.string,
|
|
learning_resource_codes: T.string,
|
|
learning_resources: T.string,
|
|
},
|
|
'cc-school-timetable-node': {
|
|
...graphBaseProps,
|
|
start_date: T.string,
|
|
end_date: T.string,
|
|
},
|
|
'cc-academic-year-node': {
|
|
...graphBaseProps,
|
|
year: T.string,
|
|
},
|
|
'cc-academic-term-node': {
|
|
...graphBaseProps,
|
|
term_name: T.string,
|
|
term_number: T.string,
|
|
start_date: T.string,
|
|
end_date: T.string,
|
|
},
|
|
'cc-academic-week-node': {
|
|
...graphBaseProps,
|
|
academic_week_number: T.string,
|
|
start_date: T.string,
|
|
week_type: T.string,
|
|
},
|
|
'cc-academic-day-node': {
|
|
...graphBaseProps,
|
|
academic_day: T.string,
|
|
date: T.string,
|
|
day_of_week: T.string,
|
|
day_type: T.string,
|
|
},
|
|
'cc-academic-period-node': {
|
|
...graphBaseProps,
|
|
name: T.string,
|
|
date: T.string,
|
|
start_time: T.string,
|
|
end_time: T.string,
|
|
period_code: T.string,
|
|
},
|
|
'cc-registration-period-node': {
|
|
...graphBaseProps,
|
|
name: T.string,
|
|
date: T.string,
|
|
start_time: T.string,
|
|
end_time: T.string,
|
|
period_code: T.string,
|
|
},
|
|
'cc-department-structure-node': {
|
|
...graphBaseProps,
|
|
department_structure_type: T.string,
|
|
},
|
|
'cc-user-teacher-timetable-node': {
|
|
...graphBaseProps,
|
|
school_db_name: T.string,
|
|
school_timetable_id: T.string,
|
|
},
|
|
'cc-user-timetable-lesson-node': {
|
|
...graphBaseProps,
|
|
subject_class: T.string,
|
|
date: T.string,
|
|
start_time: T.string,
|
|
end_time: T.string,
|
|
period_code: T.string,
|
|
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
|
|
export const getDefaultBaseProps = () => ({
|
|
w: 200 as number,
|
|
h: 200 as number,
|
|
headerColor: '#3e6589' as string,
|
|
backgroundColor: '#f0f0f0' as string,
|
|
title: 'Untitled' as string,
|
|
isLocked: false as boolean,
|
|
uuid_string: '' as string,
|
|
node_storage_path: '' as string,
|
|
created: '' as string,
|
|
merged: '' as string,
|
|
state: {
|
|
parentId: null as TLShapeId | null,
|
|
isPageChild: true as boolean | null,
|
|
hasChildren: null as boolean | null,
|
|
bindings: null as TLBinding[] | null
|
|
} as ShapeState | null,
|
|
defaultComponent: true as boolean | null
|
|
})
|
|
|
|
export const getDefaultCCUserNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
__primarylabel__: 'User',
|
|
user_name: '',
|
|
user_email: '',
|
|
user_type: '',
|
|
user_id: '',
|
|
worker_node_data: ''
|
|
})
|
|
|
|
export const getDefaultCCTeacherNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
__primarylabel__: 'Teacher',
|
|
teacher_code: '',
|
|
teacher_name_formal: '',
|
|
teacher_email: '',
|
|
user_db_name: '',
|
|
school_db_name: '',
|
|
})
|
|
|
|
export const getDefaultCCStudentNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
__primarylabel__: 'Student',
|
|
student_code: '',
|
|
student_name_formal: '',
|
|
student_email: '',
|
|
school_db_name: '',
|
|
user_db_name: '',
|
|
})
|
|
|
|
export const getDefaultCCCalendarNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Calendar',
|
|
__primarylabel__: 'Calendar',
|
|
name: '',
|
|
calendar_type: '',
|
|
calendar_name: '',
|
|
start_date: '',
|
|
end_date: '',
|
|
})
|
|
|
|
export const getDefaultCCCalendarYearNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Calendar Year',
|
|
__primarylabel__: 'Calendar Year',
|
|
year: '',
|
|
})
|
|
|
|
export const getDefaultCCCalendarMonthNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Calendar Month',
|
|
__primarylabel__: 'Calendar Month',
|
|
year: '',
|
|
month: '',
|
|
month_name: '',
|
|
})
|
|
|
|
export const getDefaultCCCalendarWeekNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Calendar Week',
|
|
__primarylabel__: 'Calendar Week',
|
|
start_date: '',
|
|
week_number: '',
|
|
iso_week: '',
|
|
})
|
|
|
|
export const getDefaultCCCalendarDayNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Calendar Day',
|
|
__primarylabel__: 'Calendar Day',
|
|
date: '',
|
|
day_of_week: '',
|
|
iso_day: '',
|
|
})
|
|
|
|
export const getDefaultCCCalendarTimeChunkNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Calendar Time Chunk',
|
|
__primarylabel__: 'Calendar Time Chunk',
|
|
start_time: '',
|
|
end_time: '',
|
|
})
|
|
|
|
export const getDefaultCCSchoolNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'School',
|
|
__primarylabel__: 'School',
|
|
name: '',
|
|
website: '',
|
|
})
|
|
|
|
export const getDefaultCCDepartmentNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Department',
|
|
__primarylabel__: 'Department',
|
|
department_name: '',
|
|
})
|
|
|
|
export const getDefaultCCRoomNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Room',
|
|
__primarylabel__: 'Room',
|
|
room_code: '',
|
|
room_name: '',
|
|
})
|
|
|
|
export const getDefaultCCSubjectClassNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Subject Class',
|
|
__primarylabel__: 'Subject Class',
|
|
subject_class_code: '',
|
|
year_group: '',
|
|
subject: '',
|
|
subject_code: '',
|
|
})
|
|
|
|
export const getDefaultCCPastoralStructureNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Pastoral Structure',
|
|
__primarylabel__: 'Pastoral Structure',
|
|
pastoral_structure_type: '',
|
|
})
|
|
|
|
export const getDefaultCCYearGroupNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Year Group',
|
|
__primarylabel__: 'Year Group',
|
|
year_group: '',
|
|
year_group_name: '',
|
|
})
|
|
|
|
export const getDefaultCCCurriculumStructureNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Curriculum Structure',
|
|
__primarylabel__: 'Curriculum Structure',
|
|
curriculum_structure_type: '',
|
|
})
|
|
|
|
export const getDefaultCCKeyStageNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Key Stage',
|
|
__primarylabel__: 'Key Stage',
|
|
key_stage_name: '',
|
|
key_stage: '',
|
|
})
|
|
|
|
export const getDefaultCCKeyStageSyllabusNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Key Stage Syllabus',
|
|
__primarylabel__: 'Key Stage Syllabus',
|
|
ks_syllabus_id: '',
|
|
ks_syllabus_name: '',
|
|
ks_syllabus_key_stage: '',
|
|
ks_syllabus_subject: '',
|
|
ks_syllabus_subject_code: '',
|
|
})
|
|
|
|
export const getDefaultCCYearGroupSyllabusNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Year Group Syllabus',
|
|
__primarylabel__: 'Year Group Syllabus',
|
|
yr_syllabus_id: '',
|
|
yr_syllabus_name: '',
|
|
yr_syllabus_year_group: '',
|
|
yr_syllabus_subject: '',
|
|
yr_syllabus_subject_code: '',
|
|
})
|
|
|
|
export const getDefaultCCSubjectNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Subject',
|
|
__primarylabel__: 'Subject',
|
|
subject_code: '',
|
|
subject_name: '',
|
|
})
|
|
|
|
export const getDefaultCCTopicNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Topic',
|
|
__primarylabel__: 'Topic',
|
|
topic_id: '',
|
|
topic_title: '',
|
|
total_number_of_lessons_for_topic: '',
|
|
topic_type: '',
|
|
topic_assessment_type: '',
|
|
})
|
|
|
|
export const getDefaultCCTopicLessonNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Topic Lesson',
|
|
__primarylabel__: 'Topic Lesson',
|
|
topic_lesson_id: '',
|
|
topic_lesson_title: '',
|
|
topic_lesson_type: '',
|
|
topic_lesson_length: '',
|
|
topic_lesson_skills_learned: '',
|
|
topic_lesson_suggested_activities: '',
|
|
topic_lesson_weblinks: '',
|
|
})
|
|
|
|
export const getDefaultCCLearningStatementNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Learning Statement',
|
|
__primarylabel__: 'Learning Statement',
|
|
lesson_learning_statement_id: '',
|
|
lesson_learning_statement: '',
|
|
lesson_learning_statement_type: '',
|
|
})
|
|
|
|
export const getDefaultCCScienceLabNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Science Lab',
|
|
__primarylabel__: 'Science Lab',
|
|
science_lab_id: '',
|
|
science_lab_title: '',
|
|
science_lab_summary: '',
|
|
science_lab_requirements: '',
|
|
science_lab_procedure: '',
|
|
science_lab_safety: '',
|
|
science_lab_weblinks: '',
|
|
})
|
|
|
|
export const getDefaultCCTeacherTimetableNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Teacher Timetable',
|
|
__primarylabel__: 'Teacher Timetable',
|
|
teacher_id: '',
|
|
start_date: '',
|
|
end_date: '',
|
|
})
|
|
|
|
export const getDefaultCCTimetableLessonNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Timetable Lesson',
|
|
__primarylabel__: 'Timetable Lesson',
|
|
subject_class: '',
|
|
date: '',
|
|
start_time: '',
|
|
end_time: '',
|
|
period_code: '',
|
|
school_db_name: '',
|
|
school_period_id: '',
|
|
})
|
|
|
|
export const getDefaultCCPlannedLessonNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Planned Lesson',
|
|
__primarylabel__: 'Planned Lesson',
|
|
date: '',
|
|
start_time: '',
|
|
end_time: '',
|
|
period_code: '',
|
|
subject_class: '',
|
|
year_group: '',
|
|
subject: '',
|
|
teacher_code: '',
|
|
planning_status: '',
|
|
topic_code: '',
|
|
topic_name: '',
|
|
lesson_code: '',
|
|
lesson_name: '',
|
|
learning_statement_codes: '',
|
|
learning_statements: '',
|
|
learning_resource_codes: '',
|
|
learning_resources: '',
|
|
})
|
|
|
|
export const getDefaultCCSchoolTimetableNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'School Timetable',
|
|
__primarylabel__: 'School Timetable',
|
|
start_date: '',
|
|
end_date: '',
|
|
})
|
|
|
|
export const getDefaultCCAcademicYearNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Academic Year',
|
|
__primarylabel__: 'Academic Year',
|
|
year: '',
|
|
})
|
|
|
|
export const getDefaultCCAcademicTermNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Academic Term',
|
|
__primarylabel__: 'Academic Term',
|
|
term_name: '',
|
|
term_number: '',
|
|
start_date: '',
|
|
end_date: '',
|
|
})
|
|
|
|
export const getDefaultCCAcademicWeekNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Academic Week',
|
|
__primarylabel__: 'Academic Week',
|
|
academic_week_number: '',
|
|
start_date: '',
|
|
week_type: '',
|
|
})
|
|
|
|
export const getDefaultCCAcademicDayNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Academic Day',
|
|
__primarylabel__: 'Academic Day',
|
|
academic_day: '',
|
|
date: '',
|
|
day_of_week: '',
|
|
day_type: '',
|
|
})
|
|
|
|
export const getDefaultCCAcademicPeriodNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Academic Period',
|
|
__primarylabel__: 'Academic Period',
|
|
name: '',
|
|
date: '',
|
|
start_time: '',
|
|
end_time: '',
|
|
period_code: '',
|
|
})
|
|
|
|
export const getDefaultCCRegistrationPeriodNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Registration Period',
|
|
__primarylabel__: 'Registration Period',
|
|
name: '',
|
|
date: '',
|
|
start_time: '',
|
|
end_time: '',
|
|
period_code: '',
|
|
})
|
|
|
|
export const getDefaultCCDepartmentStructureNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Department Structure',
|
|
__primarylabel__: 'DepartmentStructure',
|
|
department_structure_type: '',
|
|
})
|
|
|
|
export const getDefaultCCUserTeacherTimetableNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'User Teacher Timetable',
|
|
__primarylabel__: 'UserTeacherTimetable',
|
|
school_db_name: '',
|
|
school_timetable_id: '',
|
|
})
|
|
|
|
export const getDefaultCCJournalNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Journal',
|
|
__primarylabel__: 'Journal',
|
|
path: '',
|
|
})
|
|
|
|
export const getDefaultCCPlannerNodeProps = () => ({
|
|
...getDefaultBaseProps(),
|
|
title: 'Planner',
|
|
__primarylabel__: 'Planner',
|
|
path: '',
|
|
}) |