diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index e250433..be53fee 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -2,4 +2,11 @@ class ApplicationController < ActionController::Base prepend_view_path Rails.root.join('frontend') + + def valid_cluster? + return false unless session[:cluster_uuid] + return false unless Cluster.get(session[:cluster_uuid]) + + true + end end diff --git a/app/controllers/cluster_controller.rb b/app/controllers/cluster_controller.rb index d4583e9..c6c8c6b 100644 --- a/app/controllers/cluster_controller.rb +++ b/app/controllers/cluster_controller.rb @@ -3,17 +3,19 @@ # This is the landing for a specific tally cluster class ClusterController < ApplicationController before_action :only_for_unknown - def new; end + def show + @clusters = Cluster.list + end def create - # TODO: This will need to modify a shared object to insert a new tally cluster. - session[:cluster] = params[:cluster] + cluster = Cluster.new(params[:cluster]) + session[:cluster_uuid] = cluster.uuid; redirect_to root_path end private def only_for_unknown - redirect_to root_path if session[:cluster] + redirect_to root_path if valid_cluster? end end diff --git a/app/controllers/counter_controller.rb b/app/controllers/counter_controller.rb index 9b5c8a5..21431d6 100644 --- a/app/controllers/counter_controller.rb +++ b/app/controllers/counter_controller.rb @@ -8,6 +8,6 @@ class CounterController < ApplicationController private def associate! - redirect_to cluster_path unless session[:cluster] + redirect_to cluster_path unless valid_cluster? end end diff --git a/app/models/cluster.rb b/app/models/cluster.rb index e4923e7..7bdabe9 100644 --- a/app/models/cluster.rb +++ b/app/models/cluster.rb @@ -4,7 +4,7 @@ require 'securerandom' # A collective for a tally class Cluster - attr_reader :count, :name, :status, :uuid + attr_reader :count, :name, :status, :uuid, :created_on @@clusters = {} def initialize(name) @@ -13,6 +13,7 @@ class Cluster @count = 0 @status = :open @mutex = Mutex.new + @created_on = Time.new @@clusters[@uuid] = self end diff --git a/app/views/cluster/new.html.erb b/app/views/cluster/new.html.erb deleted file mode 100644 index 2822593..0000000 --- a/app/views/cluster/new.html.erb +++ /dev/null @@ -1,4 +0,0 @@ -<%= c("page") do %> - <%= c("cluster-list") %> - <%= c("cluster-new") %> -<% end %> diff --git a/app/views/cluster/show.html.erb b/app/views/cluster/show.html.erb new file mode 100644 index 0000000..3341a7b --- /dev/null +++ b/app/views/cluster/show.html.erb @@ -0,0 +1,3 @@ +<%= c("page") do %> + <%= c("cluster-view") %> +<% end %> diff --git a/frontend/components/cluster-list/_cluster-list.html.erb b/frontend/components/cluster-list/_cluster-list.html.erb index e69de29..f98db37 100644 --- a/frontend/components/cluster-list/_cluster-list.html.erb +++ b/frontend/components/cluster-list/_cluster-list.html.erb @@ -0,0 +1,5 @@ +
+ <% clusters.each do |cluster| %> + <%= c("cluster", cluster: cluster) %> + <% end %> +
diff --git a/frontend/components/cluster-list/cluster-list.js b/frontend/components/cluster-list/cluster-list.js index 9311c03..9b83c61 100644 --- a/frontend/components/cluster-list/cluster-list.js +++ b/frontend/components/cluster-list/cluster-list.js @@ -1 +1,3 @@ import "./cluster-list.pcss"; + +import "components/cluster/cluster"; diff --git a/frontend/components/cluster-list/cluster-list.pcss b/frontend/components/cluster-list/cluster-list.pcss index 545eb34..e9daea7 100644 --- a/frontend/components/cluster-list/cluster-list.pcss +++ b/frontend/components/cluster-list/cluster-list.pcss @@ -1 +1,4 @@ -/* placeholder */ +.cluster-list { + line-height: 1.5; + margin-bottom: 2rem; +} diff --git a/frontend/components/cluster-new/cluster-new.pcss b/frontend/components/cluster-new/cluster-new.pcss index f847653..e3df3ed 100644 --- a/frontend/components/cluster-new/cluster-new.pcss +++ b/frontend/components/cluster-new/cluster-new.pcss @@ -1,10 +1,4 @@ .create-cluster-form { - display: flex; - justify-content: center; - align-items: center; - width: 100%; - height: 100%; - & input { width: 100%; padding: 12px 0; diff --git a/frontend/components/cluster-view/_cluster-view.html.erb b/frontend/components/cluster-view/_cluster-view.html.erb new file mode 100644 index 0000000..47fad75 --- /dev/null +++ b/frontend/components/cluster-view/_cluster-view.html.erb @@ -0,0 +1,4 @@ +
+ <%= c("cluster-list", clusters: @clusters.values) %> + <%= c("cluster-new") %> +
diff --git a/frontend/components/cluster-view/cluster-view.css b/frontend/components/cluster-view/cluster-view.css new file mode 100644 index 0000000..900190d --- /dev/null +++ b/frontend/components/cluster-view/cluster-view.css @@ -0,0 +1,8 @@ +.cluster-view { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; + height: 100%; +} diff --git a/frontend/components/cluster-view/cluster-view.js b/frontend/components/cluster-view/cluster-view.js new file mode 100644 index 0000000..512314b --- /dev/null +++ b/frontend/components/cluster-view/cluster-view.js @@ -0,0 +1,4 @@ +import "./cluster-view.css"; + +import "components/cluster-new/cluster-new"; +import "components/cluster-list/cluster-list"; diff --git a/frontend/components/cluster/_cluster.html.erb b/frontend/components/cluster/_cluster.html.erb new file mode 100644 index 0000000..c123919 --- /dev/null +++ b/frontend/components/cluster/_cluster.html.erb @@ -0,0 +1,6 @@ + + + + <%= cluster.name %> + created on <%= cluster.created_on.strftime("%Y-%m-%d %H:%M:%S")%> + diff --git a/frontend/components/cluster/cluster.js b/frontend/components/cluster/cluster.js new file mode 100644 index 0000000..d2f1705 --- /dev/null +++ b/frontend/components/cluster/cluster.js @@ -0,0 +1 @@ +import "./cluster.pcss"; diff --git a/frontend/components/cluster/cluster.pcss b/frontend/components/cluster/cluster.pcss new file mode 100644 index 0000000..fb5b07c --- /dev/null +++ b/frontend/components/cluster/cluster.pcss @@ -0,0 +1,40 @@ +.cluster { + align-items: center; + display: flex; + justify-content: flex-start; + padding: 0.5em 0.75em; + + & .panel-icon { + display: inline-block; + font-size: 14px; + height: 1em; + line-height: 1em; + text-align: center; + vertical-align: top; + width: 1em; + color: #7a7a7a; + margin-right: 0.75em; + } + + & .panel-text { + font-weight: 800; + margin-right: 0.5rem; + } + + & .panel-subtext { + font-weight: 100; + opacity: 40%; + } + &:hover, + &:focus { + background-color: #f5f5f5; + + & .panel-icon { + color: #3273dc; + } + } + + &:not(:last-child) { + border-bottom: 1px solid #ededed; + } +} diff --git a/frontend/init/index.pcss b/frontend/init/index.pcss index 4a96efc..734bc6b 100644 --- a/frontend/init/index.pcss +++ b/frontend/init/index.pcss @@ -5,3 +5,8 @@ body { font-size: 16px; line-height: 24px; } + +a { + color: inherit; + text-decoration: none; +} diff --git a/frontend/packs/application.js b/frontend/packs/application.js index d120a0c..f39197d 100644 --- a/frontend/packs/application.js +++ b/frontend/packs/application.js @@ -1,5 +1,4 @@ import "init"; import "components/page/page"; -import "components/cluster-list/cluster-list"; -import "components/cluster-new/cluster-new"; +import "components/cluster-view/cluster-view";