solidus_pagy 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +39 -0
  3. data/.gem_release.yml +5 -0
  4. data/.github/stale.yml +17 -0
  5. data/.github_changelog_generator +2 -0
  6. data/.gitignore +20 -0
  7. data/.rspec +2 -0
  8. data/.rubocop.yml +37 -0
  9. data/CHANGELOG.md +1 -0
  10. data/Gemfile +52 -0
  11. data/LICENSE +26 -0
  12. data/README.md +142 -0
  13. data/Rakefile +6 -0
  14. data/app/assets/javascripts/spree/backend/solidus_pagy.js +1 -0
  15. data/app/assets/javascripts/spree/frontend/solidus_pagy.js +2 -0
  16. data/app/assets/stylesheets/spree/backend/solidus_pagy.css +7 -0
  17. data/app/assets/stylesheets/spree/frontend/solidus_pagy.css +4 -0
  18. data/app/decorators/controllers/solidus_pagy/admin/base_controller_decorator.rb +13 -0
  19. data/app/decorators/controllers/solidus_pagy/admin/orders_controller_decorator.rb +63 -0
  20. data/app/decorators/controllers/solidus_pagy/admin/prices_controller_decorator.rb +51 -0
  21. data/app/decorators/controllers/solidus_pagy/admin/products_controller_decorator.rb +32 -0
  22. data/app/decorators/controllers/solidus_pagy/admin/promotion_codes_controller_decorator.rb +37 -0
  23. data/app/decorators/controllers/solidus_pagy/admin/promotions_controller_decorator.rb +32 -0
  24. data/app/decorators/controllers/solidus_pagy/admin/properties_controller_decorator.rb +32 -0
  25. data/app/decorators/controllers/solidus_pagy/admin/stock_items_controller_decorator.rb +42 -0
  26. data/app/decorators/controllers/solidus_pagy/admin/stock_locations_controller_decorator.rb +25 -0
  27. data/app/decorators/controllers/solidus_pagy/admin/stock_movements_controller_decorator.rb +25 -0
  28. data/app/decorators/controllers/solidus_pagy/admin/tax_rates_controller_decorator.rb +27 -0
  29. data/app/decorators/controllers/solidus_pagy/admin/users_controller_decorator.rb +68 -0
  30. data/app/decorators/controllers/solidus_pagy/admin/variants_controller_decorator.rb +33 -0
  31. data/app/decorators/controllers/solidus_pagy/admin/zones_controller_decorator.rb +28 -0
  32. data/app/overrides/spree/admin/orders/index/insert_pagy_pagination.rb +9 -0
  33. data/app/overrides/spree/admin/prices/_master_variant_table/insert_pagy_pagination.rb +11 -0
  34. data/app/overrides/spree/admin/prices/_table/insert_pagy_pagination.rb +11 -0
  35. data/app/overrides/spree/admin/products/index/insert_pagy_pagination.rb +9 -0
  36. data/app/overrides/spree/admin/promotion_codes/index/insert_pagy_pagination.rb +19 -0
  37. data/app/overrides/spree/admin/promotions/index/insert_pagy_pagination.rb +9 -0
  38. data/app/overrides/spree/admin/properties/index/insert_pagy_pagination.rb +9 -0
  39. data/app/overrides/spree/admin/stock_items/_stock_management/insert_pagy_pagination.rb +11 -0
  40. data/app/overrides/spree/admin/stock_locations/index/insert_pagy_pagination.rb +11 -0
  41. data/app/overrides/spree/admin/stock_movements/index/insert_pagy_pagination.rb +11 -0
  42. data/app/overrides/spree/admin/tax_rates/index/insert_pagy_pagination.rb +9 -0
  43. data/app/overrides/spree/admin/users/index/insert_pagy_pagination.rb +9 -0
  44. data/app/overrides/spree/admin/users/items/insert_pagy_pagination.rb +9 -0
  45. data/app/overrides/spree/admin/users/orders/insert_pagy_pagination.rb +9 -0
  46. data/app/overrides/spree/admin/variants/_table/insert_pagy_pagination.rb +9 -0
  47. data/app/overrides/spree/admin/zones/index/insert_pagy_pagination.rb +9 -0
  48. data/bin/console +17 -0
  49. data/bin/rails +7 -0
  50. data/bin/rails-engine +13 -0
  51. data/bin/rails-sandbox +16 -0
  52. data/bin/rake +7 -0
  53. data/bin/sandbox +86 -0
  54. data/bin/setup +8 -0
  55. data/config/locales/en.yml +5 -0
  56. data/config/routes.rb +5 -0
  57. data/lib/generators/solidus_pagy/install/install_generator.rb +18 -0
  58. data/lib/generators/solidus_pagy/install/templates/initializer.rb +30 -0
  59. data/lib/generators/solidus_pagy/install/templates/pagy.rb +235 -0
  60. data/lib/solidus_pagy/configuration.rb +27 -0
  61. data/lib/solidus_pagy/engine.rb +16 -0
  62. data/lib/solidus_pagy/testing_support/factories.rb +4 -0
  63. data/lib/solidus_pagy/version.rb +5 -0
  64. data/lib/solidus_pagy.rb +11 -0
  65. data/solidus_pagy.gemspec +44 -0
  66. data/spec/controllers/spree/admin/orders_controller_spec.rb +100 -0
  67. data/spec/controllers/spree/admin/prices_controller_spec.rb +80 -0
  68. data/spec/controllers/spree/admin/products_controller_spec.rb +57 -0
  69. data/spec/controllers/spree/admin/promotion_codes_controller_spec.rb +38 -0
  70. data/spec/controllers/spree/admin/promotions_controller_spec.rb +90 -0
  71. data/spec/controllers/spree/admin/properties_controller_spec.rb +15 -0
  72. data/spec/controllers/spree/admin/stock_items_controller_spec.rb +35 -0
  73. data/spec/controllers/spree/admin/stock_locations_controller_spec.rb +26 -0
  74. data/spec/controllers/spree/admin/stock_movements_controller_spec.rb +81 -0
  75. data/spec/controllers/spree/admin/tax_rates_controller_spec.rb +15 -0
  76. data/spec/controllers/spree/admin/users_controller_spec.rb +117 -0
  77. data/spec/controllers/spree/admin/variants_controller_spec.rb +76 -0
  78. data/spec/controllers/spree/admin/zones_controller_spec.rb +15 -0
  79. data/spec/solidus_pagy/configuration_spec.rb +55 -0
  80. data/spec/spec_helper.rb +31 -0
  81. data/spec/support/devise.rb +8 -0
  82. data/spec/support/pagy.rb.rb +8 -0
  83. data/spec/support/solidus.rb +16 -0
  84. metadata +248 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 45c5fe64e0ad5ad3bfdeedefa752875c8dc3100d902d39870e43f9978621431f
