mirror of
https://github.com/we-promise/sure.git
synced 2026-05-29 23:39:03 +00:00
- Switch the goal_accounts → accounts FK from on_delete: :cascade to
:restrict. `Goal#must_have_at_least_one_linked_account` is enforced
at write time; the cascade let a raw DELETE silently orphan a Goal
whose only link pointed at the deleted account. Normal Rails
Account#destroy still cleans up via `dependent: :destroy`, but the
restrict guarantees the DB rejects any path that bypasses the
association.
- projection_payload: required_monthly is now monthly_target_amount&.to_f
so open-ended (no-target-date) goals serialize required_monthly: null
instead of 0, matching the absence of a required pace.
- index page + sidebar nav-rail dot now read the Beta label via
t("shared.beta") (and a new shared.beta locale key) instead of the
hardcoded "Beta" literal.
- _status_callout uses the view-helper t(...) instead of I18n.t(...)
for the status label so it follows the same convention as the rest
of the goals views.
- goal_projection_chart: read the computed style before stamping
position: relative so a stylesheet-defined position (fixed/sticky/
absolute) isn't clobbered.
- preview-deploy: add `set -euo pipefail` around the wrangler
container lookup so a curl/jq failure fails the job instead of
producing an empty CONTAINER_ID and silently skipping cleanup.
26 lines
1.2 KiB
Plaintext
26 lines
1.2 KiB
Plaintext
<%# locals: (name:, path:, icon:, icon_custom:, active:, mobile_only: false, beta: false) %>
|
|
|
|
<%= link_to path, class: "space-y-1 group block relative pb-1", aria: { current: ("page" if active) } do %>
|
|
<div class="grow flex flex-col lg:flex-row gap-1 items-center">
|
|
<%= tag.div class: class_names("w-4 h-1 lg:w-1 lg:h-4 rounded-bl-sm rounded-br-sm lg:rounded-tr-sm lg:rounded-br-sm lg:rounded-bl-none", "bg-nav-indicator" => active) %>
|
|
|
|
<%= tag.div class: class_names(
|
|
"w-8 h-8 flex items-center justify-center mx-auto rounded-lg relative",
|
|
active ? "bg-container shadow-xs text-primary" : "group-hover:bg-surface-hover text-secondary"
|
|
) do %>
|
|
<%= icon(icon, color: active ? "current" : "default", custom: icon_custom) %>
|
|
<% if beta %>
|
|
<span class="absolute -top-0.5 -right-0.5">
|
|
<%= render DS::Pill.new(tone: :violet, dot_only: true, title: t("shared.beta")) %>
|
|
</span>
|
|
<% end %>
|
|
<% end %>
|
|
</div>
|
|
|
|
<div class="grow flex justify-center lg:pl-2">
|
|
<%= tag.p class: class_names("font-medium text-[11px]", active ? "text-primary" : "text-secondary") do %>
|
|
<%= name %>
|
|
<% end %>
|
|
</div>
|
|
<% end %>
|