Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions apps/webapp/app/env.server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -714,6 +714,9 @@ const EnvironmentSchema = z.object({

QUEUE_SSE_AUTORELOAD_INTERVAL_MS: z.coerce.number().int().default(5_000),
QUEUE_SSE_AUTORELOAD_TIMEOUT_MS: z.coerce.number().int().default(60_000),

SLACK_BOT_TOKEN: z.string(),
SLACK_SIGNUP_REASON_CHANNEL_ID: z.string(),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@samejr these need to be optional because of self-hosters

});

export type Environment = z.infer<typeof EnvironmentSchema>;
Expand Down
35 changes: 6 additions & 29 deletions apps/webapp/app/routes/_app.orgs.new/route.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import { RadioGroup } from "@radix-ui/react-radio-group";
import type { ActionFunction, LoaderFunctionArgs } from "@remix-run/node";
import { json, redirect } from "@remix-run/node";
import { Form, useActionData, useNavigation } from "@remix-run/react";
import { uiComponent } from "@team-plain/typescript-sdk";
import { typedjson, useTypedLoaderData } from "remix-typedjson";
import { z } from "zod";
import { MainCenteredContainer } from "~/components/layout/AppLayout";
Expand All @@ -23,10 +22,9 @@ import { TextArea } from "~/components/primitives/TextArea";
import { useFeatures } from "~/hooks/useFeatures";
import { createOrganization } from "~/models/organization.server";
import { NewOrganizationPresenter } from "~/presenters/NewOrganizationPresenter.server";
import { logger } from "~/services/logger.server";
import { requireUser, requireUserId } from "~/services/session.server";
import { sendNewOrgMessage } from "~/services/slack.server";
import { organizationPath, rootPath } from "~/utils/pathBuilder";
import { sendToPlain } from "~/utils/plain.server";

const schema = z.object({
orgName: z.string().min(3).max(50),
Expand Down Expand Up @@ -63,32 +61,11 @@ export const action: ActionFunction = async ({ request }) => {
const whyUseUs = formData.get("whyUseUs");

if (whyUseUs) {
try {
await sendToPlain({
userId: user.id,
email: user.email,
name: user.name ?? user.displayName ?? user.email,
title: "New org feedback",
components: [
uiComponent.text({
text: `${submission.value.orgName} just created a new organization.`,
}),
uiComponent.divider({ spacingSize: "M" }),
uiComponent.text({
size: "L",
color: "NORMAL",
text: "What problem are you trying to solve?",
}),
uiComponent.text({
size: "L",
color: "NORMAL",
text: whyUseUs.toString(),
}),
],
});
} catch (error) {
logger.error("Error sending data to Plain when creating an org:", { error });
}
await sendNewOrgMessage({
orgName: submission.value.orgName,
whyUseUs: whyUseUs.toString(),
userEmail: user.email,
});
}

return redirect(organizationPath(organization));
Expand Down
40 changes: 40 additions & 0 deletions apps/webapp/app/services/slack.server.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { WebClient } from "@slack/web-api";
import { env } from "~/env.server";
import { logger } from "./logger.server";

const slack = new WebClient(env.SLACK_BOT_TOKEN);

type SendNewOrgMessageParams = {
orgName: string;
whyUseUs: string;
userEmail: string;
};

export async function sendNewOrgMessage({ orgName, whyUseUs, userEmail }: SendNewOrgMessageParams) {
try {
await slack.chat.postMessage({
channel: env.SLACK_SIGNUP_REASON_CHANNEL_ID,
text: `New org created: ${orgName}`,
blocks: [
{
type: "header",
text: { type: "plain_text", text: "New org created" },
},
{
type: "section",
text: { type: "mrkdwn", text: `*Org name:* ${orgName}` },
},
{
type: "section",
text: { type: "mrkdwn", text: `*What problem are you trying to solve?*\n${whyUseUs}` },
},
{
type: "context",
elements: [{ type: "mrkdwn", text: `Created by: ${userEmail}` }],
},
],
});
} catch (error) {
logger.error("Error sending data to Slack when creating an org:", { error });
}
}
Loading