class TimelineState { final TimelineData timeline; final String? selectedItemId; TimelineState({required this.timeline, this.selectedItemId}); factory TimelineState.fromJson(Map json) { return TimelineState( timeline: TimelineData.fromJson(json['timeline'] as Map), selectedItemId: json['selectedItemId'] as String?, ); } } class TimelineData { final String id; final String title; final List groups; TimelineData({required this.id, required this.title, required this.groups}); factory TimelineData.fromJson(Map json) { return TimelineData( id: json['id'] as String, title: json['title'] as String, groups: (json['groups'] as List) .map((g) => TimelineGroupData.fromJson(g as Map)) .toList(), ); } } class TimelineGroupData { final String id; final String title; final int sortOrder; final List items; TimelineGroupData({ required this.id, required this.title, required this.sortOrder, required this.items, }); factory TimelineGroupData.fromJson(Map json) { return TimelineGroupData( id: json['id'] as String, title: json['title'] as String, sortOrder: json['sortOrder'] as int, items: (json['items'] as List) .map((i) => TimelineItemData.fromJson(i as Map)) .toList(), ); } } class TimelineItemData { final String id; final String title; final String? description; final String start; final String? end; TimelineItemData({ required this.id, required this.title, this.description, required this.start, this.end, }); factory TimelineItemData.fromJson(Map json) { return TimelineItemData( id: json['id'] as String, title: json['title'] as String, description: json['description'] as String?, start: json['start'] as String, end: json['end'] as String?, ); } }