mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-03-01 02:03:22 +00:00
11200: coniditonally hide producer column
This commit is contained in:
@@ -37,5 +37,9 @@ module Admin
|
||||
|
||||
"#{admin_products_path}#{url_filters.empty? ? '' : "#?#{url_filters.to_query}"}"
|
||||
end
|
||||
|
||||
def hide_producer_column?(producer_options)
|
||||
spree_current_user.column_preferences.products.empty? && producer_options.one?
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -15,10 +15,11 @@ class ColumnPreference < ApplicationRecord
|
||||
validates :column_name, presence: true, inclusion: { in: proc { |p|
|
||||
valid_columns_for(p.action_name)
|
||||
} }
|
||||
scope :products, -> { where(action_name: 'products_v3_index') }
|
||||
|
||||
def self.for(user, action_name)
|
||||
stored_preferences = where(user_id: user.id, action_name:)
|
||||
default_preferences = __send__("#{action_name}_columns")
|
||||
default_preferences = get_default_preferences(action_name, user)
|
||||
filter(default_preferences, user, action_name)
|
||||
default_preferences.each_with_object([]) do |(column_name, default_attributes), preferences|
|
||||
stored_preference = stored_preferences.find_by(column_name:)
|
||||
@@ -52,4 +53,13 @@ class ColumnPreference < ApplicationRecord
|
||||
|
||||
default_preferences.delete(:schedules)
|
||||
end
|
||||
|
||||
def self.get_default_preferences(action_name, user)
|
||||
case action_name
|
||||
when 'products_v3_index'
|
||||
products_v3_index_columns(user)
|
||||
else
|
||||
__send__("#{action_name}_columns")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -42,6 +42,7 @@ module Spree
|
||||
has_many :credit_cards, dependent: :destroy
|
||||
has_many :report_rendering_options, class_name: "::ReportRenderingOptions", dependent: :destroy
|
||||
has_many :webhook_endpoints, dependent: :destroy
|
||||
has_many :column_preferences, dependent: :destroy
|
||||
has_one :oidc_account, dependent: :destroy
|
||||
|
||||
accepts_nested_attributes_for :enterprise_roles, allow_destroy: true
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
= hidden_field_tag :producer_id, @producer_id
|
||||
= hidden_field_tag :category_id, @category_id
|
||||
|
||||
%table.products{ 'data-column-preferences-target': "table" }
|
||||
%table.products{ 'data-column-preferences-target': "table", class: (hide_producer_column?(producer_options) ? 'hide-producer' : '') }
|
||||
%colgroup
|
||||
-# The `min-width` property works in Chrome but not Firefox so is considered progressive enhancement.
|
||||
%col.col-image{ width:"44px" }= # (image size + padding)
|
||||
|
||||
@@ -77,7 +77,9 @@ module OpenFoodNetwork
|
||||
}
|
||||
end
|
||||
|
||||
def products_v3_index_columns
|
||||
def products_v3_index_columns(user)
|
||||
producer_visibility = display_producer_column?(user)
|
||||
|
||||
I18n.with_options scope: 'admin.products_page.columns' do
|
||||
{
|
||||
image: { name: t(:image), visible: true },
|
||||
@@ -87,7 +89,7 @@ module OpenFoodNetwork
|
||||
unit_scale: { name: t(:unit_scale), visible: true },
|
||||
price: { name: t(:price), visible: true },
|
||||
on_hand: { name: t(:on_hand), visible: true },
|
||||
producer: { name: t(:producer), visible: true },
|
||||
producer: { name: t(:producer), visible: producer_visibility },
|
||||
category: { name: t(:category), visible: true },
|
||||
tax_category: { name: t(:tax_category), visible: true },
|
||||
inherits_properties: { name: t(:inherits_properties), visible: true },
|
||||
@@ -134,5 +136,12 @@ module OpenFoodNetwork
|
||||
shipping_method: { name: I18n.t("admin.shipping_method"), visible: false }
|
||||
}
|
||||
end
|
||||
|
||||
def display_producer_column?(user)
|
||||
producers = OpenFoodNetwork::Permissions.new(user)
|
||||
.managed_product_enterprises.is_primary_producer
|
||||
|
||||
producers.many?
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user