@easyv/biz-components 1.0.26 → 1.0.28

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.
@@ -1,5 +1,5 @@
1
- var propTypes = { exports: {} };
1
+ var coWebWorker = { exports: {} };
2
2
  export {
3
- propTypes as __module
3
+ coWebWorker as __module
4
4
  };
5
5
  //# sourceMappingURL=index.es2.js.map
@@ -1,5 +1,5 @@
1
- var classnames = { exports: {} };
1
+ var propTypes = { exports: {} };
2
2
  export {
3
- classnames as __module
3
+ propTypes as __module
4
4
  };
5
5
  //# sourceMappingURL=index.es3.js.map
@@ -1,5 +1,5 @@
1
- var coWebWorker = { exports: {} };
1
+ var classnames = { exports: {} };
2
2
  export {
3
- coWebWorker as __module
3
+ classnames as __module
4
4
  };
5
5
  //# sourceMappingURL=index.es4.js.map
@@ -43,8 +43,16 @@ const AiModelSelectPanel = (props) => {
43
43
  clearTimeout(scrollTimer);
44
44
  };
45
45
  }, [showInputProviderId]);
46
+ useEffect(() => {
47
+ return () => {
48
+ setShowInputProviderId("");
49
+ setInputValue("");
50
+ };
51
+ }, []);
46
52
  const handleSelect = (modelProvider, model) => {
47
53
  onSelect == null ? void 0 : onSelect(modelProvider, model);
54
+ setShowInputProviderId("");
55
+ setInputValue("");
48
56
  };
49
57
  const renderTitle = (modelProvider) => {
50
58
  return /* @__PURE__ */ jsxRuntimeExports.jsxs(
@@ -109,6 +117,11 @@ const AiModelSelectPanel = (props) => {
109
117
  setInputValue("");
110
118
  }
111
119
  };
120
+ const handleBlur = () => {
121
+ if (!inputValue) {
122
+ setShowInputProviderId("");
123
+ }
124
+ };
112
125
  const isSelected = (value == null ? void 0 : value.modelProviderId) === modelProvider.id && (value == null ? void 0 : value.modelId) === (model == null ? void 0 : model.id);
113
126
  return /* @__PURE__ */ jsxRuntimeExports.jsx(
114
127
  "div",
@@ -130,7 +143,7 @@ const AiModelSelectPanel = (props) => {
130
143
  value: inputValue,
131
144
  onChange: (value2) => setInputValue(value2),
132
145
  onPressEnter: handlePressEnter,
133
- onBlur: handlePressEnter,
146
+ onBlur: handleBlur,
134
147
  ref: inputRef
135
148
  }) : normalContent
136
149
  },
