From 12a606a443383dee26f39879bcecc20378df8d46 Mon Sep 17 00:00:00 2001 From: Dhruwang Jariwala <67850763+Dhruwang@users.noreply.github.com> Date: Thu, 23 May 2024 15:55:48 +0530 Subject: [PATCH] fix: modified google sheet integration and minor refactors in other integrations (#2572) --- .../google-sheets/link-survey-with-sheet.webp | Bin 12010 -> 37518 bytes .../google-sheets/link-with-questions.webp | Bin 24962 -> 68000 bytes .../integrations/google-sheets/page.mdx | 6 +- .../app/self-hosting/integrations/page.mdx | 12 +- .../components/AddIntegrationModal.tsx | 79 ++------ .../airtable/components/AirtableWrapper.tsx | 30 ++- .../components/BaseSelectDropdown.tsx | 59 ++++++ .../airtable/components/Connect.tsx | 59 ------ .../{Home.tsx => ManageIntegration.tsx} | 4 +- .../integrations/airtable/page.tsx | 4 +- .../integrations/google-sheets/actions.ts | 13 +- .../components/AddIntegrationModal.tsx | 77 +++----- .../google-sheets/components/Connect.tsx | 61 ------ .../components/GoogleSheetWrapper.tsx | 35 ++-- .../{Home.tsx => ManageIntegration.tsx} | 11 +- .../integrations/google-sheets/lib/util.ts | 20 ++ .../integrations/google-sheets/page.tsx | 12 +- .../{Home.tsx => ManageIntegration.tsx} | 6 +- .../notion/components/NotionWrapper.tsx | 24 ++- .../[environmentId]/integrations/page.tsx | 5 +- .../components/AddChannelMappingModal.tsx | 3 +- .../integrations/slack/components/Connect.tsx | 71 ------- .../{Home.tsx => ManageIntegration.tsx} | 9 +- .../slack/components/SlackWrapper.tsx | 26 ++- apps/web/app/api/google-sheet/route.ts | 1 - .../airtable.svg => images/airtableLogo.svg} | 0 .../googleSheetsLogo.png} | Bin packages/lib/googleSheet/service.ts | 66 +++---- .../ui/ConnectIntegration/index.tsx | 64 +++--- packages/ui/ConnectIntegration/lib/utils.ts | 34 ++++ packages/ui/FormbricksLogo/index.tsx | 187 ++++++++++++++++++ 31 files changed, 525 insertions(+), 453 deletions(-) create mode 100644 apps/web/app/(app)/environments/[environmentId]/integrations/airtable/components/BaseSelectDropdown.tsx delete mode 100644 apps/web/app/(app)/environments/[environmentId]/integrations/airtable/components/Connect.tsx rename apps/web/app/(app)/environments/[environmentId]/integrations/airtable/components/{Home.tsx => ManageIntegration.tsx} (98%) delete mode 100644 apps/web/app/(app)/environments/[environmentId]/integrations/google-sheets/components/Connect.tsx rename apps/web/app/(app)/environments/[environmentId]/integrations/google-sheets/components/{Home.tsx => ManageIntegration.tsx} (95%) create mode 100644 apps/web/app/(app)/environments/[environmentId]/integrations/google-sheets/lib/util.ts rename apps/web/app/(app)/environments/[environmentId]/integrations/notion/components/{Home.tsx => ManageIntegration.tsx} (97%) delete mode 100644 apps/web/app/(app)/environments/[environmentId]/integrations/slack/components/Connect.tsx rename apps/web/app/(app)/environments/[environmentId]/integrations/slack/components/{Home.tsx => ManageIntegration.tsx} (95%) rename apps/web/{app/(app)/environments/[environmentId]/integrations/airtable/images/airtable.svg => images/airtableLogo.svg} (100%) rename apps/web/{app/(app)/environments/[environmentId]/integrations/google-sheets/images/google-sheets-small.png => images/googleSheetsLogo.png} (100%) rename apps/web/app/(app)/environments/[environmentId]/integrations/notion/components/Connect.tsx => packages/ui/ConnectIntegration/index.tsx (50%) create mode 100644 packages/ui/ConnectIntegration/lib/utils.ts create mode 100644 packages/ui/FormbricksLogo/index.tsx diff --git a/apps/docs/app/developer-docs/integrations/google-sheets/link-survey-with-sheet.webp b/apps/docs/app/developer-docs/integrations/google-sheets/link-survey-with-sheet.webp index 90e1e02d7ba66fc38f2c8d75f3eafe906a5f2d43..daa7a1ee90fedeb4da0bdb2bba477e0b04986edf 100644 GIT binary patch literal 37518 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

1zaktmkEHusIq!k$T$O#mi=` zQ(9w|hKXn+CB)mN*uJ-meA9OPxkRg?AgHyAuY;IEEJ*?SZ`HXo0tr zy;E}5>P1425T8w1{1yx{9_Nr6;XI&Ap95Uvk-pJ5RP*2Let~6xpJ4?*7{TnCb zAChC9if@(K%o$jE-jvv1Zmgg=?$2N4Bg(wE+$bGro}cH(ZZ642MEb@d8k&j6dv6BX zl&4lC&^RKTRj+Ix{nl1!jyL?2=};)B-yvIX_l$j}qVZeVXk+Q(u5w)wGw+%Ld0d`b z-XRyBMHB~wc3{eUau^&gm4588Kvn67qTt8k>i~o4*gp|(EV^gTt$RQs0og0%Gq_7`DU$mlA4x7Rz2}>N=A`K9 zKfzH6ZS`dOm84~*8u~ux*o)Y^~ol!-_oJB2}_&%Bg;MU&u1C)AdKCspnN z5w!J_x$7{v`pXkazFzINLbf1v28fDE(kz|KK~?U#OmAmu*V1Wm=URP{-(y8+9PIQ& zsvK`5^SqF#ASSxYXpXmYh;-k#V&Zt{=6ug=oDOSmy2oY zafM2n{Kjgirnl2jAul{T-VaxlSwovq-O_&IhxzdnmvGg82Z2%;gHLI$XqBl{rlYZl z%qb*uf#W4By3MDU&hY)7UR%N!rFyl)Z*=xQRs@Tq+te|LBdw6952>{->4%;g%WZ|M zTiS&f6=nx;6dx-J7z(}tWZd3ZeUY&%SQ`D^KRqiWPhz3LE?l!2)=-x5u3{mH5LWqM zO!j+l_*m?QZ|z{HqiYsA$*x%NKzz#6(M9kA75R8z)Ba zA$lCtcH*@BDM~%g4L#8dachHuGs+j%#t15FaGBxtHilmz6cseJ9;yC@A!ow`Jjz?X znTiu!&w`JJOJ}8vho0hIej97^lNy~cH64GD@RYvL%D{@XcTxeT& zB`5jZx(#uip;gWBP42yd9j7pm>C74c4hsA1@@IGDe}MQTT7dSB!N<$&xwv#6n=(Ft zb}|2}|K3xkPU_F({E3tIRmD&D(O9!DBF8wia8-5fWB+#}nD)gVfdfHGLO1%Rp}wya zrI!IuT)W>Au{5oF|EWnW)PJK~RQA(c6a7DtHTgxEDh&qx;MDfn%MQ)(AEt&7Fr}dr zzS@Ta#2Y9tur84GfO8@DJl>xK2S{A33}%2Ls!!hKsLGyPT000zkl?PT~$S#CT-Rq(m|kSM5#6GYV@ISMVSPeAb=U&14?=(SVF=}vqPZAQ zs%9^$+=F@HiC~!0jC>A0_)7)g)i|*Cw*wbGA{5yF zHyH{U**vWpvp@(%$vyk@->y!4DwVQRFQV@j9d4gUiPHl{$p7o={Cj%;naDP8s>~uY zI2*)ERbdi19|<%7 z90V5t@sR`h2m&B@|DBfrp#pq-isA$Rv7#Mr3Hb9n`op8}5&l5@NBC3zn}Q{V0iZrg zs2{;25A?sd5v=mS{wojJ`9T8+tB6WVf21nLPNt@I&KCAA8uCiOA0L|dJa{~89c)cq z41pfDHg?WD9{ePRCiX_AJRkW#Xhss?KP)cR{3L&bMD3kSfgB7>3``^fus|S?&&kA$ z=aZPkzv3Syei9287Y80jMt66226t8ldna>7W^Qh7MkW?U78d#s4ti%#I~PL_dOK&* zze@f~kC>^mv6H2Pi>19C@Q+?YBYRgDeiD*D75z8-ZKtV+<^R-V=gja=qZy3tZ5jVi z7?~NE82?-MhbZ44ERT|vZw+kRB)BJe*~;NN=xllZS7ALE~M{|{UIHS|B&4@(Qc@-hDRRTF^y F-vAHRzL@|3 literal 12010 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 h@rpI_)9F<6<$2So6BP59faxlnX(7UT@8$jf - If you are on a self-hosted instance, you will need to configure this integration separately. Please follow the guides [here](/self-hosting/integrations) to configure integrations on your self-hosted instance. + If you are on a self-hosted instance, you will need to configure this integration separately. Please follow + the guides [here](/self-hosting/integrations) to configure integrations on your self-hosted instance. ## Connect Google Sheets @@ -70,7 +71,7 @@ Before the next step, make sure that you have a Formbricks Survey with at least className="max-w-full rounded-lg sm:max-w-3xl" /> -6. Select the Google Sheet you want to link with Formbricks and the Survey. On doing so, you will be asked with what questions' responses you want to feed in the Google Sheet. Select the questions and click on the "Link Sheet" button. +6. Enter the spreadsheet URL for the Google Sheet you want to link with Formbricks and the Survey. On doing so, you will be asked with what questions' responses you want to feed in the Google Sheet. Select the questions and click on the "Link Sheet" button. We store as little personal information as possible. diff --git a/apps/docs/app/self-hosting/integrations/page.mdx b/apps/docs/app/self-hosting/integrations/page.mdx index 4122e9a5e0..e88b3ff7d8 100644 --- a/apps/docs/app/self-hosting/integrations/page.mdx +++ b/apps/docs/app/self-hosting/integrations/page.mdx @@ -116,7 +116,7 @@ Integrating Google Sheets with a self-hosted Formbricks instance requires config 1. Go to the **[Google Cloud Console](https://console.cloud.google.com/)** and **create a new project**. 2. Enable necessary APIs: - Now select the project you just created and go to the **APIs & Services** section. - - Click on the **Enable APIs and Services** button and search for **Google Sheets API** & **Google Drive API** and enable it. + - Click on the **Enable APIs and Services** button and search for **Google Sheets API** and enable it. 3. Configure OAuth Consent Screen: - Go to **OAuth Consent screen** and select the appropriate User Type (External or Internal). Select **Internal** if you want only the users of your Google Workspace to be able to use the integration. - Fill the required details: @@ -128,12 +128,11 @@ Integrating Google Sheets with a self-hosted Formbricks instance requires config - Click on the **Add or Remove Scopes** button and add the scopes: - `https://www.googleapis.com/auth/userinfo.email` - `https://www.googleapis.com/auth/spreadsheets` - - `https://www.googleapis.com/auth/drive` - Click on the **Update** button. Verify the scopes and click on the **Save and Continue** button. - Skip the **Test Users** section and click on the **Save and Continue** button. -1. View the OAuth Consent Screen summary and click on the **Back to Dashboard** button. -2. Register OAuth Client: +5. View the OAuth Consent Screen summary and click on the **Back to Dashboard** button. +6. Register OAuth Client: - Navigate to **Credentials** > **Create Credentials** > **OAuth Client ID**. - Select **Web Application** and set: @@ -142,13 +141,10 @@ Integrating Google Sheets with a self-hosted Formbricks instance requires config - Authorized redirect URIs: `https:///api/google-sheet/callback` - Save and note the Client ID and Client Secret. -1. Copy the Client ID and Client Secret and set them as environment variables in your Formbricks instance: +7. Copy the Client ID and Client Secret and set them as environment variables in your Formbricks instance: - `GOOGLE_SHEETS_CLIENT_ID` - `GOOGLE_SHEETS_CLIENT_SECRET` - `GOOGLE_SHEETS_REDIRECT_URL` -2. Enable Google Drive API: - - Go to the **APIs & Services** section and click on the **Enable APIs and Services** button. - - Search for **Google Drive API** and enable it. Now just copy **GOOGLE_SHEETS_CLIENT_ID**, **GOOGLE_SHEETS_CLIENT_SECRET** and **GOOGLE_SHEETS_REDIRECT_URL** for your integration & add it to your **Formbricks environment variables** as in the docker compose file: diff --git a/apps/web/app/(app)/environments/[environmentId]/integrations/airtable/components/AddIntegrationModal.tsx b/apps/web/app/(app)/environments/[environmentId]/integrations/airtable/components/AddIntegrationModal.tsx index fdfd65c664..66cca1115b 100644 --- a/apps/web/app/(app)/environments/[environmentId]/integrations/airtable/components/AddIntegrationModal.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/integrations/airtable/components/AddIntegrationModal.tsx @@ -1,11 +1,13 @@ "use client"; import { createOrUpdateIntegrationAction } from "@/app/(app)/environments/[environmentId]/integrations/actions"; +import { BaseSelectDropdown } from "@/app/(app)/environments/[environmentId]/integrations/airtable/components/BaseSelectDropdown"; import { fetchTables } from "@/app/(app)/environments/[environmentId]/integrations/airtable/lib/airtable"; +import AirtableLogo from "@/images/airtableLogo.svg"; import Image from "next/image"; import { useRouter } from "next/navigation"; import { useEffect, useState } from "react"; -import { Control, Controller, UseFormSetValue, useForm } from "react-hook-form"; +import { Controller, useForm } from "react-hook-form"; import { toast } from "react-hot-toast"; import { getLocalizedValue } from "@formbricks/lib/i18n/utils"; @@ -25,8 +27,6 @@ import { Label } from "@formbricks/ui/Label"; import { Modal } from "@formbricks/ui/Modal"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@formbricks/ui/Select"; -import AirtableLogo from "../images/airtable.svg"; - type EditModeProps = | { isEditMode: false; defaultData?: never } | { isEditMode: true; defaultData: IntegrationModalInputs & { index: number } }; @@ -56,69 +56,16 @@ const NoBaseFoundError = () => { ); }; -interface BaseSelectProps { - control: Control; - isLoading: boolean; - fetchTable: (val: string) => Promise; - airtableArray: TIntegrationItem[]; - setValue: UseFormSetValue; - defaultValue: string | undefined; -} - -const BaseSelect = ({ +export const AddIntegrationModal = ({ + open, + setOpenWithStates, + environmentId, airtableArray, - control, - fetchTable, - isLoading, - setValue, - defaultValue, -}: BaseSelectProps) => { - return ( -

- ); -}; - -export const AddIntegrationModal = (props: AddIntegrationModalProps) => { - const { - open, - setOpenWithStates, - environmentId, - airtableArray, - surveys, - airtableIntegration, - isEditMode, - defaultData, - } = props; + surveys, + airtableIntegration, + isEditMode, + defaultData, +}: AddIntegrationModalProps) => { const router = useRouter(); const [tables, setTables] = useState([]); const [isLoading, setIsLoading] = useState(false); @@ -248,7 +195,7 @@ export const AddIntegrationModal = (props: AddIntegrationModalProps) => {
{airtableArray.length ? ( - { - const [isConnected, setIsConnected_] = useState( + const [isConnected, setIsConnected] = useState( airtableIntegration ? airtableIntegration.config?.key : false ); - const setIsConnected = (data: boolean) => { - setIsConnected_(data); + const handleAirtableAuthorization = async () => { + authorize(environmentId, webAppUrl).then((url: string) => { + if (url) { + window.location.replace(url); + } + }); }; return isConnected && airtableIntegration ? ( - ) : ( - + ); }; diff --git a/apps/web/app/(app)/environments/[environmentId]/integrations/airtable/components/BaseSelectDropdown.tsx b/apps/web/app/(app)/environments/[environmentId]/integrations/airtable/components/BaseSelectDropdown.tsx new file mode 100644 index 0000000000..ad8778f7b8 --- /dev/null +++ b/apps/web/app/(app)/environments/[environmentId]/integrations/airtable/components/BaseSelectDropdown.tsx @@ -0,0 +1,59 @@ +import { Control, Controller, UseFormSetValue } from "react-hook-form"; + +import { TIntegrationItem } from "@formbricks/types/integration"; +import { Label } from "@formbricks/ui/Label"; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@formbricks/ui/Select"; + +import { IntegrationModalInputs } from "./AddIntegrationModal"; + +interface BaseSelectProps { + control: Control; + isLoading: boolean; + fetchTable: (val: string) => Promise; + airtableArray: TIntegrationItem[]; + setValue: UseFormSetValue; + defaultValue: string | undefined; +} + +export const BaseSelectDropdown = ({ + airtableArray, + control, + fetchTable, + isLoading, + setValue, + defaultValue, +}: BaseSelectProps) => { + return ( +
+ +
+ ( + + )} + /> +
+
+ ); +}; diff --git a/apps/web/app/(app)/environments/[environmentId]/integrations/airtable/components/Connect.tsx b/apps/web/app/(app)/environments/[environmentId]/integrations/airtable/components/Connect.tsx deleted file mode 100644 index a8b89728f2..0000000000 --- a/apps/web/app/(app)/environments/[environmentId]/integrations/airtable/components/Connect.tsx +++ /dev/null @@ -1,59 +0,0 @@ -"use client"; - -import { authorize } from "@/app/(app)/environments/[environmentId]/integrations/airtable/lib/airtable"; -import FormbricksLogo from "@/images/logo.svg"; -import Image from "next/image"; -import Link from "next/link"; -import { useState } from "react"; - -import { Button } from "@formbricks/ui/Button"; - -import AirtableLogo from "../images/airtable.svg"; - -interface AirtableConnectProps { - enabled: boolean; - environmentId: string; - webAppUrl: string; -} - -export const AirtableConnect = ({ environmentId, enabled, webAppUrl }: AirtableConnectProps) => { - const [isConnecting, setIsConnecting] = useState(false); - const handleGoogleLogin = async () => { - setIsConnecting(true); - authorize(environmentId, webAppUrl).then((url: string) => { - if (url) { - window.location.replace(url); - } - }); - }; - - return ( -
-
-
-
- Formbricks Logo -
-
- Airtable Logo -
-
-

Sync responses directly with Airtable.

- {!enabled && ( -

- Airtable Integration is not configured in your instance of Formbricks. -
- Please follow the{" "} - - docs - {" "} - to configure it. -

- )} - -
-
- ); -}; diff --git a/apps/web/app/(app)/environments/[environmentId]/integrations/airtable/components/Home.tsx b/apps/web/app/(app)/environments/[environmentId]/integrations/airtable/components/ManageIntegration.tsx similarity index 98% rename from apps/web/app/(app)/environments/[environmentId]/integrations/airtable/components/Home.tsx rename to apps/web/app/(app)/environments/[environmentId]/integrations/airtable/components/ManageIntegration.tsx index 893dcecf11..aa55120b6e 100644 --- a/apps/web/app/(app)/environments/[environmentId]/integrations/airtable/components/Home.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/integrations/airtable/components/ManageIntegration.tsx @@ -17,7 +17,7 @@ import { Button } from "@formbricks/ui/Button"; import { DeleteDialog } from "@formbricks/ui/DeleteDialog"; import { EmptySpaceFiller } from "@formbricks/ui/EmptySpaceFiller"; -interface handleModalProps { +interface ManageIntegrationProps { airtableIntegration: TIntegrationAirtable; environment: TEnvironment; environmentId: string; @@ -28,7 +28,7 @@ interface handleModalProps { const tableHeaders = ["Survey", "Table Name", "Questions", "Updated At"]; -export const Home = (props: handleModalProps) => { +export const ManageIntegration = (props: ManageIntegrationProps) => { const { airtableIntegration, environment, environmentId, setIsConnected, surveys, airtableArray } = props; const [isDeleting, setisDeleting] = useState(false); const [isDeleteIntegrationModalOpen, setIsDeleteIntegrationModalOpen] = useState(false); diff --git a/apps/web/app/(app)/environments/[environmentId]/integrations/airtable/page.tsx b/apps/web/app/(app)/environments/[environmentId]/integrations/airtable/page.tsx index cedb32666c..3dbf70944f 100644 --- a/apps/web/app/(app)/environments/[environmentId]/integrations/airtable/page.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/integrations/airtable/page.tsx @@ -13,7 +13,7 @@ import { PageContentWrapper } from "@formbricks/ui/PageContentWrapper"; import { PageHeader } from "@formbricks/ui/PageHeader"; const Page = async ({ params }) => { - const enabled = !!AIRTABLE_CLIENT_ID; + const isEnabled = !!AIRTABLE_CLIENT_ID; const [surveys, integrations, environment] = await Promise.all([ getSurveys(params.environmentId), getIntegrations(params.environmentId), @@ -42,7 +42,7 @@ const Page = async ({ params }) => {
{ +export async function getSpreadsheetNameByIdAction( + credentials: TIntegrationGoogleSheetsCredential, + environmentId: string, + spreadsheetId: string +) { const session = await getServerSession(authOptions); if (!session) throw new AuthorizationError("Not authorized"); const isAuthorized = await hasUserEnvironmentAccess(session.user.id, environmentId); if (!isAuthorized) throw new AuthorizationError("Not authorized"); - return await getSpreadSheets(environmentId); -}; + return await getSpreadsheetNameById(credentials, spreadsheetId); +} diff --git a/apps/web/app/(app)/environments/[environmentId]/integrations/google-sheets/components/AddIntegrationModal.tsx b/apps/web/app/(app)/environments/[environmentId]/integrations/google-sheets/components/AddIntegrationModal.tsx index 043dd9433e..fa58755fd6 100644 --- a/apps/web/app/(app)/environments/[environmentId]/integrations/google-sheets/components/AddIntegrationModal.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/integrations/google-sheets/components/AddIntegrationModal.tsx @@ -1,4 +1,11 @@ import { createOrUpdateIntegrationAction } from "@/app/(app)/environments/[environmentId]/integrations/actions"; +import { getSpreadsheetNameByIdAction } from "@/app/(app)/environments/[environmentId]/integrations/google-sheets/actions"; +import { + constructGoogleSheetsUrl, + extractSpreadsheetIdFromUrl, + isValidGoogleSheetsUrl, +} from "@/app/(app)/environments/[environmentId]/integrations/google-sheets/lib/util"; +import GoogleSheetLogo from "@/images/googleSheetsLogo.png"; import Image from "next/image"; import { useEffect, useState } from "react"; import { useForm } from "react-hook-form"; @@ -6,7 +13,6 @@ import toast from "react-hot-toast"; import { getLocalizedValue } from "@formbricks/lib/i18n/utils"; import { checkForRecallInHeadline } from "@formbricks/lib/utils/recall"; -import { TIntegrationItem } from "@formbricks/types/integration"; import { TIntegrationGoogleSheets, TIntegrationGoogleSheetsConfigData, @@ -16,17 +22,15 @@ import { TSurvey } from "@formbricks/types/surveys"; import { Button } from "@formbricks/ui/Button"; import { Checkbox } from "@formbricks/ui/Checkbox"; import { DropdownSelector } from "@formbricks/ui/DropdownSelector"; +import { Input } from "@formbricks/ui/Input"; import { Label } from "@formbricks/ui/Label"; import { Modal } from "@formbricks/ui/Modal"; -import GoogleSheetLogo from "../images/google-sheets-small.png"; - -interface AddWebhookModalProps { +interface AddIntegrationModalProps { environmentId: string; open: boolean; surveys: TSurvey[]; setOpen: (v: boolean) => void; - spreadsheets: TIntegrationItem[]; googleSheetIntegration: TIntegrationGoogleSheets; selectedIntegration?: (TIntegrationGoogleSheetsConfigData & { index: number }) | null; } @@ -36,12 +40,9 @@ export const AddIntegrationModal = ({ surveys, open, setOpen, - spreadsheets, googleSheetIntegration, selectedIntegration, -}: AddWebhookModalProps) => { - const { handleSubmit } = useForm(); - +}: AddIntegrationModalProps) => { const integrationData = { spreadsheetId: "", spreadsheetName: "", @@ -51,11 +52,11 @@ export const AddIntegrationModal = ({ questions: "", createdAt: new Date(), }; - + const { handleSubmit } = useForm(); const [selectedQuestions, setSelectedQuestions] = useState([]); const [isLinkingSheet, setIsLinkingSheet] = useState(false); const [selectedSurvey, setSelectedSurvey] = useState(null); - const [selectedSpreadsheet, setSelectedSpreadsheet] = useState(null); + const [spreadsheetUrl, setSpreadsheetUrl] = useState(""); const [isDeleting, setIsDeleting] = useState(false); const existingIntegrationData = googleSheetIntegration?.config?.data; const googleSheetIntegrationData: TIntegrationGoogleSheetsInput = { @@ -78,10 +79,7 @@ export const AddIntegrationModal = ({ useEffect(() => { if (selectedIntegration) { - setSelectedSpreadsheet({ - id: selectedIntegration.spreadsheetId, - name: selectedIntegration.spreadsheetName, - }); + setSpreadsheetUrl(constructGoogleSheetsUrl(selectedIntegration.spreadsheetId)); setSelectedSurvey( surveys.find((survey) => { return survey.id === selectedIntegration.surveyId; @@ -89,25 +87,32 @@ export const AddIntegrationModal = ({ ); setSelectedQuestions(selectedIntegration.questionIds); return; + } else { + setSpreadsheetUrl(""); } resetForm(); }, [selectedIntegration, surveys]); const linkSheet = async () => { try { - if (!selectedSpreadsheet) { - throw new Error("Please select a spreadsheet"); + if (isValidGoogleSheetsUrl(spreadsheetUrl)) { + throw new Error("Please enter a valid spreadsheet url"); } if (!selectedSurvey) { throw new Error("Please select a survey"); } - if (selectedQuestions.length === 0) { throw new Error("Please select at least one question"); } + const spreadsheetId = extractSpreadsheetIdFromUrl(spreadsheetUrl); + const spreadsheetName = await getSpreadsheetNameByIdAction( + googleSheetIntegration.config.key, + environmentId, + spreadsheetId + ); setIsLinkingSheet(true); - integrationData.spreadsheetId = selectedSpreadsheet.id; - integrationData.spreadsheetName = selectedSpreadsheet.name; + integrationData.spreadsheetId = spreadsheetId; + integrationData.spreadsheetName = spreadsheetName; integrationData.surveyId = selectedSurvey.id; integrationData.surveyName = selectedSurvey.name; integrationData.questionIds = selectedQuestions; @@ -148,7 +153,6 @@ export const AddIntegrationModal = ({ const resetForm = () => { setIsLinkingSheet(false); - setSelectedSpreadsheet(""); setSelectedSurvey(null); }; @@ -166,15 +170,8 @@ export const AddIntegrationModal = ({ } }; - const hasMatchingId = googleSheetIntegration.config.data.some((configData) => { - if (!selectedSpreadsheet) { - return false; - } - return configData.spreadsheetId === selectedSpreadsheet.id; - }); - return ( - +
@@ -194,23 +191,13 @@ export const AddIntegrationModal = ({
- Spreadsheet URL + setSpreadsheetUrl(e.target.value)} + placeholder="https://docs.google.com/spreadsheets/d/" + className="mt-1" /> - {selectedSpreadsheet && hasMatchingId && ( -

- Warning: You have already connected one survey with this sheet. Your - data will be inconsistent -

- )} -

- {spreadsheets.length === 0 && - "You have to create at least one spreadshseet to be able to setup this integration"} -

{ - const [isConnecting, setIsConnecting] = useState(false); - const handleGoogleLogin = async () => { - setIsConnecting(true); - authorize(environmentId, webAppUrl).then((url: string) => { - if (url) { - window.location.replace(url); - } - }); - }; - - return ( -
-
-
-
- Formbricks Logo -
-
- Google Sheet logo -
-
-

Sync responses directly with Google Sheets.

- {!enabled && ( -

- Google Sheets Integration is not configured in your instance of Formbricks. -
- Please follow the{" "} - - docs - {" "} - to configure it. -

- )} - -
-
- ); -}; diff --git a/apps/web/app/(app)/environments/[environmentId]/integrations/google-sheets/components/GoogleSheetWrapper.tsx b/apps/web/app/(app)/environments/[environmentId]/integrations/google-sheets/components/GoogleSheetWrapper.tsx index 87bfc9e414..32022249c8 100644 --- a/apps/web/app/(app)/environments/[environmentId]/integrations/google-sheets/components/GoogleSheetWrapper.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/integrations/google-sheets/components/GoogleSheetWrapper.tsx @@ -1,49 +1,49 @@ "use client"; -import { refreshSheetAction } from "@/app/(app)/environments/[environmentId]/integrations/google-sheets/actions"; +import { ManageIntegration } from "@/app/(app)/environments/[environmentId]/integrations/google-sheets/components/ManageIntegration"; +import { authorize } from "@/app/(app)/environments/[environmentId]/integrations/google-sheets/lib/google"; +import googleSheetLogo from "@/images/googleSheetsLogo.png"; import { useState } from "react"; import { TEnvironment } from "@formbricks/types/environment"; -import { TIntegrationItem } from "@formbricks/types/integration"; import { TIntegrationGoogleSheets, TIntegrationGoogleSheetsConfigData, } from "@formbricks/types/integration/googleSheet"; import { TSurvey } from "@formbricks/types/surveys"; +import { ConnectIntegration } from "@formbricks/ui/ConnectIntegration"; import { AddIntegrationModal } from "./AddIntegrationModal"; -import { Connect } from "./Connect"; -import { Home } from "./Home"; interface GoogleSheetWrapperProps { - enabled: boolean; + isEnabled: boolean; environment: TEnvironment; surveys: TSurvey[]; - spreadSheetArray: TIntegrationItem[]; googleSheetIntegration?: TIntegrationGoogleSheets; webAppUrl: string; } export const GoogleSheetWrapper = ({ - enabled, + isEnabled, environment, surveys, - spreadSheetArray, googleSheetIntegration, webAppUrl, }: GoogleSheetWrapperProps) => { const [isConnected, setIsConnected] = useState( googleSheetIntegration ? googleSheetIntegration.config?.key : false ); - const [spreadsheets, setSpreadsheets] = useState(spreadSheetArray); const [isModalOpen, setModalOpen] = useState(false); const [selectedIntegration, setSelectedIntegration] = useState< (TIntegrationGoogleSheetsConfigData & { index: number }) | null >(null); - const refreshSheet = async () => { - const latestSpreadsheets = await refreshSheetAction(environment.id); - setSpreadsheets(latestSpreadsheets); + const handleGoogleAuthorization = async () => { + authorize(environment.id, webAppUrl).then((url: string) => { + if (url) { + window.location.replace(url); + } + }); }; return ( @@ -55,21 +55,24 @@ export const GoogleSheetWrapper = ({ surveys={surveys} open={isModalOpen} setOpen={setModalOpen} - spreadsheets={spreadsheets} googleSheetIntegration={googleSheetIntegration} selectedIntegration={selectedIntegration} /> - ) : ( - + )} ); diff --git a/apps/web/app/(app)/environments/[environmentId]/integrations/google-sheets/components/Home.tsx b/apps/web/app/(app)/environments/[environmentId]/integrations/google-sheets/components/ManageIntegration.tsx similarity index 95% rename from apps/web/app/(app)/environments/[environmentId]/integrations/google-sheets/components/Home.tsx rename to apps/web/app/(app)/environments/[environmentId]/integrations/google-sheets/components/ManageIntegration.tsx index e71d8f3f8b..2896762472 100644 --- a/apps/web/app/(app)/environments/[environmentId]/integrations/google-sheets/components/Home.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/integrations/google-sheets/components/ManageIntegration.tsx @@ -15,23 +15,21 @@ import { Button } from "@formbricks/ui/Button"; import { DeleteDialog } from "@formbricks/ui/DeleteDialog"; import { EmptySpaceFiller } from "@formbricks/ui/EmptySpaceFiller"; -interface HomeProps { +interface ManageIntegrationProps { environment: TEnvironment; googleSheetIntegration: TIntegrationGoogleSheets; setOpenAddIntegrationModal: (v: boolean) => void; setIsConnected: (v: boolean) => void; setSelectedIntegration: (v: (TIntegrationGoogleSheetsConfigData & { index: number }) | null) => void; - refreshSheet: () => void; } -export const Home = ({ +export const ManageIntegration = ({ environment, googleSheetIntegration, setOpenAddIntegrationModal, setIsConnected, setSelectedIntegration, - refreshSheet, -}: HomeProps) => { +}: ManageIntegrationProps) => { const [isDeleteIntegrationModalOpen, setIsDeleteIntegrationModalOpen] = useState(false); const integrationArray = googleSheetIntegration ? googleSheetIntegration.config.data @@ -72,7 +70,6 @@ export const Home = ({ -
-
- ); -}; diff --git a/apps/web/app/(app)/environments/[environmentId]/integrations/slack/components/Home.tsx b/apps/web/app/(app)/environments/[environmentId]/integrations/slack/components/ManageIntegration.tsx similarity index 95% rename from apps/web/app/(app)/environments/[environmentId]/integrations/slack/components/Home.tsx rename to apps/web/app/(app)/environments/[environmentId]/integrations/slack/components/ManageIntegration.tsx index 072166b50e..0b7955f2e3 100644 --- a/apps/web/app/(app)/environments/[environmentId]/integrations/slack/components/Home.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/integrations/slack/components/ManageIntegration.tsx @@ -1,5 +1,6 @@ "use client"; +import { deleteIntegrationAction } from "@/app/(app)/environments/[environmentId]/integrations/actions"; import { Trash2Icon } from "lucide-react"; import React, { useState } from "react"; import toast from "react-hot-toast"; @@ -11,9 +12,7 @@ import { Button } from "@formbricks/ui/Button"; import { DeleteDialog } from "@formbricks/ui/DeleteDialog"; import { EmptySpaceFiller } from "@formbricks/ui/EmptySpaceFiller"; -import { deleteIntegrationAction } from "../../actions"; - -interface HomeProps { +interface ManageIntegrationProps { environment: TEnvironment; slackIntegration: TIntegrationSlack; setOpenAddIntegrationModal: React.Dispatch>; @@ -24,14 +23,14 @@ interface HomeProps { refreshChannels: () => void; } -export const Home = ({ +export const ManageIntegration = ({ environment, slackIntegration, setOpenAddIntegrationModal, setIsConnected, setSelectedIntegration, refreshChannels, -}: HomeProps) => { +}: ManageIntegrationProps) => { const [isDeleteIntegrationModalOpen, setIsDeleteIntegrationModalOpen] = useState(false); const [isDeleting, setisDeleting] = useState(false); const integrationArray = slackIntegration diff --git a/apps/web/app/(app)/environments/[environmentId]/integrations/slack/components/SlackWrapper.tsx b/apps/web/app/(app)/environments/[environmentId]/integrations/slack/components/SlackWrapper.tsx index 2dae492c02..0de86aecdf 100644 --- a/apps/web/app/(app)/environments/[environmentId]/integrations/slack/components/SlackWrapper.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/integrations/slack/components/SlackWrapper.tsx @@ -1,16 +1,17 @@ "use client"; +import { refreshChannelsAction } from "@/app/(app)/environments/[environmentId]/integrations/slack/actions"; import { AddChannelMappingModal } from "@/app/(app)/environments/[environmentId]/integrations/slack/components/AddChannelMappingModal"; -import { Connect } from "@/app/(app)/environments/[environmentId]/integrations/slack/components/Connect"; -import { Home } from "@/app/(app)/environments/[environmentId]/integrations/slack/components/Home"; +import { ManageIntegration } from "@/app/(app)/environments/[environmentId]/integrations/slack/components/ManageIntegration"; +import { authorize } from "@/app/(app)/environments/[environmentId]/integrations/slack/lib/slack"; +import slackLogo from "@/images/slacklogo.png"; import { useState } from "react"; import { TEnvironment } from "@formbricks/types/environment"; import { TIntegrationItem } from "@formbricks/types/integration"; import { TIntegrationSlack, TIntegrationSlackConfigData } from "@formbricks/types/integration/slack"; import { TSurvey } from "@formbricks/types/surveys"; - -import { refreshChannelsAction } from "../actions"; +import { ConnectIntegration } from "@formbricks/ui/ConnectIntegration"; interface SlackWrapperProps { isEnabled: boolean; @@ -41,6 +42,14 @@ export const SlackWrapper = ({ setSlackChannels(latestSlackChannels); }; + const handleSlackAuthorization = async () => { + authorize(environment.id, webAppUrl).then((url: string) => { + if (url) { + window.location.replace(url); + } + }); + }; + return isConnected && slackIntegration ? ( <> - ) : ( - + ); }; diff --git a/apps/web/app/api/google-sheet/route.ts b/apps/web/app/api/google-sheet/route.ts index e40b600f5e..0edc9b7283 100644 --- a/apps/web/app/api/google-sheet/route.ts +++ b/apps/web/app/api/google-sheet/route.ts @@ -13,7 +13,6 @@ import { hasUserEnvironmentAccess } from "@formbricks/lib/environment/auth"; const scopes = [ "https://www.googleapis.com/auth/spreadsheets", - "https://www.googleapis.com/auth/drive", "https://www.googleapis.com/auth/userinfo.email", ]; diff --git a/apps/web/app/(app)/environments/[environmentId]/integrations/airtable/images/airtable.svg b/apps/web/images/airtableLogo.svg similarity index 100% rename from apps/web/app/(app)/environments/[environmentId]/integrations/airtable/images/airtable.svg rename to apps/web/images/airtableLogo.svg diff --git a/apps/web/app/(app)/environments/[environmentId]/integrations/google-sheets/images/google-sheets-small.png b/apps/web/images/googleSheetsLogo.png similarity index 100% rename from apps/web/app/(app)/environments/[environmentId]/integrations/google-sheets/images/google-sheets-small.png rename to apps/web/images/googleSheetsLogo.png diff --git a/packages/lib/googleSheet/service.ts b/packages/lib/googleSheet/service.ts index 1a7584ee22..601163701c 100644 --- a/packages/lib/googleSheet/service.ts +++ b/packages/lib/googleSheet/service.ts @@ -4,11 +4,8 @@ import { Prisma } from "@prisma/client"; import { z } from "zod"; import { ZString } from "@formbricks/types/common"; -import { ZId } from "@formbricks/types/environment"; import { DatabaseError, UnknownError } from "@formbricks/types/errors"; -import { TIntegrationItem } from "@formbricks/types/integration"; import { - TIntegrationGoogleSheets, TIntegrationGoogleSheetsCredential, ZIntegrationGoogleSheetsCredential, } from "@formbricks/types/integration/googleSheet"; @@ -18,45 +15,10 @@ import { GOOGLE_SHEETS_CLIENT_SECRET, GOOGLE_SHEETS_REDIRECT_URL, } from "../constants"; -import { getIntegrationByType } from "../integration/service"; import { validateInputs } from "../utils/validate"; const { google } = require("googleapis"); -const fetchSpreadsheets = async (auth: any) => { - const authClient = authorize(auth); - const service = google.drive({ version: "v3", auth: authClient }); - try { - const res = await service.files.list({ - q: "mimeType='application/vnd.google-apps.spreadsheet' AND trashed=false", - fields: "nextPageToken, files(id, name)", - }); - return res.data.files; - } catch (err) { - throw err; - } -}; - -export const getSpreadSheets = async (environmentId: string): Promise => { - validateInputs([environmentId, ZId]); - - let spreadsheets: TIntegrationItem[] = []; - try { - const googleIntegration = (await getIntegrationByType( - environmentId, - "googleSheets" - )) as TIntegrationGoogleSheets; - if (googleIntegration && googleIntegration.config?.key) { - spreadsheets = await fetchSpreadsheets(googleIntegration.config?.key); - } - return spreadsheets; - } catch (error) { - if (error instanceof Prisma.PrismaClientKnownRequestError) { - throw new DatabaseError(error.message); - } - throw error; - } -}; export const writeData = async ( credentials: TIntegrationGoogleSheetsCredential, spreadsheetId: string, @@ -108,6 +70,34 @@ export const writeData = async ( } }; +export const getSpreadsheetNameById = async ( + credentials: TIntegrationGoogleSheetsCredential, + spreadsheetId: string +): Promise => { + validateInputs([credentials, ZIntegrationGoogleSheetsCredential]); + + try { + const authClient = authorize(credentials); + const sheets = google.sheets({ version: "v4", auth: authClient }); + + return new Promise((resolve, reject) => { + sheets.spreadsheets.get({ spreadsheetId }, (err, response) => { + if (err) { + reject(new UnknownError(`Error while fetching spreadsheet data: ${err.message}`)); + return; + } + const spreadsheetTitle = response.data.properties.title; + resolve(spreadsheetTitle); + }); + }); + } catch (error) { + if (error instanceof Prisma.PrismaClientKnownRequestError) { + throw new DatabaseError(error.message); + } + throw error; + } +}; + const authorize = (credentials: any) => { const client_id = GOOGLE_SHEETS_CLIENT_ID; const client_secret = GOOGLE_SHEETS_CLIENT_SECRET; diff --git a/apps/web/app/(app)/environments/[environmentId]/integrations/notion/components/Connect.tsx b/packages/ui/ConnectIntegration/index.tsx similarity index 50% rename from apps/web/app/(app)/environments/[environmentId]/integrations/notion/components/Connect.tsx rename to packages/ui/ConnectIntegration/index.tsx index 1206678cb8..0a7e8742f0 100644 --- a/apps/web/app/(app)/environments/[environmentId]/integrations/notion/components/Connect.tsx +++ b/packages/ui/ConnectIntegration/index.tsx @@ -1,24 +1,41 @@ -import FormbricksLogo from "@/images/logo.svg"; -import NotionLogo from "@/images/notion.png"; -import Image from "next/image"; +import Image, { StaticImageData } from "next/image"; import Link from "next/link"; import { useSearchParams } from "next/navigation"; import { useEffect, useState } from "react"; import toast from "react-hot-toast"; -import { Button } from "@formbricks/ui/Button"; +import { TIntegrationType } from "@formbricks/types/integration"; -import { authorize } from "../lib/notion"; +import { Button } from "../../ui/Button"; +import { FormbricksLogo } from "../FormbricksLogo"; +import { getIntegrationDetails } from "./lib/utils"; -interface ConnectProps { - enabled: boolean; - environmentId: string; - webAppUrl: string; +interface ConnectIntegrationProps { + isEnabled: boolean; + integrationType: TIntegrationType; + handleAuthorization: () => void; + integrationLogoSrc: string | StaticImageData; } -export const Connect = ({ enabled, environmentId, webAppUrl }: ConnectProps) => { +export const ConnectIntegration = ({ + isEnabled, + integrationType, + handleAuthorization, + integrationLogoSrc, +}: ConnectIntegrationProps) => { const [isConnecting, setIsConnecting] = useState(false); const searchParams = useSearchParams(); + const integrationDetails = getIntegrationDetails(integrationType); + + const handleConnect = () => { + try { + setIsConnecting(true); + handleAuthorization(); + } catch (error) { + console.error(error); + setIsConnecting(false); + } + }; useEffect(() => { const error = searchParams?.get("error"); @@ -28,40 +45,31 @@ export const Connect = ({ enabled, environmentId, webAppUrl }: ConnectProps) => // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - const handleAuthorizeNotion = async () => { - setIsConnecting(true); - authorize(environmentId, webAppUrl).then((url: string) => { - if (url) { - window.location.replace(url); - } - }); - }; - return (
-
- Formbricks Logo +
+
- Google Sheet logo + logo
-

Sync responses directly with your Notion database.

- {!enabled && ( +

{integrationDetails?.text}

+ {!isEnabled && (

- Notion Integration is not configured in your instance of Formbricks. + {integrationDetails?.notConfiguredText}
Please follow the{" "} - + docs {" "} to configure it.

)} -
diff --git a/packages/ui/ConnectIntegration/lib/utils.ts b/packages/ui/ConnectIntegration/lib/utils.ts new file mode 100644 index 0000000000..5312b71941 --- /dev/null +++ b/packages/ui/ConnectIntegration/lib/utils.ts @@ -0,0 +1,34 @@ +import { TIntegrationType } from "@formbricks/types/integration"; + +export const getIntegrationDetails = (integrationType: TIntegrationType) => { + switch (integrationType) { + case "googleSheets": + return { + text: "Sync responses directly with Google Sheets.", + docsLink: "https://formbricks.com/docs/integrations/google-sheets", + connectButtonLabel: "Connect with Google Sheets", + notConfiguredText: "Google Sheet Integration is not configured in your instance of Formbricks.", + }; + case "airtable": + return { + text: "Sync responses directly with Airtable.", + docsLink: "https://formbricks.com/docs/integrations/airtable", + connectButtonLabel: "Connect with Airtable", + notConfiguredText: "Airtable Integration is not configured in your instance of Formbricks.", + }; + case "notion": + return { + text: "Sync responses directly with your Notion database.", + docsLink: "https://formbricks.com/docs/integrations/notion", + connectButtonLabel: "Connect with Notion", + notConfiguredText: "Notion Integration is not configured in your instance of Formbricks.", + }; + case "slack": + return { + text: "Send responses directly to Slack.", + docsLink: "https://formbricks.com/docs/integrations/slack", + connectButtonLabel: "Connect with Slack", + notConfiguredText: "Slack Integration is not configured in your instance of Formbricks.", + }; + } +}; diff --git a/packages/ui/FormbricksLogo/index.tsx b/packages/ui/FormbricksLogo/index.tsx new file mode 100644 index 0000000000..df5db6f379 --- /dev/null +++ b/packages/ui/FormbricksLogo/index.tsx @@ -0,0 +1,187 @@ +export const FormbricksLogo = () => { + return ( + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +};