Skip to content

Commit f2e807b

Browse files
committed
feat: add editable meetup start times
1 parent d5f8e34 commit f2e807b

15 files changed

Lines changed: 101 additions & 9 deletions

File tree

.kamal/hooks/post-deploy

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#!/bin/sh
2+
set -eu
3+
4+
bin/kamal app exec --reuse "bin/rails db:migrate"

app/assets/stylesheets/landing.css

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,24 @@
221221
color: var(--color-gray-dark);
222222
}
223223

224+
.event-card__description {
225+
margin: 1.5rem 0;
226+
padding: 1rem 1.25rem;
227+
border-left: 3px solid rgba(226, 84, 84, 0.35);
228+
border-radius: var(--border-radius-sm);
229+
background: rgba(226, 84, 84, 0.06);
230+
color: var(--color-gray-dark);
231+
line-height: 1.7;
232+
}
233+
234+
.event-card__description p {
235+
margin: 0;
236+
}
237+
238+
.event-card__description p + p {
239+
margin-top: 0.75rem;
240+
}
241+
224242
/* Admin Type Badges
225243
========================================================================== */
226244
.meetup-list-type-badge {

app/controllers/admin/meetups_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,6 @@ def destroy
5959
private
6060

6161
def meetup_params
62-
params.require(:meetup).permit(:number, :date, :description, :location, :event_type)
62+
params.require(:meetup).permit(:number, :date, :start_time, :description, :location, :event_type)
6363
end
6464
end

app/models/meetup.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
11
class Meetup < ApplicationRecord
2+
DEFAULT_START_TIME = "18:00".freeze
3+
24
has_many :talks, dependent: :destroy
35
has_many :attendances, dependent: :destroy
46

57
attribute :event_type, :string
8+
attribute :start_time, :string, default: DEFAULT_START_TIME
69
enum :event_type, { formal: "formal", bar: "bar" }, default: "formal"
710

811
validates :number, presence: true, uniqueness: true, if: :formal?
912
validates :date, presence: true
13+
validates :start_time, presence: true, format: { with: /\A([01]\d|2[0-3]):[0-5]\d\z/ }
1014

1115
validate :cannot_change_to_bar_if_talks_exist, if: -> { bar? && event_type_changed? }
1216

1317
before_validation :clear_number_for_bar_events, if: -> { bar? && number.present? }
18+
before_validation :apply_default_start_time
1419

1520
scope :ordered, -> { order(Arel.sql("CASE WHEN event_type = 'bar' THEN 1 ELSE 0 END, date DESC")) }
1621
scope :upcoming, -> { where("date >= ?", Date.today).order(date: :asc) }
@@ -28,4 +33,8 @@ def cannot_change_to_bar_if_talks_exist
2833
def clear_number_for_bar_events
2934
self.number = nil
3035
end
36+
37+
def apply_default_start_time
38+
self.start_time = DEFAULT_START_TIME if start_time.blank?
39+
end
3140
end

app/views/admin/dashboard/index.html.erb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@
9191
<time datetime="<%= @next_meetup.date.iso8601 %>">
9292
<%= l @next_meetup.date, format: :long %>
9393
</time>
94+
o <%= @next_meetup.start_time %>
9495
</p>
9596
<p class="next-meetup-talks">
9697
<%= @next_meetup.talks.size %> <%= polish_pluralize(@next_meetup.talks.size, "prezentacja", "prezentacje", "prezentacji") %>
@@ -127,6 +128,8 @@
127128
<span class="meetup-list-meta">
128129
<time datetime="<%= meetup.date.iso8601 %>"><%= l meetup.date, format: :long %></time>
129130
<span aria-hidden="true"></span>
131+
<span><%= meetup.start_time %></span>
132+
<span aria-hidden="true"></span>
130133
<span><%= meetup.talks.size %> <%= polish_pluralize(meetup.talks.size, "prezentacja", "prezentacje", "prezentacji") %></span>
131134
</span>
132135
</div>

app/views/admin/meetups/_form.html.erb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,14 @@
4646
<%= f.date_field :date, class: "form-input", required: true %>
4747
<span class="form-hint">Data, kiedy odbędzie się spotkanie</span>
4848
</div>
49+
50+
<div class="form-field">
51+
<%= f.label :start_time, class: "form-label" do %>
52+
Godzina rozpoczęcia <span class="required">*</span>
53+
<% end %>
54+
<%= f.time_field :start_time, class: "form-input", required: true %>
55+
<span class="form-hint">Domyślnie 18:00, ale możesz ją zmienić dla konkretnego spotkania</span>
56+
</div>
4957
</div>
5058

5159
<div class="form-section">

app/views/admin/meetups/index.html.erb

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,11 +70,13 @@
7070
<span class="meetup-list-type-badge <%= "meetup-list-type--#{meetup.event_type}" %>">
7171
<%= meetup.event_type == 'formal' ? 'TRUG' : 'TRUG Bar' %>
7272
</span>
73-
<span class="meetup-list-meta">
74-
<time datetime="<%= meetup.date.iso8601 %>"><%= l meetup.date, format: :long %></time>
75-
<% if meetup.date.today? %>
76-
<span class="badge badge-today">Dzisiaj</span>
77-
<% elsif meetup.date.future? %>
73+
<span class="meetup-list-meta">
74+
<time datetime="<%= meetup.date.iso8601 %>"><%= l meetup.date, format: :long %></time>
75+
<span aria-hidden="true"></span>
76+
<span><%= meetup.start_time %></span>
77+
<% if meetup.date.today? %>
78+
<span class="badge badge-today">Dzisiaj</span>
79+
<% elsif meetup.date.future? %>
7880
<span class="badge badge-upcoming">Nadchodzące</span>
7981
<% else %>
8082
<span class="badge badge-past">Odbyte</span>

app/views/admin/meetups/show.html.erb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,12 @@
5656
<%= @meetup.talks.size %>
5757
</div>
5858
</div>
59+
<div class="form-field" style="margin-bottom: 0;">
60+
<label class="form-label">Godzina rozpoczęcia</label>
61+
<div style="padding: 0.75rem; background: var(--color-surface-inset); border-radius: var(--radius-md); font-weight: 500;">
62+
<%= @meetup.start_time %>
63+
</div>
64+
</div>
5965
</div>
6066

6167
<% if @meetup.description.present? %>

app/views/pages/_event_card.html.erb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
</svg>
1616
<div class="info-row__content">
1717
<div class="info-row__label">Godzina</div>
18-
<div class="info-row__value">18:00</div>
18+
<div class="info-row__value"><%= meetup.start_time %></div>
1919
</div>
2020
</div>
2121

@@ -30,6 +30,12 @@
3030
</div>
3131
</div>
3232
</div>
33+
34+
<% if meetup.description.present? %>
35+
<div class="event-card__description">
36+
<%= simple_format(meetup.description) %>
37+
</div>
38+
<% end %>
3339

3440
<% if type == 'formal' && meetup.talks.any? %>
3541
<div class="talks-section">
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class AddStartTimeToMeetups < ActiveRecord::Migration[8.1]
2+
def up
3+
add_column :meetups, :start_time, :string, default: "18:00", null: false
4+
end
5+
6+
def down
7+
remove_column :meetups, :start_time
8+
end
9+
end

0 commit comments

Comments
 (0)