From 83aeb5c33088de8c2e2901d141168ca1f1846d80 Mon Sep 17 00:00:00 2001 From: Jimmy Date: Fri, 30 Apr 2021 15:14:46 +0800 Subject: [PATCH] [feat]Add url, background color, text color to events in vertical schedule --- app/services/full_calendar_formatter.rb | 25 ++++++++--- spec/services/full_calendar_formatter_spec.rb | 43 +++++++++++++------ spec/spec_helper.rb | 3 ++ 3 files changed, 52 insertions(+), 19 deletions(-) diff --git a/app/services/full_calendar_formatter.rb b/app/services/full_calendar_formatter.rb index 4deaa126..1452cb59 100644 --- a/app/services/full_calendar_formatter.rb +++ b/app/services/full_calendar_formatter.rb @@ -4,10 +4,15 @@ class FullCalendarFormatter end def self.event_schedules_to_resources(event_schedules) - event_schedules.map { |event_schedule| event_schedule_to_resource(event_schedule) }.to_json + return '[]' if event_schedules.empty? + + conference = event_schedules.first.schedule.program.conference + event_schedules.map { |event_schedule| event_schedule_to_resource(conference, event_schedule) }.to_json end class << self + include FormatHelper + private def room_to_resource(room) @@ -17,13 +22,19 @@ class FullCalendarFormatter } end - def event_schedule_to_resource(event_schedule) + def event_schedule_to_resource(conference, event_schedule) + event_type_color = event_schedule.event.event_type.color + url = Rails.application.routes.url_helpers.conference_program_proposal_path(conference.short_title, event_schedule.event.id) + { - id: event_schedule.event.guid, - title: event_schedule.event.title, - start: event_schedule.start_time, - end: event_schedule.end_time, - resourceId: event_schedule.room.guid + id: event_schedule.event.guid, + title: event_schedule.event.title, + start: event_schedule.start_time, + end: event_schedule.end_time, + resourceId: event_schedule.room.guid, + url: url, + backgroundColor: event_type_color, + textColor: contrast_color(event_type_color) } end end diff --git a/spec/services/full_calendar_formatter_spec.rb b/spec/services/full_calendar_formatter_spec.rb index a3dd418d..45f34c2b 100644 --- a/spec/services/full_calendar_formatter_spec.rb +++ b/spec/services/full_calendar_formatter_spec.rb @@ -6,8 +6,21 @@ describe FullCalendarFormatter do let!(:room1) { create(:room) } let!(:room2) { create(:room) } let!(:rooms) { [room1, room2] } - let!(:event_schedule1) { create(:event_schedule, room: room1) } - let!(:event_schedule2) { create(:event_schedule, room: room2) } + let!(:conference) { create(:full_conference) } + let!(:program) { conference.program } + let!(:selected_schedule) { create(:schedule, program: program) } + let!(:event_type1) { create(:event_type, color: '#ffffff') } + let!(:event1) do + program.update_attributes!(selected_schedule: selected_schedule) + create(:event, program: program, event_type: event_type1) + end + let!(:event_schedule1) { create(:event_schedule, event: event1, schedule: selected_schedule, room: room1) } + let!(:event_type2) { create(:event_type, color: '#000000') } + let!(:event2) do + program.update_attributes!(selected_schedule: selected_schedule) + create(:event, program: program, room: room2, event_type: event_type2) + end + let!(:event_schedule2) { create(:event_schedule, event: event2, schedule: selected_schedule, room: room2) } let!(:event_schedules) { [event_schedule1, event_schedule2] } describe 'JSON formatting for FullCalendar' do @@ -30,18 +43,24 @@ describe FullCalendarFormatter do resources = described_class.event_schedules_to_resources(event_schedules) expected_json = [ { - id: event_schedule1.event.guid, - title: event_schedule1.event.title, - start: event_schedule1.start_time, - end: event_schedule1.end_time, - resourceId: room1.guid + id: event_schedule1.event.guid, + title: event_schedule1.event.title, + start: event_schedule1.start_time, + end: event_schedule1.end_time, + resourceId: room1.guid, + url: conference_program_proposal_path(conference.short_title, event1.id), + backgroundColor: event1.event_type.color, + textColor: 'black' }, { - id: event_schedule2.event.guid, - title: event_schedule2.event.title, - start: event_schedule2.start_time, - end: event_schedule2.end_time, - resourceId: room2.guid + id: event_schedule2.event.guid, + title: event_schedule2.event.title, + start: event_schedule2.start_time, + end: event_schedule2.end_time, + resourceId: room2.guid, + url: conference_program_proposal_path(conference.short_title, event2.id), + backgroundColor: event2.event_type.color, + textColor: 'white' } ].to_json expect(resources).to eq(expected_json) diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 2d680fb2..e45bfb38 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -123,6 +123,9 @@ RSpec.configure do |config| # enable debugging with --only-failures config.example_status_persistence_file_path = 'tmp/spec_failures.txt' + + # include path helpers + config.include Rails.application.routes.url_helpers end OmniAuth.config.test_mode = true