diff --git a/apps/frontend/src/app/(app)/(site)/integrations/social/[provider]/continue/page.tsx b/apps/frontend/src/app/(app)/(site)/integrations/social/[provider]/continue/page.tsx
deleted file mode 100644
index 61edba7a..00000000
--- a/apps/frontend/src/app/(app)/(site)/integrations/social/[provider]/continue/page.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-import { HttpStatusCode } from 'axios';
-export const dynamic = 'force-dynamic';
-import { internalFetch } from '@gitroom/helpers/utils/internal.fetch';
-import { redirect } from 'next/navigation';
-import { Redirect } from '@gitroom/frontend/components/layout/redirect';
-import { getT } from '@gitroom/react/translation/get.translation.service.backend';
-export default async function Page({
- params: { provider },
- searchParams,
-}: {
- params: {
- provider: string;
- };
- searchParams: any;
-}) {
- const t = await getT();
- if (provider === 'x') {
- searchParams = {
- ...searchParams,
- state: searchParams.oauth_token || '',
- code: searchParams.oauth_verifier || '',
- refresh: searchParams.refresh || '',
- };
- }
- if (provider === 'vk') {
- searchParams = {
- ...searchParams,
- state: searchParams.state || '',
- code: searchParams.code + '&&&&' + searchParams.device_id,
- };
- }
- const data = await internalFetch(`/integrations/social/${provider}/connect`, {
- method: 'POST',
- body: JSON.stringify(searchParams),
- });
- if (data.status === HttpStatusCode.NotAcceptable) {
- const { msg } = await data.json();
- return redirect(`/launches?msg=${msg}`);
- }
- if (
- data.status !== HttpStatusCode.Ok &&
- data.status !== HttpStatusCode.Created
- ) {
- return (
- <>
-
- {t('could_not_add_provider', 'Could not add provider.')}
-
- {t('you_are_being_redirected_back', 'You are being redirected back')}
-
-
- >
- );
- }
- const { inBetweenSteps, id } = await data.json();
- if (inBetweenSteps && !searchParams.refresh) {
- return redirect(`/launches?added=${provider}&continue=${id}`);
- }
- return redirect(`/launches?added=${provider}&msg=Channel Updated`);
-}
diff --git a/apps/frontend/src/app/(app)/(site)/integrations/social/[provider]/page.tsx b/apps/frontend/src/app/(app)/(site)/integrations/social/[provider]/page.tsx
index 5882743c..473a0cf1 100644
--- a/apps/frontend/src/app/(app)/(site)/integrations/social/[provider]/page.tsx
+++ b/apps/frontend/src/app/(app)/(site)/integrations/social/[provider]/page.tsx
@@ -1,4 +1,4 @@
-import { IntegrationRedirectComponent } from '@gitroom/frontend/components/launches/integration.redirect.component';
+import { ContinueIntegration } from '@gitroom/frontend/components/launches/continue.integration';
export const dynamic = 'force-dynamic';
export default async function Page({
params: { provider },
@@ -9,5 +9,5 @@ export default async function Page({
};
searchParams: any;
}) {
- return ;
+ return ;
}
diff --git a/apps/frontend/src/components/launches/continue.integration.tsx b/apps/frontend/src/components/launches/continue.integration.tsx
new file mode 100644
index 00000000..2201de51
--- /dev/null
+++ b/apps/frontend/src/components/launches/continue.integration.tsx
@@ -0,0 +1,79 @@
+'use client';
+
+import { FC, useEffect, useState } from 'react';
+import { HttpStatusCode } from 'axios';
+import { useRouter } from 'next/navigation';
+import { Redirect } from '@gitroom/frontend/components/layout/redirect';
+import { useT } from '@gitroom/react/translation/get.transation.service.client';
+import { useFetch } from '@gitroom/helpers/utils/custom.fetch';
+import dayjs from 'dayjs';
+
+export const ContinueIntegration: FC<{
+ provider: string;
+ searchParams: any;
+}> = (props) => {
+ const { provider, searchParams } = props;
+ const { push } = useRouter();
+ const t = useT();
+ const fetch = useFetch();
+ const [error, setError] = useState(false);
+
+ useEffect(() => {
+ (async () => {
+ const timezone = String(dayjs.tz().utcOffset());
+ const modifiedParams = { ...searchParams };
+ if (provider === 'x') {
+ Object.assign(modifiedParams, {
+ state: searchParams.oauth_token || '',
+ code: searchParams.oauth_verifier || '',
+ refresh: searchParams.refresh || '',
+ });
+ }
+
+ if (provider === 'vk') {
+ Object.assign(modifiedParams, {
+ ...searchParams,
+ state: searchParams.state || '',
+ code: searchParams.code + '&&&&' + searchParams.device_id,
+ });
+ }
+
+ const data = await fetch(`/integrations/social/${provider}/connect`, {
+ method: 'POST',
+ body: JSON.stringify({...modifiedParams, timezone}),
+ });
+
+ if (data.status === HttpStatusCode.NotAcceptable) {
+ const { msg } = await data.json();
+ push(`/launches?msg=${msg}`);
+ return;
+ }
+
+ if (
+ data.status !== HttpStatusCode.Ok &&
+ data.status !== HttpStatusCode.Created
+ ) {
+ setError(true);
+ return;
+ }
+
+ const { inBetweenSteps, id } = await data.json();
+ if (inBetweenSteps && !searchParams.refresh) {
+ push(`/launches?added=${provider}&continue=${id}`);
+ return;
+ }
+ push(`/launches?added=${provider}&msg=Channel Updated`);
+ })();
+ }, [provider, searchParams]);
+
+ return error ? (
+ <>
+
+ {t('could_not_add_provider', 'Could not add provider.')}
+
+ {t('you_are_being_redirected_back', 'You are being redirected back')}
+
+
+ >
+ ) : null;
+};