Module: Spree::Admin::PublishingHelper
- Defined in:
- app/helpers/spree/admin/publishing_helper.rb
Overview
Helpers for the product Publishing card in the Rails admin. Mirrors the SPA’s publishing card (see packages/dashboard/src/components/spree/products/publishing-card.tsx): per-channel status is gated by product status — Draft/Archived products render every publication as not_available regardless of window.
Instance Method Summary collapse
-
#publication_caption(product_status, publication, store) ⇒ Object
One-line summary of the publication window in the store’s timezone.
-
#publication_schedule_status(product_status, publication) ⇒ Symbol
One of :live, :scheduled, :hidden, :not_available.
-
#publication_status_badge(product_status, publication) ⇒ Object
Renders a colored dot + status label for a publication row.
Instance Method Details
#publication_caption(product_status, publication, store) ⇒ Object
One-line summary of the publication window in the store’s timezone.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'app/helpers/spree/admin/publishing_helper.rb', line 42 def publication_caption(product_status, publication, store) status = publication_schedule_status(product_status, publication) tz = ActiveSupport::TimeZone[store.preferred_timezone] || Time.zone case status when :not_available Spree.t('admin.publishing.caption_not_available', product_status: Spree.t("admin.products.status_options.#{product_status}", default: product_status.to_s.humanize)) when :hidden Spree.t('admin.publishing.caption_unpublished', date: l(publication.unpublished_at.in_time_zone(tz), format: :short)) when :scheduled if publication.unpublished_at Spree.t('admin.publishing.caption_window', start: l(publication.published_at.in_time_zone(tz), format: :short), end: l(publication.unpublished_at.in_time_zone(tz), format: :short)) else Spree.t('admin.publishing.caption_scheduled', date: l(publication.published_at.in_time_zone(tz), format: :short)) end else # :live if publication.unpublished_at Spree.t('admin.publishing.caption_hidden_after', date: l(publication.unpublished_at.in_time_zone(tz), format: :short)) else Spree.t('admin.publishing.caption_live') end end end |
#publication_schedule_status(product_status, publication) ⇒ Symbol
Returns one of :live, :scheduled, :hidden, :not_available.
13 14 15 16 17 18 19 20 21 |
# File 'app/helpers/spree/admin/publishing_helper.rb', line 13 def publication_schedule_status(product_status, publication) return :not_available unless product_status == 'active' now = Time.current return :hidden if publication.unpublished_at && publication.unpublished_at <= now return :scheduled if publication.published_at && publication.published_at > now :live end |
#publication_status_badge(product_status, publication) ⇒ Object
Renders a colored dot + status label for a publication row.
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'app/helpers/spree/admin/publishing_helper.rb', line 24 def publication_status_badge(product_status, publication) status = publication_schedule_status(product_status, publication) dot_class = case status when :live then 'bg-success' when :scheduled then 'bg-warning' else 'bg-secondary' end label = Spree.t("admin.publishing.status_#{status}") content_tag(:span, class: 'd-inline-flex align-items-center gap-1 text-muted small') do content_tag(:span, '', class: "publication-dot rounded-circle #{dot_class}", style: 'display:inline-block; width:0.5rem; height:0.5rem;') + content_tag(:span, label) end end |