{"version":3,"file":"uncontrolledProps.mjs","names":["callAllEventHandlers","capitalizeFirstLetter","assign","target","source","Object","defineProperties","keys","reduce","descriptors","key","getOwnPropertyDescriptor","defaultProp","prop","handlerProp","isControlled","propValue","undefined","uncontrolledProp","self","propName","propDefaultValue","propHandler","chainHandler","getValue","state","value","args","oldValue","setState","uncontrolledUniversal","props","config","handlerProps","uncontrolledProps","result","handlerName","defaultPropName","other","console","warn","setter","Array","isArray","v","handler","eventOrValue","push","uncontrolled","bind","Enhancement","condition","Component","Boolean","prototype","init","handlers","uncontrolledHandlers","context","asProps"],"sources":["../../src/enhancement/uncontrolledProps.tsx"],"sourcesContent":["import { callAllEventHandlers } from '../utils/assignProps';\nimport capitalizeFirstLetter from '../utils/capitalizeFirstLetter';\n\nfunction assign(target: any, source: any) {\n  return Object.defineProperties(\n    target,\n    Object.keys(source).reduce((descriptors: any, key) => {\n      descriptors[key] = Object.getOwnPropertyDescriptor(source, key);\n      return descriptors;\n    }, {}),\n  );\n}\n\nfunction defaultProp(prop: any) {\n  return `default${capitalizeFirstLetter(prop)}`;\n}\n\nfunction handlerProp(prop: any) {\n  if (prop === 'value') prop = '';\n  if (prop === 'checked') prop = '';\n  return `on${capitalizeFirstLetter(prop)}Change`;\n}\n\nfunction isControlled(propValue: any) {\n  return propValue !== undefined;\n}\n\nfunction uncontrolledProp(\n  self: any,\n  propName: any,\n  propValue: any,\n  propDefaultValue: any,\n  propHandler: any,\n  chainHandler: any,\n) {\n  function getValue() {\n    return isControlled(propValue)\n      ? propValue\n      : propName in self.state\n        ? self.state[propName]\n        : propDefaultValue;\n  }\n\n  return [\n    getValue(),\n    (value: any, ...args: any[]) => {\n      const oldValue = getValue();\n      if (oldValue === value) return false;\n      if (!isControlled(propValue)) self.setState({ [propName]: value });\n      return callAllEventHandlers(propHandler, ...chainHandler)(value, ...args);\n    },\n  ];\n}\n\nfunction uncontrolledUniversal(props: any, config: any, uncontrolledProp: any) {\n  const handlerProps = {};\n  const uncontrolledProps = Object.keys(config).reduce((result, propName) => {\n    const handlerName = handlerProp(propName);\n    const defaultPropName = defaultProp(propName);\n    const {\n      [defaultPropName]: propDefaultValue,\n      [propName]: propValue,\n      [handlerName]: propHandler,\n      ...other\n    } = result;\n\n    if (propDefaultValue === undefined) {\n      // eslint-disable-next-line no-console\n      console.warn(defaultPropName, 'must be installed in \"defaultProps\"');\n    }\n\n    // if (typeof propDefaultValue === 'function' && propDefaultValue.defaultInit) {\n    //   propDefaultValue = propDefaultValue(result);\n    // }\n\n    let setter = config[propName];\n    let chainHandler = [];\n\n    if (Array.isArray(setter)) [setter, ...chainHandler] = setter;\n    setter = setter || ((v: any) => v);\n\n    const [value, handler] = uncontrolledProp(\n      propName,\n      propValue,\n      propDefaultValue,\n      propHandler,\n      chainHandler,\n    );\n    // TODO: need to warn about recursion (by lsroman)\n    (handlerProps as any)[propName] = handler;\n\n    return {\n      ...other,\n      [propName]: value,\n      [handlerName]: (eventOrValue: any, ...args: any[]) => {\n        const result = [setter(eventOrValue, ...args), ...args];\n        if (eventOrValue?.target) {\n          result.push(eventOrValue);\n        }\n        return handler(...result);\n      },\n    };\n  }, props);\n  return [uncontrolledProps, handlerProps];\n}\n\nfunction uncontrolled(self: any, props: any, config: any) {\n  return uncontrolledUniversal(props, config, uncontrolledProp.bind(undefined, self));\n}\n\nfunction Enhancement() {\n  return {\n    condition: function (Component: any) {\n      return Boolean(Component.prototype.uncontrolledProps);\n    },\n    init: function (this: any) {\n      this.state = this.state || {};\n      assign(this, {\n        get handlers() {\n          const [, uncontrolledHandlers] = uncontrolled(this, this.props, this.uncontrolledProps());\n          return uncontrolledHandlers;\n        },\n      });\n    },\n    context: function (this: any, context: any) {\n      return {\n        ...context,\n        handlers: this.handlers,\n      };\n    },\n    asProps: function (this: any, props: any) {\n      // TODO: need to omit unneccessary props (by lsroman)\n      const [uncontrolledProps] = uncontrolled(this, props, this.uncontrolledProps());\n      return uncontrolledProps;\n    },\n  };\n}\n\nexport default Enhancement;\n"],"mappings":"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","ignoreList":[]}