import React from 'react'; import { AllNodeShapes } from './graph-shape-types'; interface NodeComponentProps { shape: T; theme: any; } interface BaseNodeProps { __primarylabel__: string; unique_id: string; } interface TeacherNodeProps extends BaseNodeProps { teacher_name_formal: string; teacher_code: string; teacher_email: string; worker_db_name: string; } interface StudentNodeProps extends BaseNodeProps { student_name_formal: string; student_code: string; student_email: string; worker_db_name: string; } interface UserNodeProps extends BaseNodeProps { user_name: string; user_email: string; user_type: string; } interface CalendarNodeProps extends BaseNodeProps { name: string; start_date: string; end_date: string; } interface CalendarNodeProps extends BaseNodeProps { name: string; start_date: string; end_date: string; } interface CalendarYearNodeProps extends BaseNodeProps { year: string; } interface CalendarMonthNodeProps extends BaseNodeProps { month_name: string; year: string; } interface CalendarWeekNodeProps extends BaseNodeProps { start_date: string; iso_week: string; } interface CalendarDayNodeProps extends BaseNodeProps { day_of_week: string; date: string; } interface CalendarTimeChunkNodeProps extends BaseNodeProps { start_time: string; end_time: string; } interface CalendarTimeChunkNodeProps extends BaseNodeProps { start_time: string; end_time: string; } interface SchoolNodeProps extends BaseNodeProps { school_name: string; school_website: string; } interface DepartmentNodeProps extends BaseNodeProps { department_name: string; } interface RoomNodeProps extends BaseNodeProps { room_name: string; room_code: string; } interface SubjectClassNodeProps extends BaseNodeProps { subject_class_code: string; year_group: string; subject: string; } interface PastoralStructureNodeProps extends BaseNodeProps { } interface YearGroupNodeProps extends BaseNodeProps { year_group: string; } interface CurriculumStructureNodeProps extends BaseNodeProps { } interface KeyStageNodeProps extends BaseNodeProps { key_stage: string; } interface KeyStageSyllabusNodeProps extends BaseNodeProps { ks_syllabus_id: string; ks_syllabus_subject: string; } interface YearGroupSyllabusNodeProps extends BaseNodeProps { yr_syllabus_id: string; yr_syllabus_subject: string; } interface SubjectNodeProps extends BaseNodeProps { subject_name: string; subject_code: string; } interface TopicNodeProps extends BaseNodeProps { topic_title: string; topic_id: string; total_number_of_lessons_for_topic: string; topic_type: string; topic_assessment_type: string; } interface TopicLessonNodeProps extends BaseNodeProps { topic_lesson_title: string; topic_lesson_id: string; topic_lesson_type: string; topic_lesson_length: string; topic_lesson_suggested_activities: string; topic_lesson_skills_learned: string; topic_lesson_weblinks: string; } interface LearningStatementNodeProps extends BaseNodeProps { lesson_learning_statement: string; lesson_learning_statement_id: string; lesson_learning_statement_type: string; } interface ScienceLabNodeProps extends BaseNodeProps { science_lab_title: string; science_lab_id: string; science_lab_summary: string; science_lab_requirements: string; science_lab_procedure: string; science_lab_safety: string; science_lab_weblinks: string; } interface SchoolTimetableNodeProps extends BaseNodeProps { start_date: string; end_date: string; } interface AcademicYearNodeProps extends BaseNodeProps { year: string; } interface AcademicTermNodeProps extends BaseNodeProps { term_name: string; term_number: string; start_date: string; end_date: string; } interface AcademicWeekNodeProps extends BaseNodeProps { start_date: string; week_type: string; academic_week_number: string; } interface AcademicDayNodeProps extends BaseNodeProps { day_of_week: string; day_type: string; date: string; } interface AcademicPeriodNodeProps extends BaseNodeProps { name: string; date: string; start_time: string; end_time: string; period_code: string; } interface RegistrationPeriodNodeProps extends BaseNodeProps { name: string; date: string; start_time: string; end_time: string; period_code: string; } interface TeacherTimetableNodeProps extends BaseNodeProps { } interface TimetableLessonNodeProps extends BaseNodeProps { subject_class: string; date: string; period_code: string; } interface PlannedLessonNodeProps extends BaseNodeProps { subject_class: string; date: string; period_code: string; planning_status: string; teacher_code: string; year_group: string; subject: string; } const DefaultNodeComponent: React.FC = ({ shape, theme }) => ( <>
{(shape.props.__primarylabel__).toUpperCase()}
); // Users const UserNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as UserNodeProps; return ( <>
User Name: {props.user_name}
User Email: {props.user_email}
); }; const DeveloperNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as UserNodeProps; return ( <>
User Name: {props.user_name}
Use Email: {props.user_email}
); }; const TeacherNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as TeacherNodeProps; return ( <>
Teacher Name: {props.teacher_name_formal}
Teacher Code: {props.teacher_code}
Email: {props.teacher_email}
); }; const StudentNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as StudentNodeProps; return ( <>
Student Name: {props.student_name_formal}
Student Code: {props.student_code}
Email: {props.student_email}
); }; // Calendar const CalendarNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as CalendarNodeProps; return ( <>
Calendar Name: {props.name}
Start Date: {props.start_date}
End Date: {props.end_date}
); }; const CalendarYearNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as CalendarYearNodeProps; return ( <>
Year: {props.year}
); }; const CalendarMonthNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as CalendarMonthNodeProps; return ( <>
Month: {props.month_name}
Year: {props.year}
); }; const CalendarWeekNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as CalendarWeekNodeProps; return ( <>
Week Start Date: {props.start_date}
ISO Week: {props.iso_week}
); }; const CalendarDayNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as CalendarDayNodeProps; return ( <>
Day of Week: {props.day_of_week}
Date: {props.date}
); }; const CalendarTimeChunkNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as CalendarTimeChunkNodeProps; return ( <>
Start Time: {props.start_time}
End Time: {props.end_time}
); }; // Schools const SchoolNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as SchoolNodeProps; return ( <>
School Name: {props.school_name}
School Website: {props.school_website}
); }; const DepartmentNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as DepartmentNodeProps; return ( <>
Department Name: {props.department_name}
); }; const RoomNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as RoomNodeProps; return ( <>
Room Name: {props.room_name}
Room Code: {props.room_code}
); }; const SubjectClassNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as SubjectClassNodeProps; return ( <>
Subject Class: {props.subject_class_code}
Year Group: {props.year_group}
Subject: {props.subject}
); }; // Curriculum const PastoralStructureNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as PastoralStructureNodeProps; return ( <> ); }; const YearGroupNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as YearGroupNodeProps; return ( <>
Year Group: {props.year_group}
); }; const CurriculumStructureNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as CurriculumStructureNodeProps; return ( <> ); }; const KeyStageNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as KeyStageNodeProps; return ( <>
Key Stage: {props.key_stage}
); }; const KeyStageSyllabusNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as KeyStageSyllabusNodeProps; return ( <>
Syllabus ID: {props.ks_syllabus_id}
Subject: {props.ks_syllabus_subject}
); }; const YearGroupSyllabusNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as YearGroupSyllabusNodeProps; return ( <>
Syllabus ID: {props.yr_syllabus_id}
Subject: {props.yr_syllabus_subject}
); }; const SubjectNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as SubjectNodeProps; return ( <>
Subject: {props.subject_name}
Code: {props.subject_code}
); }; const TopicNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as TopicNodeProps; return ( <>
Title: {props.topic_title}
ID: {props.topic_id}
Lessons: {props.total_number_of_lessons_for_topic}
Type: {props.topic_type}
Assessment Type: {props.topic_assessment_type}
); }; const TopicLessonNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as TopicLessonNodeProps; return ( <>
Title: {props.topic_lesson_title}
ID: {props.topic_lesson_id}
Type: {props.topic_lesson_type}
Length: {props.topic_lesson_length}
Suggested Activities: {props.topic_lesson_suggested_activities}
Skills Learned: {props.topic_lesson_skills_learned}
Web Links: {props.topic_lesson_weblinks}
); }; const LearningStatementNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as LearningStatementNodeProps; return ( <>
Learning Statement: {props.lesson_learning_statement}
ID: {props.lesson_learning_statement_id}
Type: {props.lesson_learning_statement_type}
); }; const ScienceLabNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as ScienceLabNodeProps; return ( <>
Title: {props.science_lab_title}
ID: {props.science_lab_id}
Summary: {props.science_lab_summary}
Requirements: {props.science_lab_requirements}
Procedure: {props.science_lab_procedure}
Safety: {props.science_lab_safety}
Web Links: {props.science_lab_weblinks}
); }; // School Timetable const SchoolTimetableNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as SchoolTimetableNodeProps; return ( <>
Start Date: {props.start_date}
End Date: {props.end_date}
); }; const AcademicYearNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as AcademicYearNodeProps; return ( <>
Year: {props.year}
); }; const AcademicTermNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as AcademicTermNodeProps; return ( <>
Term Name: {props.term_name}
Term Number: {props.term_number}
Start Date: {props.start_date}
End Date: {props.end_date}
); }; const AcademicWeekNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as AcademicWeekNodeProps; return ( <>
Start Date: {props.start_date}
Week Type: {props.week_type}
Academic Week Number: {props.academic_week_number}
); }; const AcademicDayNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as AcademicDayNodeProps; return ( <>
Day of Week: {props.day_of_week}
Day Type: {props.day_type}
Date: {props.date}
); }; const AcademicPeriodNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as AcademicPeriodNodeProps; return ( <>
Name: {props.name}
Date: {props.date}
Start Time: {props.start_time}
End Time: {props.end_time}
Period Code: {props.period_code}
); }; const RegistrationPeriodNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as RegistrationPeriodNodeProps; return ( <>
Name: {props.name}
Date: {props.date}
Start Time: {props.start_time}
End Time: {props.end_time}
Period Code: {props.period_code}
); }; // Teacher Timetable const TeacherTimetableNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as TeacherTimetableNodeProps; return ( <> ); }; const TimetableLessonNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as TimetableLessonNodeProps; return ( <>
Subject Class: {props.subject_class}
Date: {props.date}
Period Code: {props.period_code}
); }; const PlannedLessonNodeComponent: React.FC = ({ shape, theme }) => { const props = shape.props as PlannedLessonNodeProps; return ( <>
Subject Class: {props.subject_class}
Year Group: {props.year_group}
Subject: {props.subject}
Teacher Code: {props.teacher_code}
Planning Status: {props.planning_status}
); }; const nodeComponents: { [key: string]: React.FC } = { user_node: UserNodeComponent, teacher_node: TeacherNodeComponent, student_node: StudentNodeComponent, timetable_lesson_node: TimetableLessonNodeComponent, developer_node: DeveloperNodeComponent, school_node: SchoolNodeComponent, department_node: DepartmentNodeComponent, planned_lesson_node: PlannedLessonNodeComponent, registration_period_node: RegistrationPeriodNodeComponent, teacher_timetable_node: TeacherTimetableNodeComponent, academic_year_node: AcademicYearNodeComponent, academic_term_node: AcademicTermNodeComponent, academic_week_node: AcademicWeekNodeComponent, academic_day_node: AcademicDayNodeComponent, academic_period_node: AcademicPeriodNodeComponent, key_stage_node: KeyStageNodeComponent, key_stage_syllabus_node: KeyStageSyllabusNodeComponent, year_group_syllabus_node: YearGroupSyllabusNodeComponent, subject_node: SubjectNodeComponent, topic_node: TopicNodeComponent, topic_lesson_node: TopicLessonNodeComponent, learning_statement_node: LearningStatementNodeComponent, science_lab_node: ScienceLabNodeComponent, school_timetable_node: SchoolTimetableNodeComponent, calendar_node: CalendarNodeComponent, calendar_year_node: CalendarYearNodeComponent, calendar_month_node: CalendarMonthNodeComponent, calendar_week_node: CalendarWeekNodeComponent, calendar_day_node: CalendarDayNodeComponent, calendar_time_chunk_node: CalendarTimeChunkNodeComponent, year_group_node: YearGroupNodeComponent, pastoral_structure_node: PastoralStructureNodeComponent, curriculum_structure_node: CurriculumStructureNodeComponent, room_node: RoomNodeComponent, subject_class_node: SubjectClassNodeComponent, }; export const getNodeComponent = (shape: AllNodeShapes, theme: any) => { const Component = nodeComponents[shape.type] || DefaultNodeComponent; return ; };