mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-24 20:36:49 +00:00
Inject only relative enterprises into shopfront
Other shops displayed in producer modals are lazy loaded when opening their modal.
This commit is contained in:
@@ -1,9 +1,15 @@
|
||||
Darkswarm.directive "enterpriseModal", ($modal)->
|
||||
Darkswarm.directive "enterpriseModal", ($modal, Enterprises, EnterpriseResource) ->
|
||||
restrict: 'E'
|
||||
replace: true
|
||||
template: "<a ng-transclude></a>"
|
||||
transclude: true
|
||||
link: (scope, elem, attrs, ctrl)->
|
||||
elem.on "click", (ev)=>
|
||||
link: (scope, elem, attrs, ctrl) ->
|
||||
elem.on "click", (ev) =>
|
||||
ev.stopPropagation()
|
||||
params =
|
||||
id: scope.enterprise.id
|
||||
EnterpriseResource.relatives params, (data) =>
|
||||
Enterprises.addEnterprises data
|
||||
scope.enterprise = Enterprises.enterprises_by_id[scope.enterprise.id]
|
||||
Enterprises.dereferenceEnterprise scope.enterprise
|
||||
scope.modalInstance = $modal.open(controller: ctrl, templateUrl: 'enterprise_modal.html', scope: scope)
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
Darkswarm.factory 'Dereferencer', ->
|
||||
new class Dereferencer
|
||||
dereference: (array, data)->
|
||||
dereference: (array, data) ->
|
||||
if array
|
||||
for object, i in array
|
||||
array[i] = data[object.id]
|
||||
key = undefined
|
||||
key = object.id if object
|
||||
array[i] = data[key]
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
Darkswarm.factory 'EnterpriseResource', ($resource) ->
|
||||
$resource('/enterprise/:id.json', {}, {
|
||||
'relatives':
|
||||
method: 'GET'
|
||||
url: '/enterprises/:id/relatives.json'
|
||||
isArray: true
|
||||
cache: true
|
||||
})
|
||||
@@ -1,4 +1,4 @@
|
||||
Darkswarm.factory 'Enterprises', (enterprises, CurrentHub, Taxons, Dereferencer, visibleFilter, Matcher, Geo, $rootScope)->
|
||||
Darkswarm.factory 'Enterprises', (enterprises, CurrentHub, Taxons, Dereferencer, visibleFilter, Matcher, Geo, $rootScope) ->
|
||||
new class Enterprises
|
||||
enterprises_by_id: {}
|
||||
constructor: ->
|
||||
@@ -20,14 +20,32 @@ Darkswarm.factory 'Enterprises', (enterprises, CurrentHub, Taxons, Dereferencer,
|
||||
if CurrentHub.hub?.id
|
||||
CurrentHub.hub = @enterprises_by_id[CurrentHub.hub.id]
|
||||
for enterprise in @enterprises
|
||||
Dereferencer.dereference enterprise.hubs, @enterprises_by_id
|
||||
Dereferencer.dereference enterprise.producers, @enterprises_by_id
|
||||
@dereferenceEnterprise enterprise
|
||||
|
||||
dereferenceEnterprise: (enterprise) ->
|
||||
# keep a backup of enterprise ids
|
||||
# in case we dereference again after adding more enterprises
|
||||
if enterprise.hub_references
|
||||
enterprise.hubs = enterprise.hub_references.slice()
|
||||
else
|
||||
enterprise.hub_references = enterprise.hubs.slice()
|
||||
if enterprise.producer_references
|
||||
enterprise.producers = enterprise.producer_references.slice()
|
||||
else
|
||||
enterprise.producer_references = enterprise.producers.slice()
|
||||
Dereferencer.dereference enterprise.hubs, @enterprises_by_id
|
||||
Dereferencer.dereference enterprise.producers, @enterprises_by_id
|
||||
|
||||
dereferenceTaxons: ->
|
||||
for enterprise in @enterprises
|
||||
Dereferencer.dereference enterprise.taxons, Taxons.taxons_by_id
|
||||
Dereferencer.dereference enterprise.supplied_taxons, Taxons.taxons_by_id
|
||||
|
||||
addEnterprises: (new_enterprises) ->
|
||||
return unless new_enterprises && new_enterprises.length
|
||||
for enterprise in new_enterprises
|
||||
@enterprises_by_id[enterprise.id] = enterprise
|
||||
|
||||
flagMatching: (query) ->
|
||||
for enterprise in @enterprises
|
||||
enterprise.matches_name_query = if query? && query.length > 0
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
require 'open_food_network/enterprise_injection_data'
|
||||
|
||||
class EnterprisesController < BaseController
|
||||
layout "darkswarm"
|
||||
helper Spree::ProductsHelper
|
||||
@@ -11,11 +13,21 @@ class EnterprisesController < BaseController
|
||||
|
||||
respond_to :js, only: :permalink_checker
|
||||
|
||||
def relatives
|
||||
respond_to do |format|
|
||||
format.json do
|
||||
enterprises = Enterprise.find(params[:id]).andand.relatives.activated
|
||||
render(json: enterprises,
|
||||
each_serializer: Api::EnterpriseSerializer,
|
||||
data: OpenFoodNetwork::EnterpriseInjectionData.new)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def check_permalink
|
||||
return render text: params[:permalink], status: 409 if Enterprise.find_by_permalink params[:permalink]
|
||||
|
||||
path = Rails.application.routes.recognize_path( "/#{ params[:permalink].to_s }" )
|
||||
path = Rails.application.routes.recognize_path("/#{params[:permalink].to_s}")
|
||||
if path && path[:controller] == "cms_content"
|
||||
render text: params[:permalink], status: 200
|
||||
else
|
||||
@@ -23,7 +35,6 @@ class EnterprisesController < BaseController
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
private
|
||||
|
||||
def clean_permalink
|
||||
|
||||
@@ -5,6 +5,10 @@ module InjectionHelper
|
||||
inject_json_ams "enterprises", Enterprise.activated.includes(address: :state).all, Api::EnterpriseSerializer, enterprise_injection_data
|
||||
end
|
||||
|
||||
def inject_shop_enterprises
|
||||
inject_json_ams "enterprises", current_distributor.relatives_including_self.activated.includes(address: :state).all, Api::EnterpriseSerializer, enterprise_injection_data
|
||||
end
|
||||
|
||||
def inject_group_enterprises
|
||||
inject_json_ams "group_enterprises", @group.enterprises.activated.all, Api::EnterpriseSerializer, enterprise_injection_data
|
||||
end
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
- content_for(:image) do
|
||||
= current_distributor.logo.url
|
||||
|
||||
= inject_enterprises
|
||||
= inject_shop_enterprises
|
||||
|
||||
%shop.darkswarm
|
||||
- content_for :order_cycle_form do
|
||||
|
||||
@@ -55,6 +55,7 @@ Openfoodnetwork::Application.routes.draw do
|
||||
|
||||
member do
|
||||
get :shop
|
||||
get :relatives
|
||||
end
|
||||
end
|
||||
get '/:id/shop', to: 'enterprises#shop', as: 'enterprise_shop'
|
||||
|
||||
Reference in New Issue
Block a user