Skip to content

Commit

Permalink
chore: release v5.0.15
Browse files Browse the repository at this point in the history
  • Loading branch information
childrentime committed Jun 5, 2024
1 parent 31df354 commit 1b8b798
Show file tree
Hide file tree
Showing 9 changed files with 51 additions and 36 deletions.
8 changes: 8 additions & 0 deletions packages/core/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -310,3 +310,11 @@
### Core

* fix(useLocalStorage): remove extra render caused by diff default value

## 5.0.15(June 05, 2024)

### Core

* feat: add useDisclosure
* feat: add useEventSource
* feat: add useControlled
2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@reactuses/core",
"version": "5.0.14",
"version": "5.0.15",
"license": "Unlicense",
"homepage": "https://www.reactuse.com/",
"repository": {
Expand Down
5 changes: 2 additions & 3 deletions packages/core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,6 @@ import { useControlled } from "./useControlled";
import { useDisclosure } from "./useDisclosure";
import { useEventSource } from "./useEventSource";


export {
usePrevious,
useLatest,
Expand Down Expand Up @@ -194,7 +193,7 @@ export {
useMobileLandscape,
useControlled,
useDisclosure,
useEventSource
useEventSource,
};

export * from "./useActiveElement/interface";
Expand Down Expand Up @@ -288,4 +287,4 @@ export * from "./usePlatform/interface";
export * from "./useMobileLandscape/interface";
export * from "./useControlled/interface";
export * from "./useDisclosure/interface";
export * from "./useEventSource/interface";
export * from "./useEventSource/interface";
16 changes: 8 additions & 8 deletions packages/core/src/useControlled/index.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
import { useState, useCallback } from "react";
import { UseControlled } from "./interface";
import { useCallback, useState } from "react";
import { useLatest } from "../useLatest";
import type { UseControlled } from "./interface";

export const useControlled: UseControlled = <T>(
value: T | undefined,
defaultValue: T,
onChange?: (v: T, ...args: any[]) => void
onChange?: (v: T, ...args: any[]) => void,
): [T, (value: T) => void] => {
const [stateValue, setStateValue] = useState(
value !== undefined ? value : defaultValue
value !== undefined ? value : defaultValue,
);
const isControlled = value !== undefined;
const onChangeRef = useLatest(onChange);

const setValue = useCallback(
(newValue: T) => {
if (!isControlled) {
setStateValue(newValue);
}
if (onChange) {
onChange(newValue);
}
onChangeRef.current?.(newValue);
},
[isControlled, onChange]
[isControlled, onChangeRef],
);

return [isControlled ? value : stateValue, setValue];
Expand Down
11 changes: 5 additions & 6 deletions packages/core/src/useDisclosure/index.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { useCallback } from "react";
import { useControlled } from "../useControlled";
import { useLatest } from "../useLatest";
import { UseDisclosureProps } from "./interface";

import type { UseDisclosureProps } from "./interface";

export const useDisclosure = (props: UseDisclosureProps = {}) => {
const {
Expand All @@ -18,7 +17,7 @@ export const useDisclosure = (props: UseDisclosureProps = {}) => {
const [isOpen, setIsOpen] = useControlled(
isOpenProp,
defaultOpen || false,
onChange
onChange,
);

const isControlled = isOpenProp !== undefined;
Expand All @@ -28,14 +27,14 @@ export const useDisclosure = (props: UseDisclosureProps = {}) => {
setIsOpen(false);
}
onClosePropRef.current?.();
}, [isControlled]);
}, [isControlled, onClosePropRef, setIsOpen]);

const onOpen = useCallback(() => {
if (!isControlled) {
setIsOpen(true);
}
onOpenPropRef.current?.();
}, [isControlled]);
}, [isControlled, onOpenPropRef, setIsOpen]);

