From 2ebe700a9cd5f445f7b7b6ab26389348fd21f2c0 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Sat, 19 Sep 2020 11:52:31 -0500 Subject: [PATCH 1/2] configurable event page logo --- admin/app/admin/generic_state.rb | 2 +- .../views/admin/generic_states/_form.html.erb | 1 + db/up/find_sessions_2020.sql | 5 +- ruby/lib/jam_ruby/models/generic_state.rb | 6 +- web/app/assets/javascripts/events/jam_rest.js | 19 ++++++ .../javascripts/events/react-components.js | 4 +- .../events/react-components/EventsPage.js.jsx | 24 ++++++- .../actions/ConfigActions.js.coffee | 5 ++ .../stores/ConfigStore.js.coffee | 63 ++++++++++++++----- web/app/controllers/api_configs_controller.rb | 3 +- 10 files changed, 109 insertions(+), 23 deletions(-) create mode 100644 web/app/assets/javascripts/react-components/actions/ConfigActions.js.coffee diff --git a/admin/app/admin/generic_state.rb b/admin/app/admin/generic_state.rb index 02bfedf6b..3e5f2ae4c 100644 --- a/admin/app/admin/generic_state.rb +++ b/admin/app/admin/generic_state.rb @@ -3,7 +3,7 @@ ActiveAdmin.register JamRuby::GenericState, :as => 'GenericState' do config.clear_action_items! filter :env - permit_params :top_message + permit_params :top_message, :event_page_top_logo_url actions :all, :except => [:destroy] diff --git a/admin/app/views/admin/generic_states/_form.html.erb b/admin/app/views/admin/generic_states/_form.html.erb index 7316987e0..908f4bc21 100644 --- a/admin/app/views/admin/generic_states/_form.html.erb +++ b/admin/app/views/admin/generic_states/_form.html.erb @@ -2,6 +2,7 @@ <%= f.semantic_errors *f.object.errors.keys %> <%= f.inputs do %> <%= f.input(:top_message, :input_html => {:maxlength => 10000, :rows=>10, :class => 'autogrow'}) %> + <%= f.input(:event_page_top_logo_url, :input_html => {:maxlength => 200}, :hint => '/assets/logo.png') %> <% end %> <%= f.actions %> <% end %> \ No newline at end of file diff --git a/db/up/find_sessions_2020.sql b/db/up/find_sessions_2020.sql index 09f72972e..0cb767776 100644 --- a/db/up/find_sessions_2020.sql +++ b/db/up/find_sessions_2020.sql @@ -53,4 +53,7 @@ ALTER TABLE arses ADD COLUMN port int default 3478; ALTER TABLE generic_state ADD COLUMN top_message VARCHAR(100000); ALTER TABLE users ADD COLUMN beta BOOLEAN default FALSE; -ALTER TABLE arses ADD COLUMN beta BOOLEAN default FALSE; \ No newline at end of file +ALTER TABLE arses ADD COLUMN beta BOOLEAN default FALSE; + + +ALTER TABLE generic_state ADD COLUMN event_page_top_logo_url VARCHAR(100000) DEFAULT '/assets/event/eventbrite-logo.png'; \ No newline at end of file diff --git a/ruby/lib/jam_ruby/models/generic_state.rb b/ruby/lib/jam_ruby/models/generic_state.rb index fdf87055c..7ba706336 100644 --- a/ruby/lib/jam_ruby/models/generic_state.rb +++ b/ruby/lib/jam_ruby/models/generic_state.rb @@ -3,7 +3,7 @@ module JamRuby class GenericState < ActiveRecord::Base - attr_accessible :top_message, as: :admin + attr_accessible :top_message, :event_page_top_logo_url, as: :admin self.table_name = 'generic_state' @@ -38,6 +38,10 @@ module JamRuby GenericState.singleton.top_message end + def self.event_page_top_logo_url + GenericState.singleton.event_page_top_logo_url + end + def self.singleton GenericState.find('default') end diff --git a/web/app/assets/javascripts/events/jam_rest.js b/web/app/assets/javascripts/events/jam_rest.js index beb114692..cf2dab860 100644 --- a/web/app/assets/javascripts/events/jam_rest.js +++ b/web/app/assets/javascripts/events/jam_rest.js @@ -40,4 +40,23 @@ body: JSON.stringify(data) }) } + + Rest2.getConfigClient = (options) => { + if(!options) { + options = {} + } + + var query = Object.keys(options) + .map(k => `${encodeURIComponent(k)}=${encodeURIComponent(params[k])}`) + .join('&'); + + return fetch('/api/config/client?' + query, { + method: 'get', + credentials: 'same-origin', // include, *same-origin, omit + headers: { + 'Content-Type': 'application/json' + }, + cache: 'no-cache' + }) + } })(window); diff --git a/web/app/assets/javascripts/events/react-components.js b/web/app/assets/javascripts/events/react-components.js index 7a16dee63..0a0fcd46b 100644 --- a/web/app/assets/javascripts/events/react-components.js +++ b/web/app/assets/javascripts/events/react-components.js @@ -1,3 +1,5 @@ //= require_directory ./react-components/actions //= require ./react-components/stores/EventStore -//= require_directory ./react-components \ No newline at end of file +//= require ../react-components/actions/ConfigActions +//= require ../react-components/stores/ConfigStore +//= require_directory ./react-components diff --git a/web/app/assets/javascripts/events/react-components/EventsPage.js.jsx b/web/app/assets/javascripts/events/react-components/EventsPage.js.jsx index 3a0569c65..864c47a80 100644 --- a/web/app/assets/javascripts/events/react-components/EventsPage.js.jsx +++ b/web/app/assets/javascripts/events/react-components/EventsPage.js.jsx @@ -1,16 +1,30 @@ context = window +ConfigStore = context.ConfigStore EventActions = context.EventActions +ConfigActions = context.ConfigActions -context.EventsPage = React.createClass({ + +context.EventsPage = React.createClass( +{ + + mixins: [Reflux.listenTo(ConfigStore, "onConfig")], getInitialState: function () { - return {submitting: false, error: null} + return {submitting: false, error: null, event_page_top_logo_url: null} }, componentDidMount: function () { EventActions.refresh() + ConfigActions.configInit() }, + onConfig: function(configs) { + if (configs.event_page_top_logo_url) { + this.setState({event_page_top_logo_url: configs.event_page_top_logo_url}) + } + }, + + authorizeDone: function(response) { this.setState({submitting:false}) EventActions.addAuthorization(response) @@ -69,10 +83,14 @@ context.EventsPage = React.createClass({ */ //tmp + top_logo = null + if(this.state.event_page_top_logo_url) { + top_logo = + } listing = null var response =
diff --git a/web/app/assets/javascripts/react-components/actions/ConfigActions.js.coffee b/web/app/assets/javascripts/react-components/actions/ConfigActions.js.coffee new file mode 100644 index 000000000..04583e7a3 --- /dev/null +++ b/web/app/assets/javascripts/react-components/actions/ConfigActions.js.coffee @@ -0,0 +1,5 @@ +context = window + +@ConfigActions = Reflux.createActions({ + configInit: {} +}) diff --git a/web/app/assets/javascripts/react-components/stores/ConfigStore.js.coffee b/web/app/assets/javascripts/react-components/stores/ConfigStore.js.coffee index b4d56947a..bf80a3d3a 100644 --- a/web/app/assets/javascripts/react-components/stores/ConfigStore.js.coffee +++ b/web/app/assets/javascripts/react-components/stores/ConfigStore.js.coffee @@ -1,31 +1,64 @@ -$ = jQuery context = window logger = context.JK.logger -rest = new context.JK.Rest() +if context.JK.Rest + rest = new context.JK.Rest() +else + rest = context.JK.Rest2 + @ConfigStore = Reflux.createStore( { top_message: null + event_page_top_logo_url: null - #listenables: @ConfigActions + # this path taken on event landing p age + listenables: @ConfigActions + + onConfigInit: () -> + @fetch(0) init: -> - this.listenTo(context.AppStore, this.onAppInit) + # context.AppStore not available in landing pages. This path below is for the /client view + if context.AppStore + this.listenTo(context.AppStore, this.onAppInit) + + process: (response) -> + @top_message = response.top_message + @event_page_top_logo_url = response.event_page_top_logo_url + @changed() + + fetch: (wait) -> + setTimeout((() => + result = rest.getConfigClient() + if result.done + result.done((response) => + @process(response) + ) + .fail((jqXHR) => + console.log("failed to fetch config") + ) + else # fetch style + result + .then((response) => + if !response.ok + throw Error(response.statusText) + else + return response.json() + ) + .then((response) => + @process(response) + ) + .catch((jqXHR) => + console.log("failed to fetch config") + ) + + ), wait) onAppInit: (@app) -> - setTimeout((() => - rest.getConfigClient() - .done((response) => - @top_message = response.top_message - @changed() - ) - .fail((jqXHR) => - console.log("failed to fetch config") - ) - ), 2000) + @fetch(2000) changed:() -> - @trigger({top_message: @top_message}) + @trigger({top_message: @top_message, event_page_top_logo_url: @event_page_top_logo_url}) } ) diff --git a/web/app/controllers/api_configs_controller.rb b/web/app/controllers/api_configs_controller.rb index 8aaa92c5a..d826ff537 100644 --- a/web/app/controllers/api_configs_controller.rb +++ b/web/app/controllers/api_configs_controller.rb @@ -16,7 +16,8 @@ class ApiConfigsController < ApiController def client configs = { - top_message: GenericState.top_message + top_message: GenericState.top_message, + event_page_top_logo_url: GenericState.event_page_top_logo_url } render :json => configs, :status => 200 From 39c00d23d60158d99e7f3d513d631c8ab87103d3 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Sat, 19 Sep 2020 16:34:17 -0500 Subject: [PATCH 2/2] stop hiding on listed --- ruby/lib/jam_ruby/models/live_stream.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruby/lib/jam_ruby/models/live_stream.rb b/ruby/lib/jam_ruby/models/live_stream.rb index ad0601600..7ec4d1470 100644 --- a/ruby/lib/jam_ruby/models/live_stream.rb +++ b/ruby/lib/jam_ruby/models/live_stream.rb @@ -15,7 +15,7 @@ class JamRuby::LiveStream < ActiveRecord::Base end def self.upcoming - LiveStream.where(listed: true).order('starts_at DESC') #.where("starts_at > ?", 2.days.ago) + LiveStream.order('starts_at DESC') #.where("starts_at > ?", 2.days.ago) end def sanitize_active_admin