Ahmed Ejaz
f44476b9af
11068: code refactoring
...
- Make use of reflexes when deleting the product and variant
- Add reflex dataset param to confirm_modal_component
2023-12-20 12:54:54 +05:00
Ahmed Ejaz
9cf51f3453
11068: add success and failure messages
2023-12-20 12:54:54 +05:00
Ahmed Ejaz
1936adc82f
11068: fix lint issues
2023-12-20 12:54:54 +05:00
Ahmed Ejaz
26d102f66b
11068: update product/varaint delete actions
2023-12-20 12:54:54 +05:00
Ahmed Ejaz
05e7674805
#11068 : add delete variant and product reflexes
2023-12-20 12:54:54 +05:00
Ahmed Ejaz
5d90993f21
11068, apply delete_modals partial
2023-12-20 12:54:54 +05:00
Maikel Linke
b33910d5b4
Disconnect Connected App as enterprise user
...
The app has to provide a webhook URL to be notified when the app is
disconnected. Once we have better token management, we would have a
unique token per app and could revoke it. But for now it's just a
request to disconnect the app.
2023-12-20 15:29:28 +11:00
Maikel Linke
35ca66cbb7
Respond fast by rendering only partial
2023-12-15 12:34:40 +11:00
Maikel Linke
1d7f96e965
Broadcast connected app to all user tabs
2023-12-15 12:34:40 +11:00
Maikel Linke
12e5a0d1e1
Query webhook to connect app
2023-12-15 11:50:04 +11:00
Maikel Linke
4eb273b06e
Create ConnectedApp with a reflex
...
I would have like to use a standard form to submit to the reflex but the
whole enterprise settings tab is in a form already and HTML doesn't
allow nested forms. While it does still work in browsers, it would have
added much more HTML to set up a form with a hidden input field instead
of just one additional data attribute.
The whole page is rendered by the controller again but the reflex root
attribute ensures that only parts of this tab are replaced. Otherwise
unsaved data on other tabs could be replaced and the page actually
becomes blank because AngularJS doesn't play well with the morph.
2023-12-15 11:50:04 +11:00
David Cook
0f46da07b2
Render flashes along with table
...
It doesn't matter where the flash messages appear in the HTML (thanks to fixed positioning), so why not keep it simple and send them with the main response.
preventDefault in case we are inside a form, so the button doesn't submit it.
2023-12-06 15:13:15 +11:00
David Cook
54d61cd24d
Don't show flashes until everything else is done.
...
Mario reported that it was showing before the loading spinner had gone.
Technically the loading spinner doesn't hide until after the reflex is finished, but hopefully this is close enough.
2023-12-06 10:12:17 +11:00
David Cook
6dc04c458c
Show saving success message in flash
...
I don't know if this is the best way to do it with SR, but it works..
2023-12-06 10:12:17 +11:00
David Cook
eccfe96a5b
Use form hash structure
...
The array format is generally fine, but to properly support checkboxes, we need this format with hash keys.
https://guides.rubyonrails.org/form_helpers.html#understanding-parameter-naming-conventions
2023-11-28 10:44:34 +11:00
Neal Chambers
69e7419a45
Safely autocorrect Style/NegatedIfElseCondition
...
Inspecting 1509 files
....................................................................................................................................................................................................................C........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................C.......................................................................................................................................................
Offenses:
app/mailers/spree/shipment_mailer.rb:15:25: C: [Corrected] Style/NegatedIfElseCondition: Invert the negated condition and swap the ternary branches.
default_subject = !@delivery ? t('.picked_up_subject') : default_i18n_subject
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/support/matchers/table_matchers.rb:34:5: C: [Corrected] Style/NegatedIfElseCondition: Invert the negated condition and swap the if-else branches.
if rows.count != expected_table.count ...
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1509 files inspected, 2 offenses detected, 2 offenses corrected
2023-11-10 09:13:57 +09:00
David Cook
f05d27b58b
Show error message summary at top of form
2023-11-03 14:32:58 +11:00
David Cook
a0b64cb58a
Remove unnecessary set_locale calls
...
The locale is now set in ApplicationReflex
2023-10-13 15:54:24 +02:00
David Cook
2915048afa
Always set locale for reflexes
...
I considered using I18nHelper like we do in controllers, but that is for choosing a locale, which we don't need to do for reflexes.
2023-10-13 15:54:24 +02:00
Mohamed ABDELLANI
614c8a5060
update order mailer to check if invoices feature is enabled for the current user
2023-10-08 21:47:17 +02:00
Mohamed ABDELLANI
adecf64cf3
update bulk invoice job to check if the invoices feature is enabled for the current user
2023-10-08 21:47:17 +02:00
Neal Chambers
ed06edda3f
Fix Style/HashSyntax
2023-09-13 16:45:00 +09:00
David Cook
ef63c520c0
Aggregate errors
2023-08-22 11:40:58 +10:00
David Cook
a70f392654
Show error messages
...
It's kinda hard to test reflexes..
2023-08-22 11:40:58 +10:00
David Cook
71c36585bc
Retain order when saving.
...
Perhaps this should be tested in the system spec too ("I can rename a product and still see it after saving"). But I'd like to find the compromise to avoid bulking up system specs too much. I think it's covered well enough by the reflex spec?
2023-08-22 11:40:58 +10:00
David Cook
ae3cd6f7e0
Add bulk_update product form for product name
...
(For now at least,) we use one big standard Rails form, and ModelSet to update each record.
Submitting with Reflex allows us to manage the loading state along with the rest of the page (although I would rather use the built in HTTP POST standard).
Aria-label makes it a bit easier for testing (and accessibility software of course!). Technically it should have been aria-labelledby="id_of_column_header" but that would have resulted in more HTML and processing, which seemed silly.
Best viewed with whitespace ignored.
2023-08-22 11:40:58 +10:00
Jean-Baptiste Bellet
1a8a4ee72b
Change size of pagination
...
"it becomes extremely long for big catalogues"
2023-08-17 09:26:10 +02:00
David Cook
e816228959
Sort products by name in ascending order
...
The order is specified above in fetch_products. I'm guessing this line was unintentional?
Original requirment doesn't say ascending but I think it's safe to assume (issue#10694).
2023-08-15 08:36:22 +02:00
Jean-Baptiste Bellet
3b68674896
Remove new_products_page and all associated controller/components/
...
new_products_page` is dead, long live `admin_style_v3` !
2023-08-10 10:02:45 +02:00
Mohamed ABDELLANI
7daa4d3a63
simplify filtering condition to select only invoiceable orders on OrdersReflex
2023-08-03 14:52:45 +01:00
Neal Chambers
60cd84d565
Safely autocorrect Naming/BlockForwarding
...
Inspecting 1480 files
...................................................................................................................................................................C.......C..........C...............................................................................................................................................................................................................C...........................................................................................................C.........C...............................................................................................................................................................................................................................................................C........................................CC...C............................................................................................................................................................................................................................................................................................................................C.....................................................................................................................................................................................................C..............C.........C..CC.......C.....................................................................................................C...............
Offenses:
app/helpers/application_helper.rb:41:32: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def ng_form_for(name, *args, &block)
^^^^^^
app/helpers/application_helper.rb:44:75: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
form_for(name, *(args << options.merge(builder: AngularFormBuilder)), &block)
^^^^^^
app/helpers/application_helper.rb:49:37: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def method_missing(method, *args, &block)
^^^^^^
app/helpers/link_helper.rb:4:57: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def link_to_service(baseurl, name, html_options = {}, &block)
^^^^^^
app/helpers/link_helper.rb:8:51: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
link_to ext_url(baseurl, name), html_options, &block
^^^^^^
app/helpers/spree/admin/base_helper.rb:6:56: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def field_container(model, method, options = {}, &block)
^^^^^^
app/helpers/spree/admin/base_helper.rb:13:29: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
capture(&block),
^^^^^^
app/reflexes/application_reflex.rb:29:19: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def with_locale(&block)
^^^^^^
app/reflexes/application_reflex.rb:30:43: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
I18n.with_locale(current_user.locale, &block)
^^^^^^
app/services/cache_service.rb:8:43: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def self.cache(cache_key, options = {}, &block)
^^^^^^
app/services/cache_service.rb:9:48: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
Rails.cache.fetch cache_key.to_s, options, &block
^^^^^^
app/services/cache_service.rb:14:58: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def self.cached_data_by_class(cache_key, cached_class, &block)
^^^^^^
app/services/cache_service.rb:16:23: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
&block
^^^^^^
app/services/cache_service.rb:25:34: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def self.home_stats(statistic, &block)
^^^^^^
app/services/cache_service.rb:28:47: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
race_condition_ttl: 10, &block)
^^^^^^
app/services/current_order_locker.rb:12:31: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def self.around(controller, &block)
^^^^^^
app/services/current_order_locker.rb:13:55: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
lock_order_and_variants(controller.current_order, &block)
^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:392:28: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def chain_to_scope(&block)
^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:393:41: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
@scope = @scope.instance_eval(&block)
^^^^^^
lib/spree/core/controller_helpers/respond_with.rb:7:34: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def respond_with(*resources, &block)
^^^^^^
lib/spree/core/controller_helpers/respond_with.rb:13:64: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
return unless (collector = retrieve_collector_from_mimes(&block))
^^^^^^
lib/spree/core/delegate_belongs_to.rb:80:39: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def class_def(name, method = nil, &blk)
^^^^
lib/spree/core/delegate_belongs_to.rb:81:54: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
class_eval { method.nil? ? define_method(name, &blk) : define_method(name, method) }
^^^^
lib/spree/core/environment_extension.rb:22:31: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def create_method(name, &block)
^^^^^^
lib/spree/core/environment_extension.rb:23:51: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
self.class.__send__(:define_method, name, &block)
^^^^^^
spec/models/enterprise_caching_spec.rb:144:13: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def later(&block)
^^^^^^
spec/models/enterprise_caching_spec.rb:145:36: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
Timecop.travel(1.day.from_now, &block)
^^^^^^
spec/support/embedded_pages_helper.rb:5:26: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def on_embedded_page(&block)
^^^^^^
spec/support/embedded_pages_helper.rb:6:28: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
within_frame :frame, &block
^^^^^^
spec/support/preferences_helper.rb:11:31: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def reset_spree_preferences(&config_block)
^^^^^^^^^^^^^
spec/support/preferences_helper.rb:16:33: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
configure_spree_preferences(&config_block) if block_given?
^^^^^^^^^^^^^
spec/support/request/shop_workflow.rb:87:37: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def within_variant(variant = nil, &block)
^^^^^^
spec/support/request/shop_workflow.rb:90:22: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
within(selector, &block)
^^^^^^
spec/support/request/ui_component_helper.rb:4:23: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def browse_as_small(&block)
^^^^^^
spec/support/request/ui_component_helper.rb:5:39: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
browse_with_window_size(640, 480, &block)
^^^^^^
spec/support/request/ui_component_helper.rb:8:24: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def browse_as_medium(&block)
^^^^^^
spec/support/request/ui_component_helper.rb:9:40: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
browse_with_window_size(1024, 768, &block)
^^^^^^
spec/support/request/web_helper.rb:52:23: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def within_row(num, &block)
^^^^^^
spec/support/request/web_helper.rb:53:54: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
within("table.index tbody tr:nth-child(#{num})", &block)
^^^^^^
spec/swagger_helper.rb:77:19: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def param(args, &block)
^^^^^^
spec/swagger_helper.rb:78:45: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
public_send(:let, args) { instance_eval(&block) }
^^^^^^
spec/system/support/capybara_setup.rb:20:27: C: [Corrected] Naming/BlockForwarding: Use anonymous block forwarding.
def using_session(name, &block)
^^^^^^
1480 files inspected, 42 offenses detected, 42 offenses corrected
2023-07-30 21:29:19 +09:00
Jean-Baptiste Bellet
3fab9714f5
Use a constant as the search_key
2023-07-19 14:58:40 +02:00
Jean-Baptiste Bellet
2697a637a9
Use the OpenFoodNetwork::Permissions helper
...
To retrieve only primary producers
2023-07-19 14:58:40 +02:00
jibees
3245f7ff99
Update app/reflexes/products_reflex.rb
...
Co-authored-by: David Cook <david@redcliffs.net >
2023-07-19 14:58:40 +02:00
Jean-Baptiste Bellet
90c6398197
Simplify and call methods directly via before_reflex
2023-07-19 14:58:40 +02:00
Jean-Baptiste Bellet
b3bdba3a9b
Better use merge! instead of q = q.merge
2023-07-19 14:58:40 +02:00
Jean-Baptiste Bellet
fac02c794c
Search through more attributes than only name
...
Copy/paste from `app/assets/javascripts/darkswarm/controllers/products_controller.js.coffee`
2023-07-19 14:58:39 +02:00
Jean-Baptiste Bellet
5a8a187f54
Add clear search button and action
2023-07-19 14:58:39 +02:00
Jean-Baptiste Bellet
333dc11fc1
Manage form params vs. URL params. And replace state with params.
...
"One needs to understand what the source of the params in a reflex is. And there are two sources:
the closest form
the url of the currently displayed page"
Source: https://github.com/stimulusreflex/stimulus_reflex/issues/290#issuecomment-683334963
2023-07-19 14:58:39 +02:00
Jean-Baptiste Bellet
bfe1884ab5
Can filter by categories
2023-07-19 14:58:39 +02:00
Jean-Baptiste Bellet
f58cf2d3b2
Can filter by producer
...
Not sur the request nor the `producers` in the reflex should be like this. This is a proof of concept, and should probably be reviewed
Fix linter issues
2023-07-19 14:58:39 +02:00
Jean-Baptiste Bellet
643897abb2
Add search functionnality
2023-07-19 14:58:39 +02:00
Jean-Baptiste Bellet
c786f300ca
Have a tiny url state management by using replace_state of cable_ready
2023-07-19 14:58:39 +02:00
Jean-Baptiste Bellet
3da6e02192
Call pagination via perPage param: no state to manage, use param
2023-07-19 14:58:39 +02:00
Jean-Baptiste Bellet
61d1f30e04
Rename productsV3 to products: avoid upper|lower case issues
...
This is causing some issues, misunderstandings around case.
Therefore, directly use the Reflex, and lifecycle methods `beforeFetch` and `afterFetch` are called, even if we use the Reflex (and not the js controller methods). This is pretty handy.
+ adds some id to pagination element (https://docs.stimulusreflex.com/guide/reflexes.html#declaring-a-reflex-in-html-with-data-attributes )
Global documentation: https://docs.stimulusreflex.com/guide/reflexes.html
2023-07-19 14:58:39 +02:00
Jean-Baptiste Bellet
574adb88d2
Add a per page component
...
This is still a WIP.
2023-07-19 14:58:39 +02:00
Jean-Baptiste Bellet
5aebbe4102
use beforeFetch and afterFetch lifecycle methods
...
+ Move outside `Admin` module the reflex
Therefore, this reflex should be _equivalent_ to its javascript controller: `ProductsV3` (relation is made through names)
Remove unwanted line
Actually call StimulusJS controller instead of calling the reflex itself
In order to have this "showLoading", "hideLoading" behavior.
It seems to be possible to directly use the Reflex itself (use `data-reflex` instead of `data-action`) but I can't make it work: the `stimulus-controller:after` event is never broadcasted/catched (but `stimulus-controller:before` yes...)
Documentation:
https://docs.stimulusreflex.com/guide/reflexes.html#understanding-stimulusreflex-controllers
https://docs.stimulusreflex.com/guide/lifecycle.html#generic-life-cycle-methods
Maybe @dacook if you want to have a look...
2023-07-19 14:58:39 +02:00
Jean-Baptiste Bellet
47f21cb59e
Add pagination with pagy
...
For `admin_style_v3` use `<` and `>` for next and previous link
instead of `next` and `previous` string
Extract a mixin for a default box-shadow
Maybe this needs to be redefined. Let's see how next things goes.
When a table is followed by a pagination, remove its margin-bottom + border
Finally, design the pagination component
Add sorting/pagination module, on top of table
We use `cablea_ready.replace`, so need to add `#products-content` id
Use a `pagy` partial with reflex action, instead of the legacy one
- revert the legacy one to its previous state
- in reflex, fetch product with page attribute, 1 by default
Move `pagy` into `admin/shared/v3/` to be reusable
+ use fontawesome icons for next and previous page
Remove useless line
2023-07-19 14:58:39 +02:00
David Cook
6a2025b271
Add products table
...
With ellipsis clipping for long lines.
2023-06-28 09:59:57 +10:00
David Cook
809c15b197
Load products page with reflex
...
We will add the products in the next commit.
2023-06-28 09:59:57 +10:00