@cleanweb/oore 2.0.0-alpha.28 → 2.0.0-alpha.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -96,15 +96,12 @@ const debounce = (...init) => {
96
96
  }
97
97
  // Execute the pending call.
98
98
  (() => __awaiter(void 0, void 0, void 0, function* () {
99
- var _a;
100
99
  try {
101
- const result = (_a = (yield callback(...args))) !== null && _a !== void 0 ? _a : {};
102
- result.__debounceFlushedWithArgs = args;
103
- resolve === null || resolve === void 0 ? void 0 : resolve(result);
100
+ // const result = (await callback(...args)) ?? {};
101
+ // result.__debounceFlushedWithArgs = args;
102
+ resolve === null || resolve === void 0 ? void 0 : resolve(yield callback(...args));
104
103
  }
105
- catch (_reason) {
106
- const reason = _reason !== null && _reason !== void 0 ? _reason : {};
107
- reason.__debounceFlushedWithArgs = args;
104
+ catch (reason) {
108
105
  reject === null || reject === void 0 ? void 0 : reject(reason);
109
106
  }
110
107
  }))();
@@ -1,10 +1,13 @@
1
+ import type { SetStateAction } from 'react.js';
1
2
  import { debounce } from './index.js';
2
3
  type TDebounceConfig = Exclude<Parameters<typeof debounce>[1], number>;
3
4
  type TDelayConfig = number | TDebounceConfig & {
4
5
  staging?: boolean;
5
6
  };
6
7
  export declare function useDebouncedState<T extends any>(init: T, config: TDelayConfig): readonly [T, {
7
- (value: T): void;
8
+ (value: SetStateAction<T>): void;
8
9
  flush: (isEager?: true) => void;
10
+ pause(): void;
11
+ resume(): void;
9
12
  }, T];
10
13
  export {};
@@ -6,18 +6,25 @@ const _1 = require("./index.js");
6
6
  function useDebouncedState(init, config) {
7
7
  const [debouncedValue, setDebouncedValue] = (0, react_1.useState)(init);
8
8
  const [stagedValue, setStagedValue] = (0, react_1.useState)(init);
9
+ const [paused, setPaused] = (0, react_1.useState)(false);
9
10
  const enableStaging = typeof config === 'object' && config.staging === true;
10
11
  const debounceArgs = [setDebouncedValue, config];
11
12
  const debouncedSetter = (0, react_1.useCallback)((0, _1.debounce)(...debounceArgs), debounceArgs);
12
13
  const setter = (0, react_1.useMemo)(() => {
13
- const output = (value) => {
14
+ const _setter = (value) => {
14
15
  if (enableStaging) {
15
16
  setStagedValue(value);
16
17
  }
17
- debouncedSetter(value);
18
+ if (paused) {
19
+ console.warn('[useDebouncedState] Skipping debounced state update. Updates were paused with `setter.pause()`. Call `setter.play()` to resume.');
20
+ }
21
+ else
22
+ debouncedSetter(value);
18
23
  };
19
- output.flush = debouncedSetter.flush;
20
- return output;
24
+ _setter.flush = debouncedSetter.flush;
25
+ _setter.pause = () => setPaused(true);
26
+ _setter.resume = () => setPaused(false);
27
+ return _setter;
21
28
  }, [enableStaging, debouncedSetter]);
22
29
  return [debouncedValue, setter, stagedValue];
23
30
  }
@@ -93,15 +93,12 @@ export const debounce = (...init) => {
93
93
  }
94
94
  // Execute the pending call.
95
95
  (() => __awaiter(void 0, void 0, void 0, function* () {
96
- var _a;
97
96
  try {
98
- const result = (_a = (yield callback(...args))) !== null && _a !== void 0 ? _a : {};
99
- result.__debounceFlushedWithArgs = args;
100
- resolve === null || resolve === void 0 ? void 0 : resolve(result);
97
+ // const result = (await callback(...args)) ?? {};
98
+ // result.__debounceFlushedWithArgs = args;
99
+ resolve === null || resolve === void 0 ? void 0 : resolve(yield callback(...args));
101
100
  }
102
- catch (_reason) {
103
- const reason = _reason !== null && _reason !== void 0 ? _reason : {};
104
- reason.__debounceFlushedWithArgs = args;
101
+ catch (reason) {
105
102
  reject === null || reject === void 0 ? void 0 : reject(reason);
106
103
  }
107
104
  }))();
@@ -1,10 +1,13 @@
1
+ import type { SetStateAction } from 'react.js';
1
2
  import { debounce } from './index.js';
2
3
  type TDebounceConfig = Exclude<Parameters<typeof debounce>[1], number>;
3
4
  type TDelayConfig = number | TDebounceConfig & {
4
5
  staging?: boolean;
5
6
  };
6
7
  export declare function useDebouncedState<T extends any>(init: T, config: TDelayConfig): readonly [T, {
7
- (value: T): void;
8
+ (value: SetStateAction<T>): void;
8
9
  flush: (isEager?: true) => void;
10
+ pause(): void;
11
+ resume(): void;
9
12
  }, T];
10
13
  export {};
@@ -3,18 +3,25 @@ import { debounce } from './index.js';
3
3
  export function useDebouncedState(init, config) {
4
4
  const [debouncedValue, setDebouncedValue] = useState(init);
5
5
  const [stagedValue, setStagedValue] = useState(init);
6
+ const [paused, setPaused] = useState(false);
6
7
  const enableStaging = typeof config === 'object' && config.staging === true;
7
8
  const debounceArgs = [setDebouncedValue, config];
8
9
  const debouncedSetter = useCallback(debounce(...debounceArgs), debounceArgs);
9
10
  const setter = useMemo(() => {
10
- const output = (value) => {
11
+ const _setter = (value) => {
11
12
  if (enableStaging) {
12
13
  setStagedValue(value);
13
14
  }
14
- debouncedSetter(value);
15
+ if (paused) {
16
+ console.warn('[useDebouncedState] Skipping debounced state update. Updates were paused with `setter.pause()`. Call `setter.play()` to resume.');
17
+ }
18
+ else
19
+ debouncedSetter(value);
15
20
  };
16
- output.flush = debouncedSetter.flush;
17
- return output;
21
+ _setter.flush = debouncedSetter.flush;
22
+ _setter.pause = () => setPaused(true);
23
+ _setter.resume = () => setPaused(false);
24
+ return _setter;
18
25
  }, [enableStaging, debouncedSetter]);
19
26
  return [debouncedValue, setter, stagedValue];
20
27
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cleanweb/oore",
3
- "version": "2.0.0-alpha.28",
3
+ "version": "2.0.0-alpha.30",
4
4
  "description": "A library of helpers for writing cleaner React function components with object-oriented patterns.",
5
5
  "engines": {
6
6
  "node": ">=22"