This commit is contained in:
2024-12-17 14:36:15 -08:00
parent b2dbf46d28
commit 06d106de53
17731 changed files with 3037186 additions and 144 deletions

View File

@@ -0,0 +1,16 @@
export type Handler = (value: any, ...args: any[]) => any;
export declare function defaultKey(key: string): string;
declare function useUncontrolledProp<TProp, THandler extends Handler = Handler>(propValue: TProp | undefined, defaultValue: TProp, handler?: THandler): readonly [TProp, THandler];
declare function useUncontrolledProp<TProp, THandler extends Handler = Handler>(propValue: TProp | undefined, defaultValue?: TProp | undefined, handler?: THandler): readonly [
TProp | undefined,
(...args: Parameters<THandler>) => ReturnType<THandler> | void
];
export { useUncontrolledProp };
type FilterFlags<Base, Condition> = {
[Key in keyof Base]: NonNullable<Base[Key]> extends Condition ? Key : never;
};
type AllowedNames<Base, Condition> = FilterFlags<Base, Condition>[keyof Base];
type ConfigMap<TProps extends object> = {
[p in keyof TProps]?: AllowedNames<TProps, Function>;
};
export declare function useUncontrolled<TProps extends object, TDefaults extends string = never>(props: TProps, config: ConfigMap<TProps>): Omit<TProps, TDefaults>;

View File

@@ -0,0 +1,51 @@
"use strict";
exports.__esModule = true;
exports.defaultKey = defaultKey;
exports.useUncontrolled = useUncontrolled;
exports.useUncontrolledProp = useUncontrolledProp;
var _react = require("react");
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
function defaultKey(key) {
return 'default' + key.charAt(0).toUpperCase() + key.substr(1);
}
function useUncontrolledProp(propValue, defaultValue, handler) {
const wasPropRef = (0, _react.useRef)(propValue !== undefined);
const [stateValue, setState] = (0, _react.useState)(defaultValue);
const isProp = propValue !== undefined;
const wasProp = wasPropRef.current;
wasPropRef.current = isProp;
/**
* If a prop switches from controlled to Uncontrolled
* reset its value to the defaultValue
*/
if (!isProp && wasProp && stateValue !== defaultValue) {
setState(defaultValue);
}
return [isProp ? propValue : stateValue, (0, _react.useCallback)((...args) => {
const [value, ...rest] = args;
let returnValue = handler == null ? void 0 : handler(value, ...rest);
setState(value);
return returnValue;
}, [handler])];
}
function useUncontrolled(props, config) {
return Object.keys(config).reduce((result, fieldName) => {
const _ref = result,
_defaultKey = defaultKey(fieldName),
{
[_defaultKey]: defaultValue,
[fieldName]: propsValue
} = _ref,
rest = _objectWithoutPropertiesLoose(_ref, [_defaultKey, fieldName].map(_toPropertyKey));
const handlerName = config[fieldName];
const [value, handler] = useUncontrolledProp(propsValue, defaultValue, props[handlerName]);
return Object.assign({}, rest, {
[fieldName]: value,
[handlerName]: handler
});
}, props);
}

View File

@@ -0,0 +1,16 @@
export type Handler = (value: any, ...args: any[]) => any;
export declare function defaultKey(key: string): string;
declare function useUncontrolledProp<TProp, THandler extends Handler = Handler>(propValue: TProp | undefined, defaultValue: TProp, handler?: THandler): readonly [TProp, THandler];
declare function useUncontrolledProp<TProp, THandler extends Handler = Handler>(propValue: TProp | undefined, defaultValue?: TProp | undefined, handler?: THandler): readonly [
TProp | undefined,
(...args: Parameters<THandler>) => ReturnType<THandler> | void
];
export { useUncontrolledProp };
type FilterFlags<Base, Condition> = {
[Key in keyof Base]: NonNullable<Base[Key]> extends Condition ? Key : never;
};
type AllowedNames<Base, Condition> = FilterFlags<Base, Condition>[keyof Base];
type ConfigMap<TProps extends object> = {
[p in keyof TProps]?: AllowedNames<TProps, Function>;
};
export declare function useUncontrolled<TProps extends object, TDefaults extends string = never>(props: TProps, config: ConfigMap<TProps>): Omit<TProps, TDefaults>;

View File

@@ -0,0 +1,46 @@
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
import { useCallback, useRef, useState } from 'react';
export function defaultKey(key) {
return 'default' + key.charAt(0).toUpperCase() + key.substr(1);
}
function useUncontrolledProp(propValue, defaultValue, handler) {
const wasPropRef = useRef(propValue !== undefined);
const [stateValue, setState] = useState(defaultValue);
const isProp = propValue !== undefined;
const wasProp = wasPropRef.current;
wasPropRef.current = isProp;
/**
* If a prop switches from controlled to Uncontrolled
* reset its value to the defaultValue
*/
if (!isProp && wasProp && stateValue !== defaultValue) {
setState(defaultValue);
}
return [isProp ? propValue : stateValue, useCallback((...args) => {
const [value, ...rest] = args;
let returnValue = handler == null ? void 0 : handler(value, ...rest);
setState(value);
return returnValue;
}, [handler])];
}
export { useUncontrolledProp };
export function useUncontrolled(props, config) {
return Object.keys(config).reduce((result, fieldName) => {
const _ref = result,
_defaultKey = defaultKey(fieldName),
{
[_defaultKey]: defaultValue,
[fieldName]: propsValue
} = _ref,
rest = _objectWithoutPropertiesLoose(_ref, [_defaultKey, fieldName].map(_toPropertyKey));
const handlerName = config[fieldName];
const [value, handler] = useUncontrolledProp(propsValue, defaultValue, props[handlerName]);
return Object.assign({}, rest, {
[fieldName]: value,
[handlerName]: handler
});
}, props);
}