From 66c0a4befe4500a8f68e6879ca739d3ead138980 Mon Sep 17 00:00:00 2001 From: Jordi Enric Date: Tue, 16 Apr 2024 15:09:38 +0200 Subject: [PATCH] Refactor code to use useParams and useRouter in CreateWarehouseCollection.tsx, WarehouseCollectionDetail.tsx, and LogsLayout.tsx --- .../CreateWarehouseCollection.tsx | 18 +++++-- .../WarehouseCollectionDetail.tsx | 22 +++++---- .../layouts/LogsLayout/LogsLayout.tsx | 4 +- .../warehouse-collections-create-mutation.ts | 48 +++++++++++-------- 4 files changed, 56 insertions(+), 36 deletions(-) diff --git a/apps/studio/components/interfaces/DataWarehouse/CreateWarehouseCollection.tsx b/apps/studio/components/interfaces/DataWarehouse/CreateWarehouseCollection.tsx index f7c2d373e49..2fc01e87332 100644 --- a/apps/studio/components/interfaces/DataWarehouse/CreateWarehouseCollection.tsx +++ b/apps/studio/components/interfaces/DataWarehouse/CreateWarehouseCollection.tsx @@ -1,5 +1,5 @@ +import { useParams } from 'common' import { useCreateCollection } from 'data/analytics/warehouse-collections-create-mutation' -import { useSelectedProject } from 'hooks' import { useRouter } from 'next/router' import React from 'react' import toast from 'react-hot-toast' @@ -9,9 +9,18 @@ type Props = {} export const CreateWarehouseCollectionModal = (props: Props) => { const [isOpen, setIsOpen] = React.useState(false) - const project = useSelectedProject() - const { mutateAsync: createCollection, isLoading } = useCreateCollection({ - projectRef: project?.ref!, + const router = useRouter() + const { ref } = useParams() + + const { + mutateAsync: createCollection, + isLoading, + data: newCollection, + } = useCreateCollection({ + projectRef: ref || 'default', + onSuccess: (data) => { + router.push(`/project/${ref}/logs/collections/${data.data?.token}`) + }, }) return ( @@ -38,7 +47,6 @@ export const CreateWarehouseCollectionModal = (props: Props) => { e.preventDefault() try { const formData = new FormData(e.target as HTMLFormElement) - console.log(formData) const values = { name: formData.get('name') as string, } diff --git a/apps/studio/components/interfaces/DataWarehouse/WarehouseCollectionDetail.tsx b/apps/studio/components/interfaces/DataWarehouse/WarehouseCollectionDetail.tsx index 54a55f08070..78d186dfeb3 100644 --- a/apps/studio/components/interfaces/DataWarehouse/WarehouseCollectionDetail.tsx +++ b/apps/studio/components/interfaces/DataWarehouse/WarehouseCollectionDetail.tsx @@ -45,15 +45,19 @@ export const WarehouseCollectionDetail = () => {
- +
+

{collection?.name}

+
{JSON.stringify(collection, null, 2)}
+ +
{!isError && (
diff --git a/apps/studio/components/layouts/LogsLayout/LogsLayout.tsx b/apps/studio/components/layouts/LogsLayout/LogsLayout.tsx index 214090c2523..7cf3901cf07 100644 --- a/apps/studio/components/layouts/LogsLayout/LogsLayout.tsx +++ b/apps/studio/components/layouts/LogsLayout/LogsLayout.tsx @@ -19,6 +19,7 @@ import { CreateWarehouseCollectionModal } from 'components/interfaces/DataWareho import { WarehouseMenuItem } from 'components/interfaces/DataWarehouse/WarehouseMenuItem' import { useWarehouseCollectionsQuery } from 'data/analytics/warehouse-collections-query' import { useWarehouseTenantQuery } from 'data/analytics/warehouse-tenant-query' +import { useParams } from 'common' interface LogsLayoutProps { title?: string } @@ -36,7 +37,8 @@ const LogsLayout = ({ title, children }: PropsWithChildren) => const showWarehouse = useFlag('warehouse') const project = useSelectedProject() - const projectRef = project?.ref || 'default' + const { ref } = useParams() + const projectRef = ref || 'default' const { data: tenant } = useWarehouseTenantQuery({ projectRef }) const { data: collections, isLoading: collectionsLoading } = useWarehouseCollectionsQuery( diff --git a/apps/studio/data/analytics/warehouse-collections-create-mutation.ts b/apps/studio/data/analytics/warehouse-collections-create-mutation.ts index 950e79d8130..ac2a89b95a9 100644 --- a/apps/studio/data/analytics/warehouse-collections-create-mutation.ts +++ b/apps/studio/data/analytics/warehouse-collections-create-mutation.ts @@ -2,37 +2,43 @@ import { useMutation, useQueryClient } from '@tanstack/react-query' import { analyticsKeys } from './keys' import { post } from 'data/fetchers' -type CreateCollectionArgs = { - projectRef: string -} type CreateCollectionPayload = { name: string id: string token: string } -export function useCreateCollection({ projectRef }: CreateCollectionArgs) { +async function createCollection(ref: string, payload: CreateCollectionPayload) { + await post(`/platform/projects/{ref}/analytics/warehouse/tenant`, { + params: { + path: { ref }, + }, + }) + + const res = await post(`/platform/projects/{ref}/analytics/warehouse/collections`, { + params: { + path: { ref }, + }, + body: payload, + }) + + return res +} + +type CreateCollectionArgs = { + projectRef: string + onSuccess: (data: Awaited>) => void +} + +export function useCreateCollection({ projectRef, onSuccess }: CreateCollectionArgs) { const queryClient = useQueryClient() const mutation = useMutation({ - mutationFn: async (payload: CreateCollectionPayload) => { - const tenantRes = await post(`/platform/projects/{ref}/analytics/warehouse/tenant`, { - params: { - path: { ref: projectRef }, - }, - }) - console.log('DEBUG TENANT', tenantRes.data) - - const res = await post(`/platform/projects/{ref}/analytics/warehouse/collections`, { - params: { - path: { ref: projectRef }, - }, - body: payload as any, - }) - + mutationFn: (payload: CreateCollectionPayload) => createCollection(projectRef, payload), + mutationKey: analyticsKeys.warehouseCollections(projectRef), + onSuccess: (data) => { + onSuccess(data) const keysToInvalidate = analyticsKeys.warehouseCollections(projectRef) queryClient.invalidateQueries(keysToInvalidate) - return res }, - mutationKey: analyticsKeys.warehouseCollections(projectRef), }) return mutation