Files
openfoodnetwork/app/helpers/admin/injection_helper.rb
Matt-Yorkley c01bab5f27 Wrap commonly-repeated calls to Spree::Config to reduce unnecessary cache reads
These config values are relatively static but in some cases they can be called many times in the same request (like rendering a report or a large list of line_items in BOM). These values will now only get fetched from Redis/Postgres once at most per request/job.
2024-03-26 13:39:16 +00:00

195 lines
7.6 KiB
Ruby

# frozen_string_literal: true
module Admin
module InjectionHelper
def admin_inject_enterprise(enterprise)
admin_inject_json_ams "admin.enterprises",
"enterprise",
enterprise,
Api::Admin::EnterpriseSerializer
end
def admin_inject_enterprises(my_enterprises, all_enterprises)
admin_inject_json_ams_array("ofn.admin",
"my_enterprises",
my_enterprises,
Api::Admin::BasicEnterpriseSerializer) +
admin_inject_json_ams_array("ofn.admin",
"all_enterprises",
all_enterprises,
Api::Admin::BasicEnterpriseSerializer)
end
def admin_inject_enterprise_relationships(enterprise_relationships)
admin_inject_json_ams_array "ofn.admin",
"enterprise_relationships",
enterprise_relationships,
Api::Admin::EnterpriseRelationshipSerializer
end
def admin_inject_payment_methods(payment_methods)
admin_inject_json_ams_array "admin.paymentMethods",
"paymentMethods",
payment_methods,
Api::Admin::IdNameSerializer
end
def admin_inject_payment_method(payment_method)
admin_inject_json_ams "admin.paymentMethods",
"paymentMethod",
payment_method,
Api::Admin::PaymentMethodSerializer
end
def admin_inject_shipping_methods(shipping_methods)
admin_inject_json_ams_array "admin.shippingMethods",
"shippingMethods",
shipping_methods,
Api::Admin::IdNameSerializer
end
def admin_inject_shipping_method(shipping_method)
admin_inject_json_ams "admin.shippingMethods",
"shippingMethod",
shipping_method,
Api::Admin::ShippingMethodSerializer
end
def admin_inject_shops(shops, opts = {})
opts.reverse_merge!(module: 'admin.customers')
admin_inject_json_ams_array opts[:module],
"shops",
shops,
Api::Admin::IdNameSerializer
end
def admin_inject_available_countries(opts = {})
opts.reverse_merge!(module: 'admin.customers')
admin_inject_json_ams_array opts[:module],
'availableCountries',
available_countries,
Api::CountrySerializer
end
def admin_inject_hubs(hubs, opts = {})
opts.reverse_merge!(module: 'ofn.admin')
admin_inject_json_ams_array opts[:module],
"hubs",
hubs,
Api::Admin::IdNameSerializer
end
def admin_inject_producers(producers, opts = {})
opts.reverse_merge!(module: 'ofn.admin')
admin_inject_json_ams_array opts[:module],
"producers",
producers,
Api::Admin::IdNameSerializer
end
def admin_inject_inventory_items(inventory_items, opts = { module: 'ofn.admin' })
admin_inject_json_ams_array opts[:module],
"inventoryItems",
inventory_items,
Api::Admin::InventoryItemSerializer
end
def admin_inject_column_preferences(opts = {})
opts.reverse_merge!(module: 'ofn.admin', action: "#{controller_name}_#{action_name}")
column_preferences = ColumnPreference.for(spree_current_user, opts[:action])
admin_inject_json_ams_array opts[:module],
"columns",
column_preferences,
Api::Admin::ColumnPreferenceSerializer
end
def admin_inject_currency_config
admin_inject_json_ams 'admin.utils',
"currencyConfig",
{},
Api::CurrencyConfigSerializer
end
def admin_inject_hub_permissions(hub_permissions)
render partial: "admin/json/injection_ams", locals: { ngModule: "admin.variantOverrides",
name: "hubPermissions",
json: hub_permissions.to_json }
end
def admin_inject_tax_categories(tax_categories, opts = { module: 'ofn.admin' })
admin_inject_json_ams_array opts[:module],
"tax_categories",
tax_categories,
Api::Admin::TaxCategorySerializer
end
def admin_inject_taxons(taxons)
admin_inject_json_ams_array "admin.taxons",
"taxons",
taxons,
Api::Admin::TaxonSerializer
end
def admin_inject_variant_overrides(variant_overrides)
admin_inject_json_ams_array "admin.variantOverrides",
"variantOverrides",
variant_overrides,
Api::Admin::VariantOverrideSerializer
end
def admin_inject_order_cycle_instance(order_cycle)
render partial: "admin/json/injection_ams",
locals: { ngModule: 'admin.orderCycles',
name: 'ocInstance',
json: "{coordinator_id: '#{order_cycle.coordinator.id}'}" }
end
def admin_inject_order_cycles(order_cycles)
admin_inject_json_ams_array "admin.orders",
"orderCycles",
order_cycles,
Api::Admin::BasicOrderCycleSerializer,
current_user: spree_current_user
end
def admin_inject_spree_api_key(spree_api_key)
render partial: "admin/json/injection_ams",
locals: { ngModule: 'admin.indexUtils',
name: 'SpreeApiKey',
json: "'#{spree_api_key}'" }
end
def admin_inject_available_units
admin_inject_json "admin.products",
"availableUnits",
CurrentConfig.get(:available_units)
end
def admin_inject_json(ng_module, name, data)
json = data.to_json
render partial: "admin/json/injection_ams",
locals: { ngModule: ng_module,
name:,
json: }
end
def admin_inject_json_ams(ng_module, name, data, serializer, opts = {})
json = serializer.new(data, { scope: spree_current_user }.merge(opts)).to_json
render partial: "admin/json/injection_ams",
locals: { ngModule: ng_module,
name:,
json: }
end
def admin_inject_json_ams_array(ng_module, name, data, serializer, opts = {})
json = ActiveModel::ArraySerializer.
new(data, { each_serializer: serializer, scope: spree_current_user }.merge(opts)).to_json
render partial: "admin/json/injection_ams",
locals: { ngModule: ng_module,
name:,
json: }
end
end
end