const onOpenChange = useCallback(() => {
const action = isOpen ? onClose : onOpen;
Expand All @@ -50,4 +49,4 @@ export const useDisclosure = (props: UseDisclosureProps = {}) => {
onOpenChange,
isControlled,
};
}
};
2 changes: 1 addition & 1 deletion packages/core/src/useDisclosure/interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export interface UseDisclosureProps {
* @en Callback when disclosure is opened
* @zh 打开时的回调
*/
onOpen?: ()=> void;
onOpen?: () => void;
/**
* @en Callback when disclosure is changed
* @zh 状态改变时的回调
Expand Down
29 changes: 15 additions & 14 deletions packages/core/src/useEventSource/index.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { useState, useEffect, useRef, useCallback } from "react";
import { EventSourceStatus, UseEventSource, UseEventSourceOptions } from "./interface";
import { useCallback, useEffect, useRef, useState } from "react";
import { useEvent } from "../useEvent";
import { defaultOptions } from "../utils/defaults";
import { useUnmount } from "../useUnmount";
import type { EventSourceStatus, UseEventSource, UseEventSourceOptions } from "./interface";

export const useEventSource: UseEventSource = <Events extends string[]>(
url: string | URL,
events: Events = [] as unknown as Events,
options: UseEventSourceOptions = defaultOptions
options: UseEventSourceOptions = defaultOptions,
) => {
const [data, setData] = useState<string | null>(null);
const [error, setError] = useState<Event | null>(null);
Expand All @@ -17,29 +17,29 @@ export const useEventSource: UseEventSource = <Events extends string[]>(
const retries = useRef(0);
const explicitlyClosed = useRef(false);
const eventSourceRef = useRef<EventSource | null>(null);
const eventListenerRef = useRef<Map<string,((event: MessageEvent<any>) => void)>>();
if(!eventListenerRef.current) {
const eventListenerRef = useRef<Map<string, ((event: MessageEvent<any>) => void)>>();
if (!eventListenerRef.current) {
eventListenerRef.current = new Map();
}

const clean = useCallback(() => {
const clean = useEvent(() => {
const listeners = eventListenerRef.current;

events.forEach((name) => {
const handler = listeners?.get(name);
if(handler) {
if (handler) {
eventSourceRef.current?.removeEventListener(name, handler);
}
});
}, []);
});

const close = useCallback(() => {
setStatus("DISCONNECTED");
clean();
eventSourceRef.current?.close();
eventSourceRef.current = null;
explicitlyClosed.current = true;
}, []);
}, [clean]);

const open = useEvent(() => {
close();
Expand Down Expand Up @@ -79,12 +79,13 @@ export const useEventSource: UseEventSource = <Events extends string[]>(
retries.current += 1;

if (
(typeof maxRetries === "number" &&
(maxRetries < 0 || retries.current < maxRetries)) ||
(typeof maxRetries === "function" && maxRetries())
(typeof maxRetries === "number"
&& (maxRetries < 0 || retries.current < maxRetries))
|| (typeof maxRetries === "function" && maxRetries())
) {
setTimeout(open, delay);
} else {
}
else {
onFailed?.();
}
}
Expand Down Expand Up @@ -112,7 +113,7 @@ export const useEventSource: UseEventSource = <Events extends string[]>(

useUnmount(() => {
close();
})
});

return {
eventSourceRef,
Expand Down
6 changes: 3 additions & 3 deletions packages/core/src/useEventSource/interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@ export interface UseEventSourceOptions extends EventSourceInit {
* @en Automatically reconnect when the connection is disconnected
* @zh 连接断开时自动重连
*/
autoReconnect?: UseEventSourceAutoReconnectOptions
autoReconnect?: UseEventSourceAutoReconnectOptions;
}

/**
* @title UseEventSourceAutoReconnectOptions
*/
export interface UseEventSourceAutoReconnectOptions {
export interface UseEventSourceAutoReconnectOptions {
/**
* @en The number of retries, if it is a function, it will be called to determine whether to retry
* @zh 重试次数,如果是函数,会调用来判断是否重试
Expand All @@ -35,7 +35,7 @@ export interface UseEventSourceAutoReconnectOptions {
* @zh 重连失败时的回调
*/
onFailed?: () => void;
};
}

export type UseEventSource = <Events extends string[]>(
/**
Expand Down
8 changes: 8 additions & 0 deletions packages/website-docusaurus/docs/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -310,3 +310,11 @@
### Core

* fix(useLocalStorage): remove extra render caused by diff default value

## 5.0.15(June 05, 2024)

### Core

* feat: add useDisclosure
* feat: add useEventSource
* feat: add useControlled

0 comments on commit 1b8b798

Please sign in to comment.