@@ -1 +1 @@
1
- {"version":3,"file":"ai-model-select-panel.es.js","sources":["../../../src/components/ai-model-select/ai-model-select-panel.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { EditOutlined, PlusOutlined } from '@easyv/react-icons';\nimport { InputRef } from 'antd';\nimport classNames from 'classnames';\nimport { produce } from 'immer';\nimport { IconBtn } from './iconBtn';\nimport { AiModel, AiModelServiceProvider } from './types';\n\nexport interface AiModelSelectPanelProps {\n className?: string;\n modelServiceProviderList: AiModelServiceProvider[];\n value?: {\n modelProviderId: string;\n modelId: string;\n };\n onSelect?: (AiModelServiceProvider: AiModelServiceProvider, model: AiModel) => void;\n style?: React.CSSProperties;\n titleClassName?: string;\n itemClassName?: string;\n renderInput: (props: {\n value: string;\n onChange: (value: string) => void;\n onPressEnter: () => void;\n onBlur: () => void;\n ref: React.Ref<InputRef>;\n }) => React.ReactNode;\n}\n\nexport const AiModelSelectPanel = (props: AiModelSelectPanelProps) => {\n const {\n className = '',\n modelServiceProviderList,\n value,\n onSelect,\n style,\n titleClassName,\n itemClassName,\n renderInput,\n } = props;\n\n const inputRef = useRef<InputRef>(null);\n\n const [customModelServiceProviderList, setCustomModelServiceProviderList] = useState(\n modelServiceProviderList.filter((item) => item.isCustom),\n );\n const [showInputProviderId, setShowInputProviderId] = useState<string>('');\n const [inputValue, setInputValue] = useState<string>('');\n\n const otherModelServiceProviderList = modelServiceProviderList.filter((item) => !item.isCustom);\n\n useEffect(() => {\n if (!showInputProviderId) return;\n\n // 聚焦到输入框\n const focusTimer = setTimeout(() => {\n inputRef.current?.focus();\n }, 0);\n\n // 滚动到输入框位置\n const scrollTimer = setTimeout(() => {\n // 使用唯一选择器查找包含输入框的元素\n const targetElement = document.querySelector(`[data-provider-id=\"${showInputProviderId}\"]`);\n if (targetElement) {\n targetElement.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }, 0);\n\n return () => {\n clearTimeout(focusTimer);\n clearTimeout(scrollTimer);\n };\n }, [showInputProviderId]);\n\n const handleSelect = (modelProvider: AiModelServiceProvider, model: AiModel) => {\n onSelect?.(modelProvider, model);\n };\n\n const renderTitle = (modelProvider: AiModelServiceProvider) => {\n return (\n <div\n className={classNames(\n 'biz-h-6 biz-text-text-3 biz-px-3 biz-pt-1 biz-w-full',\n 'biz-flex biz-items-center biz-box-border biz-gap-2.5 biz-text-[14px]',\n titleClassName,\n )}\n title={modelProvider.name}\n >\n <div className='biz-w-0 biz-flex-1 biz-truncate'>{modelProvider.name}</div>\n {modelProvider.isCustom && modelProvider.modelList.length === 0 && (\n <IconBtn\n onClick={() => {\n setShowInputProviderId(modelProvider.id);\n }}\n icon={\n <PlusOutlined className='biz-w-3 biz-h-3 biz-text-text-2 hover:biz-text-text-1 biz-flex-center' />\n }\n />\n )}\n </div>\n );\n };\n\n const renderItem = (modelProvider: AiModelServiceProvider, model?: AiModel) => {\n if (modelProvider.isCustom) {\n if (modelProvider.id !== showInputProviderId && !modelProvider.modelList?.length) {\n return null;\n }\n }\n const normalContent = (\n <>\n <img src={modelProvider.iconSrc} className='biz-w-4 biz-h-4' />\n <div className='biz-truncate biz-w-0 biz-flex-1 biz-text-[14px]' title={model?.name}>\n {model?.name}\n </div>\n {modelProvider.isCustom && (\n <IconBtn\n onClick={(e) => {\n setShowInputProviderId(modelProvider.id);\n setInputValue(model?.name || '');\n e.stopPropagation();\n }}\n className='biz-hidden group-hover:!biz-flex'\n style={{ display: 'none' }}\n icon={\n <EditOutlined className='biz-w-3 biz-h-3 biz-text-text-2 hover:biz-text-text-1 biz-flex-center' />\n }\n />\n )}\n </>\n );\n\n const handlePressEnter = () => {\n if (inputValue) {\n setCustomModelServiceProviderList(\n produce(customModelServiceProviderList, (draft) => {\n const index = draft.findIndex((i) => i.id === modelProvider.id);\n if (index !== -1) {\n draft[index].modelList = [{ id: inputValue, name: inputValue }];\n }\n }),\n );\n setShowInputProviderId('');\n setInputValue('');\n }\n };\n\n const isSelected = value?.modelProviderId === modelProvider.id && value?.modelId === model?.id;\n\n return (\n <div\n key={model?.id || `input-${modelProvider.id}`}\n data-provider-id={modelProvider.id}\n className={classNames(\n 'biz-px-3 biz-py-[3px] biz-flex biz-items-center biz-gap-2',\n 'biz-text-text-2 biz-h-8 biz-w-full biz-box-border',\n 'hover:biz-bg-bg-white biz-cursor-pointer biz-group',\n isSelected && 'biz-bg-bg-white',\n itemClassName,\n )}\n onClick={() => {\n if (model && !showInputProviderId) {\n handleSelect(modelProvider, model);\n }\n }}\n >\n {showInputProviderId === modelProvider.id\n ? renderInput({\n value: inputValue,\n onChange: (value) => setInputValue(value),\n onPressEnter: handlePressEnter,\n onBlur: handlePressEnter,\n ref: inputRef,\n })\n : normalContent}\n </div>\n );\n };\n\n return (\n <div\n style={style}\n className={classNames(\n 'biz-bg-[#181B22] biz-border-one biz-rounded-[4px] biz-py-1 biz-h-[200px]',\n 'biz-flex biz-flex-col gap-1 biz-w-[160px] biz-max-h-[450px] biz-overflow-auto',\n className,\n )}\n >\n {otherModelServiceProviderList.map((provider) => (\n <div\n key={provider.id}\n className='biz-flex biz-flex-col biz-gap-1 biz-w-full biz-box-border'\n >\n {renderTitle(provider)}\n <div className='biz-flex biz-flex-col gap-1 biz-w-full'>\n {provider.modelList.map((model) => renderItem(provider, model))}\n </div>\n </div>\n ))}\n {customModelServiceProviderList.map((provider) => (\n <div\n key={provider.id}\n className='biz-flex biz-flex-col biz-gap-1 biz-w-full biz-box-border'\n >\n {renderTitle(provider)}\n <div className='biz-flex biz-flex-col gap-1 biz-w-full'>\n {renderItem(provider, provider.modelList[0])}\n </div>\n </div>\n ))}\n </div>\n );\n};\n"],"names":["jsxs","jsx","Fragment","value"],"mappings":"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"}
1
+ {"version":3,"file":"ai-model-select-panel.es.js","sources":["../../../src/components/ai-model-select/ai-model-select-panel.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { EditOutlined, PlusOutlined } from '@easyv/react-icons';\nimport { InputRef } from 'antd';\nimport classNames from 'classnames';\nimport { produce } from 'immer';\nimport { IconBtn } from './iconBtn';\nimport { AiModel, AiModelServiceProvider } from './types';\n\nexport interface AiModelSelectPanelProps {\n className?: string;\n modelServiceProviderList: AiModelServiceProvider[];\n value?: {\n modelProviderId: string;\n modelId: string;\n };\n onSelect?: (AiModelServiceProvider: AiModelServiceProvider, model: AiModel) => void;\n style?: React.CSSProperties;\n titleClassName?: string;\n itemClassName?: string;\n renderInput: (props: {\n value: string;\n onChange: (value: string) => void;\n onPressEnter: () => void;\n onBlur: () => void;\n ref: React.Ref<InputRef>;\n }) => React.ReactNode;\n}\n\nexport const AiModelSelectPanel = (props: AiModelSelectPanelProps) => {\n const {\n className = '',\n modelServiceProviderList,\n value,\n onSelect,\n style,\n titleClassName,\n itemClassName,\n renderInput,\n } = props;\n\n const inputRef = useRef<InputRef>(null);\n\n const [customModelServiceProviderList, setCustomModelServiceProviderList] = useState(\n modelServiceProviderList.filter((item) => item.isCustom),\n );\n const [showInputProviderId, setShowInputProviderId] = useState<string>('');\n const [inputValue, setInputValue] = useState<string>('');\n\n const otherModelServiceProviderList = modelServiceProviderList.filter((item) => !item.isCustom);\n\n useEffect(() => {\n if (!showInputProviderId) return;\n\n // 聚焦到输入框\n const focusTimer = setTimeout(() => {\n inputRef.current?.focus();\n }, 0);\n\n // 滚动到输入框位置\n const scrollTimer = setTimeout(() => {\n // 使用唯一选择器查找包含输入框的元素\n const targetElement = document.querySelector(`[data-provider-id=\"${showInputProviderId}\"]`);\n if (targetElement) {\n targetElement.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n inline: 'nearest',\n });\n }\n }, 0);\n\n return () => {\n clearTimeout(focusTimer);\n clearTimeout(scrollTimer);\n };\n }, [showInputProviderId]);\n\n useEffect(() => {\n return () => {\n setShowInputProviderId('');\n setInputValue('');\n };\n }, []);\n\n const handleSelect = (modelProvider: AiModelServiceProvider, model: AiModel) => {\n onSelect?.(modelProvider, model);\n setShowInputProviderId('');\n setInputValue('');\n };\n\n const renderTitle = (modelProvider: AiModelServiceProvider) => {\n return (\n <div\n className={classNames(\n 'biz-h-6 biz-text-text-3 biz-px-3 biz-pt-1 biz-w-full',\n 'biz-flex biz-items-center biz-box-border biz-gap-2.5 biz-text-[14px]',\n titleClassName,\n )}\n title={modelProvider.name}\n >\n <div className='biz-w-0 biz-flex-1 biz-truncate'>{modelProvider.name}</div>\n {modelProvider.isCustom && modelProvider.modelList.length === 0 && (\n <IconBtn\n onClick={() => {\n setShowInputProviderId(modelProvider.id);\n }}\n icon={\n <PlusOutlined className='biz-w-3 biz-h-3 biz-text-text-2 hover:biz-text-text-1 biz-flex-center' />\n }\n />\n )}\n </div>\n );\n };\n\n const renderItem = (modelProvider: AiModelServiceProvider, model?: AiModel) => {\n if (modelProvider.isCustom) {\n if (modelProvider.id !== showInputProviderId && !modelProvider.modelList?.length) {\n return null;\n }\n }\n const normalContent = (\n <>\n <img src={modelProvider.iconSrc} className='biz-w-4 biz-h-4' />\n <div className='biz-truncate biz-w-0 biz-flex-1 biz-text-[14px]' title={model?.name}>\n {model?.name}\n </div>\n {modelProvider.isCustom && (\n <IconBtn\n onClick={(e) => {\n setShowInputProviderId(modelProvider.id);\n setInputValue(model?.name || '');\n e.stopPropagation();\n }}\n className='biz-hidden group-hover:!biz-flex'\n style={{ display: 'none' }}\n icon={\n <EditOutlined className='biz-w-3 biz-h-3 biz-text-text-2 hover:biz-text-text-1 biz-flex-center' />\n }\n />\n )}\n </>\n );\n\n const handlePressEnter = () => {\n if (inputValue) {\n setCustomModelServiceProviderList(\n produce(customModelServiceProviderList, (draft) => {\n const index = draft.findIndex((i) => i.id === modelProvider.id);\n if (index !== -1) {\n draft[index].modelList = [{ id: inputValue, name: inputValue }];\n }\n }),\n );\n setShowInputProviderId('');\n setInputValue('');\n }\n };\n\n const handleBlur = () => {\n if (!inputValue) {\n setShowInputProviderId('');\n }\n };\n\n const isSelected = value?.modelProviderId === modelProvider.id && value?.modelId === model?.id;\n\n return (\n <div\n key={model?.id || `input-${modelProvider.id}`}\n data-provider-id={modelProvider.id}\n className={classNames(\n 'biz-px-3 biz-py-[3px] biz-flex biz-items-center biz-gap-2',\n 'biz-text-text-2 biz-h-8 biz-w-full biz-box-border',\n 'hover:biz-bg-bg-white biz-cursor-pointer biz-group',\n isSelected && 'biz-bg-bg-white',\n itemClassName,\n )}\n onClick={() => {\n if (model && !showInputProviderId) {\n handleSelect(modelProvider, model);\n }\n }}\n >\n {showInputProviderId === modelProvider.id\n ? renderInput({\n value: inputValue,\n onChange: (value) => setInputValue(value),\n onPressEnter: handlePressEnter,\n onBlur: handleBlur,\n ref: inputRef,\n })\n : normalContent}\n </div>\n );\n };\n\n return (\n <div\n style={style}\n className={classNames(\n 'biz-bg-[#181B22] biz-border-one biz-rounded-[4px] biz-py-1 biz-h-[200px]',\n 'biz-flex biz-flex-col gap-1 biz-w-[160px] biz-max-h-[450px] biz-overflow-auto',\n className,\n )}\n >\n {otherModelServiceProviderList.map((provider) => (\n <div\n key={provider.id}\n className='biz-flex biz-flex-col biz-gap-1 biz-w-full biz-box-border'\n >\n {renderTitle(provider)}\n <div className='biz-flex biz-flex-col gap-1 biz-w-full'>\n {provider.modelList.map((model) => renderItem(provider, model))}\n </div>\n </div>\n ))}\n {customModelServiceProviderList.map((provider) => (\n <div\n key={provider.id}\n className='biz-flex biz-flex-col biz-gap-1 biz-w-full biz-box-border'\n >\n {renderTitle(provider)}\n <div className='biz-flex biz-flex-col gap-1 biz-w-full'>\n {renderItem(provider, provider.modelList[0])}\n </div>\n </div>\n ))}\n </div>\n );\n};\n"],"names":["jsxs","jsx","Fragment","value"],"mappings":"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"}
@@ -58,7 +58,7 @@ function useSocketEvents(props) {
58
58
  const socket = socketRef.current;
59
59
  useEffect(() => {
60
60
  function broadcastCallback(data) {
61
- var _a, _b;
61
+ var _a, _b, _c;
62
62
  const roomId = (_a = data == null ? void 0 : data.data) == null ? void 0 : _a.roomId;
63
63
  if (roomId) {
64
64
  const id = (socket == null ? void 0 : socket.auth)["custom-socket-id"];
@@ -66,7 +66,7 @@ function useSocketEvents(props) {
66
66
  messageWindowByType[roomId] = [];
67
67
  }
68
68
  if (!((_b = messageWindowByType[roomId]) == null ? void 0 : _b.includes(id))) {
69
- messageWindowByType[roomId].push(id);
69
+ (_c = messageWindowByType[roomId]) == null ? void 0 : _c.push(id);
70
70
  (socket == null ? void 0 : socket.auth)["room-offset-map"][roomId] = id;
71
71
  }
72
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"use-socket-events.es.js","sources":["../../../src/hooks/use-socket-events/use-socket-events.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport { useMemoizedFn } from 'ahooks';\nimport { isNil } from 'lodash-es';\nimport { type Manager, type Socket } from 'socket.io-client';\nimport {\n EXPLICIT_DISCONNECT_REASON,\n MAX_TIMEOUT,\n messageWindowByType,\n socketBroadcastMessageList,\n SocketEventType,\n socketNormalMessageList,\n} from './constant';\nimport { AuthConfig, BroadcastData, SocketEventData, SocketOnErrorData } from './types';\n\nconst generateId = () => {\n return Math.random().toString().slice(2, 20);\n};\n\ninterface UseSocketDataCommonProps {\n basename: string;\n SocketManager: typeof Manager;\n host?: string;\n onBroadcast?: (dataAndType: BroadcastData) => void;\n onSocketEvent?: (dataAndType: SocketEventData) => void;\n onError?: (data: SocketOnErrorData) => void;\n}\ninterface UserIdProps {\n spaceId: number;\n userId?: number;\n}\ninterface GuestSocketIdProps {\n guestToken: string;\n}\ntype UseSocketDataProps = UseSocketDataCommonProps & (UserIdProps | GuestSocketIdProps);\n\nexport function useSocketEvents(props: UseSocketDataProps): Socket | null {\n const {\n basename,\n host,\n SocketManager,\n onBroadcast: propsOnBroadcast,\n onSocketEvent: propsOnSocketEvent,\n onError: propsOnError,\n } = props;\n const userId = (props as UserIdProps).userId;\n const spaceId = (props as UserIdProps).spaceId;\n const guestToken = (props as GuestSocketIdProps).guestToken;\n\n const refTimeout = useRef<NodeJS.Timeout | null>(null);\n const onBroadcast = useMemoizedFn((data: BroadcastData) => propsOnBroadcast?.(data));\n const onSocketEvent = useMemoizedFn((data: SocketEventData) => propsOnSocketEvent?.(data));\n const onError = useMemoizedFn((data: SocketOnErrorData) => propsOnError?.(data));\n const socketRef = useRef<Socket | null>(null);\n\n useEffect(() => {\n if (guestToken === '') {\n onError?.({\n type: 'connectError',\n errorMsg: 'guestToken 为空字符串,无法连接进入会话房间!',\n });\n return;\n }\n if (isNil(userId) && !guestToken) {\n onError?.({\n type: 'connectError',\n errorMsg: 'userId 为空,无法连接进入会话房间!',\n });\n return;\n }\n\n const customSocketId = guestToken ? `guest-${generateId()}` : `${userId}-${generateId()}`;\n socketRef.current?.disconnect();\n socketRef.current = new SocketManager(host || window.location.origin, {\n transports: ['websocket'],\n forceNew: false,\n path: `${basename}/socket/easyv-mps`,\n reconnectionDelay: 5000,\n reconnectionDelayMax: 10000,\n }).socket('/easyv-mps', {\n auth: {\n 'custom-socket-id': customSocketId,\n 'space-id': spaceId || 0,\n 'guest-token': guestToken || '',\n 'room-offset-map': messageWindowByType,\n },\n });\n }, [SocketManager, basename, guestToken, host, onError, spaceId, userId]);\n\n const socket = socketRef.current;\n\n useEffect(() => {\n function broadcastCallback(data: { data: { roomId: string } }) {\n const roomId = data?.data?.roomId;\n if (roomId) {\n const id = (socket?.auth as AuthConfig)['custom-socket-id'];\n if (!messageWindowByType[roomId]) {\n messageWindowByType[roomId] = [];\n }\n if (!messageWindowByType[roomId]?.includes(id)) {\n // 重复消息过滤\n messageWindowByType[roomId].push(id);\n (socket?.auth as AuthConfig)['room-offset-map'][roomId] = id;\n }\n }\n }\n\n socketNormalMessageList.forEach((item) => {\n socket?.on(item, (data) => {\n onBroadcast?.({ data, eventType: item });\n });\n });\n socketBroadcastMessageList.forEach((item) => {\n socket?.on(item, (data) => {\n broadcastCallback({\n data,\n });\n onBroadcast?.({ data, eventType: item });\n });\n });\n\n socket?.on('connect', () => {\n if (socket?.connected) {\n onSocketEvent?.({ data: undefined, eventType: SocketEventType.CONNECT });\n // 清理定时任务\n clearDelayer(refTimeout.current);\n } else {\n onSocketEvent?.({ data: undefined, eventType: SocketEventType.CONNECT_ERROR });\n }\n });\n\n socket?.on('reconnect', (reason) => {\n // 断开\n onSocketEvent?.({ data: undefined, eventType: SocketEventType.RECONNECT });\n if (EXPLICIT_DISCONNECT_REASON.has(reason)) {\n // 意外断开,启动一个定时器,规定时间内没重新连上就弹框,要求客户刷新页面\n clearDelayer(refTimeout.current);\n refTimeout.current = setTimeout(() => {\n // 连接超时\n onSocketEvent?.({ data: undefined, eventType: SocketEventType.CONNECT_TIMEOUT });\n }, MAX_TIMEOUT);\n }\n console.log('重连成功');\n });\n socket?.on('connect_error', (error) => {\n onSocketEvent?.({\n data: { success: false, data: error },\n eventType: SocketEventType.CONNECT_ERROR,\n });\n onError?.({ type: 'connectError', errorMsg: error.message });\n });\n return () => {\n // 主动断开\n if (socket?.connected) {\n socket?.close();\n }\n };\n }, [onBroadcast, onError, onSocketEvent, socket]);\n\n return socket;\n}\n\n/**\n * clear timeout util\n * */\nfunction clearDelayer(timeoutId: NodeJS.Timeout | null) {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-socket-events.es.js","sources":["../../../src/hooks/use-socket-events/use-socket-events.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport { useMemoizedFn } from 'ahooks';\nimport { isNil } from 'lodash-es';\nimport { type Manager, type Socket } from 'socket.io-client';\nimport {\n EXPLICIT_DISCONNECT_REASON,\n MAX_TIMEOUT,\n messageWindowByType,\n socketBroadcastMessageList,\n SocketEventType,\n socketNormalMessageList,\n} from './constant';\nimport { AuthConfig, BroadcastData, SocketEventData, SocketOnErrorData } from './types';\n\nconst generateId = () => {\n return Math.random().toString().slice(2, 20);\n};\n\ninterface UseSocketDataCommonProps {\n basename: string;\n SocketManager: typeof Manager;\n host?: string;\n onBroadcast?: (dataAndType: BroadcastData) => void;\n onSocketEvent?: (dataAndType: SocketEventData) => void;\n onError?: (data: SocketOnErrorData) => void;\n}\ninterface UserIdProps {\n spaceId: number;\n userId?: number;\n}\ninterface GuestSocketIdProps {\n guestToken: string;\n}\ntype UseSocketDataProps = UseSocketDataCommonProps & (UserIdProps | GuestSocketIdProps);\n\nexport function useSocketEvents(props: UseSocketDataProps): Socket | null {\n const {\n basename,\n host,\n SocketManager,\n onBroadcast: propsOnBroadcast,\n onSocketEvent: propsOnSocketEvent,\n onError: propsOnError,\n } = props;\n const userId = (props as UserIdProps).userId;\n const spaceId = (props as UserIdProps).spaceId;\n const guestToken = (props as GuestSocketIdProps).guestToken;\n\n const refTimeout = useRef<NodeJS.Timeout | null>(null);\n const onBroadcast = useMemoizedFn((data: BroadcastData) => propsOnBroadcast?.(data));\n const onSocketEvent = useMemoizedFn((data: SocketEventData) => propsOnSocketEvent?.(data));\n const onError = useMemoizedFn((data: SocketOnErrorData) => propsOnError?.(data));\n const socketRef = useRef<Socket | null>(null);\n\n useEffect(() => {\n if (guestToken === '') {\n onError?.({\n type: 'connectError',\n errorMsg: 'guestToken 为空字符串,无法连接进入会话房间!',\n });\n return;\n }\n if (isNil(userId) && !guestToken) {\n onError?.({\n type: 'connectError',\n errorMsg: 'userId 为空,无法连接进入会话房间!',\n });\n return;\n }\n\n const customSocketId = guestToken ? `guest-${generateId()}` : `${userId}-${generateId()}`;\n socketRef.current?.disconnect();\n socketRef.current = new SocketManager(host || window.location.origin, {\n transports: ['websocket'],\n forceNew: false,\n path: `${basename}/socket/easyv-mps`,\n reconnectionDelay: 5000,\n reconnectionDelayMax: 10000,\n }).socket('/easyv-mps', {\n auth: {\n 'custom-socket-id': customSocketId,\n 'space-id': spaceId || 0,\n 'guest-token': guestToken || '',\n 'room-offset-map': messageWindowByType,\n },\n });\n }, [SocketManager, basename, guestToken, host, onError, spaceId, userId]);\n\n const socket = socketRef.current;\n\n useEffect(() => {\n function broadcastCallback(data: { data: { roomId: string } }) {\n const roomId = data?.data?.roomId;\n if (roomId) {\n const id = (socket?.auth as AuthConfig)['custom-socket-id'];\n if (!messageWindowByType[roomId]) {\n messageWindowByType[roomId] = [];\n }\n if (!messageWindowByType[roomId]?.includes(id)) {\n // 重复消息过滤\n messageWindowByType[roomId]?.push(id);\n (socket?.auth as AuthConfig)['room-offset-map'][roomId] = id;\n }\n }\n }\n\n socketNormalMessageList.forEach((item) => {\n socket?.on(item, (data) => {\n onBroadcast?.({ data, eventType: item });\n });\n });\n socketBroadcastMessageList.forEach((item) => {\n socket?.on(item, (data) => {\n broadcastCallback({\n data,\n });\n onBroadcast?.({ data, eventType: item });\n });\n });\n\n socket?.on('connect', () => {\n if (socket?.connected) {\n onSocketEvent?.({ data: undefined, eventType: SocketEventType.CONNECT });\n // 清理定时任务\n clearDelayer(refTimeout.current);\n } else {\n onSocketEvent?.({ data: undefined, eventType: SocketEventType.CONNECT_ERROR });\n }\n });\n\n socket?.on('reconnect', (reason) => {\n // 断开\n onSocketEvent?.({ data: undefined, eventType: SocketEventType.RECONNECT });\n if (EXPLICIT_DISCONNECT_REASON.has(reason)) {\n // 意外断开,启动一个定时器,规定时间内没重新连上就弹框,要求客户刷新页面\n clearDelayer(refTimeout.current);\n refTimeout.current = setTimeout(() => {\n // 连接超时\n onSocketEvent?.({ data: undefined, eventType: SocketEventType.CONNECT_TIMEOUT });\n }, MAX_TIMEOUT);\n }\n console.log('重连成功');\n });\n socket?.on('connect_error', (error) => {\n onSocketEvent?.({\n data: { success: false, data: error },\n eventType: SocketEventType.CONNECT_ERROR,\n });\n onError?.({ type: 'connectError', errorMsg: error.message });\n });\n return () => {\n // 主动断开\n if (socket?.connected) {\n socket?.close();\n }\n };\n }, [onBroadcast, onError, onSocketEvent, socket]);\n\n return socket;\n}\n\n/**\n * clear timeout util\n * */\nfunction clearDelayer(timeoutId: NodeJS.Timeout | null) {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { getDefaultExportFromCjs } from "../../../../../_virtual/_commonjsHelpers.es.js";
2
- import { __module as classnames$1 } from "../../../../../_virtual/index.es3.js";
2
+ import { __module as classnames$1 } from "../../../../../_virtual/index.es4.js";
3
3
  /*!
4
4
  Copyright (c) 2018 Jed Watson.
5
5
  Licensed under the MIT License (MIT), see
@@ -1,5 +1,5 @@
1
1
  import { getDefaultExportFromCjs } from "../../../../../_virtual/_commonjsHelpers.es.js";
2
- import { __module as coWebWorker } from "../../../../../_virtual/index.es4.js";
2
+ import { __module as coWebWorker } from "../../../../../_virtual/index.es2.js";
3
3
  class CrossOriginWorker extends Worker {
4
4
  constructor(scriptUrl) {
5
5
  const b = new Blob([`importScripts('${new URL(scriptUrl).toString()}')`], { type: "application/javascript" });
@@ -1,5 +1,5 @@
1
1
  import { getDefaultExportFromCjs } from "../../../../../_virtual/_commonjsHelpers.es.js";
2
- import { __module as propTypes } from "../../../../../_virtual/index.es2.js";
2
+ import { __module as propTypes } from "../../../../../_virtual/index.es3.js";
3
3
  import { __require as requireReactIs } from "../../../react-is@16.13.1/node_modules/react-is/index.es.js";
4
4
  import { __require as requireFactoryWithTypeCheckers } from "./factoryWithTypeCheckers.es.js";
5
5
  import { __require as requireFactoryWithThrowingShims } from "./factoryWithThrowingShims.es.js";