diff --git a/src/app/(main)/reports/ReportDeleteButton.tsx b/src/app/(main)/reports/ReportDeleteButton.tsx index 99e39d71..affd81fd 100644 --- a/src/app/(main)/reports/ReportDeleteButton.tsx +++ b/src/app/(main)/reports/ReportDeleteButton.tsx @@ -49,6 +49,7 @@ export function ReportDeleteButton({ error={error} onConfirm={handleConfirm.bind(null, close)} onClose={close} + buttonLabel={formatMessage(labels.delete)} /> )} diff --git a/src/app/(main)/settings/teams/TeamAddForm.tsx b/src/app/(main)/settings/teams/TeamAddForm.tsx index 9bcf7840..c0fc7513 100644 --- a/src/app/(main)/settings/teams/TeamAddForm.tsx +++ b/src/app/(main)/settings/teams/TeamAddForm.tsx @@ -1,14 +1,13 @@ -import { - Form, - FormRow, - FormInput, - FormButtons, - TextField, - Button, - SubmitButton, -} from 'react-basics'; -import { touch } from 'store/modified'; import { useApi, useMessages } from 'components/hooks'; +import { + Button, + Form, + FormButtons, + FormInput, + FormRow, + SubmitButton, + TextField, +} from 'react-basics'; export function TeamAddForm({ onSave, onClose }: { onSave: () => void; onClose: () => void }) { const { formatMessage, labels } = useMessages(); @@ -20,7 +19,6 @@ export function TeamAddForm({ onSave, onClose }: { onSave: () => void; onClose: const handleSubmit = async (data: any) => { mutate(data, { onSuccess: async () => { - touch('teams'); onSave?.(); onClose?.(); }, diff --git a/src/app/(main)/settings/teams/TeamLeaveForm.tsx b/src/app/(main)/settings/teams/TeamLeaveForm.tsx index 466fbab3..a22a9060 100644 --- a/src/app/(main)/settings/teams/TeamLeaveForm.tsx +++ b/src/app/(main)/settings/teams/TeamLeaveForm.tsx @@ -24,7 +24,7 @@ export function TeamLeaveForm({ const handleConfirm = async () => { mutate(null, { onSuccess: async () => { - touch('team:members'); + touch('teams:members'); onSave(); onClose(); }, diff --git a/src/app/(main)/settings/teams/TeamsAddButton.tsx b/src/app/(main)/settings/teams/TeamsAddButton.tsx index 871cdb76..15f541ea 100644 --- a/src/app/(main)/settings/teams/TeamsAddButton.tsx +++ b/src/app/(main)/settings/teams/TeamsAddButton.tsx @@ -1,10 +1,19 @@ -import { Button, Icon, Modal, ModalTrigger, Text } from 'react-basics'; +import { Button, Icon, Modal, ModalTrigger, Text, useToasts } from 'react-basics'; import Icons from 'components/icons'; import { useMessages } from 'components/hooks'; import TeamAddForm from './TeamAddForm'; +import { messages } from 'components/messages'; +import { touch } from 'store/modified'; -export function TeamsAddButton({ onAdd }: { onAdd?: () => void }) { +export function TeamsAddButton({ onSave }: { onSave?: () => void }) { const { formatMessage, labels } = useMessages(); + const { showToast } = useToasts(); + + const handleSave = async () => { + showToast({ message: formatMessage(messages.saved), variant: 'success' }); + touch('teams'); + onSave?.(); + }; return ( @@ -15,7 +24,7 @@ export function TeamsAddButton({ onAdd }: { onAdd?: () => void }) { {formatMessage(labels.createTeam)} - {(close: () => void) => } + {(close: () => void) => } ); diff --git a/src/app/(main)/settings/teams/[teamId]/members/TeamMemberRemoveButton.tsx b/src/app/(main)/settings/teams/[teamId]/members/TeamMemberRemoveButton.tsx index 0b4ca500..fc51a818 100644 --- a/src/app/(main)/settings/teams/[teamId]/members/TeamMemberRemoveButton.tsx +++ b/src/app/(main)/settings/teams/[teamId]/members/TeamMemberRemoveButton.tsx @@ -22,7 +22,7 @@ export function TeamMemberRemoveButton({ const handleRemoveTeamMember = () => { mutate(null, { onSuccess: () => { - touch('team:members'); + touch('teams:members'); onSave?.(); }, }); diff --git a/src/app/(main)/settings/teams/[teamId]/team/TeamDeleteForm.tsx b/src/app/(main)/settings/teams/[teamId]/team/TeamDeleteForm.tsx index 33694495..2200cc1e 100644 --- a/src/app/(main)/settings/teams/[teamId]/team/TeamDeleteForm.tsx +++ b/src/app/(main)/settings/teams/[teamId]/team/TeamDeleteForm.tsx @@ -16,7 +16,7 @@ export function TeamDeleteForm({ const { labels, formatMessage } = useMessages(); const { del, useMutation } = useApi(); const { mutate, error, isPending } = useMutation({ - mutationFn: (data: any) => del(`/teams/${teamId}`, data), + mutationFn: () => del(`/teams/${teamId}`), }); const handleConfirm = async () => { diff --git a/src/app/(main)/settings/websites/[websiteId]/WebsiteDeleteForm.tsx b/src/app/(main)/settings/websites/[websiteId]/WebsiteDeleteForm.tsx index 19755205..077a8f4a 100644 --- a/src/app/(main)/settings/websites/[websiteId]/WebsiteDeleteForm.tsx +++ b/src/app/(main)/settings/websites/[websiteId]/WebsiteDeleteForm.tsx @@ -15,7 +15,7 @@ export function WebsiteDeleteForm({ const { formatMessage, labels } = useMessages(); const { del, useMutation } = useApi(); const { mutate, isPending, error } = useMutation({ - mutationFn: (data: any) => del(`/websites/${websiteId}`, data), + mutationFn: () => del(`/websites/${websiteId}`), }); const handleConfirm = async () => { diff --git a/src/components/hooks/queries/useTeamMembers.ts b/src/components/hooks/queries/useTeamMembers.ts index 064231d1..d18ada3f 100644 --- a/src/components/hooks/queries/useTeamMembers.ts +++ b/src/components/hooks/queries/useTeamMembers.ts @@ -1,11 +1,13 @@ +import useModified from 'store/modified'; import useApi from './useApi'; import useFilterQuery from './useFilterQuery'; export function useTeamMembers(teamId: string) { const { get } = useApi(); + const modified = useModified((state: any) => state?.['teams:members']); return useFilterQuery({ - queryKey: ['teams:users', { teamId }], + queryKey: ['teams:members', { teamId, modified }], queryFn: (params: any) => { return get(`/teams/${teamId}/users`, params); }, diff --git a/src/components/hooks/queries/useTeams.ts b/src/components/hooks/queries/useTeams.ts index 020c9915..3360a6c4 100644 --- a/src/components/hooks/queries/useTeams.ts +++ b/src/components/hooks/queries/useTeams.ts @@ -1,13 +1,15 @@ import useApi from './useApi'; import useFilterQuery from './useFilterQuery'; import { useLogin } from 'components/hooks'; +import useModified from 'store/modified'; export function useTeams(userId?: string) { const { get } = useApi(); const { user } = useLogin(); + const modified = useModified((state: any) => state?.teams); return useFilterQuery({ - queryKey: ['teams', { userId: userId || user?.id }], + queryKey: ['teams', { userId: userId || user?.id, modified }], queryFn: (params: any) => { return get(`/teams`, params); }, diff --git a/src/components/hooks/queries/useWebsites.ts b/src/components/hooks/queries/useWebsites.ts index bb3e9a2d..4f16e4d8 100644 --- a/src/components/hooks/queries/useWebsites.ts +++ b/src/components/hooks/queries/useWebsites.ts @@ -3,15 +3,13 @@ import { useFilterQuery } from './useFilterQuery'; import { useLogin } from './useLogin'; import useModified from 'store/modified'; -const selector = (state: any) => state?.websites; - export function useWebsites( { userId, teamId }: { userId?: string; teamId?: string }, params?: { [key: string]: string | number }, ) { const { get } = useApi(); const { user } = useLogin(); - const modified = useModified(selector); + const modified = useModified((state: any) => state?.websites); return useFilterQuery({ queryKey: ['websites', { userId, teamId, modified, ...params }], diff --git a/src/queries/admin/report.ts b/src/queries/admin/report.ts index fee0b442..d6b28cc4 100644 --- a/src/queries/admin/report.ts +++ b/src/queries/admin/report.ts @@ -1,10 +1,9 @@ import { Prisma, Report } from '@prisma/client'; import prisma from 'lib/prisma'; import { FilterResult, ReportSearchFilter } from 'lib/types'; -import ReportFindUniqueArgs = Prisma.ReportFindUniqueArgs; import ReportFindManyArgs = Prisma.ReportFindManyArgs; -async function findReport(criteria: ReportFindUniqueArgs) { +async function findReport(criteria: Prisma.ReportFindUniqueArgs): Promise { return prisma.client.report.findUnique(criteria); } diff --git a/src/queries/admin/team.ts b/src/queries/admin/team.ts index e381d5ce..225d57c4 100644 --- a/src/queries/admin/team.ts +++ b/src/queries/admin/team.ts @@ -5,8 +5,8 @@ import prisma from 'lib/prisma'; import { FilterResult, TeamSearchFilter } from 'lib/types'; import TeamFindManyArgs = Prisma.TeamFindManyArgs; -export async function findTeam(criteria: Prisma.TeamFindFirstArgs): Promise { - return prisma.client.team.findFirst(criteria); +export async function findTeam(criteria: Prisma.TeamFindUniqueArgs): Promise { + return prisma.client.team.findUnique(criteria); } export async function getTeam(teamId: string, options: { includeMembers?: boolean } = {}) { diff --git a/src/queries/admin/teamUser.ts b/src/queries/admin/teamUser.ts index 83f788de..43785b78 100644 --- a/src/queries/admin/teamUser.ts +++ b/src/queries/admin/teamUser.ts @@ -4,6 +4,10 @@ import prisma from 'lib/prisma'; import { FilterResult, TeamUserSearchFilter } from 'lib/types'; import TeamUserFindManyArgs = Prisma.TeamUserFindManyArgs; +export async function findTeamUser(criteria: Prisma.TeamUserFindUniqueArgs): Promise { + return prisma.client.teamUser.findUnique(criteria); +} + export async function getTeamUser(teamId: string, userId: string): Promise { return prisma.client.teamUser.findFirst({ where: { @@ -49,21 +53,20 @@ export async function createTeamUser( }); } -export async function updateTeamUser(teamUserId: string, data: any): Promise { - return prisma.client.teamUser.update( - { - where: { - id: teamUserId, - }, +export async function updateTeamUser( + teamUserId: string, + data: Prisma.TeamUserUpdateInput, +): Promise { + return prisma.client.teamUser.update({ + where: { + id: teamUserId, }, data, - ); + }); } -export async function deleteTeamUser(teamId: string, userId: string): Promise { - const { client } = prisma; - - return client.teamUser.deleteMany({ +export async function deleteTeamUser(teamId: string, userId: string): Promise { + return prisma.client.teamUser.deleteMany({ where: { teamId, userId, diff --git a/src/queries/admin/user.ts b/src/queries/admin/user.ts index 0b5fe349..274bb43d 100644 --- a/src/queries/admin/user.ts +++ b/src/queries/admin/user.ts @@ -221,7 +221,7 @@ export async function deleteUser( id: userId, }, }), - ]).then(async (data: any) => { + ]).then(async data => { if (cache.enabled) { const ids = websites.map(a => a.id); diff --git a/src/queries/admin/website.ts b/src/queries/admin/website.ts index 53627f22..01d52019 100644 --- a/src/queries/admin/website.ts +++ b/src/queries/admin/website.ts @@ -4,7 +4,7 @@ import prisma from 'lib/prisma'; import { FilterResult, WebsiteSearchFilter } from 'lib/types'; import WebsiteFindManyArgs = Prisma.WebsiteFindManyArgs; -async function findWebsite(criteria: Prisma.WebsiteFindManyArgs): Promise { +async function findWebsite(criteria: Prisma.WebsiteFindUniqueArgs): Promise { return prisma.client.website.findUnique(criteria); } @@ -106,7 +106,7 @@ export async function createWebsite( .create({ data, }) - .then(async (data: { id: any }) => { + .then(async data => { if (cache.enabled) { await cache.storeWebsite(data); }