Sha256: 436a7e672df326df5244b8e12ebfe3d345ec43aa271a2cff314fe8e5a63f5f74

Contents?: true

Size: 1.91 KB

Versions: 1

Compression:

Stored size: 1.91 KB

Contents

module React
  module Component
    class Styles

      def initialize(native, props_prop = false)
        @native = native
        @props_prop = props_prop
      end

      def [](prop)
        method_missing(prop)
      end

      def []=(prop, val)
        method_missing(prop, val)
      end

      def deep_merge(a_hash)
        native_hash = a_hash.to_n
        React::Component::Styles.new(`Opal.React.merge_deep(#@native, native_hash)`)
      end

      def deep_merge!(a_hash)
        native_hash = a_hash.to_n
        `#@native = Opal.React.merge_deep(#@native, native_hash)`
        self
      end

      def method_missing(prop, *args, &block)
        %x{
          let value;
          if (#@props_prop) {
            if (!#@native.props[#@props_prop] || typeof #@native.props[#@props_prop][prop] === 'undefined') {
              console.warn("Style/Theme key '" + prop + "' returning nil!");
              return #{nil};
            }
            value = #@native.props[#@props_prop][prop];
          } else {
            if (!#@native || typeof #@native[prop] === 'undefined') {
              console.warn("Style/Theme key '" + prop + "' returning nil!");
              return #{nil};
            }
            value = #@native[prop];
          }
          if (typeof value === 'string' || typeof value === 'number' || Array.isArray(value)) { return value; }
          if (typeof value === 'function') { return value.apply(#@native, args); }
          return Opal.React.Component.Styles.$new(value);
        }
      end

      def to_h
        %x{
          if (#@props_prop) { return Opal.Hash.$new(#@native.props[#@props_prop]); }
          else { return Opal.Hash.$new(#@native); }
        }
      end

      def to_n
        %x{
          if (#@props_prop) { return #@native.props[#@props_prop]; }
          else { return #@native; }
        }
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
isomorfeus-react-16.13.12 lib/react/component/styles.rb