From 48329ad5340219d9a7650cad2b77faf8c2e1a618 Mon Sep 17 00:00:00 2001 From: Vadim Dalecky Date: Sun, 11 Feb 2018 00:01:29 +0000 Subject: [PATCH] feat: implement --- src/ActiveSensor/index.ts | 47 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/ActiveSensor/index.ts diff --git a/src/ActiveSensor/index.ts b/src/ActiveSensor/index.ts new file mode 100644 index 00000000..508a2145 --- /dev/null +++ b/src/ActiveSensor/index.ts @@ -0,0 +1,47 @@ +import {Component, cloneElement} from 'react'; +import {h} from '../util'; +import {Value} from '../Value'; +import renderProp from '../util/renderProp'; +import faccToHoc from '../util/faccToHoc'; + +export interface IActiveSensorProps { + bond?: boolean | string; +} + +export const ActiveSensor = (props: IActiveSensorProps) => { + let {bond} = props; + + return Value({ + render: ({value, set}) => { + if (bond) { + if (typeof bond === 'boolean') { + bond = 'bond'; + } + + return renderProp(this.props, { + isActive: value, + [bond]: { + onMouseDown: () => value(false), + onMouseUp: () => value(true), + } + }); + } else { + const element = renderProp(this.props, { + isActive: value + }); + + return cloneElement(element, { + onMouseDown: () => value(false), + onMouseUp: () => value(true), + }); + } + } + }); +}; + +const ActiveSensorWithBond = (props) => h(ActiveSensor, { + bond: true, + ...props +}); + +export const withActive = faccToHoc(ActiveSensorWithBond, 'active');