4
+ data.tar.gz: d7edee57426ed7926cfa540b627611b0c180738056217f4bbe147b7e5356549b
5
+ SHA512:
6
+ metadata.gz: 726d3da4a6c1d901f5e5b81d0a11798276c228539126bb10bbd88e04b7e12548220fa828603f6eeb58effcec236c514882a8cf6a6f91615bd4677c3017b0d0f4
7
+ data.tar.gz: c0a16a7e7367cdeec8fbd31cbe0aec9919d45d622d437fed6f5ee8112af904c23127f1bc337a35cee8ab0eb84fa496074d9fa24b977e4cadad79004040b52a79
@@ -0,0 +1,39 @@
1
+ version: 2.1
2
+
3
+ orbs:
4
+ browser-tools: circleci/browser-tools@1.1
5
+
6
+ # Always take the latest version of the orb, this allows us to
7
+ # run specs against Solidus supported versions only without the need
8
+ # to change this configuration every time a Solidus version is released
9
+ # or goes EOL.
10
+ solidusio_extensions: solidusio/extensions@volatile
11
+
12
+ jobs:
13
+ run-specs-with-postgres:
14
+ executor: solidusio_extensions/postgres
15
+ steps:
16
+ - browser-tools/install-browser-tools
17
+ - solidusio_extensions/run-tests
18
+ run-specs-with-mysql:
19
+ executor: solidusio_extensions/mysql
20
+ steps:
21
+ - browser-tools/install-browser-tools
22
+ - solidusio_extensions/run-tests
23
+
24
+ workflows:
25
+ "Run specs on supported Solidus versions":
26
+ jobs:
27
+ - run-specs-with-postgres
28
+ - run-specs-with-mysql
29
+ "Weekly run specs against master":
30
+ triggers:
31
+ - schedule:
32
+ cron: "0 0 * * 4" # every Thursday
33
+ filters:
34
+ branches:
35
+ only:
36
+ - master
37
+ jobs:
38
+ - run-specs-with-postgres
39
+ - run-specs-with-mysql
data/.gem_release.yml ADDED
@@ -0,0 +1,5 @@
1
+ bump:
2
+ recurse: false
3
+ file: 'lib/solidus_pagy/version.rb'
4
+ message: Bump SolidusPagy to %{version}
5
+ tag: true
data/.github/stale.yml ADDED
@@ -0,0 +1,17 @@
1
+ # Number of days of inactivity before an issue becomes stale
2
+ daysUntilStale: 60
3
+ # Number of days of inactivity before a stale issue is closed
4
+ daysUntilClose: false
5
+ # Issues with these labels will never be considered stale
6
+ exemptLabels:
7
+ - pinned
8
+ - security
9
+ # Label to use when marking an issue as stale
10
+ staleLabel: stale
11
+ # Comment to post when marking an issue as stale. Set to `false` to disable
12
+ markComment: >
13
+ This issue has been automatically marked as stale because it has not had
14
+ recent activity. It might be closed if no further activity occurs. Thank you
15
+ for your contributions.
16
+ # Comment to post when closing a stale issue. Set to `false` to disable
17
+ closeComment: false
@@ -0,0 +1,2 @@
1
+ issues=false
2
+ exclude-labels=infrastructure
data/.gitignore ADDED
@@ -0,0 +1,20 @@
1
+ *.gem
2
+ \#*
3
+ *~
4
+ .#*
5
+ .DS_Store
6
+ .idea
7
+ .project
8
+ .sass-cache
9
+ coverage
10
+ Gemfile.lock
11
+ tmp
12
+ nbproject
13
+ pkg
14
+ *.swp
15
+ spec/dummy
16
+ spec/examples.txt
17
+ /sandbox
18
+ .rvmrc
19
+ .ruby-version
20
+ .ruby-gemset
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,37 @@
1
+ require:
2
+ - solidus_dev_support/rubocop
3
+
4
+ inherit_gem:
5
+ solidus_dev_support: .rubocop.yml
6
+
7
+ AllCops:
8
+ NewCops: disable
9
+ Exclude:
10
+ - bin/*
11
+ - spec/dummy/**/*
12
+ - vendor/**/*
13
+
14
+ Rails/SkipsModelValidations:
15
+ Exclude:
16
+ - db/migrate/**/*
17
+
18
+ Gemspec/OrderedDependencies:
19
+ Enabled: false
20
+
21
+ RSpec/NestedGroups:
22
+ Enabled: false
23
+
24
+ RSpec/MultipleExpectations:
25
+ Enabled: false
26
+
27
+ RSpec/NamedSubject:
28
+ Enabled: false
29
+
30
+ RSpec/ContextWording:
31
+ Enabled: false
32
+
33
+ RSpec/LeadingSubject:
34
+ Enabled: false
35
+
36
+ RSpec/MessageChain:
37
+ Enabled: false
data/CHANGELOG.md ADDED
@@ -0,0 +1 @@
1
+ # Changelog
data/Gemfile ADDED
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
5
+
6
+ branch = ENV.fetch('SOLIDUS_BRANCH', 'master')
7
+
8
+ solidus_git, solidus_frontend_git = if (branch == 'master') || (branch >= 'v3.2')
9
+ %w[solidusio/solidus solidusio/solidus_frontend]
10
+ else
11
+ %w[solidusio/solidus] * 2
12
+ end
13
+
14
+ gem 'solidus', github: solidus_git, branch: branch
15
+ gem 'solidus_api', github: solidus_git, branch: branch
16
+ gem 'solidus_backend', github: solidus_git, branch: branch
17
+ gem 'solidus_core', github: solidus_git, branch: branch
18
+ gem 'solidus_frontend', github: solidus_frontend_git, branch: branch
19
+ gem 'solidus_sample', github: solidus_git, branch: branch
20
+
21
+ # Needed to help Bundler figure out how to resolve dependencies,
22
+ # otherwise it takes forever to resolve them.
23
+ # See https://github.com/bundler/bundler/issues/6677
24
+ gem 'rails', ENV.fetch('RAILS_VERSION', nil)
25
+
26
+ # Provides basic authentication functionality for testing parts of your engine
27
+ gem 'solidus_auth_devise'
28
+
29
+ case ENV.fetch('DB', nil)
30
+ when 'mysql'
31
+ gem 'mysql2'
32
+ when 'postgresql'
33
+ gem 'pg'
34
+ else
35
+ gem 'sqlite3'
36
+ end
37
+
38
+ group :test do
39
+ gem 'rails-controller-testing'
40
+ gem 'rspec-activemodel-mocks'
41
+ end
42
+
43
+ group :development, :test do
44
+ gem 'factory_bot', '> 4.10.0'
45
+ gem 'pry-rails'
46
+ end
47
+
48
+ gemspec
49
+
50
+ # Use a local Gemfile to include development dependencies that might not be
51
+ # relevant for the project or for other contributors, e.g.: `gem 'pry-debug'`.
52
+ eval_gemfile 'Gemfile-local' if File.exist? 'Gemfile-local'
data/LICENSE ADDED
@@ -0,0 +1,26 @@
1
+ Copyright (c) 2022 [name of plugin creator]
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+ * Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+ * Neither the name Solidus nor the names of its contributors may be used to
13
+ endorse or promote products derived from this software without specific
14
+ prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,142 @@
1
+ # Solidus Pagy
2
+
3
+ [![CircleCI](https://circleci.com/gh/jtapia/solidus_pagy.svg?style=shield)](https://circleci.com/gh/jtapia/solidus_pagy)
4
+ [![codecov](https://codecov.io/gh/jtapia/solidus_pagy/branch/master/graph/badge.svg)](https://codecov.io/gh/jtapia/solidus_pagy)
5
+
6
+ Add [Pagy](https://github.com/ddnexus/pagy) pagination ability to use on the Solidus Admin content.
7
+
8
+ ## Installation
9
+
10
+ Add `solidus_pagy` to your Gemfile:
11
+
12
+ ```ruby
13
+ gem 'solidus_pagy', github: 'jtapia/solidus_pagy'
14
+ ```
15
+
16
+ Bundle your dependencies and run the installation generator:
17
+
18
+ ```shell
19
+ bin/rails generate solidus_pagy:install
20
+ ```
21
+
22
+ ## Solidus configuration
23
+
24
+ After the installation, inside the file `app/cofig/initializers/solidus_pagy` you will be able to setup the `Pagy` pagination options:
25
+
26
+ ```ruby
27
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
28
+ # | Option | Helper | Path |
29
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
30
+ # | default | pagy_nav | |
31
+ # | bootstrap | pagy_bootstrap_nav | pagy/extras/bootstrap |
32
+ # | bulma | pagy_bulma_nav | pagy/extras/bulma |
33
+ # | foundation | pagy_foundation_nav | pagy/extras/foundation |
34
+ # | materialize| pagy_materialize_nav | pagy/extras/materialize |
35
+ # | semantic | pagy_semantic_nav | pagy/extras/semantic |
36
+ # | uikit | pagy_uikit_nav | pagy/extras/uikit |
37
+ # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
38
+
39
+ SolidusPagy.configure do |config|
40
+ config.nav_helper = 'pagy_nav' # default
41
+ config.page = 1 # default
42
+ config.items = 20 # default
43
+ config.outset = 0 # default
44
+ config.orders_per_page = 15 # default
45
+ config.promotions_per_page = 15 # default
46
+ config.properties_per_page = 15 # default
47
+ config.admin_products_per_page = 10 # default
48
+ config.admin_variants_per_page = 20 # defaults
49
+ end
50
+ ```
51
+
52
+ If you want to use `bootstrap` you need to require the path:
53
+
54
+ ```ruby
55
+ require 'pagy/extras/bootstrap'
56
+
57
+ SolidusPagy.configure do |config|
58
+ config.nav_helper = 'pagy_bootstrap_nav'
59
+ ...
60
+ end
61
+ ```
62
+
63
+ ## Usage
64
+
65
+ Include in your `application_controller.rb`:
66
+
67
+ ```ruby
68
+ include Pagy::Backend
69
+ ```
70
+
71
+ and in your `application_helper.rb`:
72
+
73
+ ```ruby
74
+ include Pagy::Frontend
75
+ ```
76
+
77
+ ## Development
78
+
79
+ ### Testing the extension
80
+
81
+ First bundle your dependencies, then run `bin/rake`. `bin/rake` will default to building the dummy
82
+ app if it does not exist, then it will run specs. The dummy app can be regenerated by using
83
+ `bin/rake extension:test_app`.
84
+
85
+ ```shell
86
+ bin/rake
87
+ ```
88
+
89
+ To run [Rubocop](https://github.com/bbatsov/rubocop) static code analysis run
90
+
91
+ ```shell
92
+ bundle exec rubocop
93
+ ```
94
+
95
+ When testing your application's integration with this extension you may use its factories.
96
+ Simply add this require statement to your `spec/spec_helper.rb`:
97
+
98
+ ```ruby
99
+ require 'solidus_pagy/testing_support/factories'
100
+ ```
101
+
102
+ Or, if you are using `FactoryBot.definition_file_paths`, you can load Solidus core
103
+ factories along with this extension's factories using this statement:
104
+
105
+ ```ruby
106
+ SolidusDevSupport::TestingSupport::Factories.load_for(SolidusPagy::Engine)
107
+ ```
108
+
109
+ ### Running the sandbox
110
+
111
+ To run this extension in a sandboxed Solidus application, you can run `bin/sandbox`. The path for
112
+ the sandbox app is `./sandbox` and `bin/rails` will forward any Rails commands to
113
+ `sandbox/bin/rails`.
114
+
115
+ Here's an example:
116
+
117
+ ```
118
+ $ bin/rails server
119
+ => Booting Puma
120
+ => Rails 6.0.2.1 application starting in development
121
+ * Listening on tcp://127.0.0.1:3000
122
+ Use Ctrl-C to stop
123
+ ```
124
+
125
+ ### Updating the changelog
126
+
127
+ Before and after releases the changelog should be updated to reflect the up-to-date status of
128
+ the project:
129
+
130
+ ```shell
131
+ bin/rake changelog
132
+ git add CHANGELOG.md
133
+ git commit -m "Update the changelog"
134
+ ```
135
+
136
+ ### Releasing new versions
137
+
138
+ Please refer to the dedicated [page](https://github.com/solidusio/solidus/wiki/How-to-release-extensions) on Solidus wiki.
139
+
140
+ ## License
141
+
142
+ Copyright (c) 2022 [name of extension author], released under the New BSD License.
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'solidus_dev_support/rake_tasks'
4
+ SolidusDevSupport::RakeTasks.install
5
+
6
+ task default: 'extension:specs'
@@ -0,0 +1 @@
1
+ require 'pagy'
@@ -0,0 +1,2 @@
1
+ // Placeholder manifest file.
2
+ // the installer will append this file to the app vendored assets here: vendor/assets/javascripts/spree/frontend/all.js'
@@ -0,0 +1,7 @@
1
+ ul.pagination {
2
+ justify-content: center !important;
3
+ }
4
+
5
+ nav.pagination {
6
+ justify-content: center !important;
7
+ }
@@ -0,0 +1,4 @@
1
+ /*
2
+ Placeholder manifest file.
3
+ the installer will append this file to the app vendored assets here: 'vendor/assets/stylesheets/spree/frontend/all.css'
4
+ */
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidusPagy
4
+ module Admin
5
+ module BaseControllerDecorator
6
+ def self.prepended(base)
7
+ base.include ::Pagy::Backend
8
+ end
9
+
10
+ ::Spree::Admin::BaseController.prepend(self)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidusPagy
4
+ module Admin
5
+ module OrdersControllerDecorator
6
+ def self.prepended(base)
7
+ base.class_eval do
8
+ def index
9
+ params[:q] ||= {}
10
+ params[:q][:completed_at_not_null] ||= '1' if ::Spree::Config[:show_only_complete_orders_by_default]
11
+ @show_only_completed = params[:q][:completed_at_not_null] == '1'
12
+ params[:q][:s] ||= @show_only_completed ? 'completed_at desc' : 'created_at desc'
13
+ params[:q][:completed_at_not_null] = '' unless @show_only_completed
14
+
15
+ # As date params are deleted if @show_only_completed, store
16
+ # the original date so we can restore them into the params
17
+ # after the search
18
+ created_at_gt = params[:q][:created_at_gt]
19
+ created_at_lt = params[:q][:created_at_lt]
20
+
21
+ params[:q].delete(:inventory_units_shipment_id_null) if params[:q][:inventory_units_shipment_id_null] == "0"
22
+
23
+ if params[:q][:created_at_gt].present?
24
+ params[:q][:created_at_gt] = begin
25
+ Time.zone.parse(params[:q][:created_at_gt]).beginning_of_day
26
+ rescue StandardError
27
+ ''
28
+ end
29
+ end
30
+
31
+ if params[:q][:created_at_lt].present?
32
+ params[:q][:created_at_lt] = begin
33
+ Time.zone.parse(params[:q][:created_at_lt]).end_of_day
34
+ rescue StandardError
35
+ ''
36
+ end
37
+ end
38
+
39
+ if @show_only_completed
40
+ params[:q][:completed_at_gt] = params[:q].delete(:created_at_gt)
41
+ params[:q][:completed_at_lt] = params[:q].delete(:created_at_lt)
42
+ end
43
+
44
+ @search = ::Spree::Order.accessible_by(current_ability, :index).ransack(params[:q])
45
+ @result = pagy(
46
+ @search.result.includes([:user]),
47
+ page: params[:page],
48
+ items: params[:per_page] || ::SolidusPagy.config.orders_per_page
49
+ )
50
+ @pagy = @result.first
51
+ @orders = @result.second
52
+
53
+ # Restore dates
54
+ params[:q][:created_at_gt] = created_at_gt
55
+ params[:q][:created_at_lt] = created_at_lt
56
+ end
57
+ end
58
+ end
59
+
60
+ ::Spree::Admin::OrdersController.prepend(self)
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidusPagy
4
+ module Admin
5
+ module PricesControllerDecorator
6
+ def self.prepended(base)
7
+ base.class_eval do
8
+ def index
9
+ params[:q] ||= {}
10
+
11
+ @search = @product.prices
12
+ .accessible_by(current_ability, :index)
13
+ .ransack(params[:q])
14
+ master_prices_search_result(@search)
15
+ variant_prices_search_result(@search)
16
+ end
17
+
18
+ private
19
+
20
+ def master_prices_search_result(search)
21
+ @result = pagy(
22
+ search.result
23
+ .currently_valid
24
+ .for_master
25
+ .order(:variant_id, :country_iso, :currency),
26
+ page: params[:page],
27
+ items: Spree::Config.admin_variants_per_page
28
+ )
29
+ @pagy_master_prices = @result.first
30
+ @master_prices = @result.second
31
+ end
32
+
33
+ def variant_prices_search_result(search)
34
+ @result = pagy(
35
+ search.result
36
+ .currently_valid
37
+ .for_variant
38
+ .order(:variant_id, :country_iso, :currency),
39
+ page: params[:variants_page],
40
+ items: Spree::Config.admin_variants_per_page
41
+ )
42
+ @pagy_variant_prices = @result.first
43
+ @variant_prices = @result.second
44
+ end
45
+ end
46
+ end
47
+
48
+ ::Spree::Admin::PricesController.prepend(self)
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidusPagy
4
+ module Admin
5
+ module ProductsControllerDecorator
6
+ def self.prepended(base)
7
+ base.class_eval do
8
+ private
9
+
10
+ def collection
11
+ return @collection if @collection
12
+
13
+ params[:q] ||= {}
14
+ params[:q][:s] ||= 'name asc'
15
+ # @search needs to be defined as this is passed to search_form_for
16
+ @search = super.ransack(params[:q])
17
+ @result = pagy(
18
+ @search.result.order(id: :asc)
19
+ .includes(product_includes),
20
+ page: params[:page],
21
+ items: ::SolidusPagy.config.admin_products_per_page
22
+ )
23
+ @pagy = @result.first
24
+ @collection = @result.second
25
+ end
26
+ end
27
+ end
28
+
29
+ ::Spree::Admin::ProductsController.prepend(self)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidusPagy
4
+ module Admin
5
+ module PromotionCodesControllerDecorator
6
+ def self.prepended(base)
7
+ base.class_eval do
8
+ def index
9
+ @promotion = ::Spree::Promotion.accessible_by(current_ability, :show)
10
+ .find(params[:promotion_id])
11
+ @promotion_codes = @promotion.promotion_codes.order(:value)
12
+
13
+ respond_to do |format|
14
+ format.html do
15
+ @result = pagy(
16
+ @promotion_codes,
17
+ page: params[:page],
18
+ items: 50
19
+ )
20
+ @pagy = @result.first
21
+ @promotion_codes = @result.second
22
+ end
23
+
24
+ format.csv do
25
+ filename = "promotion-code-list-#{@promotion.id}.csv"
26
+ headers["Content-Type"] = "text/csv"
27
+ headers["Content-disposition"] = "attachment; filename=\"#{filename}\""
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ ::Spree::Admin::PromotionCodesController.prepend(self)
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidusPagy
4
+ module Admin
5
+ module PromotionsControllerDecorator
6
+ def self.prepended(base)
7
+ base.class_eval do
8
+ private
9
+
10
+ def collection
11
+ return @collection if @collection
12
+
13
+ params[:q] ||= HashWithIndifferentAccess.new
14
+ params[:q][:s] ||= 'id desc'
15
+
16
+ @collection = super
17
+ @search = @collection.ransack(params[:q])
18
+ @result = pagy(
19
+ @search.result(distinct: true).includes(promotion_includes),
20
+ page: params[:page],
21
+ items: params[:per_page] || ::SolidusPagy.config.promotions_per_page
22
+ )
23
+ @pagy = @result.first
24
+ @collection = @result.second
25
+ end
26
+ end
27
+ end
28
+
29
+ ::Spree::Admin::PromotionsController.prepend(self)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidusPagy
4
+ module Admin
5
+ module PropertiesControllerDecorator
6
+ def self.prepended(base)
7
+ base.class_eval do
8
+ private
9
+
10
+ def collection
11
+ return @collection if @collection
12
+
13
+ # params[:q] can be blank upon pagination
14
+ params[:q] = {} if params[:q].blank?
15
+
16
+ @collection = super
17
+ @search = @collection.ransack(params[:q])
18
+ @result = pagy(
19
+ @search.result,
20
+ page: params[:page],
21
+ items: ::SolidusPagy.config.properties_per_page
22
+ )
23
+ @pagy = @result.first
24
+ @collection = @result.second
25
+ end
26
+ end
27
+ end
28
+
29
+ ::Spree::Admin::PropertiesController.prepend(self)
30
+ end
31
+ end
32
+ end