mirror of
https://github.com/supabase/supabase.git
synced 2026-10-18 23:59:08 +03:00
* chore: cleanup packages - Avoid circular imports - Export API-types as types - pg-format without depending on Node internal Buffer (not browser-compatible) - Avoid importing from barrel files in ui dir * chore: avoid barrel file imports in studio (#27771) * chore: avoid barrel file imports - Removes some unused imports - Avoids barrel file import for faster builds + less memory * add eslint rule * type fixes * delete layouts barrel * delete components/grid barrel file * delete components/grid/utils barrel file * delete components/grid/components/common barrel file * delete components/grid/components/editor barrel file * delete components/grid/components/formatter barrel file * delete components/grid/components/grid barrel file * delete components/grid/components/header/filter barrel file * remote components/grid/store barrel file * remove components/interfaces/Auth/Policies barrel file * delete components/interfaces/Settings/Logs barrel file * delete components/ui/CodeEditor barrel file * delete components/ui/Forms barrel file * delete components/ui/Shimmers barrel file * delete data/analytics barrel file * delete hooks barrel file * cleanup lib/common/fetch barrel file * final * barral files cleanup * global react-data-grid styles * remove console.log --------- Co-authored-by: Kevin Grüneberg <k.grueneberg1994@gmail.com> * fix build --------- Co-authored-by: Kevin Grüneberg <k.grueneberg1994@gmail.com>
110 lines
3.6 KiB
TypeScript
110 lines
3.6 KiB
TypeScript
import { X } from 'lucide-react'
|
|
import RGL, { WidthProvider } from 'react-grid-layout'
|
|
|
|
import { useParams } from 'common'
|
|
import ChartHandler from 'components/to-be-cleaned/Charts/ChartHandler'
|
|
import { useDatabaseSelectorStateSnapshot } from 'state/database-selector'
|
|
import { Button, TooltipContent_Shadcn_, TooltipTrigger_Shadcn_, Tooltip_Shadcn_ } from 'ui'
|
|
import { LAYOUT_COLUMN_COUNT } from './Reports.constants'
|
|
|
|
const ReactGridLayout = WidthProvider(RGL)
|
|
|
|
interface GridResizeProps {
|
|
startDate: string
|
|
endDate: string
|
|
interval: string
|
|
editableReport: any
|
|
disableUpdate: boolean
|
|
onRemoveChart: ({ metric }: { metric: { key: string } }) => void
|
|
setEditableReport: (payload: any) => void
|
|
}
|
|
|
|
const GridResize = ({
|
|
startDate,
|
|
endDate,
|
|
interval,
|
|
editableReport,
|
|
disableUpdate,
|
|
onRemoveChart,
|
|
setEditableReport,
|
|
}: GridResizeProps) => {
|
|
const { ref } = useParams()
|
|
const state = useDatabaseSelectorStateSnapshot()
|
|
|
|
function onLayoutChange(layout: any) {
|
|
let updatedLayout = editableReport.layout
|
|
layout.map((item: any) => {
|
|
const index = updatedLayout.findIndex((x: any) => x.id === item.i)
|
|
updatedLayout[index].w = layout[index].w
|
|
updatedLayout[index].h = layout[index].h
|
|
updatedLayout[index].x = layout[index].x
|
|
updatedLayout[index].y = layout[index].y
|
|
})
|
|
const payload = {
|
|
...editableReport,
|
|
layout: updatedLayout,
|
|
}
|
|
setEditableReport(payload)
|
|
}
|
|
|
|
if (!editableReport) return null
|
|
|
|
return (
|
|
<>
|
|
<ReactGridLayout
|
|
autoSize={true}
|
|
layout={editableReport}
|
|
onLayoutChange={(layout) => onLayoutChange(layout)}
|
|
rowHeight={60}
|
|
cols={LAYOUT_COLUMN_COUNT}
|
|
containerPadding={[0, 0]}
|
|
compactType="horizontal"
|
|
>
|
|
{editableReport.layout.map((x: any, i: number) => {
|
|
return (
|
|
<div
|
|
key={x.id}
|
|
data-grid={{ ...x, minH: 4, maxH: 4, minW: 8 }}
|
|
className="react-grid-layout__report-item bg-surface-100 border-overlay group relative rounded border px-6 py-4 shadow-sm hover:border-green-900"
|
|
>
|
|
<ChartHandler
|
|
startDate={startDate}
|
|
endDate={endDate}
|
|
interval={interval}
|
|
attribute={x.attribute}
|
|
provider={x.provider}
|
|
label={`${x.label}${ref !== state.selectedDatabaseId ? (x.provider === 'infra-monitoring' ? ' of replica' : ' on project') : ''}`}
|
|
customDateFormat={'MMM D, YYYY'}
|
|
>
|
|
{!disableUpdate && (
|
|
<Tooltip_Shadcn_>
|
|
<TooltipTrigger_Shadcn_ asChild>
|
|
<Button
|
|
type="text"
|
|
icon={<X />}
|
|
className="ml-2 px-1"
|
|
onClick={() => onRemoveChart({ metric: { key: x.attribute } })}
|
|
/>
|
|
</TooltipTrigger_Shadcn_>
|
|
<TooltipContent_Shadcn_ side="bottom">Remove chart</TooltipContent_Shadcn_>
|
|
</Tooltip_Shadcn_>
|
|
)}
|
|
</ChartHandler>
|
|
|
|
<div className="absolute inset-x-0 top-3 ">
|
|
<div className="flex justify-around">
|
|
<div className="flex h-3 w-24 cursor-move flex-col space-y-2">
|
|
<div className="hidden h-3 w-full border-4 border-dotted border-green-900 opacity-50 transition-all hover:opacity-100 group-hover:block" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
)
|
|
})}
|
|
</ReactGridLayout>
|
|
</>
|
|
)
|
|
}
|
|
|
|
export default GridResize
|