react-bindings
Advanced tools
Comparing version 1.2.4 to 1.3.0
export * from './binding'; | ||
export * from './binding-args'; | ||
export * from './binding-dependencies'; | ||
export * from './binding-initializer'; | ||
export * from './change-listener'; | ||
export * from './extract-bindings-array-values'; | ||
export * from './extract-named-binding-values'; | ||
@@ -6,0 +8,0 @@ export * from './inference'; |
@@ -19,4 +19,6 @@ "use strict"; | ||
__exportStar(require("./binding-args"), exports); | ||
__exportStar(require("./binding-dependencies"), exports); | ||
__exportStar(require("./binding-initializer"), exports); | ||
__exportStar(require("./change-listener"), exports); | ||
__exportStar(require("./extract-bindings-array-values"), exports); | ||
__exportStar(require("./extract-named-binding-values"), exports); | ||
@@ -23,0 +25,0 @@ __exportStar(require("./inference"), exports); |
@@ -0,7 +1,8 @@ | ||
import type { NamedBindingDependencies } from './binding-dependencies'; | ||
import type { InferBindingGetType } from './inference'; | ||
import type { ReadonlyBinding } from './readonly-binding'; | ||
/** Extracts the value types from named bindings */ | ||
export declare type ExtractNamedBindingsValues<NamedBindingsT extends Record<string, ReadonlyBinding | undefined>> = { | ||
export declare type ExtractNamedBindingsValues<NamedBindingsT extends NamedBindingDependencies> = { | ||
[KeyT in keyof NamedBindingsT]: NamedBindingsT[KeyT] extends ReadonlyBinding ? InferBindingGetType<NamedBindingsT[KeyT]> : NamedBindingsT[KeyT] extends ReadonlyBinding | undefined ? InferBindingGetType<NamedBindingsT[KeyT]> | undefined : NamedBindingsT[KeyT]; | ||
}; | ||
//# sourceMappingURL=extract-named-binding-values.d.ts.map |
/// <reference types="react" /> | ||
import type { ReadonlyBinding } from '../../binding/types/readonly-binding'; | ||
import type { BindingDependencies } from '../../binding/types/binding-dependencies'; | ||
import type { LimiterOptions } from '../../limiter/options'; | ||
@@ -20,4 +20,4 @@ import type { BindingsConsumerProps } from './types/props'; | ||
*/ | ||
export declare const BindingsConsumer: <NamedBindingsT extends Record<string, ReadonlyBinding<any> | undefined> = Record<string, never>>({ children, bindings, areInputValuesEqual, detectInputChanges, makeComparableInputValue, limitMode, limitMSec, limitType, priority, queue }: LimiterOptions & { | ||
bindings?: import("../..").SingleOrArray<ReadonlyBinding<any> | undefined> | NamedBindingsT; | ||
export declare const BindingsConsumer: <DependenciesT extends BindingDependencies = Record<string, never>>({ children, bindings, areInputValuesEqual, detectInputChanges, makeComparableInputValue, limitMode, limitMSec, limitType, priority, queue }: LimiterOptions & { | ||
bindings?: DependenciesT | undefined; | ||
areInputValuesEqual?: ((a: any, b: any) => boolean) | undefined; | ||
@@ -27,4 +27,4 @@ detectInputChanges?: boolean | undefined; | ||
} & { | ||
children: BindingsConsumerRenderCallback<NamedBindingsT>; | ||
children: BindingsConsumerRenderCallback<DependenciesT>; | ||
}) => JSX.Element; | ||
//# sourceMappingURL=index.d.ts.map |
@@ -34,2 +34,3 @@ "use strict"; | ||
const array_like_1 = require("../../internal-utils/array-like"); | ||
const extract_binding_dependency_values_1 = require("../../internal-utils/extract-binding-dependency-values"); | ||
const get_typed_keys_1 = require("../../internal-utils/get-typed-keys"); | ||
@@ -40,3 +41,2 @@ const use_binding_effect_1 = require("../../use-binding-effect/use-binding-effect"); | ||
const emptyNamedBindings = Object.freeze({}); | ||
const emptyNamedBindingValues = Object.freeze({}); | ||
/** | ||
@@ -67,16 +67,6 @@ * A component that is rerendered based on input binding changes. | ||
// Doesn't need to be stable since Refreshable will always get rendered with the latest anyway | ||
const getNamedBindings = () => namedBindings !== null && namedBindings !== void 0 ? namedBindings : emptyNamedBindings; | ||
const getDependencies = () => bindings; | ||
// Doesn't need to be stable since Refreshable will always get rendered with the latest anyway | ||
const getNamedBindingValues = () => { | ||
var _a; | ||
if (namedBindingsKeys === undefined || namedBindings === undefined) { | ||
return emptyNamedBindingValues; | ||
} | ||
const namedBindingValues = {}; | ||
for (const key of namedBindingsKeys) { | ||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment | ||
namedBindingValues[key] = (_a = namedBindings[key]) === null || _a === void 0 ? void 0 : _a.get(); | ||
} | ||
return namedBindingValues; | ||
}; | ||
// eslint-disable-next-line @typescript-eslint/no-unsafe-return | ||
const getDependencyValues = () => (0, extract_binding_dependency_values_1.extractBindingDependencyValues)({ bindings, namedBindingsKeys }); | ||
const refreshControls = (0, react_1.useRef)({}); | ||
@@ -86,5 +76,5 @@ const cancelLastPendingRefresh = (0, use_binding_effect_1.useBindingEffect)(allBindings, () => { var _a, _b; return (_b = (_a = refreshControls.current).refresh) === null || _b === void 0 ? void 0 : _b.call(_a); }, Object.assign({ areInputValuesEqual, | ||
makeComparableInputValue }, limiterOptions)); | ||
return (react_1.default.createElement(Refreshable_1.Refreshable, { cancelLastPendingRefresh: cancelLastPendingRefresh, getNamedBindings: getNamedBindings, getNamedBindingValues: getNamedBindingValues, refreshControls: refreshControls, render: children })); | ||
return (react_1.default.createElement(Refreshable_1.Refreshable, { cancelLastPendingRefresh: cancelLastPendingRefresh, getDependencies: getDependencies, getDependencyValues: getDependencyValues, refreshControls: refreshControls, render: children })); | ||
}; | ||
exports.BindingsConsumer = BindingsConsumer; | ||
//# sourceMappingURL=index.js.map |
import { MutableRefObject } from 'react'; | ||
import type { ExtractNamedBindingsValues } from '../../../binding/types/extract-named-binding-values'; | ||
import type { ReadonlyBinding } from '../../../binding/types/readonly-binding'; | ||
import type { BindingDependencies } from '../../../binding/types/binding-dependencies'; | ||
import type { ExtractBindingValueTypes } from '../../../binding/types/extract-binding-value-types'; | ||
import type { BindingsConsumerRenderCallback } from '../types/render-callback'; | ||
/** A component that returns a refresh method that can be used to manually rerender */ | ||
export declare const Refreshable: <NamedBindingsT extends Record<string, ReadonlyBinding<any> | undefined> = Record<string, never>>({ cancelLastPendingRefresh, getNamedBindings, getNamedBindingValues, refreshControls, render }: { | ||
export declare const Refreshable: <DependenciesT extends BindingDependencies = Record<string, never>>({ cancelLastPendingRefresh, getDependencies, getDependencyValues, refreshControls, render }: { | ||
cancelLastPendingRefresh: () => void; | ||
getNamedBindings: () => NamedBindingsT; | ||
getNamedBindingValues: () => ExtractNamedBindingsValues<NamedBindingsT>; | ||
getDependencies: () => DependenciesT; | ||
getDependencyValues: () => ExtractBindingValueTypes<DependenciesT>; | ||
refreshControls: MutableRefObject<{ | ||
refresh?: () => void; | ||
}>; | ||
render: BindingsConsumerRenderCallback<NamedBindingsT>; | ||
render: BindingsConsumerRenderCallback<DependenciesT>; | ||
}) => JSX.Element; | ||
//# sourceMappingURL=Refreshable.d.ts.map |
@@ -34,3 +34,3 @@ "use strict"; | ||
/** A component that returns a refresh method that can be used to manually rerender */ | ||
const Refreshable = ({ cancelLastPendingRefresh, getNamedBindings, getNamedBindingValues, refreshControls, render }) => { | ||
const Refreshable = ({ cancelLastPendingRefresh, getDependencies, getDependencyValues, refreshControls, render }) => { | ||
const isMounted = (0, use_is_mounted_ref_1.useIsMountedRef)(); | ||
@@ -45,5 +45,5 @@ const [refreshId, setRefreshId] = (0, react_1.useState)(0); | ||
cancelLastPendingRefresh(); | ||
return react_1.default.createElement(react_1.default.Fragment, null, render(getNamedBindingValues(), getNamedBindings())); | ||
return react_1.default.createElement(react_1.default.Fragment, null, render(getDependencyValues(), getDependencies())); | ||
}; | ||
exports.Refreshable = Refreshable; | ||
//# sourceMappingURL=Refreshable.js.map |
@@ -1,7 +0,6 @@ | ||
import type { ReadonlyBinding } from '../../../binding/types/readonly-binding'; | ||
import type { BindingDependencies } from '../../../binding/types/binding-dependencies'; | ||
import type { LimiterOptions } from '../../../limiter/options'; | ||
import type { SingleOrArray } from '../../../types/array-like'; | ||
export declare type BindingsConsumerProps<NamedBindingsT extends Record<string, ReadonlyBinding | undefined> = Record<string, never>> = LimiterOptions & { | ||
export declare type BindingsConsumerProps<DependenciesT extends BindingDependencies = Record<string, never>> = LimiterOptions & { | ||
/** Bindings that cause the consumer to rerender. Undefined values are ignored */ | ||
bindings?: SingleOrArray<ReadonlyBinding | undefined> | NamedBindingsT; | ||
bindings?: DependenciesT; | ||
/** | ||
@@ -8,0 +7,0 @@ * If specified, overrides the function used to compare input values |
@@ -1,12 +0,11 @@ | ||
import { ReactNode } from 'react'; | ||
import type { ExtractNamedBindingsValues } from '../../../binding/types/extract-named-binding-values'; | ||
import type { ReadonlyBinding } from '../../../binding/types/readonly-binding'; | ||
import type { ReactNode } from 'react'; | ||
import type { BindingDependencies } from '../../../binding/types/binding-dependencies'; | ||
import type { ExtractBindingValueTypes } from '../../../binding/types/extract-binding-value-types'; | ||
/** | ||
* Called to render the contents of a BindingsConsumer on the initial render and when the associated bindings changes. | ||
* | ||
* @param bindingValues - The extracted values of the associated named bindings. If named bindings aren't used, this will be an empty | ||
* object. | ||
* @param bindings - The original named bindings if named bindings are used or an empty object otherwise. | ||
* @param bindingValues - The extracted values of the associated bindings. | ||
* @param bindings - The original dependencies. | ||
*/ | ||
export declare type BindingsConsumerRenderCallback<NamedBindingsT extends Record<string, ReadonlyBinding | undefined>> = (bindingValues: ExtractNamedBindingsValues<NamedBindingsT>, bindings: NamedBindingsT) => ReactNode; | ||
export declare type BindingsConsumerRenderCallback<DependenciesT extends BindingDependencies = Record<string, never>> = (bindingValues: ExtractBindingValueTypes<DependenciesT>, bindings: DependenciesT) => ReactNode; | ||
//# sourceMappingURL=render-callback.d.ts.map |
@@ -1,4 +0,4 @@ | ||
import type { ExtractNamedBindingsValues } from '../../binding/types/extract-named-binding-values'; | ||
import type { BindingDependencies } from '../../binding/types/binding-dependencies'; | ||
import type { ExtractBindingValueTypes } from '../../binding/types/extract-binding-value-types'; | ||
import type { ReadonlyBinding } from '../../binding/types/readonly-binding'; | ||
import type { SingleOrArray } from '../../types/array-like'; | ||
import type { DerivedBindingOptions } from './options'; | ||
@@ -8,11 +8,10 @@ /** | ||
* | ||
* @param bindingValues - The extracted values of the associated named bindings. If named bindings aren't used, this will be an empty | ||
* object. | ||
* @param bindings - The original named bindings if named bindings are used or an empty object otherwise. | ||
* @param bindingValues - The extracted values of the bindings. | ||
* @param bindings - The original bindings | ||
* | ||
* @returns The derived value | ||
*/ | ||
export declare type UseDerivedBindingTransformer<GetT, NamedBindingsT extends Record<string, ReadonlyBinding | undefined> = Record<string, never>> = (bindingValues: ExtractNamedBindingsValues<NamedBindingsT>, bindings: NamedBindingsT) => GetT; | ||
export declare type UseDerivedBindingTransformer<GetT, DependenciesT extends BindingDependencies = Record<string, never>> = (bindingValues: ExtractBindingValueTypes<DependenciesT>, bindings: DependenciesT) => GetT; | ||
/** A derived binding is a binding derived from zero or more other bindings */ | ||
export declare const useDerivedBinding: <GetT, NamedBindingsT extends Record<string, ReadonlyBinding<any> | undefined> = Record<string, never>>(bindings: SingleOrArray<ReadonlyBinding<any> | undefined> | NamedBindingsT, transformer: UseDerivedBindingTransformer<GetT, NamedBindingsT>, { id, deps, areInputValuesEqual, detectInputChanges, makeComparableInputValue, areOutputValuesEqual, detectOutputChanges, limitMode, limitMSec, limitType, priority, queue }: DerivedBindingOptions<GetT>) => ReadonlyBinding<GetT>; | ||
export declare const useDerivedBinding: <GetT, DependenciesT extends BindingDependencies = Record<string, never>>(bindings: DependenciesT, transformer: UseDerivedBindingTransformer<GetT, DependenciesT>, { id, deps, areInputValuesEqual, detectInputChanges, makeComparableInputValue, areOutputValuesEqual, detectOutputChanges, limitMode, limitMSec, limitType, priority, queue }: DerivedBindingOptions<GetT>) => ReadonlyBinding<GetT>; | ||
//# sourceMappingURL=use-derived-binding.d.ts.map |
@@ -8,6 +8,5 @@ "use strict"; | ||
const use_callback_ref_1 = require("../../internal-hooks/use-callback-ref"); | ||
const extract_binding_dependency_values_1 = require("../../internal-utils/extract-binding-dependency-values"); | ||
const get_typed_keys_1 = require("../../internal-utils/get-typed-keys"); | ||
const use_binding_effect_1 = require("../../use-binding-effect/use-binding-effect"); | ||
const emptyNamedBindings = Object.freeze({}); | ||
const emptyNamedBindingValues = Object.freeze({}); | ||
/** A derived binding is a binding derived from zero or more other bindings */ | ||
@@ -19,19 +18,10 @@ const useDerivedBinding = (bindings, transformer, { id, deps, areInputValuesEqual, detectInputChanges = true, makeComparableInputValue, areOutputValuesEqual, detectOutputChanges = true, limitMode, limitMSec, limitType, priority, queue }) => { | ||
const namedBindingsKeys = namedBindings !== undefined ? (0, get_typed_keys_1.getTypedKeys)(namedBindings) : undefined; | ||
const getNamedBindingValues = () => { | ||
var _a; | ||
if (namedBindingsKeys === undefined || namedBindings === undefined) { | ||
return emptyNamedBindingValues; | ||
} | ||
const namedBindingValues = {}; | ||
for (const key of namedBindingsKeys) { | ||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment | ||
namedBindingValues[key] = (_a = namedBindings[key]) === null || _a === void 0 ? void 0 : _a.get(); | ||
} | ||
return namedBindingValues; | ||
}; | ||
const measuredTransformer = (0, use_callback_ref_1.useCallbackRef)((namedBindingValues = getNamedBindingValues()) => { | ||
// Doesn't need to be stable since Refreshable will always get rendered with the latest anyway | ||
// eslint-disable-next-line @typescript-eslint/no-unsafe-return | ||
const getDependencyValues = () => (0, extract_binding_dependency_values_1.extractBindingDependencyValues)({ bindings, namedBindingsKeys }); | ||
const measuredTransformer = (0, use_callback_ref_1.useCallbackRef)((dependencyValues = getDependencyValues()) => { | ||
var _a, _b; | ||
const startMSec = performance.now(); | ||
try { | ||
return transformer(namedBindingValues, namedBindings !== null && namedBindings !== void 0 ? namedBindings : emptyNamedBindings); | ||
return transformer(dependencyValues, bindings); | ||
} | ||
@@ -38,0 +28,0 @@ finally { |
@@ -1,4 +0,4 @@ | ||
import type { ExtractNamedBindingsValues } from '../binding/types/extract-named-binding-values'; | ||
import type { BindingDependencies } from '../binding/types/binding-dependencies'; | ||
import type { ExtractBindingValueTypes } from '../binding/types/extract-binding-value-types'; | ||
import type { ReadonlyBinding } from '../binding/types/readonly-binding'; | ||
import type { SingleOrArray } from '../types/array-like'; | ||
import type { DerivedBindingOptions } from './derived-binding/options'; | ||
@@ -8,11 +8,10 @@ /** | ||
* | ||
* @param bindingValues - The extracted values of the associated named bindings. If named bindings aren't used, this will be an empty | ||
* object. | ||
* @param bindings - The original named bindings if named bindings are used or an empty object otherwise. | ||
* @param bindingValues - The extracted values of bindings. | ||
* @param bindings - The original bindings. | ||
* | ||
* @returns The second-level binding (i.e. a binding determined dynamically by executing this function) | ||
*/ | ||
export declare type UseFlattenedBindingTransformer<GetT, NamedBindingsT extends Record<string, ReadonlyBinding | undefined> = Record<string, never>> = (bindingValues: ExtractNamedBindingsValues<NamedBindingsT>, bindings: NamedBindingsT) => ReadonlyBinding<GetT>; | ||
export declare type UseFlattenedBindingTransformer<GetT, DependenciesT extends BindingDependencies = Record<string, never>> = (bindingValues: ExtractBindingValueTypes<DependenciesT>, bindings: DependenciesT) => ReadonlyBinding<GetT>; | ||
/** Use when a binding contains another binding, to listen to the second-level binding if either the first or second levels change */ | ||
export declare const useFlattenedBinding: <GetT, NamedBindingsT extends Record<string, ReadonlyBinding<any> | undefined> = Record<string, never>>(bindings: SingleOrArray<ReadonlyBinding<any> | undefined> | NamedBindingsT, transformer: UseFlattenedBindingTransformer<GetT, NamedBindingsT>, { id, deps, areInputValuesEqual, detectInputChanges, makeComparableInputValue, areOutputValuesEqual, detectOutputChanges, limitMode, limitMSec, limitType, priority, queue }: DerivedBindingOptions<GetT>) => ReadonlyBinding<GetT>; | ||
export declare const useFlattenedBinding: <GetT, DependenciesT extends BindingDependencies = Record<string, never>>(bindings: DependenciesT, transformer: UseFlattenedBindingTransformer<GetT, DependenciesT>, { id, deps, areInputValuesEqual, detectInputChanges, makeComparableInputValue, areOutputValuesEqual, detectOutputChanges, limitMode, limitMSec, limitType, priority, queue }: DerivedBindingOptions<GetT>) => ReadonlyBinding<GetT>; | ||
//# sourceMappingURL=flattened-binding.d.ts.map |
@@ -7,9 +7,7 @@ "use strict"; | ||
const type_utils_1 = require("../binding-utils/type-utils"); | ||
const use_callback_ref_1 = require("../internal-hooks/use-callback-ref"); | ||
const use_is_mounted_ref_1 = require("../internal-hooks/use-is-mounted-ref"); | ||
const use_stable_value_1 = require("../internal-hooks/use-stable-value"); | ||
const extract_binding_dependency_values_1 = require("../internal-utils/extract-binding-dependency-values"); | ||
const get_typed_keys_1 = require("../internal-utils/get-typed-keys"); | ||
const use_binding_effect_1 = require("../use-binding-effect/use-binding-effect"); | ||
const emptyNamedBindings = Object.freeze({}); | ||
const emptyNamedBindingValues = Object.freeze({}); | ||
/** Use when a binding contains another binding, to listen to the second-level binding if either the first or second levels change */ | ||
@@ -24,15 +22,6 @@ const useFlattenedBinding = (bindings, transformer, { id, deps = [], areInputValuesEqual, detectInputChanges = true, makeComparableInputValue, areOutputValuesEqual, detectOutputChanges = true, | ||
const namedBindingsKeys = namedBindings !== undefined ? (0, get_typed_keys_1.getTypedKeys)(namedBindings) : undefined; | ||
const getNamedBindingValues = (0, use_callback_ref_1.useCallbackRef)(() => { | ||
var _a; | ||
if (namedBindingsKeys === undefined || namedBindings === undefined) { | ||
return emptyNamedBindingValues; | ||
} | ||
const namedBindingValues = {}; | ||
for (const key of namedBindingsKeys) { | ||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment | ||
namedBindingValues[key] = (_a = namedBindings[key]) === null || _a === void 0 ? void 0 : _a.get(); | ||
} | ||
return namedBindingValues; | ||
}); | ||
const internalBinding = (0, use_binding_1.useBinding)(() => transformer(getNamedBindingValues(), namedBindings !== null && namedBindings !== void 0 ? namedBindings : emptyNamedBindingValues).get(), { | ||
// Doesn't need to be stable since Refreshable will always get rendered with the latest anyway | ||
// eslint-disable-next-line @typescript-eslint/no-unsafe-return | ||
const getDependencyValues = () => (0, extract_binding_dependency_values_1.extractBindingDependencyValues)({ bindings, namedBindingsKeys }); | ||
const internalBinding = (0, use_binding_1.useBinding)(() => transformer(getDependencyValues(), bindings).get(), { | ||
id, | ||
@@ -43,7 +32,7 @@ areEqual: areOutputValuesEqual, | ||
const secondLevelBindingListenerRemover = (0, react_1.useRef)(undefined); | ||
(0, use_binding_effect_1.useBindingEffect)(bindings, (namedBindingValues) => { | ||
(0, use_binding_effect_1.useBindingEffect)(bindings, (dependencyValues) => { | ||
var _a; | ||
(_a = secondLevelBindingListenerRemover.current) === null || _a === void 0 ? void 0 : _a.call(secondLevelBindingListenerRemover); | ||
secondLevelBindingListenerRemover.current = undefined; | ||
const secondLevelBinding = transformer(namedBindingValues, namedBindings !== null && namedBindings !== void 0 ? namedBindings : emptyNamedBindingValues); | ||
const secondLevelBinding = transformer(dependencyValues, bindings); | ||
internalBinding.set(secondLevelBinding.get()); | ||
@@ -60,4 +49,3 @@ if (isMounted.current) { | ||
(0, react_1.useEffect)(() => { | ||
const namedBindingValues = getNamedBindingValues(); | ||
const secondLevelBinding = transformer(namedBindingValues, namedBindings !== null && namedBindings !== void 0 ? namedBindings : emptyNamedBindings); | ||
const secondLevelBinding = transformer(getDependencyValues(), bindings); | ||
secondLevelBindingListenerRemover.current = secondLevelBinding.addChangeListener(() => { | ||
@@ -64,0 +52,0 @@ internalBinding.set(secondLevelBinding.get()); |
@@ -1,4 +0,3 @@ | ||
import type { ExtractNamedBindingsValues } from '../binding/types/extract-named-binding-values'; | ||
import type { ReadonlyBinding } from '../binding/types/readonly-binding'; | ||
import type { SingleOrArray } from '../types/array-like'; | ||
import type { BindingDependencies } from '../binding/types/binding-dependencies'; | ||
import type { ExtractBindingValueTypes } from '../binding/types/extract-binding-value-types'; | ||
import type { UseBindingEffectOptions } from './types/options'; | ||
@@ -12,3 +11,3 @@ /** | ||
*/ | ||
export declare type UseBindingEffectCallback<NamedBindingsT extends Record<string, ReadonlyBinding | undefined> = Record<string, never>> = (bindingValues: ExtractNamedBindingsValues<NamedBindingsT>, bindings: NamedBindingsT) => void; | ||
export declare type UseBindingEffectCallback<DependenciesT extends BindingDependencies = Record<string, never>> = (bindingValues: ExtractBindingValueTypes<DependenciesT>, bindings: DependenciesT) => void; | ||
/** | ||
@@ -22,3 +21,3 @@ * Calls the specified callback function any time any of the specified bindings are changed. | ||
*/ | ||
export declare const useBindingEffect: <NamedBindingsT extends Record<string, ReadonlyBinding<any> | undefined> = Record<string, never>>(bindings: NamedBindingsT | SingleOrArray<ReadonlyBinding<any> | undefined>, callback: UseBindingEffectCallback<NamedBindingsT>, { id, deps, areInputValuesEqual, detectInputChanges, makeComparableInputValue, triggerOnMount, limitMode, limitMSec, limitType, priority, queue }?: UseBindingEffectOptions) => (() => void); | ||
export declare const useBindingEffect: <DependenciesT extends BindingDependencies = Record<string, never>>(bindings: DependenciesT, callback: UseBindingEffectCallback<DependenciesT>, { id, deps, areInputValuesEqual, detectInputChanges, makeComparableInputValue, triggerOnMount, limitMode, limitMSec, limitType, priority, queue }?: UseBindingEffectOptions) => (() => void); | ||
//# sourceMappingURL=use-binding-effect.d.ts.map |
@@ -10,6 +10,6 @@ "use strict"; | ||
const array_like_1 = require("../internal-utils/array-like"); | ||
const extract_binding_dependency_values_1 = require("../internal-utils/extract-binding-dependency-values"); | ||
const get_typed_keys_1 = require("../internal-utils/get-typed-keys"); | ||
const use_limiter_1 = require("../limiter/use-limiter"); | ||
const emptyNamedBindings = Object.freeze({}); | ||
const emptyNamedBindingValues = Object.freeze({}); | ||
/** | ||
@@ -32,17 +32,7 @@ * Calls the specified callback function any time any of the specified bindings are changed. | ||
const stableAllBindings = (0, use_stable_value_1.useStableValue)(isNonNamedBindings ? (0, array_like_1.normalizeAsArray)(nonNamedBindings) : Object.values(namedBindings !== null && namedBindings !== void 0 ? namedBindings : emptyNamedBindings)); | ||
// Doesn't need to be stable since Refreshable will always get rendered with the latest anyway | ||
const getNamedBindingValues = () => { | ||
var _a; | ||
if (namedBindingsKeys === undefined || namedBindings === undefined) { | ||
return emptyNamedBindingValues; | ||
} | ||
const namedBindingValues = {}; | ||
for (const key of namedBindingsKeys) { | ||
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment | ||
namedBindingValues[key] = (_a = namedBindings[key]) === null || _a === void 0 ? void 0 : _a.get(); | ||
} | ||
return namedBindingValues; | ||
}; | ||
// Doesn't need to be stable since always used in a callback ref | ||
// eslint-disable-next-line @typescript-eslint/no-unsafe-return | ||
makeComparableInputValue = makeComparableInputValue !== null && makeComparableInputValue !== void 0 ? makeComparableInputValue : (() => [getAllBindingValues(stableAllBindings), deps]); | ||
const getDependencyValues = () => (0, extract_binding_dependency_values_1.extractBindingDependencyValues)({ bindings, namedBindingsKeys }); | ||
// eslint-disable-next-line @typescript-eslint/no-unsafe-return | ||
makeComparableInputValue = makeComparableInputValue !== null && makeComparableInputValue !== void 0 ? makeComparableInputValue : (() => [getDependencyValues(), deps]); | ||
const lastComparableInputValue = (0, react_1.useRef)(detectInputChanges && (triggerOnMount === false || triggerOnMount === 'if-input-changed') ? makeComparableInputValue() : undefined); | ||
@@ -80,3 +70,3 @@ /** Only used when `detectInputChanges` is `false` and `triggerOnMount` is `'if-input-changed'` */ | ||
} | ||
callback(getNamedBindingValues(), namedBindings !== null && namedBindings !== void 0 ? namedBindings : emptyNamedBindings); | ||
callback(getDependencyValues(), bindings); | ||
}); | ||
@@ -131,10 +121,2 @@ const performChecksAndTriggerCallbackIfNeeded = (0, use_callback_ref_1.useCallbackRef)(() => { | ||
// Helpers | ||
// eslint-disable-next-line @typescript-eslint/no-unsafe-return | ||
const getAllBindingValues = (bindings) => { | ||
const output = []; | ||
for (const b of bindings) { | ||
output.push(b === null || b === void 0 ? void 0 : b.get()); | ||
} | ||
return output; | ||
}; | ||
const makeChangeUidsString = (bindings) => { | ||
@@ -141,0 +123,0 @@ var _a; |
{ | ||
"name": "react-bindings", | ||
"version": "1.2.4", | ||
"version": "1.3.0", | ||
"description": "Data bindings for React", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
197297
259
2353