Sha256: 5c3d2406cd06e966804ab18be29d89cecbfe0a2635e74aeb9345c89988abc21c

Contents?: true

Size: 1.08 KB

Versions: 7

Compression:

Stored size: 1.08 KB

Contents

# lib/generators/ui/component/component_generator.rb

module Ui
  class ComponentGenerator < Rails::Generators::NamedBase
    source_root File.expand_path("templates", __dir__)
    desc "Generates a new React component (TSX) and registers it in turbo-mount.js"

    def create_component_file
      # Create a new TSX file in app/javascript/components
      template "component.tsx.erb", "app/javascript/components/#{class_name}.tsx"
    end

    def add_import_to_turbo_mount
      # Inject an import statement into turbo-mount.js after the registerComponent import
      inject_into_file(
        "app/javascript/entrypoints/turbo-mount.js",
        after: 'import { registerComponent } from "turbo-mount/react";'
      ) do
        "\nimport { #{class_name} } from \"@/components/#{class_name}\";"
      end
    end

    def register_component_in_turbo_mount
      # Append a registerComponent call at the bottom of turbo-mount.js
      append_to_file "app/javascript/entrypoints/turbo-mount.js", <<~JS

        registerComponent(turboMount, "#{class_name}", #{class_name});
      JS
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
vite_react-0.1.8 lib/generators/ui/component/component_generator.rb
vite_react-0.1.5 lib/generators/ui/component/component_generator.rb
vite_react-0.1.4 lib/generators/ui/component/component_generator.rb
vite_react-0.1.3 lib/generators/ui/component/component_generator.rb
vite_react-0.1.2 lib/generators/ui/component/component_generator.rb
vite_react-0.1.1 lib/generators/ui/component/component_generator.rb
vite_react-0.1.0 lib/generators/ui/component/component_generator.rb