refactor: migrate website info api to trpc
This commit is contained in:
parent
194103eb2d
commit
a8ce44ce89
@ -1,6 +1,10 @@
|
|||||||
import { useQueryClient } from '@tanstack/react-query';
|
import { useQueryClient } from '@tanstack/react-query';
|
||||||
import { getQueryKey } from '@trpc/react-query';
|
import {
|
||||||
import { defaultErrorHandler, defaultSuccessHandler, trpc } from '../trpc';
|
defaultErrorHandler,
|
||||||
|
defaultSuccessHandler,
|
||||||
|
getQueryKey,
|
||||||
|
trpc,
|
||||||
|
} from '../trpc';
|
||||||
|
|
||||||
export function useMonitorUpsert() {
|
export function useMonitorUpsert() {
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
|
@ -19,19 +19,6 @@ export async function getWorkspaceWebsites(
|
|||||||
return data.websites;
|
return data.websites;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getWorkspaceWebsiteInfo(
|
|
||||||
workspaceId: string,
|
|
||||||
websiteId: string
|
|
||||||
): Promise<WebsiteInfo | null> {
|
|
||||||
const { data } = await request.get(`/api/workspace/website/${websiteId}`, {
|
|
||||||
params: {
|
|
||||||
workspaceId,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
return data.website;
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function deleteWorkspaceWebsite(
|
export async function deleteWorkspaceWebsite(
|
||||||
workspaceId: string,
|
workspaceId: string,
|
||||||
websiteId: string
|
websiteId: string
|
||||||
@ -52,21 +39,6 @@ export function useWorspaceWebsites(workspaceId: string) {
|
|||||||
return { websites, isLoading };
|
return { websites, isLoading };
|
||||||
}
|
}
|
||||||
|
|
||||||
export function useWorkspaceWebsiteInfo(
|
|
||||||
workspaceId: string,
|
|
||||||
websiteId: string
|
|
||||||
) {
|
|
||||||
const { data: website = null, isLoading } = useQuery(
|
|
||||||
['website', workspaceId, websiteId],
|
|
||||||
() => {
|
|
||||||
return getWorkspaceWebsiteInfo(workspaceId, websiteId);
|
|
||||||
},
|
|
||||||
{ cacheTime: 0 }
|
|
||||||
);
|
|
||||||
|
|
||||||
return { website, isLoading };
|
|
||||||
}
|
|
||||||
|
|
||||||
export function refreshWorkspaceWebsites(workspaceId: string) {
|
export function refreshWorkspaceWebsites(workspaceId: string) {
|
||||||
queryClient.refetchQueries(['websites', workspaceId]);
|
queryClient.refetchQueries(['websites', workspaceId]);
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { createTRPCReact } from '@trpc/react-query';
|
import { createTRPCReact, getQueryKey } from '@trpc/react-query';
|
||||||
import type { AppRouter } from '../../server/trpc/routers';
|
import type { AppRouter } from '../../server/trpc/routers';
|
||||||
import { httpBatchLink, loggerLink, TRPCClientErrorLike } from '@trpc/client';
|
import { httpBatchLink, loggerLink, TRPCClientErrorLike } from '@trpc/client';
|
||||||
import { getJWT } from './auth';
|
import { getJWT } from './auth';
|
||||||
@ -6,6 +6,8 @@ import { message } from 'antd';
|
|||||||
import type { inferRouterInputs, inferRouterOutputs } from '@trpc/server';
|
import type { inferRouterInputs, inferRouterOutputs } from '@trpc/server';
|
||||||
import { isDev } from '../utils/env';
|
import { isDev } from '../utils/env';
|
||||||
|
|
||||||
|
export { getQueryKey };
|
||||||
|
|
||||||
export const trpc = createTRPCReact<AppRouter>();
|
export const trpc = createTRPCReact<AppRouter>();
|
||||||
|
|
||||||
export type RouterInput = inferRouterInputs<AppRouter>;
|
export type RouterInput = inferRouterInputs<AppRouter>;
|
||||||
|
@ -1,17 +1,19 @@
|
|||||||
import { Button, Form, Input, message, Popconfirm, Tabs } from 'antd';
|
import { Button, Form, Input, message, Popconfirm, Tabs } from 'antd';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { useNavigate, useParams } from 'react-router';
|
import { useNavigate, useParams } from 'react-router';
|
||||||
import {
|
import { deleteWorkspaceWebsite } from '../api/model/website';
|
||||||
deleteWorkspaceWebsite,
|
|
||||||
useWorkspaceWebsiteInfo,
|
|
||||||
} from '../api/model/website';
|
|
||||||
import { useRequest } from '../hooks/useRequest';
|
import { useRequest } from '../hooks/useRequest';
|
||||||
import { useCurrentWorkspaceId } from '../store/user';
|
import { useCurrentWorkspaceId } from '../store/user';
|
||||||
import { ErrorTip } from './ErrorTip';
|
import { ErrorTip } from './ErrorTip';
|
||||||
import { Loading } from './Loading';
|
import { Loading } from './Loading';
|
||||||
import { NoWorkspaceTip } from './NoWorkspaceTip';
|
import { NoWorkspaceTip } from './NoWorkspaceTip';
|
||||||
import { MonitorPicker } from './monitor/MonitorPicker';
|
import { MonitorPicker } from './monitor/MonitorPicker';
|
||||||
import { defaultErrorHandler, defaultSuccessHandler, trpc } from '../api/trpc';
|
import {
|
||||||
|
defaultErrorHandler,
|
||||||
|
defaultSuccessHandler,
|
||||||
|
getQueryKey,
|
||||||
|
trpc,
|
||||||
|
} from '../api/trpc';
|
||||||
import { useQueryClient } from '@tanstack/react-query';
|
import { useQueryClient } from '@tanstack/react-query';
|
||||||
import { useEvent } from '../hooks/useEvent';
|
import { useEvent } from '../hooks/useEvent';
|
||||||
|
|
||||||
@ -20,16 +22,17 @@ export const WebsiteInfo: React.FC = React.memo(() => {
|
|||||||
const { websiteId } = useParams<{
|
const { websiteId } = useParams<{
|
||||||
websiteId: string;
|
websiteId: string;
|
||||||
}>();
|
}>();
|
||||||
const { website, isLoading } = useWorkspaceWebsiteInfo(
|
|
||||||
workspaceId,
|
|
||||||
websiteId!
|
|
||||||
);
|
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
|
|
||||||
|
const { data: website, isLoading } = trpc.website.info.useQuery({
|
||||||
|
workspaceId,
|
||||||
|
websiteId: websiteId!,
|
||||||
|
});
|
||||||
|
|
||||||
const updateMutation = trpc.website.updateInfo.useMutation({
|
const updateMutation = trpc.website.updateInfo.useMutation({
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
queryClient.resetQueries(['websites', workspaceId]); // TODO: translation to trpc
|
queryClient.resetQueries(getQueryKey(trpc.website.info));
|
||||||
defaultSuccessHandler();
|
defaultSuccessHandler();
|
||||||
},
|
},
|
||||||
onError: defaultErrorHandler,
|
onError: defaultErrorHandler,
|
||||||
|
@ -52,20 +52,6 @@ export async function getWorkspaceWebsites(workspaceId: string) {
|
|||||||
return workspace?.websites ?? [];
|
return workspace?.websites ?? [];
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getWorkspaceWebsiteInfo(
|
|
||||||
workspaceId: string,
|
|
||||||
websiteId: string
|
|
||||||
) {
|
|
||||||
const websiteInfo = await prisma.website.findUnique({
|
|
||||||
where: {
|
|
||||||
id: websiteId,
|
|
||||||
workspaceId,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
return websiteInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function addWorkspaceWebsite(
|
export async function addWorkspaceWebsite(
|
||||||
workspaceId: string,
|
workspaceId: string,
|
||||||
name: string,
|
name: string,
|
||||||
|
@ -61,21 +61,6 @@ workspaceRouter.post(
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
workspaceRouter.get(
|
|
||||||
'/website/:websiteId',
|
|
||||||
validate(query('workspaceId').isString(), param('websiteId').isString()),
|
|
||||||
auth(),
|
|
||||||
workspacePermission(),
|
|
||||||
async (req, res) => {
|
|
||||||
const workspaceId = req.query.workspaceId as string;
|
|
||||||
const websiteId = req.params.websiteId;
|
|
||||||
|
|
||||||
const website = await getWorkspaceWebsiteInfo(workspaceId, websiteId);
|
|
||||||
|
|
||||||
res.json({ website });
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
workspaceRouter.delete(
|
workspaceRouter.delete(
|
||||||
'/:workspaceId/website/:websiteId',
|
'/:workspaceId/website/:websiteId',
|
||||||
validate(param('workspaceId').isString(), param('websiteId').isString()),
|
validate(param('workspaceId').isString(), param('websiteId').isString()),
|
||||||
|
@ -31,11 +31,12 @@ export const websiteRouter = router({
|
|||||||
})
|
})
|
||||||
)
|
)
|
||||||
.query(async ({ input }) => {
|
.query(async ({ input }) => {
|
||||||
const { websiteId } = input;
|
const { workspaceId, websiteId } = input;
|
||||||
|
|
||||||
const website = await prisma.website.findUnique({
|
const website = await prisma.website.findUnique({
|
||||||
where: {
|
where: {
|
||||||
id: websiteId,
|
id: websiteId,
|
||||||
|
workspaceId,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user