Skip to content

Commit f3e554c

Browse files
committed
feat: add inWindow arg for calculate position
1 parent 8a418f1 commit f3e554c

14 files changed

Lines changed: 159 additions & 38 deletions

File tree

packages/platform/src/app/routes/layout/header/Notification.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ export function AppNotification(): JSX.Element | null {
6969
dTrigger="click"
7070
dPlacement="bottom-right"
7171
dArrow={false}
72+
dInWindow
7273
afterVisibleChange={(visible) => {
7374
if (visible && tabsRef.current) {
7475
tabsRef.current.updateIndicator();

packages/ui/src/components/_date-input/DateInput.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,14 @@ function DateInput(props: DDateInputProps, ref: React.ForwardedRef<DDateInputRef
130130
if (dVisible) {
131131
if (boxRef.current && popupRef.current) {
132132
const { width, height } = getOriginalSize(popupRef.current);
133-
const { top, left, transformOrigin } = getVerticalSidePosition(boxRef.current, { width, height }, dPlacement, 8);
133+
const { top, left, transformOrigin } = getVerticalSidePosition(
134+
boxRef.current,
135+
{ width, height },
136+
{
137+
placement: dPlacement,
138+
inWindow: true,
139+
}
140+
);
134141
setPopupPositionStyle({
135142
top,
136143
left,

packages/ui/src/components/auto-complete/AutoComplete.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,10 @@ function AutoComplete<T extends DAutoCompleteItem>(
112112
const { top, left, transformOrigin } = getVerticalSidePosition(
113113
boxEl,
114114
{ width: Math.max(width, minWidth), height },
115-
'bottom-left',
116-
8
115+
{
116+
placement: 'bottom-left',
117+
inWindow: true,
118+
}
117119
);
118120

119121
setPopupPositionStyle({

packages/ui/src/components/cascader/Cascader.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,14 @@ function Cascader<V extends DId, T extends DCascaderItem<V>>(
380380
dInputRef={dInputRef}
381381
dUpdatePosition={(boxEl, popupEl) => {
382382
const { width, height } = getOriginalSize(popupEl);
383-
const { top, left, transformOrigin } = getVerticalSidePosition(boxEl, { width, height }, 'bottom-left', 8);
383+
const { top, left, transformOrigin } = getVerticalSidePosition(
384+
boxEl,
385+
{ width, height },
386+
{
387+
placement: 'bottom-left',
388+
inWindow: true,
389+
}
390+
);
384391

385392
return {
386393
position: {

packages/ui/src/components/dropdown/Dropdown.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,14 @@ function Dropdown<ID extends DId, T extends DDropdownItem<ID>>(
174174
const triggerEl = document.getElementById(buttonId);
175175
if (triggerEl && dropdownRef.current) {
176176
const { width, height } = getOriginalSize(dropdownRef.current);
177-
const { top, left, transformOrigin, arrowPosition } = getVerticalSidePosition(triggerEl, { width, height }, dPlacement, 8);
177+
const { top, left, transformOrigin, arrowPosition } = getVerticalSidePosition(
178+
triggerEl,
179+
{ width, height },
180+
{
181+
placement: dPlacement,
182+
inWindow: true,
183+
}
184+
);
178185
setPopupPositionStyle({ top, left });
179186
setTransformOrigin(transformOrigin);
180187
setArrowPosition(arrowPosition);

packages/ui/src/components/dropdown/Sub.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,14 @@ export function DSub(props: DSubProps): JSX.Element | null {
7171
const updatePosition = () => {
7272
if (ulRef.current && liRef.current) {
7373
const { width, height } = getOriginalSize(ulRef.current);
74-
const { top, left, transformOrigin } = getHorizontalSidePosition(liRef.current, { width, height }, 'right', 10);
74+
const { top, left, transformOrigin } = getHorizontalSidePosition(
75+
liRef.current,
76+
{ width, height },
77+
{
78+
placement: 'right',
79+
inWindow: true,
80+
}
81+
);
7582
setPopupPositionStyle({
7683
top,
7784
left,

packages/ui/src/components/menu/Sub.tsx

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,24 @@ export function DSub(props: DSubProps): JSX.Element | null {
104104
}
105105

106106
const { top, left, transformOrigin } = inHorizontalNav
107-
? getVerticalSidePosition(liRef.current, { width, height }, 'bottom', 12)
108-
: getHorizontalSidePosition(liRef.current, { width, height }, 'right', dInNav ? 10 : 14);
107+
? getVerticalSidePosition(
108+
liRef.current,
109+
{ width, height },
110+
{
111+
placement: 'bottom',
112+
offset: 12,
113+
inWindow: true,
114+
}
115+
)
116+
: getHorizontalSidePosition(
117+
liRef.current,
118+
{ width, height },
119+
{
120+
placement: 'right',
121+
offset: dInNav ? 10 : 14,
122+
inWindow: true,
123+
}
124+
);
109125
setPopupPositionStyle({
110126
top,
111127
left,

packages/ui/src/components/popover/Popover.tsx

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export interface DPopoverProps extends Omit<React.HTMLAttributes<HTMLDivElement>
3131
dModal?: boolean;
3232
dDisabled?: boolean;
3333
dDistance?: number;
34+
dInWindow?: boolean;
3435
dMouseEnterDelay?: number;
3536
dMouseLeaveDelay?: number;
3637
dZIndex?: number | string;
@@ -55,6 +56,7 @@ function Popover(props: DPopoverProps, ref: React.ForwardedRef<DPopoverRef>): JS
5556
dModal = false,
5657
dDisabled = false,
5758
dDistance = 10,
59+
dInWindow = false,
5860
dMouseEnterDelay = 150,
5961
dMouseLeaveDelay = 200,
6062
dZIndex,
@@ -138,7 +140,16 @@ function Popover(props: DPopoverProps, ref: React.ForwardedRef<DPopoverRef>): JS
138140
containerRect.left,
139141
];
140142
}
141-
const position = getPopupPosition(popupRef.current, triggerEl, dPlacement, dDistance, space);
143+
const position = getPopupPosition(
144+
popupRef.current,
145+
triggerEl,
146+
{
147+
placement: dPlacement,
148+
offset: dDistance,
149+
inWindow: dInWindow,
150+
},
151+
space
152+
);
142153
if (position) {
143154
currentPlacement = position.placement;
144155
setPlacement(position.placement);
@@ -147,7 +158,11 @@ function Popover(props: DPopoverProps, ref: React.ForwardedRef<DPopoverRef>): JS
147158
left: position.left,
148159
});
149160
} else {
150-
const position = getPopupPosition(popupRef.current, triggerEl, placement, dDistance);
161+
const position = getPopupPosition(popupRef.current, triggerEl, {
162+
placement,
163+
offset: dDistance,
164+
inWindow: dInWindow,
165+
});
151166
setPopupPositionStyle({
152167
top: position.top,
153168
left: position.left,

packages/ui/src/components/select/Select.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,14 @@ function Select<V extends DId, T extends DSelectItem<V>>(
446446
dUpdatePosition={(boxEl, popupEl) => {
447447
const width = boxEl.getBoundingClientRect().width;
448448
const { height } = getOriginalSize(popupEl);
449-
const { top, left, transformOrigin } = getVerticalSidePosition(boxEl, { width, height }, 'bottom', 8);
449+
const { top, left, transformOrigin } = getVerticalSidePosition(
450+
boxEl,
451+
{ width, height },
452+
{
453+
placement: 'bottom',
454+
inWindow: true,
455+
}
456+
);
450457

451458
return {
452459
position: {

packages/ui/src/components/tooltip/Tooltip.tsx

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ export interface DTooltipProps extends Omit<React.HTMLAttributes<HTMLDivElement>
2727
dArrow?: boolean;
2828
dDisabled?: boolean;
2929
dDistance?: number;
30+
dInWindow?: boolean;
3031
dMouseEnterDelay?: number;
3132
dMouseLeaveDelay?: number;
3233
dZIndex?: number | string;
@@ -48,6 +49,7 @@ function Tooltip(props: DTooltipProps, ref: React.ForwardedRef<DTooltipRef>): JS
4849
dArrow = true,
4950
dDisabled = false,
5051
dDistance = 10,
52+
dInWindow = false,
5153
dMouseEnterDelay = 150,
5254
dMouseLeaveDelay = 200,
5355
dZIndex,
@@ -126,7 +128,16 @@ function Tooltip(props: DTooltipProps, ref: React.ForwardedRef<DTooltipRef>): JS
126128
containerRect.left,
127129
];
128130
}
129-
const position = getPopupPosition(popupRef.current, triggerEl, dPlacement, dDistance, space);
131+
const position = getPopupPosition(
132+
popupRef.current,
133+
triggerEl,
134+
{
135+
placement: dPlacement,
136+
offset: dDistance,
137+
inWindow: dInWindow,
138+
},
139+
space
140+
);
130141
if (position) {
131142
currentPlacement = position.placement;
132143
setPlacement(position.placement);
@@ -135,7 +146,11 @@ function Tooltip(props: DTooltipProps, ref: React.ForwardedRef<DTooltipRef>): JS
135146
left: position.left,
136147
});
137148
} else {
138-
const position = getPopupPosition(popupRef.current, triggerEl, placement, dDistance);
149+
const position = getPopupPosition(popupRef.current, triggerEl, {
150+
placement,
151+
offset: dDistance,
152+
inWindow: dInWindow,
153+
});
139154
setPopupPositionStyle({
140155
top: position.top,
141156
left: position.left,

0 commit comments

Comments
 (0)