Sha256: cd9c203133d76dfd4a0acdee58bfe42623b96a46e29748f9a3115744e5822df0

Contents?: true

Size: 1.51 KB

Versions: 1

Compression:

Stored size: 1.51 KB

Contents

module React
  module Component
    class State
      include ::Native::Wrapper

      def initialize(native)
        @native = native
      end
      
      def method_missing(key, *args, &block)
        if `args.length > 0`
          new_state = `{}`
          new_state.JS[(`key.endsWith('=')` ? key.chop : key)] = args[0]
          if block_given?
            @native.JS.setState(new_state, `function() { block.$call(); }`)
          else
            @native.JS.setState(new_state, `null`)
          end
        else
          %x{
            if (typeof #@native.state[key] === 'undefined') { return nil; }
            return #@native.state[key];
          }
        end
      end

      def set_state(updater, &block)
        new_state = `{}`
        updater.each do |key, value|
          new_state.JS[key] = value
        end
        if block_given?
          @native.JS.setState(new_state, `function() { block.$call(); }`)
        else
          @native.JS.setState(new_state, `null`)
        end
      end

      def size
        `Object.keys(#@native.state).length`;
      end

      def to_n
        %x{
          var new_native = {};
          for (var key in #@native.state) {
            if (typeof #@native.state[key].$to_n !== "undefined") {
              new_native[key] = #@native.state[key].$to_n();
            } else {
              new_native[key] = #@native.state[key];
            }
          }
          return new_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/state.rb