Skip to content

add accepts? method #363

Open
Open
@catmando

Description

@catmando

Its useful for a component to know if its parent is going to accept an event from the component.

   fires :foo 
  ...
  ...  accepts? :foo # does my parent component have a foo handler?

Note that firing foo will NOT cause an error even if the parent has not handler, but it still might be useful to know (i.e. to control say a save button, but only if the parent is looking for you to do the save)

Can be added with the following patch in the HyperComponent base class:

  class << self
    def accepts_list
      @accepts_list ||= {}
    end
    def fires(name, opts = {})
      aka = opts[:alias] || "#{name}!"
      name = if name =~ /^<(.+)>$/
               name.gsub(/^<(.+)>$/, '\1')
             elsif Hyperstack::Component::Event::BUILT_IN_EVENTS.include?("on#{name.event_camelize}")
               "on#{name.event_camelize}"
             else
               "on_#{name}"
             end
      validator.event(name)
      define_method(aka) { |*args| props[name]&.call(*args) }
      accepts_list[opts[:alias] || aka.chomp('!')] = name
    end
  end
  def accepts?(aka)
    props[self.class.accepts_list[aka]]
  end

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions