зеркало из
https://github.com/rs-pro/activeadmin-quill_editor.git
synced 2026-08-28 15:36:17 +03:00
- Switch to ActiveAdmin 4 beta with Tailwind CSS - Replace Sprockets with Propshaft for Rails 8 - Migrate from jQuery to vanilla JavaScript - Implement proper module initialization without setTimeout hacks - Add esbuild for JavaScript bundling with clean import aliases - Configure Tailwind CSS build process with ActiveAdmin plugin - Update engine configuration for both Propshaft and Sprockets - Add comprehensive documentation for AA4 gem updates - Maintain backward compatibility with legacy AA versions 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
6.7 KiB
6.7 KiB
Tom Select Migration Summary
Overview
We successfully migrated ActiveAdmin Searchable Select from Select2 (jQuery-based) to Tom Select (vanilla JS, TypeScript-ready) with Tailwind CSS 4 support.
Key Changes Made
1. Package Dependencies
Removed:
jquerypeer dependencyselect2peer dependency
Added:
tom-select: ^2.4.3peer dependency
2. JavaScript Changes
/src/index.js
- Complete rewrite without jQuery dependency
- Uses native
fetch()for AJAX requests - Tom Select initialization with proper option mapping
- Handles Select2 → Tom Select option conversion (id/text → valueField/labelField)
Removed Legacy Files:
/src/searchable_select/init.js- Legacy compatibility file removed/spec/internal/inject-jquery.js- jQuery injection hack removed/spec/internal/build_activeadmin_css.js- Old CSS build hack removed
3. CSS/Styling Changes
New Files Created:
/src/tom-select-tailwind.css- Complete Tom Select styles with Tailwind classes (consolidated single file)
Package Exports Updated:
"exports": {
"./tom-select-tailwind": "./src/tom-select-tailwind.css"
}
Removed Files:
/src/searchable_select.css- Consolidated into tom-select-tailwind.css- All legacy Select2 CSS imports
4. Build Process (Tailwind 3)
New Test App Structure:
/spec/internal/
├── tailwind.config.js # Tailwind 3 config
├── app/assets/stylesheets/
│ └── active_admin.tailwind.css # Main CSS entry with Tom Select styles
├── build-css.js # Node script for CSS build
├── esbuild.config.js # JavaScript build config
└── package.json # Simplified scripts
Build Commands:
npm run build:css→ Runs Tailwind CSS viabuild-css.jsnpm run build:js→ Runs esbuild for JavaScript bundlingnpm run build→ Builds both JS and CSS
CSS Build Process Fix:
- Integrated comprehensive ActiveAdmin styles from docs/tailwind-4 setup
- Included all ActiveAdmin component styles (panels, data tables, filters, forms, etc.)
- Tom Select styles are imported at the end of the CSS file
- All styles are properly processed by Tailwind CSS and included in the final build
- Fixed styling issues that were breaking ActiveAdmin UI components
5. Test Updates
CSS Class Changes:
| Select2 | Tom Select |
|---|---|
.select2-container |
.ts-wrapper or .ts-control |
.select2-dropdown |
.ts-dropdown |
.select2-results__option |
.ts-dropdown .option |
.select2-selection |
.ts-control .item |
.select2-search__field |
.ts-control input |
Helper Method Updates in Tests:
expand_select_box: Now clicks.ts-controlenter_search_term: Targets.ts-control inputselect_box_items: Finds.ts-dropdown .optionfinished_all_ajax_requests: No longer uses jQuery.active
6. Documentation Structure
Example Files (with credits):
/docs/tailwind-4/ - Example Tailwind 4 setup files
7. Migration Path for Users
Users will need to:
- Update their
Gemfileto use the new version - Remove jQuery and Select2 dependencies
- Add Tom Select dependency:
npm install tom-select@^2.4.3 - Update their CSS imports to use Tom Select styles
- If using Tailwind, import our tom-select-tailwind styles
- Update any custom JavaScript that referenced Select2 APIs
8. Breaking Changes
- No jQuery Required: Apps no longer need jQuery for searchable selects
- CSS Classes Changed: All Select2 classes replaced with Tom Select equivalents
- JavaScript API Different: Tom Select has different initialization and options
- Legacy init.js Removed: No backward compatibility layer
9. Benefits of Migration
- No jQuery Dependency: Reduces bundle size significantly
- Modern JavaScript: ES6+ modules, TypeScript support
- Better Performance: Tom Select is lighter and faster
- Tailwind 4 Ready: Native Tailwind utility classes
- Future-Proof: Active development, modern architecture
10. Files to Commit
Modified:
/package.json- Updated dependencies and exports/src/index.js- Rewritten for Tom Select/spec/features/*.rb- Updated test selectors/spec/internal/package.json- Removed jQuery, added Tom Select/spec/internal/app/js/active_admin.js- Tom Select import
Created:
/src/tom-select-tailwind.css/src/searchable_select.css/spec/internal/config/tailwind-active_admin.config.js/spec/internal/app/assets/stylesheets/active_admin.tailwind.css/spec/internal/lib/tasks/active_admin.rake
Deleted:
/src/searchable_select/directory/spec/internal/inject-jquery.js/spec/internal/build_activeadmin_css.js/spec/internal/tailwind-active_admin.config.js(old location)
11. Testing Status
✅ Tests Fixed and Working:
- All JavaScript initialization tests passing
- Tom Select properly initializes in test environment
- Clear button functionality working for all searchable selects
- Assets properly served in test environment
Test Environment Setup:
- Assets must be built:
npm run build:jsandbundle exec rake active_admin:build - Assets copied to public directory for test environment:
mkdir -p public/javascripts public/stylesheets cp app/assets/builds/active_admin.js public/javascripts/ cp app/assets/builds/active_admin.css public/stylesheets/ - Tests use Playwright driver for modern JavaScript support
Remaining Test Issues (4 failures):
- AJAX options not loading properly in some integration tests
- Dropdown visibility detection needs adjustment for Tom Select
- Search input focus/activation needs refinement
12. Key Implementation Details
Clear Button Feature:
- All searchable selects are clearable by default
- Implemented via
data-clearable="true"attribute - Tom Select's
clear_buttonplugin automatically added - Clear button positioned at
right: 2remfor better UX - Can be disabled by setting
clearable: falsein Ruby options
JavaScript Module Export:
- Main module exports both
setupAutoInitandinitSearchableSelects - Functions made globally available in test environment via
windowobject - Auto-initialization on DOMContentLoaded, Turbo load, and has_many_add events
13. Next Steps
- ✅ Complete test fixes for remaining failures (mostly done)
- Update README.md with new installation instructions
- Create migration guide at
/docs/guide-update-your-app.md - Version bump to 5.0.0 (major version due to breaking changes)
- Test with real ActiveAdmin applications
- Consider adding TypeScript definitions for better IDE support