use and add day param in url

This commit is contained in:
Christophe Robillard 2026-03-22 22:14:40 +01:00
parent 0f5b880138
commit df9b266c84
4 changed files with 45 additions and 38 deletions

View file

@ -11,7 +11,7 @@ class DayLogsController < ApplicationController
if @day_log.save if @day_log.save
handle_mood(@day_log.day, params[:day_log][:mode_id]) handle_mood(@day_log.day, params[:day_log][:mode_id])
redirect_to root_path redirect_to dashboard_path(day: @day_log.day)
else else
render :new, status: :unprocessable_content render :new, status: :unprocessable_content
end end
@ -20,7 +20,7 @@ class DayLogsController < ApplicationController
def update def update
if @day_log.update(day_log_params) if @day_log.update(day_log_params)
handle_mood(@day_log.day, params[:day_log][:mode_id]) handle_mood(@day_log.day, params[:day_log][:mode_id])
redirect_to dashboard_path redirect_to dashboard_path(day: @day_log.day)
else else
render :edit, status: :unprocessable_content render :edit, status: :unprocessable_content
end end

View file

@ -3,17 +3,37 @@ import { Controller } from '@hotwired/stimulus'
export default class extends Controller { export default class extends Controller {
static targets = [ "image", "modeDay", "dayLogLink", "dayLogInfo" ]; static targets = [ "image", "modeDay", "dayLogLink", "dayLogInfo" ];
connect() {
this.lastTarget = null;
const params = new URLSearchParams(window.location.search);
const selectedDay = params.get("day");
if (selectedDay) {
const dayEl = document.querySelector(`[data-day="${selectedDay}"]`);
if (dayEl) {
dayEl.click();
dayEl.scrollIntoView({ block: "center" });
}
} else {
const logs = document.querySelector(".logs");
if (logs) logs.scrollTop = logs.scrollHeight;
}
}
updateDayInfo(event) { updateDayInfo(event) {
const image = this.imageTarget; const image = this.imageTarget;
const modeDay = this.modeDayTarget; const modeDay = this.modeDayTarget;
const day = event.target.dataset.day; const day = event.target.dataset.day;
const modeDayContent = day + ' : ' + event.target.dataset.mode; const formattedDay = new Date(day).toLocaleDateString('fr-FR');
const modeDayContent = formattedDay + ' : ' + event.target.dataset.mode;
image.src = event.target.dataset.image; image.src = event.target.dataset.image;
modeDay.textContent = modeDayContent; modeDay.textContent = modeDayContent;
this.dayLogLinkTarget.href = `/day_logs/edit?day=${day}`;
this.dayLogInfoTarget.textContent = event.target.dataset.info || '';
event.target.className = "selected-day " + event.target.dataset.mode; event.target.className = "selected-day " + event.target.dataset.mode;
this.dayLogInfoTarget.textContent = event.target.dataset.info || ''; history.pushState({}, '', `?day=${day}`);
this.dayLogLinkTarget.href = `/day_logs/edit?day=${day}`
if (this.lastTarget) { if (this.lastTarget) {
this.lastTarget.className = "day " + this.lastTarget.dataset.mode; this.lastTarget.className = "day " + this.lastTarget.dataset.mode;
@ -21,22 +41,4 @@ export default class extends Controller {
this.lastTarget = event.target; this.lastTarget = event.target;
} }
connect() {
this.lastTarget = null;
const logs = document.querySelector(".logs");
if (!logs) return;
document.addEventListener("turbo:before-visit", () => {
sessionStorage.setItem("logsScrollTop", logs.scrollTop);
});
const savedScroll = sessionStorage.getItem("logsScrollTop");
if (savedScroll) {
logs.scrollTop = parseInt(savedScroll);
sessionStorage.removeItem("logsScrollTop");
} else {
logs.scrollTop = logs.scrollHeight;
}
}
} }

View file

@ -1,20 +1,25 @@
= form_with model: day_log do |f| = form_with model: day_log do |f|
- @day_log.errors.full_messages.each do |msg| - @day_log.errors.full_messages.each do |msg|
%p= msg .notification.is-danger= msg
.field .field
= f.label :day = f.label :info, "Journal", class: "label"
.control
= f.text_area :info, class: "textarea", rows: 5
.field
= label_tag :mode_id, "Mode", class: "label"
.control
.select.is-fullwidth
= select_tag "day_log[mode_id]",
options_from_collection_for_select(Current.user.modes, :id, :label, @mood&.mode_id),
include_blank: true
.field.is-hidden
= f.date_field :day = f.date_field :day
.field .field.is-grouped
= f.label :info .control
= f.text_area :info = f.submit "Enregistrer", class: "button is-primary"
.control
.field = link_to "Annuler", dashboard_path(day: @day_log.day), class: "button is-light"
= label_tag :mode_id, "Mode"
= select_tag "day_log[mode_id]",
options_from_collection_for_select(Current.user.modes, :id, :label, @mood&.mode_id),
include_blank: true
= f.submit

View file

@ -43,7 +43,7 @@
<% mode = mode_for(mood, @user) %> <% mode = mode_for(mood, @user) %>
<div data-image="<%= mode.image_url %>" <div data-image="<%= mode.image_url %>"
data-mode="<%= mode.label %>" data-mode="<%= mode.label %>"
data-day="<%= l mood[:recorded_at].to_date %>" data-day="<%= mood[:recorded_at].to_date.iso8601 %>"
data-info="<%= mood[:day_log]&.info %>" data-info="<%= mood[:day_log]&.info %>"
data-action="click->mood#updateDayInfo" data-action="click->mood#updateDayInfo"
title="<%= l(mood[:recorded_at].to_date) %> : <%= mode.label %>" title="<%= l(mood[:recorded_at].to_date) %> : <%= mode.label %>"