Skip to content

Commit

Permalink
feat: ViewportSensor 的 children 支持传入回调函数,用于去除默认的 div-root,改为渲染自定义 root
Browse files Browse the repository at this point in the history
  • Loading branch information
NicoKam committed Dec 25, 2023
1 parent 83240e5 commit 768fa30
Show file tree
Hide file tree
Showing 14 changed files with 136 additions and 50 deletions.
8 changes: 8 additions & 0 deletions packages/antd-plus/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# @orca-fe/painter

## 0.3.15

### Patch Changes

- Updated dependencies
- @orca-fe/pocket@3.4.0
- @orca-fe/hooks@1.11.0

## 0.3.14

### Patch Changes
Expand Down
6 changes: 3 additions & 3 deletions packages/antd-plus/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@orca-fe/antd-plus",
"version": "0.3.14",
"version": "0.3.15",
"description": "Transformer Container",
"keywords": [
"react",
Expand Down Expand Up @@ -36,9 +36,9 @@
"clear": "rimraf lib es"
},
"dependencies": {
"@orca-fe/hooks": "^1.10.1",
"@orca-fe/hooks": "^1.11.0",
"@orca-fe/jss-plugin-auto-prefix": "^0.0.1",
"@orca-fe/pocket": "^3.3.2",
"@orca-fe/pocket": "^3.4.0",
"@orca-fe/simple-jss": "^0.0.3",
"@orca-fe/tools": "^0.10.0",
"ahooks": "^3.7.8",
Expand Down
6 changes: 6 additions & 0 deletions packages/hooks/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# @orca-fe/hooks

## 1.11.0

### Minor Changes

- feat: ViewportSensor 的 children 支持传入回调函数,用于去除默认的 div-root,改为渲染自定义 root; useMergedRefs 支持非 hooks 调用

## 1.10.1

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/hooks/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@orca-fe/hooks",
"version": "1.10.1",
"version": "1.11.0",
"description": "React Hooks Collections",
"keywords": [
"react",
Expand Down
17 changes: 14 additions & 3 deletions packages/hooks/src/useMergedRefs.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
import type React from 'react';
import { useMemoizedFn } from 'ahooks';

export default function useMergedRefs<T>(
...refs: React.Ref<T>[]
): React.RefCallback<T> {
export default function useMergedRefs<T>(...refs: React.Ref<T>[]): React.RefCallback<T> {
return useMemoizedFn((instance: T) => {
refs.forEach((ref) => {
if (typeof ref === 'function') {
Expand All @@ -15,3 +13,16 @@ export default function useMergedRefs<T>(
});
});
}

useMergedRefs.mergeRefs =
<T>(refs: React.Ref<T>[]) =>
(instance: T) => {
refs.forEach((ref) => {
if (typeof ref === 'function') {
ref(instance);
} else if (ref != null && typeof ref === 'object') {
// eslint-disable-next-line no-param-reassign
(ref as React.MutableRefObject<T>).current = instance;
}
});
};
9 changes: 9 additions & 0 deletions packages/painter/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# @orca-fe/painter

## 1.4.50

### Patch Changes

- Updated dependencies
- @orca-fe/pocket@3.4.0
- @orca-fe/hooks@1.11.0
- @orca-fe/transformer@0.3.28

## 1.4.49

### Patch Changes
Expand Down
8 changes: 4 additions & 4 deletions packages/painter/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@orca-fe/painter",
"version": "1.4.49",
"version": "1.4.50",
"description": "Konva Painter",
"keywords": [
"react",
Expand Down Expand Up @@ -37,17 +37,17 @@
"clear": "rimraf lib es"
},
"dependencies": {
"@orca-fe/hooks": "^1.10.1",
"@orca-fe/hooks": "^1.11.0",
"@orca-fe/jss-plugin-auto-prefix": "^0.0.1",
"@orca-fe/pocket": "^3.3.2",
"@orca-fe/pocket": "^3.4.0",
"@orca-fe/simple-jss": "^0.0.3",
"@orca-fe/tools": "^0.10.0",
"ahooks": "^3.7.8",
"classnames": "^2.3.2",
"color": "^4.2.3",
"react-colorful": "^5.6.1",
"tslib": "^2.6.0",
"@orca-fe/transformer": "^0.3.27"
"@orca-fe/transformer": "^0.3.28"
},
"peerDependencies": {
"@ant-design/icons": "^4.7.0",
Expand Down
9 changes: 9 additions & 0 deletions packages/pdf-viewer/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# @orca-fe/pdf-viewer

## 1.21.3

### Patch Changes

- Updated dependencies
- @orca-fe/pocket@3.4.0
- @orca-fe/hooks@1.11.0
- @orca-fe/painter@1.4.50

## 1.21.2

### Patch Changes
Expand Down
8 changes: 4 additions & 4 deletions packages/pdf-viewer/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@orca-fe/pdf-viewer",
"version": "1.21.2",
"version": "1.21.3",
"description": "PDF Viewer",
"keywords": [
"react",
Expand Down Expand Up @@ -38,11 +38,11 @@
"clear": "rimraf lib es"
},
"dependencies": {
"@orca-fe/hooks": "^1.10.1",
"@orca-fe/hooks": "^1.11.0",
"@orca-fe/jss-plugin-auto-prefix": "^0.0.1",
"@orca-fe/painter": "^1.4.49",
"@orca-fe/painter": "^1.4.50",
"@orca-fe/pdfjs-dist-browserify": "^3.8.24",
"@orca-fe/pocket": "^3.3.2",
"@orca-fe/pocket": "^3.4.0",
"@orca-fe/simple-jss": "^0.0.3",
"@orca-fe/tools": "^0.10.0",
"ahooks": "^3.7.8",
Expand Down
11 changes: 11 additions & 0 deletions packages/pocket/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
# @orca-fe/pocket

## 3.4.0

### Minor Changes

- feat: ViewportSensor 的 children 支持传入回调函数,用于去除默认的 div-root,改为渲染自定义 root; useMergedRefs 支持非 hooks 调用

### Patch Changes

- Updated dependencies
- @orca-fe/hooks@1.11.0

## 3.3.2

### Patch Changes
Expand Down
4 changes: 2 additions & 2 deletions packages/pocket/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@orca-fe/pocket",
"version": "3.3.2",
"version": "3.4.0",
"description": "UI components by orca-team",
"keywords": [
"react",
Expand Down Expand Up @@ -39,7 +39,7 @@
"clear": "rimraf lib es"
},
"dependencies": {
"@orca-fe/hooks": "^1.10.1",
"@orca-fe/hooks": "^1.11.0",
"@orca-fe/jss-plugin-auto-prefix": "^0.0.1",
"@orca-fe/tools": "^0.10.0",
"@rc-component/trigger": "^1.13.3",
Expand Down
87 changes: 56 additions & 31 deletions packages/pocket/src/viewport-sensor/ViewportSensor.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import type { ReactElement, RefObject } from 'react';
import React, { useMemo, useRef, useState } from 'react';
import { useControllableProps } from '@orca-fe/hooks';
import { useEventListener, useMemoizedFn } from 'ahooks';
Expand All @@ -9,48 +10,75 @@ export const ViewportSensorContext = React.createContext<Viewport>({
center: [0, 0],
});

export const GetViewportContext = React.createContext<
() => { viewport: Viewport; mousePoint: [number, number] }
>(() => ({
export const GetViewportContext = React.createContext<() => { viewport: Viewport; mousePoint: [number, number] }>(() => ({
viewport: {
center: [0, 0],
zoom: 0,
},
mousePoint: [0, 0],
}));

export interface ViewportSensorProps
extends React.HTMLAttributes<HTMLDivElement> {
export interface ViewportSensorProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {

/**
* 中心点位置
*/
center?: [number, number];

/**
* 缩放级别
*/
zoom?: number;

/**
* 鼠标按下事件之前,允许 `return false` 终止拖拽行为
*/
beforePointerDown?: UseViewportType['onPointerDown'];

/**
* center/zoom 发生变化时触发
*/
onPropsChange?: (viewport: Viewport) => void;

/**
* 最大缩放级别
*/
maxZoom?: UseViewportType['maxZoom'];

/**
* 最大缩放步进(防止触摸板滚动过快)
*/
maxZoomStep?: UseViewportType['maxZoomStep'];

/**
* 缩放步进
*/
zoomStep?: UseViewportType['zoomStep'];

/**
* 最小缩放级别
*/
minZoom?: UseViewportType['minZoom'];

/**
* 当触发鼠标滚轮时,实际的行为
*/
wheelMode?: UseViewportType['wheelMode'];

/**
* 允许传入回调函数进行渲染
* 如果是传入回调函数的方式,则表示手动处理其 refs
*/
children?: React.HTMLAttributes<HTMLDivElement>['children'] | ((ref: RefObject<Element>) => ReactElement);
}

const ViewportSensor = (props: ViewportSensorProps) => {
const [
{
center,
zoom,
beforePointerDown,
maxZoom,
maxZoomStep,
zoomStep,
minZoom,
wheelMode,
...otherProps
},
changeProps,
] = useControllableProps(props, {
center: [0, 0] as [number, number],
zoom: 0,
});
const rootRef = useRef<HTMLDivElement>(null);
const [{ center, zoom, beforePointerDown, maxZoom, maxZoomStep, zoomStep, minZoom, wheelMode, children, ...otherProps }, changeProps] =
useControllableProps(props, {
center: [0, 0] as [number, number],
zoom: 0,
});
const rootRef = useRef<Element>(null);
useViewport({
ref: rootRef,
viewport: {
Expand Down Expand Up @@ -92,19 +120,16 @@ const ViewportSensor = (props: ViewportSensorProps) => {
);

return (
<ViewportSensorContext.Provider
value={useMemo(() => ({ center, zoom }), [center, zoom])}
>
<ViewportSensorContext.Provider value={useMemo(() => ({ center, zoom }), [center, zoom])}>
<GetViewportContext.Provider
value={useMemoizedFn(() => ({
viewport: { center, zoom },
mousePoint: [
Math.round((_this.currentPoint[0] + center[0]) / 2 ** zoom),
Math.round((_this.currentPoint[1] + center[1]) / 2 ** zoom),
],
mousePoint: [Math.round((_this.currentPoint[0] + center[0]) / 2 ** zoom), Math.round((_this.currentPoint[1] + center[1]) / 2 ** zoom)],
}))}
>
<div ref={rootRef} {...otherProps} />
<div ref={rootRef as RefObject<HTMLDivElement>} {...otherProps}>
{typeof children === 'function' ? children(rootRef) : children}
</div>
</GetViewportContext.Provider>
</ViewportSensorContext.Provider>
);
Expand Down
7 changes: 7 additions & 0 deletions packages/transformer/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# @orca-fe/painter

## 0.3.28

### Patch Changes

- Updated dependencies
- @orca-fe/hooks@1.11.0

## 0.3.27

### Patch Changes
Expand Down
4 changes: 2 additions & 2 deletions packages/transformer/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@orca-fe/transformer",
"version": "0.3.27",
"version": "0.3.28",
"description": "Transformer Container",
"keywords": [
"react",
Expand Down Expand Up @@ -42,7 +42,7 @@
"gl-matrix": "^3.4.3",
"prefix-classnames": "^0.0.7",
"tslib": "^2.6.0",
"@orca-fe/hooks": "^1.10.1",
"@orca-fe/hooks": "^1.11.0",
"@orca-fe/tools": "^0.10.0"
},
"peerDependencies": {
Expand Down

1 comment on commit 768fa30

@vercel
Copy link

@vercel vercel bot commented on 768fa30 Dec 25, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.