solidus_admin 0.4.1 → 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 +721 -44
- 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 +17 -47
- 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 +172 -28
- 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,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# ViewComponent v3 provided experimental functionality to define default content for slots
|
|
4
|
+
# https://viewcomponent.org/guide/slots.html#default_slot_name, but unfortunately
|
|
5
|
+
# it did not quite work: https://github.com/ViewComponent/view_component/issues/2169.
|
|
6
|
+
# Good news the issue has been resolved, not so good news - it's targeted to be released in v4,
|
|
7
|
+
# so we have to patch the functionality until we upgrade.
|
|
8
|
+
# The solution has been copied from here https://github.com/ViewComponent/view_component/pull/2291/files.
|
|
9
|
+
|
|
10
|
+
require "view_component/version"
|
|
11
|
+
if Gem::Version.new(ViewComponent::VERSION::STRING) >= Gem::Version.new("4")
|
|
12
|
+
raise "The fix is included in ViewComponent v4, please remove this patch #{__FILE__}"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
module SolidusAdmin
|
|
16
|
+
module SlotableDefault
|
|
17
|
+
def get_slot(slot_name)
|
|
18
|
+
@__vc_set_slots ||= {}
|
|
19
|
+
content unless content_evaluated? # ensure content is loaded so slots will be defined
|
|
20
|
+
|
|
21
|
+
# If the slot is set, return it
|
|
22
|
+
return @__vc_set_slots[slot_name] if @__vc_set_slots[slot_name]
|
|
23
|
+
|
|
24
|
+
# If there is a default method for the slot, call it
|
|
25
|
+
if (default_method = registered_slots[slot_name][:default_method])
|
|
26
|
+
renderable_value = send(default_method)
|
|
27
|
+
slot = ViewComponent::Slot.new(self)
|
|
28
|
+
|
|
29
|
+
if renderable_value.respond_to?(:render_in)
|
|
30
|
+
slot.__vc_component_instance = renderable_value
|
|
31
|
+
else
|
|
32
|
+
slot.__vc_content = renderable_value
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
slot
|
|
36
|
+
elsif self.class.registered_slots[slot_name][:collection]
|
|
37
|
+
# If empty slot is a collection, return an empty array
|
|
38
|
+
[]
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -1,25 +1,16 @@
|
|
|
1
|
-
<%= turbo_frame_tag :
|
|
1
|
+
<%= turbo_frame_tag :resource_form, target: "_top" do %>
|
|
2
2
|
<%= render component("ui/modal").new(title: t(".title")) do |modal| %>
|
|
3
|
-
<%=
|
|
3
|
+
<%= solidus_form_for @adjustment_reason, url: form_url, html: { id: form_id } do |f| %>
|
|
4
4
|
<div class="flex flex-col gap-6 pb-4">
|
|
5
|
-
<%=
|
|
6
|
-
<%=
|
|
7
|
-
|
|
8
|
-
<%= hidden_field_tag "#{f.object_name}[active]", "0" %>
|
|
9
|
-
<%= render component("ui/forms/checkbox").new(
|
|
10
|
-
name: "#{f.object_name}[active]",
|
|
11
|
-
value: "1",
|
|
12
|
-
checked: f.object.active
|
|
13
|
-
) %>
|
|
14
|
-
<span class="font-semibold text-xs ml-2"><%= Spree::AdjustmentReason.human_attribute_name :active %></span>
|
|
15
|
-
<%= render component("ui/toggletip").new(text: t(".hints.active")) %>
|
|
16
|
-
</label>
|
|
5
|
+
<%= f.text_field(:name, class: "required") %>
|
|
6
|
+
<%= f.text_field(:code, class: "required") %>
|
|
7
|
+
<%= f.checkbox(:active, hint: t(".hints.active")) %>
|
|
17
8
|
</div>
|
|
18
9
|
<% modal.with_actions do %>
|
|
19
10
|
<form method="dialog">
|
|
20
11
|
<%= render component("ui/button").new(scheme: :secondary, text: t('.cancel')) %>
|
|
21
12
|
</form>
|
|
22
|
-
<%=
|
|
13
|
+
<%= f.submit %>
|
|
23
14
|
<% end %>
|
|
24
15
|
<% end %>
|
|
25
16
|
<% end %>
|
|
@@ -16,17 +16,17 @@ class SolidusAdmin::AdjustmentReasons::Index::Component < SolidusAdmin::RefundsA
|
|
|
16
16
|
def page_actions
|
|
17
17
|
render component("ui/button").new(
|
|
18
18
|
tag: :a,
|
|
19
|
-
text: t(
|
|
19
|
+
text: t(".add"),
|
|
20
20
|
href: solidus_admin.new_adjustment_reason_path(**search_filter_params),
|
|
21
|
-
data: {
|
|
21
|
+
data: {turbo_frame: :resource_form},
|
|
22
22
|
icon: "add-line",
|
|
23
|
-
class: "align-self-end w-full"
|
|
23
|
+
class: "align-self-end w-full"
|
|
24
24
|
)
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
def turbo_frames
|
|
28
28
|
%w[
|
|
29
|
-
|
|
29
|
+
resource_form
|
|
30
30
|
]
|
|
31
31
|
end
|
|
32
32
|
|
|
@@ -37,11 +37,11 @@ class SolidusAdmin::AdjustmentReasons::Index::Component < SolidusAdmin::RefundsA
|
|
|
37
37
|
def batch_actions
|
|
38
38
|
[
|
|
39
39
|
{
|
|
40
|
-
label: t(
|
|
40
|
+
label: t(".batch_actions.delete"),
|
|
41
41
|
action: solidus_admin.adjustment_reasons_path(**search_filter_params),
|
|
42
42
|
method: :delete,
|
|
43
|
-
icon:
|
|
44
|
-
}
|
|
43
|
+
icon: "delete-bin-7-line"
|
|
44
|
+
}
|
|
45
45
|
]
|
|
46
46
|
end
|
|
47
47
|
|
|
@@ -51,24 +51,24 @@ class SolidusAdmin::AdjustmentReasons::Index::Component < SolidusAdmin::RefundsA
|
|
|
51
51
|
header: :name,
|
|
52
52
|
data: ->(adjustment_reason) do
|
|
53
53
|
link_to adjustment_reason.name, edit_path(adjustment_reason),
|
|
54
|
-
class:
|
|
55
|
-
data: {
|
|
54
|
+
class: "body-link",
|
|
55
|
+
data: {turbo_frame: :resource_form}
|
|
56
56
|
end
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
59
|
header: :code,
|
|
60
60
|
data: ->(adjustment_reason) do
|
|
61
61
|
link_to adjustment_reason.code, edit_path(adjustment_reason),
|
|
62
|
-
class:
|
|
63
|
-
data: {
|
|
62
|
+
class: "body-link",
|
|
63
|
+
data: {turbo_frame: :resource_form}
|
|
64
64
|
end
|
|
65
65
|
},
|
|
66
66
|
{
|
|
67
67
|
header: :active,
|
|
68
68
|
data: ->(adjustment_reason) do
|
|
69
|
-
adjustment_reason.active? ? component(
|
|
69
|
+
adjustment_reason.active? ? component("ui/badge").yes : component("ui/badge").no
|
|
70
70
|
end
|
|
71
|
-
}
|
|
71
|
+
}
|
|
72
72
|
]
|
|
73
73
|
end
|
|
74
74
|
end
|
|
@@ -1,25 +1,16 @@
|
|
|
1
|
-
<%= turbo_frame_tag :
|
|
1
|
+
<%= turbo_frame_tag :resource_form, target: "_top" do %>
|
|
2
2
|
<%= render component("ui/modal").new(title: t(".title")) do |modal| %>
|
|
3
|
-
<%=
|
|
3
|
+
<%= solidus_form_for @adjustment_reason, url: form_url, html: { id: form_id } do |f| %>
|
|
4
4
|
<div class="flex flex-col gap-6 pb-4">
|
|
5
|
-
<%=
|
|
6
|
-
<%=
|
|
7
|
-
|
|
8
|
-
<%= hidden_field_tag "#{f.object_name}[active]", "0" %>
|
|
9
|
-
<%= render component("ui/forms/checkbox").new(
|
|
10
|
-
name: "#{f.object_name}[active]",
|
|
11
|
-
value: "1",
|
|
12
|
-
checked: f.object.active
|
|
13
|
-
) %>
|
|
14
|
-
<span class="font-semibold text-xs ml-2"><%= Spree::AdjustmentReason.human_attribute_name :active %></span>
|
|
15
|
-
<%= render component("ui/toggletip").new(text: t(".hints.active")) %>
|
|
16
|
-
</label>
|
|
5
|
+
<%= f.text_field(:name, class: "required") %>
|
|
6
|
+
<%= f.text_field(:code, class: "required") %>
|
|
7
|
+
<%= f.checkbox(:active, hint: t(".hints.active")) %>
|
|
17
8
|
</div>
|
|
18
9
|
<% modal.with_actions do %>
|
|
19
10
|
<form method="dialog">
|
|
20
11
|
<%= render component("ui/button").new(scheme: :secondary, text: t('.cancel')) %>
|
|
21
12
|
</form>
|
|
22
|
-
<%=
|
|
13
|
+
<%= f.submit %>
|
|
23
14
|
<% end %>
|
|
24
15
|
<% end %>
|
|
25
16
|
<% end %>
|
|
@@ -7,8 +7,12 @@ module SolidusAdmin
|
|
|
7
7
|
# BaseComponent is the base class for all components in Solidus Admin.
|
|
8
8
|
class BaseComponent < ViewComponent::Base
|
|
9
9
|
include SolidusAdmin::ComponentsHelper
|
|
10
|
+
include SolidusAdmin::StimulusHelper
|
|
10
11
|
include SolidusAdmin::VoidElementsHelper
|
|
11
|
-
include
|
|
12
|
+
include SolidusAdmin::SolidusFormHelper
|
|
13
|
+
include SolidusAdmin::FlashHelper
|
|
14
|
+
include ::Turbo::FramesHelper
|
|
15
|
+
include ::Turbo::StreamsHelper
|
|
12
16
|
|
|
13
17
|
def icon_tag(name, **attrs)
|
|
14
18
|
render component("ui/icon").new(name:, **attrs)
|
|
@@ -17,12 +21,12 @@ module SolidusAdmin
|
|
|
17
21
|
def missing_translation(key, options)
|
|
18
22
|
keys = I18n.normalize_keys(options[:locale] || I18n.locale, key, options[:scope])
|
|
19
23
|
|
|
20
|
-
logger.debug " [#{self.class}] Missing translation: #{keys.join(
|
|
24
|
+
logger.debug " [#{self.class}] Missing translation: #{keys.join(".")}"
|
|
21
25
|
|
|
22
26
|
if (options[:locale] || I18n.default_locale) != :en
|
|
23
27
|
t(key, **options, locale: :en)
|
|
24
28
|
else
|
|
25
|
-
"translation missing: #{keys.join(
|
|
29
|
+
"translation missing: #{keys.join(".")}"
|
|
26
30
|
end
|
|
27
31
|
end
|
|
28
32
|
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<div id="confirm" data-controller="<%= stimulus_id %>">
|
|
2
|
+
<%= render component("ui/modal").new(
|
|
3
|
+
title: t(".title"),
|
|
4
|
+
open: false
|
|
5
|
+
) do |modal| %>
|
|
6
|
+
<% modal.with_actions do %>
|
|
7
|
+
<form method="dialog">
|
|
8
|
+
<%= render component("ui/button").new(scheme: :secondary, text: t(".cancel")) %>
|
|
9
|
+
</form>
|
|
10
|
+
<%= render component("ui/button").new(
|
|
11
|
+
text: t(".confirm"),
|
|
12
|
+
id: "confirm-accept",
|
|
13
|
+
scheme: :danger,
|
|
14
|
+
data: { "#{stimulus_id}-target": "accept" }
|
|
15
|
+
) %>
|
|
16
|
+
<% end %>
|
|
17
|
+
<% end %>
|
|
18
|
+
</div>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Controller } from "@hotwired/stimulus"
|
|
2
|
+
|
|
3
|
+
export default class extends Controller {
|
|
4
|
+
static targets = ["accept"]
|
|
5
|
+
|
|
6
|
+
open(message, { details = "", buttonText } = {}) {
|
|
7
|
+
const dialog = this.element.querySelector("dialog")
|
|
8
|
+
|
|
9
|
+
dialog.querySelector(".modal-title").textContent = message
|
|
10
|
+
dialog.querySelector(".modal-body").textContent = details
|
|
11
|
+
if (buttonText) this.acceptTarget.textContent = buttonText
|
|
12
|
+
|
|
13
|
+
dialog.showModal()
|
|
14
|
+
|
|
15
|
+
return new Promise((resolve) => {
|
|
16
|
+
const controller = new AbortController()
|
|
17
|
+
this.acceptTarget.addEventListener("click", () => { resolve(true); controller.abort(); dialog.close() }, { signal: controller.signal })
|
|
18
|
+
dialog.addEventListener("close", () => { resolve(false); controller.abort() }, { signal: controller.signal })
|
|
19
|
+
})
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Component wrapper for confirmation dialog. This component uses a modal which
|
|
4
|
+
# is rendered in the layout initially hidden. To have it open to confirm a
|
|
5
|
+
# user's action, place the "data-turbo-confirm" on the submitter (or any other
|
|
6
|
+
# element that supports "data-turbo-confirm" attribute: form, link with
|
|
7
|
+
# "data-turbo-method") with the text you want to have in the modal title:
|
|
8
|
+
#
|
|
9
|
+
# <form>
|
|
10
|
+
# <button type=submit data-turbo-confirm="Are you sure?">Submit</button>
|
|
11
|
+
# </form>
|
|
12
|
+
#
|
|
13
|
+
# <form data-turbo-confirm="Confirm saving">
|
|
14
|
+
# </form>
|
|
15
|
+
#
|
|
16
|
+
# You can add more details in the body of the modal using "data-confirm-details"
|
|
17
|
+
# attribute:
|
|
18
|
+
#
|
|
19
|
+
# <button data-turbo-confirm="Are you sure?" data-confirm-details="This cannot be undone.">Submit</button>
|
|
20
|
+
#
|
|
21
|
+
# To customize "Confirm" button text use "data-confirm-button" attribute:
|
|
22
|
+
#
|
|
23
|
+
# <button data-turbo-confirm="This action is not reversible" data-confirm-button="Proceed">Submit</button>
|
|
24
|
+
#
|
|
25
|
+
class SolidusAdmin::Layout::Confirm::Component < SolidusAdmin::BaseComponent
|
|
26
|
+
end
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<div id="flash_alerts" class="flex items-center justify-center">
|
|
2
|
+
<div class="fixed w-2/3 top-3 flex flex-col gap-3 pointer-events-none" role="alert">
|
|
3
|
+
<% alerts.each do |key, text| %>
|
|
4
|
+
<%= render component("ui/alert").new(title: text[:title], message: text[:message], scheme: key.to_sym) %>
|
|
5
|
+
<% end %>
|
|
6
|
+
</div>
|
|
7
|
+
</div>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class SolidusAdmin::Layout::Flashes::Alerts::Component < SolidusAdmin::BaseComponent
|
|
4
|
+
attr_reader :alerts
|
|
5
|
+
|
|
6
|
+
# Construct alert flashes like:
|
|
7
|
+
# flash[:alert] = { <alert_type>: { title: "", message: "" } }
|
|
8
|
+
# See +SolidusAdmin::UI::Alert::Component::SCHEMES+ for available alert types.
|
|
9
|
+
#
|
|
10
|
+
# If a string is passed to flash[:alert], we treat it is a body of the alert message and fall back to +danger+ type
|
|
11
|
+
# and default title (see +SolidusAdmin::UI::Alert::Component+).
|
|
12
|
+
def initialize(alerts:)
|
|
13
|
+
if alerts.is_a?(String)
|
|
14
|
+
alerts = {danger: {message: alerts}}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
@alerts = alerts.slice(*SolidusAdmin::UI::Alert::Component::SCHEMES.keys)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<div id="flash_toasts" class="fixed inset-x-0 bottom-3 flex items-center justify-center flex-col gap-3 pointer-events-none" role="alert">
|
|
2
|
+
<% flash.each do |key, message| %>
|
|
3
|
+
<%= render component("ui/toast").new(text: message, scheme: key.to_sym == :error ? :error : :default) %>
|
|
4
|
+
<% end %>
|
|
5
|
+
</div>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<div id="flash_toasts" class="fixed inset-x-0 bottom-3 flex items-center justify-center flex-col gap-3 pointer-events-none" role="alert">
|
|
2
|
+
<% toasts.each do |key, message| %>
|
|
3
|
+
<%= render component("ui/toast").new(text: message, scheme: key.to_sym == :error ? :error : :default) %>
|
|
4
|
+
<% end %>
|
|
5
|
+
</div>
|
|
@@ -27,12 +27,23 @@
|
|
|
27
27
|
shadow-base
|
|
28
28
|
">
|
|
29
29
|
|
|
30
|
+
<% if defined?(Spree::Core::ControllerHelpers::Timezone) %>
|
|
31
|
+
<% available_timezones_for_select = ActiveSupport::TimeZone.all.map(&:name) %>
|
|
32
|
+
<li class="h-8 flex items-center hover:bg-gray-25 rounded">
|
|
33
|
+
<%= autosubmit_select_tag(
|
|
34
|
+
"solidus_timezone",
|
|
35
|
+
options_for_select(available_timezones_for_select, selected: Time.zone.name),
|
|
36
|
+
icon: 'time-zone-line',
|
|
37
|
+
) %>
|
|
38
|
+
</li>
|
|
39
|
+
<% end %>
|
|
40
|
+
|
|
30
41
|
<% if (available_locales = Spree.i18n_available_locales).any? %>
|
|
31
42
|
<li class="h-8 flex items-center hover:bg-gray-25 rounded">
|
|
32
43
|
<%= autosubmit_select_tag(
|
|
33
44
|
"switch_to_locale",
|
|
34
45
|
options_for_select(locale_options_for_select(available_locales), selected: I18n.locale),
|
|
35
|
-
icon: '
|
|
46
|
+
icon: 'translate-2',
|
|
36
47
|
) %>
|
|
37
48
|
</li>
|
|
38
49
|
<% end %>
|
|
@@ -12,7 +12,7 @@ class SolidusAdmin::Layout::Navigation::Account::Component < SolidusAdmin::BaseC
|
|
|
12
12
|
available_locales.map do |locale|
|
|
13
13
|
[
|
|
14
14
|
t("spree.i18n.this_file_language", locale:, default: locale.to_s, fallback: false),
|
|
15
|
-
locale
|
|
15
|
+
locale
|
|
16
16
|
]
|
|
17
17
|
end.sort
|
|
18
18
|
end
|
|
@@ -22,14 +22,14 @@ class SolidusAdmin::Layout::Navigation::Account::Component < SolidusAdmin::BaseC
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def autosubmit_select_tag(name, options, icon:, &block)
|
|
25
|
-
form_tag(request.fullpath, method: :get,
|
|
25
|
+
form_tag(request.fullpath, method: :get, "data-turbo": false, class: "w-full") do
|
|
26
26
|
safe_join([
|
|
27
27
|
block_given? ? capture(&block) : nil,
|
|
28
28
|
tag.label(safe_join([
|
|
29
29
|
icon_tag(icon, class: "w-full max-w-[20px] h-5 fill-current shrink"),
|
|
30
30
|
tag.select(options, name:, onchange: "this.form.requestSubmit()", class: "w-full appearance-none grow bg-transparent outline-none"),
|
|
31
|
-
icon_tag("expand-up-down-line", class: "w-full max-w-[20px] h-5 fill-current shrink")
|
|
32
|
-
]), class: "flex gap-2 items-center px-2")
|
|
31
|
+
icon_tag("expand-up-down-line", class: "w-full max-w-[20px] h-5 fill-current shrink")
|
|
32
|
+
]), class: "flex gap-2 items-center px-2")
|
|
33
33
|
])
|
|
34
34
|
end
|
|
35
35
|
end
|
|
@@ -8,24 +8,18 @@ module SolidusAdmin::Layout::PageHelpers
|
|
|
8
8
|
|
|
9
9
|
def page_header_actions(&block)
|
|
10
10
|
tag.div(safe_join([
|
|
11
|
-
capture(&block)
|
|
11
|
+
capture(&block)
|
|
12
12
|
]), class: "flex gap-2 items-center")
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
def page_header_back(back_path)
|
|
16
|
-
render component("ui/button").
|
|
17
|
-
tag: :a,
|
|
18
|
-
title: t(".back"),
|
|
19
|
-
icon: "arrow-left-line",
|
|
20
|
-
scheme: :secondary,
|
|
21
|
-
href: back_path
|
|
22
|
-
)
|
|
16
|
+
render component("ui/button").back(path: back_path)
|
|
23
17
|
end
|
|
24
18
|
|
|
25
19
|
def page_header_title(title, &block)
|
|
26
20
|
tag.h1(safe_join([
|
|
27
21
|
tag.span(title, class: "font-semibold text-xl"),
|
|
28
|
-
(capture(&block) if block_given?) || ""
|
|
22
|
+
(capture(&block) if block_given?) || ""
|
|
29
23
|
]), class: "flex-1 text-2xl font-bold")
|
|
30
24
|
end
|
|
31
25
|
|
|
@@ -7,8 +7,8 @@ class SolidusAdmin::Layout::SkipLink::Component < SolidusAdmin::BaseComponent
|
|
|
7
7
|
|
|
8
8
|
def call
|
|
9
9
|
link_to t(".skip_link"),
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
@href,
|
|
11
|
+
class: %(
|
|
12
12
|
sr-only
|
|
13
13
|
focus:not-sr-only
|
|
14
14
|
inline-block
|
|
@@ -17,6 +17,6 @@ class SolidusAdmin::Layout::SkipLink::Component < SolidusAdmin::BaseComponent
|
|
|
17
17
|
font-normal text-sm
|
|
18
18
|
text-white
|
|
19
19
|
bg-black
|
|
20
|
-
|
|
20
|
+
)
|
|
21
21
|
end
|
|
22
22
|
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<%= turbo_frame_tag :resource_form, target: "_top" do %>
|
|
2
|
+
<%= page do %>
|
|
3
|
+
<%= page_header do %>
|
|
4
|
+
<%= page_header_back(back_url) %>
|
|
5
|
+
<%= page_header_title(t('.title')) %>
|
|
6
|
+
<%= page_header_actions do %>
|
|
7
|
+
<%= render component("ui/button").new(text: t(".save"),form: form_id) %>
|
|
8
|
+
<% end %>
|
|
9
|
+
<% end %>
|
|
10
|
+
|
|
11
|
+
<div class="flex flex-col gap-4">
|
|
12
|
+
<%= form_for @option_type, url: form_url, html: { id: form_id } do |f| %>
|
|
13
|
+
<%= render component("ui/panel").new(title: t(".panels.option_type.title")) do |panel| %>
|
|
14
|
+
<% panel.with_section(class: "flex flex-col gap-4") do %>
|
|
15
|
+
<div class="flex gap-4 w-full">
|
|
16
|
+
<%= render component("ui/forms/field").text_field(f, :name, class: "required") %>
|
|
17
|
+
<%= render component("ui/forms/field").text_field(f, :presentation, class: "required") %>
|
|
18
|
+
</div>
|
|
19
|
+
<% end %>
|
|
20
|
+
<% end %>
|
|
21
|
+
<% end %>
|
|
22
|
+
|
|
23
|
+
<%= render component("ui/panel").new(title: t(".panels.option_values.title")) do |panel| %>
|
|
24
|
+
<% panel.with_section(wide: true, high: true, class: "flex flex-col gap-4") do %>
|
|
25
|
+
<div id="option_values_table">
|
|
26
|
+
<%= render component("option_values/table").new(@option_type) %>
|
|
27
|
+
</div>
|
|
28
|
+
<% end %>
|
|
29
|
+
|
|
30
|
+
<% panel.with_action(
|
|
31
|
+
name: t(".panels.option_values.add"),
|
|
32
|
+
href: solidus_admin.new_option_type_option_value_path(@option_type),
|
|
33
|
+
data: { turbo_frame: :option_value_modal }
|
|
34
|
+
) %>
|
|
35
|
+
<% end %>
|
|
36
|
+
|
|
37
|
+
<%= page_footer do %>
|
|
38
|
+
<%= render component("ui/button").new(text: t(".save"), form: form_id) %>
|
|
39
|
+
<% end %>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<%= turbo_frame_tag :option_value_modal, target: "_top" %>
|
|
43
|
+
<% end %>
|
|
44
|
+
<% end %>
|
|
@@ -5,49 +5,43 @@ class SolidusAdmin::OptionTypes::Index::Component < SolidusAdmin::UI::Pages::Ind
|
|
|
5
5
|
Spree::OptionType
|
|
6
6
|
end
|
|
7
7
|
|
|
8
|
-
def row_url(option_type)
|
|
9
|
-
spree.edit_admin_option_type_path(option_type)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
8
|
def sortable_options
|
|
13
9
|
{
|
|
14
10
|
url: ->(option_type) { solidus_admin.move_option_type_path(option_type) },
|
|
15
|
-
param:
|
|
11
|
+
param: "position"
|
|
16
12
|
}
|
|
17
13
|
end
|
|
18
14
|
|
|
15
|
+
def turbo_frames
|
|
16
|
+
%w[resource_form]
|
|
17
|
+
end
|
|
18
|
+
|
|
19
19
|
def page_actions
|
|
20
20
|
render component("ui/button").new(
|
|
21
21
|
tag: :a,
|
|
22
|
-
text: t(
|
|
23
|
-
href:
|
|
24
|
-
|
|
22
|
+
text: t(".add"),
|
|
23
|
+
href: solidus_admin.new_option_type_path,
|
|
24
|
+
data: {turbo_frame: :resource_form},
|
|
25
|
+
icon: "add-line"
|
|
25
26
|
)
|
|
26
27
|
end
|
|
27
28
|
|
|
28
|
-
def prev_page_path
|
|
29
|
-
solidus_admin.url_for(**request.params, page: @page.number - 1, only_path: true) unless @page.first?
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def next_page_path
|
|
33
|
-
solidus_admin.url_for(**request.params, page: @page.next_param, only_path: true) unless @page.last?
|
|
34
|
-
end
|
|
35
|
-
|
|
36
29
|
def batch_actions
|
|
37
30
|
[
|
|
38
31
|
{
|
|
39
|
-
label: t(
|
|
32
|
+
label: t(".batch_actions.delete"),
|
|
40
33
|
action: solidus_admin.option_types_path,
|
|
41
34
|
method: :delete,
|
|
42
|
-
icon:
|
|
43
|
-
|
|
35
|
+
icon: "delete-bin-7-line",
|
|
36
|
+
require_confirmation: true
|
|
37
|
+
}
|
|
44
38
|
]
|
|
45
39
|
end
|
|
46
40
|
|
|
47
41
|
def columns
|
|
48
42
|
[
|
|
49
43
|
name_column,
|
|
50
|
-
presentation_column
|
|
44
|
+
presentation_column
|
|
51
45
|
]
|
|
52
46
|
end
|
|
53
47
|
|
|
@@ -55,7 +49,8 @@ class SolidusAdmin::OptionTypes::Index::Component < SolidusAdmin::UI::Pages::Ind
|
|
|
55
49
|
{
|
|
56
50
|
header: :name,
|
|
57
51
|
data: ->(option_type) do
|
|
58
|
-
|
|
52
|
+
link_to option_type.name, edit_path(option_type),
|
|
53
|
+
class: "body-link"
|
|
59
54
|
end
|
|
60
55
|
}
|
|
61
56
|
end
|
|
@@ -64,8 +59,13 @@ class SolidusAdmin::OptionTypes::Index::Component < SolidusAdmin::UI::Pages::Ind
|
|
|
64
59
|
{
|
|
65
60
|
header: :presentation,
|
|
66
61
|
data: ->(option_type) do
|
|
67
|
-
|
|
62
|
+
link_to option_type.presentation, edit_path(option_type),
|
|
63
|
+
class: "body-link"
|
|
68
64
|
end
|
|
69
65
|
}
|
|
70
66
|
end
|
|
67
|
+
|
|
68
|
+
def edit_path(option_type)
|
|
69
|
+
solidus_admin.edit_option_type_path(option_type)
|
|
70
|
+
end
|
|
71
71
|
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<%= turbo_frame_tag :resource_form, target: "_top" do %>
|
|
2
|
+
<%= render component("ui/modal").new(title: t(".title")) do |modal| %>
|
|
3
|
+
<%= form_for @option_type, url: form_url, html: { id: form_id } 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").text_field(f, :presentation, class: "required") %>
|
|
7
|
+
</div>
|
|
8
|
+
<% modal.with_actions do %>
|
|
9
|
+
<form method="dialog">
|
|
10
|
+
<%= render component("ui/button").new(scheme: :secondary, text: t('.cancel')) %>
|
|
11
|
+
</form>
|
|
12
|
+
<%= render component("ui/button").new(form: form_id, type: :submit, text: t('.submit')) %>
|
|
13
|
+
<% end %>
|
|
14
|
+
<% end %>
|
|
15
|
+
<% end %>
|
|
16
|
+
<% end %>
|