mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-07 19:28:09 +00:00
improvement: adjust header drag to use table container for positioning
This commit is contained in:
@@ -3,28 +3,31 @@ import { MouseEventHandler } from "react";
|
|||||||
export const HeaderResizer = ({
|
export const HeaderResizer = ({
|
||||||
onMouseDown,
|
onMouseDown,
|
||||||
isActive,
|
isActive,
|
||||||
scrollOffset
|
scrollOffset,
|
||||||
|
heightOffset
|
||||||
}: {
|
}: {
|
||||||
onMouseDown: MouseEventHandler<HTMLDivElement>;
|
onMouseDown: MouseEventHandler<HTMLDivElement>;
|
||||||
isActive: boolean;
|
isActive: boolean;
|
||||||
scrollOffset: number;
|
scrollOffset: number;
|
||||||
|
heightOffset: number;
|
||||||
}) => {
|
}) => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div
|
<div
|
||||||
tabIndex={-1}
|
tabIndex={-1}
|
||||||
role="button"
|
role="button"
|
||||||
className={`absolute bottom-[0.02rem] left-0 z-40 h-0.5 w-full cursor-ns-resize hover:bg-blue-400/20 ${
|
className={`absolute left-0 z-40 h-0.5 w-full cursor-ns-resize hover:bg-blue-400/20 ${
|
||||||
isActive ? "bg-blue-400/75" : "bg-transparent"
|
isActive ? "bg-blue-400/75" : "bg-transparent"
|
||||||
}`}
|
}`}
|
||||||
onMouseDown={onMouseDown}
|
onMouseDown={onMouseDown}
|
||||||
style={{
|
style={{
|
||||||
transform: "translateY(50%)"
|
transform: "translateY(50%)",
|
||||||
|
top: heightOffset
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
style={{ left: `calc(43% + ${scrollOffset}px)` }}
|
style={{ left: `calc(50% + ${scrollOffset}px)`, top: heightOffset }}
|
||||||
className="pointer-events-none absolute -bottom-[0.1rem] z-30 -translate-x-1/2"
|
className="pointer-events-none absolute z-30 -translate-x-1/2"
|
||||||
>
|
>
|
||||||
<div className="h-1 w-8 rounded bg-gray-400 opacity-50" />
|
<div className="h-1 w-8 rounded bg-gray-400 opacity-50" />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { useCallback, useEffect, useMemo, useState } from "react";
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
||||||
import { Helmet } from "react-helmet";
|
import { Helmet } from "react-helmet";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { subject } from "@casl/ability";
|
import { subject } from "@casl/ability";
|
||||||
@@ -169,7 +169,7 @@ export const OverviewPage = () => {
|
|||||||
const [scrollOffset, setScrollOffset] = useState(0);
|
const [scrollOffset, setScrollOffset] = useState(0);
|
||||||
const [debouncedScrollOffset] = useDebounce(scrollOffset);
|
const [debouncedScrollOffset] = useDebounce(scrollOffset);
|
||||||
const { permission } = useProjectPermission();
|
const { permission } = useProjectPermission();
|
||||||
|
const tableRef = useRef<HTMLDivElement>(null);
|
||||||
const { currentWorkspace } = useWorkspace();
|
const { currentWorkspace } = useWorkspace();
|
||||||
const isProjectV3 = currentWorkspace?.version === ProjectVersion.V3;
|
const isProjectV3 = currentWorkspace?.version === ProjectVersion.V3;
|
||||||
const workspaceId = currentWorkspace?.id as string;
|
const workspaceId = currentWorkspace?.id as string;
|
||||||
@@ -925,7 +925,7 @@ export const OverviewPage = () => {
|
|||||||
<meta property="og:title" content={String(t("dashboard.og-title"))} />
|
<meta property="og:title" content={String(t("dashboard.og-title"))} />
|
||||||
<meta name="og:description" content={String(t("dashboard.og-description"))} />
|
<meta name="og:description" content={String(t("dashboard.og-description"))} />
|
||||||
</Helmet>
|
</Helmet>
|
||||||
<div className="mx-auto max-w-7xl text-mineshaft-50 dark:[color-scheme:dark]">
|
<div className="relative mx-auto max-w-7xl text-mineshaft-50 dark:[color-scheme:dark]">
|
||||||
<div className="flex w-full items-baseline justify-between">
|
<div className="flex w-full items-baseline justify-between">
|
||||||
<PageHeader
|
<PageHeader
|
||||||
title="Secrets Overview"
|
title="Secrets Overview"
|
||||||
@@ -1212,16 +1212,13 @@ export const OverviewPage = () => {
|
|||||||
secretsToDeleteKeys={secretsToDeleteKeys}
|
secretsToDeleteKeys={secretsToDeleteKeys}
|
||||||
usedBySecretSyncs={usedBySecretSyncs}
|
usedBySecretSyncs={usedBySecretSyncs}
|
||||||
/>
|
/>
|
||||||
<div className="thin-scrollbar mt-4">
|
<div ref={tableRef} className="thin-scrollbar mt-4">
|
||||||
<TableContainer
|
<TableContainer
|
||||||
onScroll={(e) => setScrollOffset(e.currentTarget.scrollLeft)}
|
onScroll={(e) => setScrollOffset(e.currentTarget.scrollLeft)}
|
||||||
className="thin-scrollbar rounded-b-none"
|
className="thin-scrollbar rounded-b-none"
|
||||||
>
|
>
|
||||||
<Table>
|
<Table>
|
||||||
<THead
|
<THead style={{ height: collapseEnvironments ? headerHeight : undefined }}>
|
||||||
className="relative"
|
|
||||||
style={{ height: collapseEnvironments ? headerHeight : undefined }}
|
|
||||||
>
|
|
||||||
<Tr
|
<Tr
|
||||||
className="sticky top-0 z-20 border-0"
|
className="sticky top-0 z-20 border-0"
|
||||||
style={{ height: collapseEnvironments ? headerHeight : undefined }}
|
style={{ height: collapseEnvironments ? headerHeight : undefined }}
|
||||||
@@ -1401,6 +1398,7 @@ export const OverviewPage = () => {
|
|||||||
onMouseDown={handleMouseDown}
|
onMouseDown={handleMouseDown}
|
||||||
isActive={isResizing}
|
isActive={isResizing}
|
||||||
scrollOffset={scrollOffset}
|
scrollOffset={scrollOffset}
|
||||||
|
heightOffset={(tableRef.current?.clientTop ?? 0) + headerHeight - 2.5}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</THead>
|
</THead>
|
||||||
|
|||||||
Reference in New Issue
Block a user