Initial commit
This commit is contained in:
@@ -0,0 +1,657 @@
|
||||
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,
|
||||
unique_id: T.string,
|
||||
tldraw_snapshot: 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,
|
||||
school_uuid: T.string,
|
||||
school_name: T.string,
|
||||
school_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,
|
||||
},
|
||||
} 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,
|
||||
unique_id: '' as string,
|
||||
tldraw_snapshot: '' 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',
|
||||
school_uuid: '',
|
||||
school_name: '',
|
||||
school_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: '',
|
||||
})
|
||||
|
||||
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 getDefaultCCUserTimetableLessonNodeProps = () => ({
|
||||
...getDefaultBaseProps(),
|
||||
title: 'User Timetable Lesson',
|
||||
__primarylabel__: 'UserTimetableLesson',
|
||||
subject_class: '',
|
||||
date: '',
|
||||
start_time: '',
|
||||
end_time: '',
|
||||
period_code: '',
|
||||
school_db_name: '',
|
||||
school_period_id: '',
|
||||
})
|
||||
Reference in New Issue
Block a user