solidus_admin 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE +23 -4
- data/README.md +6 -1
- data/Rakefile +15 -15
- data/app/assets/builds/solidus_admin/tailwind.css +722 -45
- data/app/assets/images/solidus_admin/remixicon.license.txt +196 -0
- data/app/assets/images/solidus_admin/remixicon.symbol.svg +4 -4
- data/app/blueprints/solidus_admin/state_blueprint.rb +13 -0
- data/app/components/concerns/solidus_admin/slotable_default.rb +42 -0
- data/app/components/solidus_admin/adjustment_reasons/edit/component.html.erb +6 -15
- data/app/components/solidus_admin/adjustment_reasons/edit/component.yml +0 -1
- data/app/components/solidus_admin/adjustment_reasons/index/component.rb +13 -13
- data/app/components/solidus_admin/adjustment_reasons/new/component.html.erb +6 -15
- data/app/components/solidus_admin/adjustment_reasons/new/component.yml +0 -1
- data/app/components/solidus_admin/base_component.rb +7 -3
- data/app/components/solidus_admin/layout/confirm/component.html.erb +18 -0
- data/app/components/solidus_admin/layout/confirm/component.js +21 -0
- data/app/components/solidus_admin/layout/confirm/component.rb +26 -0
- data/app/components/solidus_admin/layout/confirm/component.yml +4 -0
- data/app/components/solidus_admin/layout/flashes/alerts/component.html.erb +7 -0
- data/app/components/solidus_admin/layout/flashes/alerts/component.rb +19 -0
- data/app/components/solidus_admin/layout/flashes/component.html.erb +5 -0
- data/app/components/solidus_admin/layout/flashes/component.rb +4 -0
- data/app/components/solidus_admin/layout/flashes/toasts/component.html.erb +5 -0
- data/app/components/solidus_admin/layout/flashes/toasts/component.rb +9 -0
- data/app/components/solidus_admin/layout/navigation/account/component.html.erb +12 -1
- data/app/components/solidus_admin/layout/navigation/account/component.rb +4 -4
- data/app/components/solidus_admin/layout/page_helpers.rb +3 -9
- data/app/components/solidus_admin/layout/skip_link/component.rb +3 -3
- data/app/components/solidus_admin/option_types/edit/component.html.erb +44 -0
- data/app/components/solidus_admin/option_types/edit/component.rb +5 -0
- data/app/components/solidus_admin/option_types/edit/component.yml +10 -0
- data/app/components/solidus_admin/option_types/index/component.rb +22 -22
- data/app/components/solidus_admin/option_types/new/component.html.erb +16 -0
- data/app/components/solidus_admin/option_types/new/component.rb +4 -0
- data/app/components/solidus_admin/option_types/new/component.yml +4 -0
- data/app/components/solidus_admin/option_values/edit/component.html.erb +16 -0
- data/app/components/solidus_admin/option_values/edit/component.rb +4 -0
- data/app/components/solidus_admin/option_values/edit/component.yml +4 -0
- data/app/components/solidus_admin/option_values/new/component.html.erb +16 -0
- data/app/components/solidus_admin/option_values/new/component.rb +7 -0
- data/app/components/solidus_admin/option_values/new/component.yml +4 -0
- data/app/components/solidus_admin/option_values/table/component.rb +53 -0
- data/app/components/solidus_admin/option_values/table/component.yml +3 -0
- data/app/components/solidus_admin/orders/cart/component.html.erb +5 -7
- data/app/components/solidus_admin/orders/cart/result/component.html.erb +2 -2
- data/app/components/solidus_admin/orders/index/component.rb +26 -26
- data/app/components/solidus_admin/orders/show/address/component.html.erb +8 -20
- data/app/components/solidus_admin/orders/show/address/component.rb +7 -7
- data/app/components/solidus_admin/orders/show/address/component.yml +0 -1
- data/app/components/solidus_admin/orders/show/adjustments/index/adjustable/spree_shipment/component.rb +1 -1
- data/app/components/solidus_admin/orders/show/adjustments/index/component.rb +24 -21
- data/app/components/solidus_admin/orders/show/component.html.erb +2 -2
- data/app/components/solidus_admin/orders/show/component.rb +1 -1
- data/app/components/solidus_admin/orders/show/component.yml +0 -3
- data/app/components/solidus_admin/orders/show/customer_search/result/component.html.erb +2 -2
- data/app/components/solidus_admin/orders/show/email/component.html.erb +2 -2
- data/app/components/solidus_admin/payment_methods/edit/component.html.erb +13 -0
- data/app/components/solidus_admin/payment_methods/edit/component.rb +7 -0
- data/app/components/solidus_admin/payment_methods/edit/component.yml +2 -0
- data/app/components/solidus_admin/payment_methods/form/component.html.erb +29 -0
- data/app/components/solidus_admin/payment_methods/form/component.rb +34 -0
- data/app/components/solidus_admin/payment_methods/form/component.yml +15 -0
- data/app/components/solidus_admin/payment_methods/index/component.rb +24 -23
- data/app/components/solidus_admin/payment_methods/new/component.html.erb +12 -0
- data/app/components/solidus_admin/payment_methods/new/component.rb +7 -0
- data/app/components/solidus_admin/payment_methods/new/component.yml +2 -0
- data/app/components/solidus_admin/products/index/component.rb +26 -26
- data/app/components/solidus_admin/products/show/categories/new/component.html.erb +17 -0
- data/app/components/solidus_admin/products/show/categories/new/component.rb +17 -0
- data/app/components/solidus_admin/products/show/categories/new/component.yml +5 -0
- data/app/components/solidus_admin/products/show/component.html.erb +90 -66
- data/app/components/solidus_admin/products/show/component.rb +2 -2
- data/app/components/solidus_admin/products/show/component.yml +23 -11
- data/app/components/solidus_admin/products/status/component.rb +1 -1
- data/app/components/solidus_admin/products/stock/component.rb +7 -7
- data/app/components/solidus_admin/properties/edit/component.html.erb +5 -5
- data/app/components/solidus_admin/properties/index/component.rb +13 -13
- data/app/components/solidus_admin/properties/new/component.html.erb +5 -5
- data/app/components/solidus_admin/refund_reasons/edit/component.html.erb +6 -15
- data/app/components/solidus_admin/refund_reasons/edit/component.yml +0 -1
- data/app/components/solidus_admin/refund_reasons/index/component.rb +13 -13
- data/app/components/solidus_admin/refund_reasons/new/component.html.erb +6 -14
- data/app/components/solidus_admin/refund_reasons/new/component.yml +0 -1
- data/app/components/solidus_admin/refunds_and_returns/component.rb +7 -7
- data/app/components/solidus_admin/reimbursement_types/index/component.rb +2 -2
- data/app/components/solidus_admin/return_reasons/edit/component.html.erb +5 -14
- data/app/components/solidus_admin/return_reasons/index/component.rb +11 -11
- data/app/components/solidus_admin/return_reasons/new/component.html.erb +5 -14
- data/app/components/solidus_admin/roles/edit/component.html.erb +12 -12
- data/app/components/solidus_admin/roles/edit/component.yml +0 -1
- data/app/components/solidus_admin/roles/index/component.rb +12 -12
- data/app/components/solidus_admin/roles/new/component.html.erb +12 -12
- data/app/components/solidus_admin/roles/new/component.yml +0 -1
- data/app/components/solidus_admin/shipping/component.rb +5 -5
- data/app/components/solidus_admin/shipping_categories/edit/component.html.erb +4 -4
- data/app/components/solidus_admin/shipping_categories/edit/component.yml +0 -1
- data/app/components/solidus_admin/shipping_categories/index/component.rb +9 -9
- data/app/components/solidus_admin/shipping_categories/new/component.html.erb +4 -4
- data/app/components/solidus_admin/shipping_categories/new/component.yml +0 -1
- data/app/components/solidus_admin/shipping_methods/index/component.rb +10 -10
- data/app/components/solidus_admin/stock_items/edit/component.html.erb +5 -8
- data/app/components/solidus_admin/stock_items/edit/component.rb +2 -2
- data/app/components/solidus_admin/stock_items/index/component.rb +25 -25
- data/app/components/solidus_admin/stock_locations/edit/component.html.erb +16 -0
- data/app/components/solidus_admin/stock_locations/edit/component.rb +5 -0
- data/app/components/solidus_admin/stock_locations/edit/component.yml +2 -0
- data/app/components/solidus_admin/stock_locations/form/component.html.erb +65 -0
- data/app/components/solidus_admin/stock_locations/form/component.rb +11 -0
- data/app/components/solidus_admin/stock_locations/form/component.yml +19 -0
- data/app/components/solidus_admin/stock_locations/index/component.rb +94 -47
- data/app/components/solidus_admin/stock_locations/new/component.html.erb +16 -0
- data/app/components/solidus_admin/stock_locations/new/component.rb +16 -0
- data/app/components/solidus_admin/stock_locations/new/component.yml +2 -0
- data/app/components/solidus_admin/store_credit_reasons/edit/component.html.erb +5 -14
- data/app/components/solidus_admin/store_credit_reasons/edit/component.yml +0 -1
- data/app/components/solidus_admin/store_credit_reasons/index/component.rb +11 -11
- data/app/components/solidus_admin/store_credit_reasons/new/component.html.erb +5 -14
- data/app/components/solidus_admin/store_credit_reasons/new/component.yml +0 -1
- data/app/components/solidus_admin/stores/edit/component.html.erb +27 -0
- data/app/components/solidus_admin/stores/edit/component.rb +5 -0
- data/app/components/solidus_admin/stores/form/component.html.erb +102 -0
- data/app/components/solidus_admin/stores/form/component.rb +27 -0
- data/app/components/solidus_admin/stores/form/component.yml +17 -0
- data/app/components/solidus_admin/stores/index/component.rb +51 -22
- data/app/components/solidus_admin/stores/new/component.html.erb +16 -0
- data/app/components/solidus_admin/stores/new/component.rb +5 -0
- data/app/components/solidus_admin/stores/new/component.yml +2 -0
- data/app/components/solidus_admin/tax_categories/edit/component.html.erb +7 -15
- data/app/components/solidus_admin/tax_categories/edit/component.yml +0 -1
- data/app/components/solidus_admin/tax_categories/index/component.rb +17 -17
- data/app/components/solidus_admin/tax_categories/new/component.html.erb +7 -15
- data/app/components/solidus_admin/tax_categories/new/component.yml +0 -1
- data/app/components/solidus_admin/tax_rates/edit/component.html.erb +12 -0
- data/app/components/solidus_admin/tax_rates/edit/component.rb +5 -0
- data/app/components/solidus_admin/tax_rates/edit/component.yml +4 -0
- data/app/components/solidus_admin/tax_rates/form/component.html.erb +25 -0
- data/app/components/solidus_admin/tax_rates/form/component.rb +29 -0
- data/app/components/solidus_admin/tax_rates/form/component.yml +9 -0
- data/app/components/solidus_admin/tax_rates/index/component.rb +38 -20
- data/app/components/solidus_admin/tax_rates/new/component.html.erb +12 -0
- data/app/components/solidus_admin/tax_rates/new/component.rb +5 -0
- data/app/components/solidus_admin/tax_rates/new/component.yml +4 -0
- data/app/components/solidus_admin/taxes/component.rb +4 -4
- data/app/components/solidus_admin/taxonomies/index/component.rb +7 -7
- data/app/components/solidus_admin/turbo/target_frame/component.html.erb +5 -0
- data/app/components/solidus_admin/turbo/target_frame/component.rb +8 -0
- data/app/components/solidus_admin/ui/alert/component.html.erb +35 -0
- data/app/components/solidus_admin/ui/alert/component.rb +51 -0
- data/app/components/solidus_admin/ui/alert/component.yml +8 -0
- data/app/components/solidus_admin/ui/badge/component.rb +11 -11
- data/app/components/solidus_admin/ui/button/component.rb +84 -27
- data/app/components/solidus_admin/ui/button/component.yml +10 -0
- data/app/components/solidus_admin/ui/checkbox/component.rb +42 -0
- data/app/components/solidus_admin/ui/dropdown/component.rb +3 -3
- data/app/components/solidus_admin/ui/forms/address/component.html.erb +1 -48
- data/app/components/solidus_admin/ui/forms/address/component.rb +29 -6
- data/app/components/solidus_admin/ui/forms/address/fields/city_and_zipcode/component.html.erb +4 -0
- data/app/components/solidus_admin/ui/forms/address/fields/city_and_zipcode/component.rb +8 -0
- data/app/components/solidus_admin/ui/forms/address/fields/country_and_state/component.html.erb +39 -0
- data/app/components/solidus_admin/ui/forms/address/{component.js → fields/country_and_state/component.js} +2 -0
- data/app/components/solidus_admin/ui/forms/address/fields/country_and_state/component.rb +15 -0
- data/app/components/solidus_admin/ui/forms/address/fields/reverse_charge_fields/component.html.erb +7 -0
- data/app/components/solidus_admin/ui/forms/address/fields/reverse_charge_fields/component.rb +12 -0
- data/app/components/solidus_admin/ui/forms/address/fieldsets/base.rb +54 -0
- data/app/components/solidus_admin/ui/forms/address/fieldsets/contact/component.rb +16 -0
- data/app/components/solidus_admin/ui/forms/address/fieldsets/contact_info/component.rb +10 -0
- data/app/components/solidus_admin/ui/forms/address/fieldsets/location/component.rb +14 -0
- data/app/components/solidus_admin/ui/forms/checkbox/component.html.erb +14 -0
- data/app/components/solidus_admin/ui/forms/checkbox/component.rb +24 -31
- data/app/components/solidus_admin/ui/forms/field/component.html.erb +4 -4
- data/app/components/solidus_admin/ui/forms/field/component.rb +14 -18
- data/app/components/solidus_admin/ui/forms/input/component.rb +9 -18
- data/app/components/solidus_admin/ui/forms/search/result/component.rb +2 -2
- data/app/components/solidus_admin/ui/forms/select/component.html.erb +21 -0
- data/app/components/solidus_admin/ui/forms/select/component.rb +157 -0
- data/app/components/solidus_admin/ui/forms/switch/component.rb +4 -4
- data/app/components/solidus_admin/ui/icon/component.rb +4 -4
- data/app/components/solidus_admin/ui/icon/names.txt +973 -238
- data/app/components/solidus_admin/ui/modal/component.html.erb +2 -4
- data/app/components/solidus_admin/ui/modal/component.js +7 -1
- data/app/components/solidus_admin/ui/modal/component.rb +2 -2
- data/app/components/solidus_admin/ui/pages/index/component.rb +50 -19
- data/app/components/solidus_admin/ui/panel/component.rb +5 -9
- data/app/components/solidus_admin/ui/radio/component.rb +29 -0
- data/app/components/solidus_admin/ui/tab/component.rb +4 -4
- data/app/components/solidus_admin/ui/table/component.html.erb +11 -10
- data/app/components/solidus_admin/ui/table/component.js +18 -26
- data/app/components/solidus_admin/ui/table/component.rb +24 -18
- data/app/components/solidus_admin/ui/table/component.yml +1 -0
- data/app/components/solidus_admin/ui/table/ransack_filter/component.html.erb +1 -1
- data/app/components/solidus_admin/ui/table/ransack_filter/component.rb +7 -7
- data/app/components/solidus_admin/ui/thumbnail/component.rb +5 -5
- data/app/components/solidus_admin/ui/toast/component.html.erb +6 -6
- data/app/components/solidus_admin/ui/toast/component.rb +1 -1
- data/app/components/solidus_admin/ui/toggletip/component.rb +1 -1
- data/app/components/solidus_admin/users/addresses/component.html.erb +3 -5
- data/app/components/solidus_admin/users/addresses/component.rb +0 -30
- data/app/components/solidus_admin/users/addresses/component.yml +0 -7
- data/app/components/solidus_admin/users/edit/api_access/component.html.erb +6 -4
- data/app/components/solidus_admin/users/edit/api_access/component.yml +8 -2
- data/app/components/solidus_admin/users/edit/component.html.erb +15 -12
- data/app/components/solidus_admin/users/edit/component.rb +1 -33
- data/app/components/solidus_admin/users/edit/component.yml +0 -7
- data/app/components/solidus_admin/users/edit/tabs/component.rb +46 -0
- data/app/components/solidus_admin/users/edit/tabs/component.yml +6 -0
- data/app/components/solidus_admin/users/index/component.rb +20 -20
- data/app/components/solidus_admin/users/items/component.html.erb +1 -3
- data/app/components/solidus_admin/users/items/component.rb +18 -51
- data/app/components/solidus_admin/users/items/component.yml +0 -7
- data/app/components/solidus_admin/users/orders/component.html.erb +1 -3
- data/app/components/solidus_admin/users/orders/component.rb +9 -39
- data/app/components/solidus_admin/users/orders/component.yml +0 -6
- data/app/components/solidus_admin/users/store_credits/edit_amount/component.html.erb +7 -8
- data/app/components/solidus_admin/users/store_credits/edit_amount/component.rb +0 -5
- data/app/components/solidus_admin/users/store_credits/edit_amount/component.yml +0 -1
- data/app/components/solidus_admin/users/store_credits/edit_memo/component.html.erb +4 -4
- data/app/components/solidus_admin/users/store_credits/edit_memo/component.yml +0 -1
- data/app/components/solidus_admin/users/store_credits/edit_validity/component.html.erb +6 -7
- data/app/components/solidus_admin/users/store_credits/edit_validity/component.rb +0 -5
- data/app/components/solidus_admin/users/store_credits/index/component.html.erb +4 -6
- data/app/components/solidus_admin/users/store_credits/index/component.rb +10 -40
- data/app/components/solidus_admin/users/store_credits/index/component.yml +0 -6
- data/app/components/solidus_admin/users/store_credits/new/component.html.erb +12 -13
- data/app/components/solidus_admin/users/store_credits/new/component.rb +0 -9
- data/app/components/solidus_admin/users/store_credits/new/component.yml +0 -1
- data/app/components/solidus_admin/users/store_credits/show/component.html.erb +5 -7
- data/app/components/solidus_admin/users/store_credits/show/component.rb +8 -38
- data/app/components/solidus_admin/users/store_credits/show/component.yml +0 -6
- data/app/components/solidus_admin/users_and_roles/component.rb +4 -4
- data/app/components/solidus_admin/zones/edit/component.html.erb +1 -0
- data/app/components/solidus_admin/zones/edit/component.rb +4 -0
- data/app/components/solidus_admin/zones/form/component.html.erb +47 -0
- data/app/components/solidus_admin/zones/form/component.js +32 -0
- data/app/components/solidus_admin/zones/form/component.rb +23 -0
- data/app/components/solidus_admin/zones/form/component.yml +7 -0
- data/app/components/solidus_admin/zones/index/component.rb +57 -18
- data/app/components/solidus_admin/zones/new/component.html.erb +1 -0
- data/app/components/solidus_admin/zones/new/component.rb +4 -0
- data/app/controllers/concerns/solidus_admin/moveable.rb +31 -0
- data/app/controllers/solidus_admin/addresses_controller.rb +9 -11
- data/app/controllers/solidus_admin/adjustments_controller.rb +5 -6
- data/app/controllers/solidus_admin/base_controller.rb +8 -7
- data/app/controllers/solidus_admin/controller_helpers/authorization.rb +1 -1
- data/app/controllers/solidus_admin/controller_helpers/locale.rb +1 -1
- data/app/controllers/solidus_admin/controller_helpers/pagination.rb +37 -0
- data/app/controllers/solidus_admin/controller_helpers/search.rb +5 -5
- data/app/controllers/solidus_admin/controller_helpers/theme.rb +2 -2
- data/app/controllers/solidus_admin/customers_controller.rb +3 -3
- data/app/controllers/solidus_admin/line_items_controller.rb +3 -3
- data/app/controllers/solidus_admin/option_types_controller.rb +11 -32
- data/app/controllers/solidus_admin/option_values_controller.rb +54 -0
- data/app/controllers/solidus_admin/orders_controller.rb +25 -19
- data/app/controllers/solidus_admin/payment_methods_controller.rb +23 -28
- data/app/controllers/solidus_admin/product_option_types_controller.rb +5 -0
- data/app/controllers/solidus_admin/product_taxons_controller.rb +58 -0
- data/app/controllers/solidus_admin/products_controller.rb +24 -28
- data/app/controllers/solidus_admin/reimbursement_types_controller.rb +3 -3
- data/app/controllers/solidus_admin/resources_controller.rb +59 -20
- data/app/controllers/solidus_admin/shipping_methods_controller.rb +4 -4
- data/app/controllers/solidus_admin/states_controller.rb +30 -0
- data/app/controllers/solidus_admin/stock_items_controller.rb +11 -6
- data/app/controllers/solidus_admin/stock_locations_controller.rb +25 -26
- data/app/controllers/solidus_admin/store_credits_controller.rb +9 -9
- data/app/controllers/solidus_admin/stores_controller.rb +43 -9
- data/app/controllers/solidus_admin/tax_rates_controller.rb +9 -22
- data/app/controllers/solidus_admin/taxonomies_controller.rb +5 -21
- data/app/controllers/solidus_admin/users_controller.rb +16 -16
- data/app/controllers/solidus_admin/zones_controller.rb +6 -26
- data/app/helpers/solidus_admin/flash_helper.rb +14 -0
- data/app/helpers/solidus_admin/last_login_helper.rb +2 -2
- data/app/helpers/solidus_admin/permission_sets_helper.rb +3 -3
- data/app/helpers/solidus_admin/solidus_form_helper.rb +9 -0
- data/app/helpers/solidus_admin/stimulus_helper.rb +29 -0
- data/app/helpers/solidus_admin/void_elements_helper.rb +1 -1
- data/app/javascript/solidus_admin/application.js +10 -1
- data/app/javascript/solidus_admin/confirm_modal.js +24 -0
- data/app/javascript/solidus_admin/controllers/custom_validity_controller.js +12 -0
- data/app/javascript/solidus_admin/controllers/sortable_controller.js +9 -2
- data/app/javascript/solidus_admin/tom-select/plugins/patch_scroll.js +19 -0
- data/app/javascript/solidus_admin/tom-select/plugins/remote_with_pagination.js +67 -0
- data/app/javascript/solidus_admin/tom-select/plugins/stash_on_search.js +68 -0
- data/app/javascript/solidus_admin/tom-select/tom-select.js +11 -0
- data/app/javascript/solidus_admin/utils.js +40 -0
- data/app/javascript/solidus_admin/web_components/solidus_select.js +90 -0
- data/app/javascript/vendor/custom_elements.js +3 -0
- data/app/lib/solidus_admin/form_builder.rb +58 -0
- data/app/views/layouts/solidus_admin/application.html.erb +6 -8
- data/app/views/layouts/solidus_admin/preview.html.erb +1 -1
- data/app/views/solidus_admin/option_values/create.turbo_stream.erb +3 -0
- data/app/views/solidus_admin/option_values/destroy.turbo_stream.erb +3 -0
- data/app/views/solidus_admin/option_values/update.turbo_stream.erb +3 -0
- data/config/importmap.rb +9 -0
- data/config/initializers/view_component.rb +1 -1
- data/config/locales/option_types.en.yml +5 -1
- data/config/locales/option_values.en.yml +9 -0
- data/config/locales/payment_methods.en.yml +5 -1
- data/config/locales/product_taxons.en.yml +6 -0
- data/config/locales/products.en.yml +2 -0
- data/config/locales/solidus_select.yml +6 -0
- data/config/locales/stock_locations.en.yml +4 -0
- data/config/locales/stores.en.yml +22 -0
- data/config/locales/tax_rates.en.yml +4 -0
- data/config/locales/zones.en.yml +4 -0
- data/config/routes.rb +21 -9
- data/config/tailwind.config.js +6 -2
- data/docs/components.md +2 -2
- data/docs/index_pages.md +11 -5
- data/docs/stimulusjs.md +1 -1
- data/eslint.config.mjs +25 -0
- data/lib/generators/solidus_admin/component/component_generator.rb +10 -6
- data/lib/generators/solidus_admin/install/install_generator.rb +24 -5
- data/lib/generators/solidus_admin/install/templates/config/initializers/solidus_admin.rb.tt +6 -0
- data/lib/solidus_admin/admin_resources.rb +1 -1
- data/lib/solidus_admin/configuration.rb +14 -14
- data/lib/solidus_admin/engine.rb +3 -2
- data/lib/solidus_admin/importmap.rb +1 -1
- data/lib/solidus_admin/menu_item.rb +1 -1
- data/lib/solidus_admin/preview.rb +1 -0
- data/lib/solidus_admin/testing_support/admin_assets.rb +1 -1
- data/lib/solidus_admin/testing_support/feature_helpers.rb +77 -3
- data/lib/solidus_admin/testing_support/shared_examples/crud_resource_requests.rb +43 -36
- data/lib/solidus_admin/testing_support/shared_examples/moveable.rb +48 -0
- data/lib/solidus_admin/testing_support/shared_examples/promotion_categories_features.rb +5 -11
- data/lib/solidus_admin/version.rb +1 -1
- data/lib/tasks/tailwind.rake +1 -1
- data/solidus_admin.gemspec +24 -21
- metadata +173 -29
- data/.eslintrc.json +0 -7
- data/app/components/solidus_admin/products/show/component.js +0 -9
- data/app/components/solidus_admin/ui/forms/input/component.js +0 -15
- data/app/components/solidus_admin/users/edit/api_access/component.js +0 -9
- data/app/javascript/solidus_admin/controllers/confirm_controller.js +0 -21
- data/lib/solidus_admin/testing_support/shared_examples/bulk_delete_resources.rb +0 -20
- /data/app/{components/solidus_admin/ui/toast/component.js → javascript/solidus_admin/controllers/alert_animation_controller.js} +0 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<%= solidus_form_for @payment_method, as: "payment_method", url: @url, html: { id: @form_id } do |f| %>
|
|
2
|
+
<%= page_with_sidebar do %>
|
|
3
|
+
<%= page_with_sidebar_main do %>
|
|
4
|
+
<%= render component("ui/panel").new do %>
|
|
5
|
+
<%= f.text_field :name %>
|
|
6
|
+
<%= f.text_area :description %>
|
|
7
|
+
<%= f.select :auto_capture,
|
|
8
|
+
auto_capture_select_options,
|
|
9
|
+
hint: t(".hints.auto_capture_html") %>
|
|
10
|
+
<% end %>
|
|
11
|
+
|
|
12
|
+
<%= render component("ui/panel").new(title: t(".deployment")) do %>
|
|
13
|
+
<%= f.select :type, available_types.map { [_1.model_name.human, _1.to_s] } %>
|
|
14
|
+
<%= f.select :preference_source, available_preference_sources, include_blank: t(".preference_source_none") %>
|
|
15
|
+
<%= f.text_field :preferred_server %>
|
|
16
|
+
<%= f.switch_field :preferred_test_mode, hint: t(".hints.test_mode_html") %>
|
|
17
|
+
<% end %>
|
|
18
|
+
<% end %>
|
|
19
|
+
|
|
20
|
+
<%= page_with_sidebar_aside do %>
|
|
21
|
+
<%= render component("ui/panel").new(title: t(".availability")) do %>
|
|
22
|
+
<%= f.checkbox :active %>
|
|
23
|
+
<%= f.select :store_ids, store_select_values, multiple: true %>
|
|
24
|
+
<%= f.checkbox :available_to_admin %>
|
|
25
|
+
<%= f.checkbox :available_to_users %>
|
|
26
|
+
<% end %>
|
|
27
|
+
<% end %>
|
|
28
|
+
<% end %>
|
|
29
|
+
<% end %>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class SolidusAdmin::PaymentMethods::Form::Component < SolidusAdmin::BaseComponent
|
|
4
|
+
include SolidusAdmin::Layout::PageHelpers
|
|
5
|
+
|
|
6
|
+
def initialize(payment_method:, url:, form_id:)
|
|
7
|
+
@payment_method = payment_method
|
|
8
|
+
@url = url
|
|
9
|
+
@form_id = form_id
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def auto_capture_select_options
|
|
13
|
+
current_app_default =
|
|
14
|
+
Spree::Config.auto_capture ? t(".auto_capture.yes_setting") : t(".auto_capture.no_setting")
|
|
15
|
+
|
|
16
|
+
[
|
|
17
|
+
[t(".auto_capture.app_default", current_app_default:), ""],
|
|
18
|
+
[t(".auto_capture.yes_setting"), true],
|
|
19
|
+
[t(".auto_capture.no_setting"), false]
|
|
20
|
+
]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def available_preference_sources
|
|
24
|
+
Spree::PaymentMethod.available_preference_sources
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def available_types
|
|
28
|
+
Rails.application.config.spree.payment_methods.sort_by(&:name)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def store_select_values
|
|
32
|
+
Spree::Store.pluck(:name, :id)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
en:
|
|
2
|
+
auto_capture:
|
|
3
|
+
app_default: "Use App Default (%{current_app_default})"
|
|
4
|
+
no_setting: "No"
|
|
5
|
+
yes_setting: "Yes"
|
|
6
|
+
availability: "Availability"
|
|
7
|
+
deployment: "Deployment"
|
|
8
|
+
hints:
|
|
9
|
+
auto_capture_html: >-
|
|
10
|
+
<p>Auto-capture setting charges customer's account upon transaction authorization.</p>
|
|
11
|
+
<p>Enable to reduce manual intervention and streamline the payment process.</p>
|
|
12
|
+
test_mode_html: >-
|
|
13
|
+
<p>Payment methods test mode allows users to simulate transactions using dummy data, ensuring the payment gateway's functionality without real transactions.</p>
|
|
14
|
+
<p>In test mode, users can check if payment methods, such as credit cards or digital wallets, are functioning correctly before going live with real transactions.</p>
|
|
15
|
+
preference_source_none: "Custom"
|
|
@@ -13,44 +13,45 @@ class SolidusAdmin::PaymentMethods::Index::Component < SolidusAdmin::UI::Pages::
|
|
|
13
13
|
solidus_admin.payment_methods_path
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
def
|
|
17
|
-
|
|
16
|
+
def edit_path(payment_method)
|
|
17
|
+
solidus_admin.edit_payment_method_path(payment_method)
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def sortable_options
|
|
21
21
|
{
|
|
22
22
|
url: ->(payment_method) { solidus_admin.move_payment_method_path(payment_method) },
|
|
23
|
-
param:
|
|
23
|
+
param: "position"
|
|
24
24
|
}
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
def page_actions
|
|
28
28
|
render component("ui/button").new(
|
|
29
29
|
tag: :a,
|
|
30
|
-
text: t(
|
|
31
|
-
href:
|
|
32
|
-
icon: "add-line"
|
|
30
|
+
text: t(".add"),
|
|
31
|
+
href: solidus_admin.new_payment_method_path,
|
|
32
|
+
icon: "add-line"
|
|
33
33
|
)
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
def batch_actions
|
|
37
37
|
[
|
|
38
38
|
{
|
|
39
|
-
label: t(
|
|
39
|
+
label: t(".batch_actions.delete"),
|
|
40
40
|
action: solidus_admin.payment_methods_path,
|
|
41
41
|
method: :delete,
|
|
42
|
-
icon:
|
|
43
|
-
|
|
42
|
+
icon: "delete-bin-7-line",
|
|
43
|
+
require_confirmation: true
|
|
44
|
+
}
|
|
44
45
|
]
|
|
45
46
|
end
|
|
46
47
|
|
|
47
48
|
def scopes
|
|
48
49
|
[
|
|
49
|
-
{
|
|
50
|
-
{
|
|
51
|
-
{
|
|
52
|
-
{
|
|
53
|
-
{
|
|
50
|
+
{name: :all, label: t(".scopes.all"), default: true},
|
|
51
|
+
{name: :active, label: t(".scopes.active")},
|
|
52
|
+
{name: :inactive, label: t(".scopes.inactive")},
|
|
53
|
+
{name: :storefront, label: t(".scopes.storefront")},
|
|
54
|
+
{name: :admin, label: t(".scopes.admin")}
|
|
54
55
|
]
|
|
55
56
|
end
|
|
56
57
|
|
|
@@ -59,22 +60,22 @@ class SolidusAdmin::PaymentMethods::Index::Component < SolidusAdmin::UI::Pages::
|
|
|
59
60
|
{
|
|
60
61
|
header: :name,
|
|
61
62
|
data: ->(payment_method) do
|
|
62
|
-
|
|
63
|
+
link_to payment_method.name, edit_path(payment_method), class: "body-link"
|
|
63
64
|
end
|
|
64
65
|
},
|
|
65
66
|
{
|
|
66
67
|
header: :type,
|
|
67
68
|
data: ->(payment_method) do
|
|
68
|
-
|
|
69
|
+
link_to payment_method.model_name.human, edit_path(payment_method), class: "body-link"
|
|
69
70
|
end
|
|
70
71
|
},
|
|
71
72
|
{
|
|
72
73
|
header: :available_to_users,
|
|
73
74
|
data: ->(payment_method) do
|
|
74
75
|
if payment_method.available_to_users?
|
|
75
|
-
component(
|
|
76
|
+
component("ui/badge").yes
|
|
76
77
|
else
|
|
77
|
-
component(
|
|
78
|
+
component("ui/badge").no
|
|
78
79
|
end
|
|
79
80
|
end
|
|
80
81
|
},
|
|
@@ -82,9 +83,9 @@ class SolidusAdmin::PaymentMethods::Index::Component < SolidusAdmin::UI::Pages::
|
|
|
82
83
|
header: :available_to_admin,
|
|
83
84
|
data: ->(payment_method) do
|
|
84
85
|
if payment_method.available_to_admin?
|
|
85
|
-
component(
|
|
86
|
+
component("ui/badge").yes
|
|
86
87
|
else
|
|
87
|
-
component(
|
|
88
|
+
component("ui/badge").no
|
|
88
89
|
end
|
|
89
90
|
end
|
|
90
91
|
},
|
|
@@ -92,12 +93,12 @@ class SolidusAdmin::PaymentMethods::Index::Component < SolidusAdmin::UI::Pages::
|
|
|
92
93
|
header: :status,
|
|
93
94
|
data: ->(payment_method) do
|
|
94
95
|
if payment_method.active?
|
|
95
|
-
render component(
|
|
96
|
+
render component("ui/badge").new(name: t(".status.active"), color: :green)
|
|
96
97
|
else
|
|
97
|
-
render component(
|
|
98
|
+
render component("ui/badge").new(name: t(".status.inactive"), color: :graphite_light)
|
|
98
99
|
end
|
|
99
100
|
end
|
|
100
|
-
}
|
|
101
|
+
}
|
|
101
102
|
]
|
|
102
103
|
end
|
|
103
104
|
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<%= page id: :resource_form do %>
|
|
2
|
+
<%= page_header do %>
|
|
3
|
+
<%= page_header_back(back_url) %>
|
|
4
|
+
<%= page_header_title(t(".title")) %>
|
|
5
|
+
<%= page_header_actions do %>
|
|
6
|
+
<%= render component("ui/button").discard(path: back_url) %>
|
|
7
|
+
<%= render component("ui/button").save(form: form_id) %>
|
|
8
|
+
<% end %>
|
|
9
|
+
<% end %>
|
|
10
|
+
|
|
11
|
+
<%= render component("payment_methods/form").new(payment_method: @resource, url: solidus_admin.payment_methods_path, form_id:) %>
|
|
12
|
+
<% end %>
|
|
@@ -20,46 +20,46 @@ class SolidusAdmin::Products::Index::Component < SolidusAdmin::UI::Pages::Index:
|
|
|
20
20
|
def page_actions
|
|
21
21
|
render component("ui/button").new(
|
|
22
22
|
tag: :a,
|
|
23
|
-
text: t(
|
|
23
|
+
text: t(".add"),
|
|
24
24
|
href: spree.new_admin_product_path,
|
|
25
|
-
icon: "add-line"
|
|
25
|
+
icon: "add-line"
|
|
26
26
|
)
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def batch_actions
|
|
30
30
|
[
|
|
31
31
|
{
|
|
32
|
-
label: t(
|
|
32
|
+
label: t(".batch_actions.delete"),
|
|
33
33
|
action: solidus_admin.products_path,
|
|
34
34
|
method: :delete,
|
|
35
|
-
icon:
|
|
36
|
-
require_confirmation: true
|
|
35
|
+
icon: "delete-bin-7-line",
|
|
36
|
+
require_confirmation: true
|
|
37
37
|
},
|
|
38
38
|
{
|
|
39
|
-
label: t(
|
|
39
|
+
label: t(".batch_actions.discontinue"),
|
|
40
40
|
action: solidus_admin.discontinue_products_path,
|
|
41
41
|
method: :put,
|
|
42
|
-
icon:
|
|
43
|
-
require_confirmation: true
|
|
42
|
+
icon: "pause-circle-line",
|
|
43
|
+
require_confirmation: true
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
|
-
label: t(
|
|
46
|
+
label: t(".batch_actions.activate"),
|
|
47
47
|
action: solidus_admin.activate_products_path,
|
|
48
48
|
method: :put,
|
|
49
|
-
icon:
|
|
50
|
-
require_confirmation: true
|
|
51
|
-
}
|
|
49
|
+
icon: "play-circle-line",
|
|
50
|
+
require_confirmation: true
|
|
51
|
+
}
|
|
52
52
|
]
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
def scopes
|
|
56
56
|
[
|
|
57
|
-
{
|
|
58
|
-
{
|
|
59
|
-
{
|
|
60
|
-
{
|
|
61
|
-
{
|
|
62
|
-
{
|
|
57
|
+
{name: :all, label: t(".scopes.all"), default: true},
|
|
58
|
+
{name: :in_stock, label: t(".scopes.in_stock")},
|
|
59
|
+
{name: :out_of_stock, label: t(".scopes.out_of_stock")},
|
|
60
|
+
{name: :available, label: t(".scopes.available")},
|
|
61
|
+
{name: :discontinued, label: t(".scopes.discontinued")},
|
|
62
|
+
{name: :deleted, label: t(".scopes.deleted")}
|
|
63
63
|
]
|
|
64
64
|
end
|
|
65
65
|
|
|
@@ -67,10 +67,10 @@ class SolidusAdmin::Products::Index::Component < SolidusAdmin::UI::Pages::Index:
|
|
|
67
67
|
Spree::OptionType.all.map do |option_type|
|
|
68
68
|
{
|
|
69
69
|
label: option_type.presentation,
|
|
70
|
-
combinator:
|
|
70
|
+
combinator: "or",
|
|
71
71
|
attribute: "option_values_id",
|
|
72
72
|
predicate: "in",
|
|
73
|
-
options: option_type.option_values.pluck(:name, :id)
|
|
73
|
+
options: option_type.option_values.pluck(:name, :id)
|
|
74
74
|
}
|
|
75
75
|
end
|
|
76
76
|
end
|
|
@@ -81,19 +81,19 @@ class SolidusAdmin::Products::Index::Component < SolidusAdmin::UI::Pages::Index:
|
|
|
81
81
|
name_column,
|
|
82
82
|
status_column,
|
|
83
83
|
price_column,
|
|
84
|
-
stock_column
|
|
84
|
+
stock_column
|
|
85
85
|
]
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
def image_column
|
|
89
89
|
{
|
|
90
|
-
col: {
|
|
91
|
-
header: tag.span(
|
|
90
|
+
col: {class: "w-[72px]"},
|
|
91
|
+
header: tag.span("aria-label": t(".image"), role: "text"),
|
|
92
92
|
data: ->(product) do
|
|
93
93
|
image = product.gallery.images.first or return
|
|
94
94
|
|
|
95
95
|
render(
|
|
96
|
-
component(
|
|
96
|
+
component("ui/thumbnail").new(
|
|
97
97
|
src: image.url(:small),
|
|
98
98
|
alt: product.name
|
|
99
99
|
)
|
|
@@ -114,14 +114,14 @@ class SolidusAdmin::Products::Index::Component < SolidusAdmin::UI::Pages::Index:
|
|
|
114
114
|
def status_column
|
|
115
115
|
{
|
|
116
116
|
header: :status,
|
|
117
|
-
data: ->(product) { component(
|
|
117
|
+
data: ->(product) { component("products/status").from_product(product) }
|
|
118
118
|
}
|
|
119
119
|
end
|
|
120
120
|
|
|
121
121
|
def stock_column
|
|
122
122
|
{
|
|
123
123
|
header: :stock,
|
|
124
|
-
data: ->(product) { component(
|
|
124
|
+
data: ->(product) { component("products/stock").from_product(product) }
|
|
125
125
|
}
|
|
126
126
|
end
|
|
127
127
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<%= turbo_frame_tag :new_product_category, target: :product_organization_frame do %>
|
|
2
|
+
<%= render component("ui/modal").new(title: t(".title")) do |modal| %>
|
|
3
|
+
<%= form_for @taxon, url: solidus_admin.product_taxons_path(@product), method: :post, html: { id: dom_id(@taxon) } do |f| %>
|
|
4
|
+
<div class="flex flex-col gap-6 pb-4">
|
|
5
|
+
<%= render component("ui/forms/field").text_field(f, :name, class: "required") %>
|
|
6
|
+
<%= render component("ui/forms/field").select(f, :parent_id, parent_taxon_options, include_blank: t(".none")) %>
|
|
7
|
+
<%= render component("ui/forms/field").text_area(f, :description) %>
|
|
8
|
+
</div>
|
|
9
|
+
<% end %>
|
|
10
|
+
<% modal.with_actions do %>
|
|
11
|
+
<form method="dialog">
|
|
12
|
+
<%= render component("ui/button").new(scheme: :secondary, text: t('.cancel')) %>
|
|
13
|
+
</form>
|
|
14
|
+
<%= render component("ui/button").new(type: :submit, text: t('.submit'), form: dom_id(@taxon)) %>
|
|
15
|
+
<% end %>
|
|
16
|
+
<% end %>
|
|
17
|
+
<% end %>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class SolidusAdmin::Products::Show::Categories::New::Component < SolidusAdmin::BaseComponent
|
|
4
|
+
def initialize(product:, taxon: nil)
|
|
5
|
+
@product = product
|
|
6
|
+
@taxon = taxon || product.taxons.build
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
def parent_taxon_options
|
|
12
|
+
@parent_taxon_options ||= Spree::Taxon.order(:lft).pluck(:name, :id, :depth).map do
|
|
13
|
+
name, id, depth = _1
|
|
14
|
+
["#{" " * depth} → #{name}", id, {data: {item_label: name}}]
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -19,124 +19,147 @@
|
|
|
19
19
|
target: :_blank,
|
|
20
20
|
scheme: :ghost
|
|
21
21
|
) %>
|
|
22
|
-
<%= render component("ui/button").
|
|
22
|
+
<%= render component("ui/button").save(form: form_id) %>
|
|
23
23
|
<% end %>
|
|
24
24
|
<% end %>
|
|
25
25
|
|
|
26
|
-
<%=
|
|
26
|
+
<%= solidus_form_for @product, url: solidus_admin.product_path(@product), html: { id: form_id } do |f| %>
|
|
27
27
|
<%= page_with_sidebar do %>
|
|
28
28
|
<%= page_with_sidebar_main do %>
|
|
29
|
-
<%= render component(
|
|
30
|
-
<%=
|
|
31
|
-
<%=
|
|
32
|
-
<%=
|
|
29
|
+
<%= render component("ui/panel").new do %>
|
|
30
|
+
<%= f.text_field(:name) %>
|
|
31
|
+
<%= f.text_field(:slug) %>
|
|
32
|
+
<%= f.text_area(:description) %>
|
|
33
33
|
<% end %>
|
|
34
34
|
|
|
35
|
-
<%= render component(
|
|
36
|
-
<%=
|
|
37
|
-
<%=
|
|
38
|
-
<%=
|
|
39
|
-
<%=
|
|
40
|
-
<%=
|
|
41
|
-
f,
|
|
42
|
-
:condition,
|
|
43
|
-
condition_options,
|
|
44
|
-
include_blank: t('spree.unset'),
|
|
45
|
-
) %>
|
|
35
|
+
<%= render component("ui/panel").new(title: t(".seo")) do %>
|
|
36
|
+
<%= f.text_field(:meta_title) %>
|
|
37
|
+
<%= f.text_field(:meta_description) %>
|
|
38
|
+
<%= f.text_area(:meta_keywords) %>
|
|
39
|
+
<%= f.text_field(:gtin) %>
|
|
40
|
+
<%= f.select(:condition, condition_options, include_blank: t("spree.unset")) %>
|
|
46
41
|
<% end %>
|
|
47
|
-
<%= render component(
|
|
42
|
+
<%= render component("ui/panel").new(title: t(".media")) do |panel| %>
|
|
48
43
|
<% panel.with_action(
|
|
49
44
|
name: t(".manage_images"),
|
|
45
|
+
scheme: :secondary,
|
|
50
46
|
href: spree.admin_product_images_path(@product)
|
|
51
47
|
) %>
|
|
52
48
|
<% end %>
|
|
53
49
|
|
|
54
|
-
<%= render component(
|
|
55
|
-
<%=
|
|
50
|
+
<%= render component("ui/panel").new(title: t(".pricing")) do %>
|
|
51
|
+
<%= f.text_field(:price) %>
|
|
56
52
|
<div class="flex gap-4 justify-items-stretch">
|
|
57
|
-
<%=
|
|
58
|
-
<%=
|
|
53
|
+
<%= f.text_field(:cost_price) %>
|
|
54
|
+
<%= f.text_field(:cost_currency) %>
|
|
59
55
|
</div>
|
|
60
56
|
<% end %>
|
|
61
57
|
|
|
62
|
-
<%= render component(
|
|
63
|
-
<%=
|
|
58
|
+
<%= render component("ui/panel").new(title: t(".stock")) do |panel| %>
|
|
59
|
+
<%= f.text_field(:sku) %>
|
|
64
60
|
|
|
65
61
|
<% panel.with_action(
|
|
66
62
|
name: t(".manage_stock"),
|
|
63
|
+
scheme: :secondary,
|
|
67
64
|
href: spree.admin_product_stock_path(@product)
|
|
68
65
|
) %>
|
|
69
66
|
<% end %>
|
|
70
67
|
|
|
71
|
-
<%= render component(
|
|
72
|
-
<%=
|
|
73
|
-
f,
|
|
68
|
+
<%= render component("ui/panel").new(title: t(".shipping")) do %>
|
|
69
|
+
<%= f.select(
|
|
74
70
|
:shipping_category_id,
|
|
75
71
|
[[t(".none"), nil]] + Spree::ShippingCategory.order(:name).pluck(:name, :id),
|
|
76
|
-
tip: t(".hints.shipping_category_html")
|
|
72
|
+
tip: t(".hints.shipping_category_html")
|
|
77
73
|
) %>
|
|
78
|
-
<%=
|
|
79
|
-
f,
|
|
74
|
+
<%= f.select(
|
|
80
75
|
:tax_category_id,
|
|
81
76
|
[[t(".none"), nil]] + Spree::TaxCategory.order(:name).pluck(:name, :id),
|
|
82
|
-
tip: t(
|
|
83
|
-
".hints.tax_category_html",
|
|
84
|
-
default_tax_category: Spree::TaxCategory.default&.name
|
|
85
|
-
),
|
|
77
|
+
tip: t(".hints.tax_category_html")
|
|
86
78
|
) %>
|
|
87
79
|
<% end %>
|
|
88
80
|
|
|
89
|
-
<%= render component(
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
81
|
+
<%= render component("ui/panel").new(title: t(".options")) do |panel| %>
|
|
82
|
+
<% if @product.product_option_types.present? %>
|
|
83
|
+
<% panel.with_section do %>
|
|
84
|
+
<div class="flex flex-col gap-4" data-controller="sortable" data-sortable-handle-value=".handle">
|
|
85
|
+
<% @product.product_option_types.includes(option_type: :option_values).order(:position).each do |product_option| %>
|
|
86
|
+
<div class="flex gap-2 justify-between" data-sortable-url=<%= solidus_admin.move_product_option_type_path(product_option) %>>
|
|
87
|
+
<div class="flex gap-2">
|
|
88
|
+
<div class="flex items-center">
|
|
89
|
+
<%= render component("ui/icon").new(name: "draggable", class: "w-6 h-6 cursor-grab handle fill-gray-500") %>
|
|
90
|
+
</div>
|
|
91
|
+
<div class="flex flex-col gap-2">
|
|
92
|
+
<span class="font-semibold text-sm"><%= product_option.option_type.name %>:<%= product_option.option_type.presentation %></span>
|
|
93
|
+
<div class="flex gap-2 flex-wrap">
|
|
94
|
+
<% product_option.option_type.option_values.each do |value| %>
|
|
95
|
+
<%= render component("ui/badge").new(name: "#{value.name}:#{value.presentation}") %>
|
|
96
|
+
<% end %>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
100
|
+
<div class="flex items-center">
|
|
101
|
+
<%= render component("ui/button").new(tag: :a, href: spree.edit_admin_option_type_path(product_option.option_type), scheme: :secondary, text: t(".edit")) %>
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
<% end %>
|
|
105
|
+
</div>
|
|
106
|
+
<% end %>
|
|
107
|
+
<% end %>
|
|
108
|
+
|
|
109
|
+
<div class="flex gap-4 justify-between items-end">
|
|
110
|
+
<%= hidden_field_tag "#{f.object_name}[option_type_ids][]", nil %>
|
|
111
|
+
<%= f.select(:option_type_ids, option_type_options, multiple: true) %>
|
|
112
|
+
<%= render component("ui/button").new(type: :submit, text: t(".save")) %>
|
|
113
|
+
</div>
|
|
114
|
+
|
|
115
|
+
<% panel.with_action(
|
|
116
|
+
name: t(".manage_options"),
|
|
117
|
+
scheme: :secondary,
|
|
118
|
+
href: solidus_admin.option_types_path
|
|
96
119
|
) %>
|
|
97
120
|
<% end %>
|
|
98
121
|
|
|
99
|
-
<%= render component(
|
|
122
|
+
<%= render component("ui/panel").new(title: t(".specifications")) do |panel| %>
|
|
100
123
|
<% panel.with_action(
|
|
101
124
|
name: t(".manage_properties"),
|
|
125
|
+
scheme: :secondary,
|
|
102
126
|
href: spree.admin_product_product_properties_path(@product)
|
|
103
127
|
) %>
|
|
104
128
|
<% end %>
|
|
105
129
|
<% end %>
|
|
106
130
|
|
|
107
131
|
<%= page_with_sidebar_aside do %>
|
|
108
|
-
<%= render component(
|
|
109
|
-
<%=
|
|
110
|
-
f,
|
|
132
|
+
<%= render component("ui/panel").new(title: t(".publishing")) do %>
|
|
133
|
+
<%= f.text_field(
|
|
111
134
|
:available_on,
|
|
112
|
-
hint: t(".available_on_html"),
|
|
135
|
+
hint: t(".hints.available_on_html"),
|
|
113
136
|
type: :date,
|
|
114
137
|
value: f.object.available_on&.to_date
|
|
115
138
|
) %>
|
|
116
|
-
<%=
|
|
117
|
-
f,
|
|
139
|
+
<%= f.text_field(
|
|
118
140
|
:discontinue_on,
|
|
119
|
-
hint: t(".discontinue_on_html"),
|
|
141
|
+
hint: t(".hints.discontinue_on_html"),
|
|
120
142
|
type: :date,
|
|
121
143
|
value: f.object.discontinue_on&.to_date
|
|
122
144
|
) %>
|
|
123
|
-
|
|
124
|
-
<%= render component("ui/forms/checkbox").new(
|
|
125
|
-
name: "#{f.object_name}[promotionable]",
|
|
126
|
-
checked: f.object.promotionable
|
|
127
|
-
) %>
|
|
128
|
-
<span class="font-normal text-xs"><%= Spree::Product.human_attribute_name :promotionable %></span>
|
|
129
|
-
<%= render component("ui/toggletip").new(text: t(".hints.promotionable_html")) %>
|
|
130
|
-
</label>
|
|
145
|
+
<%= f.checkbox(:promotionable, hint: t(".hints.promotionable_html")) %>
|
|
131
146
|
<% end %>
|
|
132
147
|
|
|
133
|
-
<%= render component(
|
|
134
|
-
<%=
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
148
|
+
<%= render component("ui/panel").new(title: t(".product_organization")) do |panel| %>
|
|
149
|
+
<%= hidden_field_tag "#{f.object_name}[taxon_ids][]", nil %>
|
|
150
|
+
|
|
151
|
+
<%= render component("turbo/target_frame").new(:product_organization_frame, source: :new_product_category) do %>
|
|
152
|
+
<%= render component("ui/forms/field").select(
|
|
153
|
+
f,
|
|
154
|
+
:taxon_ids,
|
|
155
|
+
taxon_options,
|
|
156
|
+
multiple: true
|
|
157
|
+
) %>
|
|
158
|
+
<% end %>
|
|
159
|
+
<% panel.with_action(
|
|
160
|
+
name: t(".add_new_category"),
|
|
161
|
+
href: solidus_admin.new_product_taxon_path(@product),
|
|
162
|
+
data: { turbo_frame: :new_product_category }
|
|
140
163
|
) %>
|
|
141
164
|
<% end %>
|
|
142
165
|
<% end %>
|
|
@@ -150,11 +173,12 @@
|
|
|
150
173
|
tag: :button,
|
|
151
174
|
text: t(".delete"),
|
|
152
175
|
scheme: :danger,
|
|
153
|
-
"data-
|
|
154
|
-
"data-#{stimulus_id}-message-param": t(".delete_confirmation"),
|
|
176
|
+
"data-turbo-confirm": t(".delete_confirmation")
|
|
155
177
|
) %>
|
|
156
178
|
<% end %>
|
|
157
179
|
<% end %>
|
|
158
180
|
<%= render component("ui/button").new(tag: :button, text: t(".save"), form: form_id) %>
|
|
159
181
|
<% end %>
|
|
160
182
|
<% end %>
|
|
183
|
+
|
|
184
|
+
<%= turbo_frame_tag :new_product_category, target: :product_organization_frame %>
|
|
@@ -16,13 +16,13 @@ class SolidusAdmin::Products::Show::Component < SolidusAdmin::BaseComponent
|
|
|
16
16
|
def taxon_options
|
|
17
17
|
@taxon_options ||= Spree::Taxon.order(:lft).pluck(:name, :id, :lft, :depth).map do
|
|
18
18
|
name, id, _lft, depth = _1
|
|
19
|
-
["#{
|
|
19
|
+
["#{" " * depth} → #{name}", id, {data: {item_label: name}}]
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
def option_type_options
|
|
24
24
|
@option_type_options ||= Spree::OptionType.order(:presentation).pluck(:presentation, :name, :id).map do
|
|
25
|
-
["#{
|
|
25
|
+
["#{_2}:#{_1}", _3]
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
|