import { useSession } from "next-auth/react"; import { useRouter } from "next/navigation"; import type { Dispatch, SetStateAction } from "react"; import { useState } from "react"; import { getLayout } from "@calcom/features/MainLayout"; import { ShellMain } from "@calcom/features/shell/Shell"; import { classNames } from "@calcom/lib"; import { WEBAPP_URL } from "@calcom/lib/constants"; import { useLocale } from "@calcom/lib/hooks/useLocale"; import { useRouterQuery } from "@calcom/lib/hooks/useRouterQuery"; import { HttpError } from "@calcom/lib/http-error"; import { trpc } from "@calcom/trpc/react"; import { AnimatedPopover, Avatar, CreateButtonWithTeamsList, showToast } from "@calcom/ui"; import { FilterResults } from "../../../filters/components/FilterResults"; import { TeamsFilter } from "../../../filters/components/TeamsFilter"; import { getTeamsFiltersFromQuery } from "../../../filters/lib/getTeamsFiltersFromQuery"; import LicenseRequired from "../../common/components/LicenseRequired"; import EmptyScreen from "../components/EmptyScreen"; import SkeletonLoader from "../components/SkeletonLoaderList"; import WorkflowList from "../components/WorkflowListPage"; function WorkflowsPage() { const { t } = useLocale(); const session = useSession(); const router = useRouter(); const routerQuery = useRouterQuery(); const filters = getTeamsFiltersFromQuery(routerQuery); const queryRes = trpc.viewer.workflows.filteredList.useQuery({ filters, }); const createMutation = trpc.viewer.workflows.create.useMutation({ onSuccess: async ({ workflow }) => { await router.replace(`/workflows/${workflow.id}`); }, onError: (err) => { if (err instanceof HttpError) { const message = `${err.statusCode}: ${err.message}`; showToast(message, "error"); } if (err.data?.code === "UNAUTHORIZED") { const message = `${err.data.code}: ${t("error_workflow_unauthorized_create")}`; showToast(message, "error"); } }, }); return ( { createMutation.mutate({ teamId }); }} isLoading={createMutation.isLoading} disableMobileButton={true} onlyShowWithNoTeams={true} /> ) : null }> <> {queryRes.data?.totalCount ? (
createMutation.mutate({ teamId })} isLoading={createMutation.isLoading} disableMobileButton={true} onlyShowWithTeams={true} />
) : null} } noResultsScreen={} SkeletonLoader={SkeletonLoader}>
); } const Filter = (props: { profiles: { readOnly?: boolean | undefined; slug: string | null; name: string | null; teamId: number | null | undefined; image?: string | undefined | null; }[]; checked: { userId: number | null; teamIds: number[]; }; setChecked: Dispatch< SetStateAction<{ userId: number | null; teamIds: number[]; }> >; }) => { const session = useSession(); const userId = session.data?.user.id || 0; const user = session.data?.user.name || ""; const userName = session.data?.user.username; const userAvatar = `${WEBAPP_URL}/${userName}/avatar.png`; const teams = props.profiles.filter((profile) => !!profile.teamId); const { checked, setChecked } = props; const [noFilter, setNoFilter] = useState(true); return (
{ if (e.target.checked) { setChecked({ userId: userId, teamIds: checked.teamIds }); if (checked.teamIds.length === teams.length) { setNoFilter(true); } } else if (!e.target.checked) { setChecked({ userId: null, teamIds: checked.teamIds }); setNoFilter(false); } }} />
{teams.map((profile) => (
{ if (e.target.checked) { const updatedChecked = checked; updatedChecked.teamIds.push(profile.teamId || 0); setChecked({ userId: checked.userId, teamIds: [...updatedChecked.teamIds] }); if (checked.userId && updatedChecked.teamIds.length === teams.length) { setNoFilter(true); } else { setNoFilter(false); } } else if (!e.target.checked) { const index = checked.teamIds.indexOf(profile.teamId || 0); if (index !== -1) { const updatedChecked = checked; updatedChecked.teamIds.splice(index, 1); setChecked({ userId: checked.userId, teamIds: [...updatedChecked.teamIds] }); if (checked.userId && updatedChecked.teamIds.length === teams.length) { setNoFilter(true); } else { setNoFilter(false); } } } }} className="text-primary-600 focus:ring-primary-500 border-default inline-flex h-4 w-4 place-self-center justify-self-end rounded " />
))}
); }; WorkflowsPage.getLayout = getLayout; export default WorkflowsPage;