chore: Relying on feature flag (#10162)

This commit is contained in:
Leo Giovanetti
2023-07-14 22:20:03 -03:00
committed by GitHub
parent ef483a6520
commit d5f3623377
8 changed files with 84 additions and 5 deletions
@@ -6,6 +6,8 @@ import { WizardLayout, Meta } from "@calcom/ui";
import PageWrapper from "@components/PageWrapper";
export { getServerSideProps } from "@calcom/features/ee/organizations/pages/organization";
const AboutOrganizationPage = () => {
const { t } = useLocale();
const router = useRouter();
@@ -7,6 +7,8 @@ import { WizardLayout, Meta } from "@calcom/ui";
import PageWrapper from "@components/PageWrapper";
export { getServerSideProps } from "@calcom/features/ee/organizations/pages/organization";
const AddNewTeamsPage = () => {
const { t } = useLocale();
const router = useRouter();
@@ -7,6 +7,8 @@ import { WizardLayout, Meta } from "@calcom/ui";
import PageWrapper from "@components/PageWrapper";
export { getServerSideProps } from "@calcom/features/ee/organizations/pages/organization";
const OnboardTeamMembersPage = () => {
const { t } = useLocale();
const router = useRouter();
@@ -6,6 +6,8 @@ import { WizardLayout, Meta } from "@calcom/ui";
import PageWrapper from "@components/PageWrapper";
export { getServerSideProps } from "@calcom/features/ee/organizations/pages/organization";
const SetPasswordPage = () => {
const { t } = useLocale();
const router = useRouter();
@@ -1,16 +1,21 @@
import type { GetServerSidePropsContext } from "next";
import LicenseRequired from "@calcom/features/ee/common/components/LicenseRequired";
import { CreateANewOrganizationForm } from "@calcom/features/ee/organizations/components";
import { getFeatureFlagMap } from "@calcom/features/flags/server/utils";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import { WizardLayout, Meta } from "@calcom/ui";
import type { inferSSRProps } from "@lib/types/inferSSRProps";
import PageWrapper from "@components/PageWrapper";
const CreateNewOrganizationPage = () => {
const CreateNewOrganizationPage = ({ querySlug }: inferSSRProps<typeof getServerSideProps>) => {
const { t } = useLocale();
return (
<LicenseRequired>
<Meta title={t("set_up_your_organization")} description={t("organizations_description")} />
<CreateANewOrganizationForm />
<CreateANewOrganizationForm slug={querySlug} />
</LicenseRequired>
);
};
@@ -22,6 +27,25 @@ const LayoutWrapper = (page: React.ReactElement) => {
);
};
export const getServerSideProps = async (context: GetServerSidePropsContext) => {
const prisma = await import("@calcom/prisma").then((mod) => mod.default);
const flags = await getFeatureFlagMap(prisma);
// Check if organizations are enabled
if (flags["organizations"] !== true) {
return {
notFound: true,
};
}
const querySlug = context.query.slug as string;
return {
props: {
querySlug: querySlug ?? null,
},
};
};
CreateNewOrganizationPage.getLayout = LayoutWrapper;
CreateNewOrganizationPage.PageWrapper = PageWrapper;
+4 -1
View File
@@ -7,6 +7,7 @@ import { useEffect } from "react";
import { sdkActionManager, useIsEmbed } from "@calcom/embed-core/embed-iframe";
import { orgDomainConfig } from "@calcom/features/ee/organizations/lib/orgDomains";
import EventTypeDescription from "@calcom/features/eventtypes/components/EventTypeDescription";
import { getFeatureFlagMap } from "@calcom/features/flags/server/utils";
import { getPlaceholderAvatar } from "@calcom/lib/defaultAvatarImage";
import { useLocale } from "@calcom/lib/hooks/useLocale";
import useTheme from "@calcom/lib/hooks/useTheme";
@@ -245,6 +246,7 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) =>
const ssr = await ssrInit(context);
const slug = Array.isArray(context.query?.slug) ? context.query.slug.pop() : context.query.slug;
const { isValidOrgDomain } = orgDomainConfig(context.req.headers.host ?? "");
const flags = await getFeatureFlagMap(prisma);
const team = await getTeamWithMembers(undefined, slug);
const metadata = teamMetadataSchema.parse(team?.metadata ?? {});
@@ -253,7 +255,8 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) =>
if (
(isValidOrgDomain && team?.parent && !!metadata?.isOrganization) ||
(!isValidOrgDomain && team?.parent) ||
(!isValidOrgDomain && !!metadata?.isOrganization)
(!isValidOrgDomain && !!metadata?.isOrganization) ||
flags["organizations"] !== true
) {
return { notFound: true } as const;
}
@@ -135,13 +135,12 @@ export const VerifyCodeDialog = ({
);
};
export const CreateANewOrganizationForm = () => {
export const CreateANewOrganizationForm = ({ slug }: { slug?: string }) => {
const { t, i18n } = useLocale();
const router = useRouter();
const telemetry = useTelemetry();
const [serverErrorMessage, setServerErrorMessage] = useState<string | null>(null);
const [showVerifyCode, setShowVerifyCode] = useState(false);
const { slug } = router.query;
const newOrganizationFormMethods = useForm<{
name: string;
@@ -0,0 +1,45 @@
import type { GetServerSidePropsContext } from "next";
import { getServerSession } from "@calcom/features/auth/lib/getServerSession";
import { getFeatureFlagMap } from "@calcom/features/flags/server/utils";
import { MembershipRole } from "@calcom/prisma/client";
export const getServerSideProps = async ({ req, res }: GetServerSidePropsContext) => {
const prisma = await import("@calcom/prisma").then((mod) => mod.default);
const flags = await getFeatureFlagMap(prisma);
// Check if organizations are enabled
if (flags["organizations"] !== true) {
return {
notFound: true,
};
}
// Check if logged in user has an organization assigned
const session = await getServerSession({ req, res });
if (!session?.user.organizationId) {
return {
notFound: true,
};
}
// Check if logged in user has OWNER/ADMIN role in organization
const membership = await prisma.membership.findFirst({
where: {
userId: session?.user.id,
teamId: session?.user.organizationId,
},
select: {
role: true,
},
});
if (!membership?.role || membership?.role === MembershipRole.MEMBER) {
return {
notFound: true,
};
}
// Otherwise, all good
return {
props: {},
};
};