diff --git a/apps/backend/src/api/routes/integrations.controller.ts b/apps/backend/src/api/routes/integrations.controller.ts
index 69dd7030..be30d674 100644
--- a/apps/backend/src/api/routes/integrations.controller.ts
+++ b/apps/backend/src/api/routes/integrations.controller.ts
@@ -44,9 +44,11 @@ export class IntegrationsController {
).map((p) => ({
name: p.name,
id: p.id,
+ internalId: p.internalId,
disabled: p.disabled,
picture: p.picture,
identifier: p.providerIdentifier,
+ inBetweenSteps: p.inBetweenSteps,
type: p.type,
})),
};
@@ -221,7 +223,8 @@ export class IntegrationsController {
accessToken,
refreshToken,
expiresIn,
- username
+ username,
+ integrationProvider.isBetweenSteps
);
}
@@ -233,6 +236,24 @@ export class IntegrationsController {
return this._integrationService.disableChannel(org.id, id);
}
+ @Post('/instagram/:id')
+ async saveInstagram(
+ @Param('id') id: string,
+ @Body() body: { pageId: string, id: string },
+ @GetOrgFromRequest() org: Organization
+ ) {
+ return this._integrationService.saveInstagram(org.id, id, body);
+ }
+
+ @Post('/facebook/:id')
+ async saveFacebook(
+ @Param('id') id: string,
+ @Body() body: { page: string },
+ @GetOrgFromRequest() org: Organization
+ ) {
+ return this._integrationService.saveFacebook(org.id, id, body.page);
+ }
+
@Post('/enable')
enableChannel(
@GetOrgFromRequest() org: Organization,
diff --git a/apps/backend/src/api/routes/media.controller.ts b/apps/backend/src/api/routes/media.controller.ts
index 851f874a..3b0d371d 100644
--- a/apps/backend/src/api/routes/media.controller.ts
+++ b/apps/backend/src/api/routes/media.controller.ts
@@ -29,7 +29,7 @@ export class MediaController {
new ParseFilePipe({
validators: [
new MaxFileSizeValidator({ maxSize: 10 * 1024 * 1024 }),
- new FileTypeValidator({ fileType: 'image/*' }),
+ new FileTypeValidator({ fileType: /^(image\/.+|video\/mp4)$/ }),
],
})
)
diff --git a/apps/frontend/public/icons/platforms/facebook.png b/apps/frontend/public/icons/platforms/facebook.png
new file mode 100644
index 00000000..452103d3
Binary files /dev/null and b/apps/frontend/public/icons/platforms/facebook.png differ
diff --git a/apps/frontend/src/app/(site)/integrations/social/[provider]/page.tsx b/apps/frontend/src/app/(site)/integrations/social/[provider]/page.tsx
index ed7e4e64..536ad5b8 100644
--- a/apps/frontend/src/app/(site)/integrations/social/[provider]/page.tsx
+++ b/apps/frontend/src/app/(site)/integrations/social/[provider]/page.tsx
@@ -1,21 +1,33 @@
export const dynamic = 'force-dynamic';
-import {internalFetch} from "@gitroom/helpers/utils/internal.fetch";
-import {redirect} from "next/navigation";
+import { internalFetch } from '@gitroom/helpers/utils/internal.fetch';
+import { redirect } from 'next/navigation';
-export default async function Page({params: {provider}, searchParams}: {params: {provider: string}, searchParams: any}) {
- if (provider === 'x') {
- searchParams = {
- ...searchParams,
- state: searchParams.oauth_token || '',
- code: searchParams.oauth_verifier || ''
- };
- }
+export default async function Page({
+ params: { provider },
+ searchParams,
+}: {
+ params: { provider: string };
+ searchParams: any;
+}) {
+ if (provider === 'x') {
+ searchParams = {
+ ...searchParams,
+ state: searchParams.oauth_token || '',
+ code: searchParams.oauth_verifier || '',
+ };
+ }
+ const { id, inBetweenSteps } = await (
await internalFetch(`/integrations/social/${provider}/connect`, {
- method: 'POST',
- body: JSON.stringify(searchParams)
- });
+ method: 'POST',
+ body: JSON.stringify(searchParams),
+ })
+ ).json();
- return redirect(`/launches?added=${provider}`);
-}
\ No newline at end of file
+ if (inBetweenSteps) {
+ return redirect(`/launches?added=${provider}&continue=${id}`);
+ }
+
+ return redirect(`/launches?added=${provider}`);
+}
diff --git a/apps/frontend/src/components/auth/login.tsx b/apps/frontend/src/components/auth/login.tsx
index 086cb9c2..91c0f3a8 100644
--- a/apps/frontend/src/components/auth/login.tsx
+++ b/apps/frontend/src/components/auth/login.tsx
@@ -10,6 +10,7 @@ import { classValidatorResolver } from '@hookform/resolvers/class-validator';
import { LoginUserDto } from '@gitroom/nestjs-libraries/dtos/auth/login.user.dto';
import { GithubProvider } from '@gitroom/frontend/app/auth/providers/github.provider';
import interClass from '@gitroom/react/helpers/inter.font';
+import { isGeneral } from '@gitroom/react/helpers/is.general';
type Inputs = {
email: string;
@@ -58,13 +59,19 @@ export function Login() {
Sign In
-
-
+ {!isGeneral() && (
+ <>
+
+
+ >
+ )}
;
}
- return ;
+ return (
+
+ );
}
export function RegisterAfter({
@@ -110,11 +113,13 @@ export function RegisterAfter({
Sign Up
- {!isAfterProvider && }
- {!isAfterProvider && (
+ {!isAfterProvider && !isGeneral() && }
+ {!isAfterProvider && !isGeneral() && (
-
diff --git a/apps/frontend/src/components/launches/add.provider.component.tsx b/apps/frontend/src/components/launches/add.provider.component.tsx
index 68798e2e..87cf37c9 100644
--- a/apps/frontend/src/components/launches/add.provider.component.tsx
+++ b/apps/frontend/src/components/launches/add.provider.component.tsx
@@ -190,7 +190,7 @@ export const AddProviderComponent: FC<{
Social
-
+
{social.map((item) => (
Articles
-
+
{article.map((item) => (
{
(async () => {
+ if (isGeneral()) {
+ return [];
+ }
setTrendings(await (await fetch('/posts/predict-trending')).json());
})();
}, []);
diff --git a/apps/frontend/src/components/launches/helpers/pick.platform.component.tsx b/apps/frontend/src/components/launches/helpers/pick.platform.component.tsx
index 481ca175..8fe11bbe 100644
--- a/apps/frontend/src/components/launches/helpers/pick.platform.component.tsx
+++ b/apps/frontend/src/components/launches/helpers/pick.platform.component.tsx
@@ -138,7 +138,7 @@ export const PickPlatforms: FC<{
>
- {integrations.map((integration) =>
+ {integrations.filter(f => !f.inBetweenSteps).map((integration) =>
!props.singleSelect ? (
{
const fetch = useFetch();
+ const router = useRouter();
+
const [reload, setReload] = useState(false);
const load = useCallback(async (path: string) => {
return (await (await fetch(path)).json()).integrations;
@@ -57,6 +60,10 @@ export const LaunchesComponent = () => {
}
}, []);
+ const continueIntegration = useCallback((integration: any) => async () => {
+ router.push(`/launches?added=${integration.identifier}&continue=${integration.id}`);
+ }, []);
+
useEffect(() => {
if (typeof window !== 'undefined' && window.opener) {
window.close();
@@ -89,6 +96,14 @@ export const LaunchesComponent = () => {
integration.disabled && 'opacity-50'
)}
>
+ {integration.inBetweenSteps && (
+
+ )}

{
}
: {})}
className={clsx(
- 'flex-1',
+ 'flex-1 whitespace-nowrap text-ellipsis overflow-hidden',
integration.disabled && 'opacity-50'
)}
>
diff --git a/apps/frontend/src/components/launches/providers/continue-provider/facebook/facebook.continue.tsx b/apps/frontend/src/components/launches/providers/continue-provider/facebook/facebook.continue.tsx
new file mode 100644
index 00000000..d4f7879a
--- /dev/null
+++ b/apps/frontend/src/components/launches/providers/continue-provider/facebook/facebook.continue.tsx
@@ -0,0 +1,88 @@
+import { FC, useCallback, useMemo, useState } from 'react';
+import { useCustomProviderFunction } from '@gitroom/frontend/components/launches/helpers/use.custom.provider.function';
+import useSWR from 'swr';
+import clsx from 'clsx';
+import { Button } from '@gitroom/react/form/button';
+import { useFetch } from '@gitroom/helpers/utils/custom.fetch';
+import { useIntegration } from '@gitroom/frontend/components/launches/helpers/use.integration';
+
+export const FacebookContinue: FC<{closeModal: () => void, existingId: string[]}> = (props) => {
+ const { closeModal, existingId } = props;
+ const call = useCustomProviderFunction();
+ const { integration } = useIntegration();
+ const [page, setSelectedPage] = useState
(null);
+ const fetch = useFetch();
+
+ const loadPages = useCallback(() => {
+ return call.get('pages');
+ }, []);
+
+ const setPage = useCallback(
+ (id: string) => () => {
+ setSelectedPage(id);
+ },
+ []
+ );
+
+ const { data } = useSWR('load-pages', loadPages, {
+ refreshWhenHidden: false,
+ refreshWhenOffline: false,
+ revalidateOnFocus: false,
+ revalidateIfStale: false,
+ revalidateOnMount: true,
+ revalidateOnReconnect: false,
+ refreshInterval: 0,
+ });
+
+ const saveInstagram = useCallback(async () => {
+ await fetch(`/integrations/facebook/${integration?.id}`, {
+ method: 'POST',
+ body: JSON.stringify({ page }),
+ });
+
+ closeModal();
+ }, [integration, page]);
+
+ const filteredData = useMemo(() => {
+ return data?.filter((p: { id: string }) => !existingId.includes(p.id)) || [];
+ }, [data]);
+
+ return (
+
+
Select Page:
+
+ {filteredData?.map(
+ (p: {
+ id: string;
+ username: string;
+ name: string;
+ picture: { data: { url: string } };
+ }) => (
+
+
+

+
+
{p.name}
+
+ )
+ )}
+
+
+
+
+
+ );
+};
diff --git a/apps/frontend/src/components/launches/providers/continue-provider/instagram/instagram.continue.tsx b/apps/frontend/src/components/launches/providers/continue-provider/instagram/instagram.continue.tsx
index e69de29b..71a7d1ce 100644
--- a/apps/frontend/src/components/launches/providers/continue-provider/instagram/instagram.continue.tsx
+++ b/apps/frontend/src/components/launches/providers/continue-provider/instagram/instagram.continue.tsx
@@ -0,0 +1,94 @@
+import { FC, useCallback, useMemo, useState } from 'react';
+import { useCustomProviderFunction } from '@gitroom/frontend/components/launches/helpers/use.custom.provider.function';
+import useSWR from 'swr';
+import clsx from 'clsx';
+import { Button } from '@gitroom/react/form/button';
+import { useFetch } from '@gitroom/helpers/utils/custom.fetch';
+import { useIntegration } from '@gitroom/frontend/components/launches/helpers/use.integration';
+
+export const InstagramContinue: FC<{
+ closeModal: () => void;
+ existingId: string[];
+}> = (props) => {
+ const { closeModal, existingId } = props;
+ const call = useCustomProviderFunction();
+ const { integration } = useIntegration();
+ const [page, setSelectedPage] = useState(null);
+ const fetch = useFetch();
+
+ const loadPages = useCallback(() => {
+ return call.get('pages');
+ }, []);
+
+ const setPage = useCallback(
+ (param: {id: string, pageId: string}) => () => {
+ setSelectedPage(param);
+ },
+ []
+ );
+
+ const { data } = useSWR('load-pages', loadPages, {
+ refreshWhenHidden: false,
+ refreshWhenOffline: false,
+ revalidateOnFocus: false,
+ revalidateIfStale: false,
+ revalidateOnMount: true,
+ revalidateOnReconnect: false,
+ refreshInterval: 0,
+ });
+
+ const saveInstagram = useCallback(async () => {
+ await fetch(`/integrations/instagram/${integration?.id}`, {
+ method: 'POST',
+ body: JSON.stringify(page),
+ });
+
+ closeModal();
+ }, [integration, page]);
+
+ const filteredData = useMemo(() => {
+ return (
+ data?.filter((p: { id: string }) => !existingId.includes(p.id)) || []
+ );
+ }, [data]);
+
+ return (
+
+
Select Instagram Account:
+
+ {filteredData?.map(
+ (p: {
+ id: string;
+ pageId: string;
+ username: string;
+ name: string;
+ picture: { data: { url: string } };
+ }) => (
+
+
+

+
+
{p.name}
+
+ )
+ )}
+
+
+
+
+
+ );
+};
diff --git a/apps/frontend/src/components/launches/providers/continue-provider/list.tsx b/apps/frontend/src/components/launches/providers/continue-provider/list.tsx
index e69de29b..4c9f59d7 100644
--- a/apps/frontend/src/components/launches/providers/continue-provider/list.tsx
+++ b/apps/frontend/src/components/launches/providers/continue-provider/list.tsx
@@ -0,0 +1,7 @@
+import { InstagramContinue } from '@gitroom/frontend/components/launches/providers/continue-provider/instagram/instagram.continue';
+import { FacebookContinue } from '@gitroom/frontend/components/launches/providers/continue-provider/facebook/facebook.continue';
+
+export const continueProviderList = {
+ instagram: InstagramContinue,
+ facebook: FacebookContinue,
+}
\ No newline at end of file
diff --git a/apps/frontend/src/components/launches/providers/facebook/facebook.provider.tsx b/apps/frontend/src/components/launches/providers/facebook/facebook.provider.tsx
index a1e9c079..0eb8d336 100644
--- a/apps/frontend/src/components/launches/providers/facebook/facebook.provider.tsx
+++ b/apps/frontend/src/components/launches/providers/facebook/facebook.provider.tsx
@@ -3,9 +3,13 @@ import { withProvider } from '@gitroom/frontend/components/launches/providers/hi
import { useIntegration } from '@gitroom/frontend/components/launches/helpers/use.integration';
import { useFormatting } from '@gitroom/frontend/components/launches/helpers/use.formatting';
import { useMediaDirectory } from '@gitroom/react/helpers/use.media.directory';
-import {afterLinkedinCompanyPreventRemove, linkedinCompanyPreventRemove} from "@gitroom/helpers/utils/linkedin.company.prevent.remove";
+import {
+ afterLinkedinCompanyPreventRemove,
+ linkedinCompanyPreventRemove,
+} from '@gitroom/helpers/utils/linkedin.company.prevent.remove';
+import { VideoOrImage } from '@gitroom/react/helpers/video.or.image';
-const LinkedinPreview: FC = (props) => {
+const FacebookPreview: FC = (props) => {
const { value: topValue, integration } = useIntegration();
const mediaDir = useMediaDirectory();
const newValues = useFormatting(topValue, {
@@ -43,7 +47,10 @@ const LinkedinPreview: FC = (props) => {
-
+
{!!firstPost?.images?.length && (
@@ -54,10 +61,7 @@ const LinkedinPreview: FC = (props) => {
className="flex-1"
target="_blank"
>
-
})
+
))}
@@ -89,10 +93,12 @@ const LinkedinPreview: FC = (props) => {
href={mediaDir.set(image.path)}
target="_blank"
>
-
})
+
+
+
))}
@@ -104,4 +110,4 @@ const LinkedinPreview: FC = (props) => {
);
};
-export default withProvider(null, LinkedinPreview);
+export default withProvider(null, FacebookPreview);
diff --git a/apps/frontend/src/components/launches/providers/instagram/instagram.provider.tsx b/apps/frontend/src/components/launches/providers/instagram/instagram.provider.tsx
index 759b8e88..4d2a0106 100644
--- a/apps/frontend/src/components/launches/providers/instagram/instagram.provider.tsx
+++ b/apps/frontend/src/components/launches/providers/instagram/instagram.provider.tsx
@@ -3,9 +3,13 @@ import { withProvider } from '@gitroom/frontend/components/launches/providers/hi
import { useIntegration } from '@gitroom/frontend/components/launches/helpers/use.integration';
import { useFormatting } from '@gitroom/frontend/components/launches/helpers/use.formatting';
import { useMediaDirectory } from '@gitroom/react/helpers/use.media.directory';
-import {afterLinkedinCompanyPreventRemove, linkedinCompanyPreventRemove} from "@gitroom/helpers/utils/linkedin.company.prevent.remove";
+import {
+ afterLinkedinCompanyPreventRemove,
+ linkedinCompanyPreventRemove,
+} from '@gitroom/helpers/utils/linkedin.company.prevent.remove';
+import { VideoOrImage } from '@gitroom/react/helpers/video.or.image';
-const FacebookPreview: FC = (props) => {
+const InstagramPreview: FC = (props) => {
const { value: topValue, integration } = useIntegration();
const mediaDir = useMediaDirectory();
const newValues = useFormatting(topValue, {
@@ -43,8 +47,6 @@ const FacebookPreview: FC = (props) => {
-
-
{!!firstPost?.images?.length && (
{firstPost.images.map((image, index) => (
@@ -54,14 +56,15 @@ const FacebookPreview: FC = (props) => {
className="flex-1"
target="_blank"
>
-
})
+
))}
)}
+
{morePosts.map((p, index) => (
@@ -89,10 +92,12 @@ const FacebookPreview: FC = (props) => {
href={mediaDir.set(image.path)}
target="_blank"
>
-
})
+
+
+
))}
@@ -104,4 +109,4 @@ const FacebookPreview: FC = (props) => {
);
};
-export default withProvider(null, FacebookPreview);
+export default withProvider(null, InstagramPreview);
diff --git a/apps/frontend/src/components/launches/providers/linkedin/linkedin.provider.tsx b/apps/frontend/src/components/launches/providers/linkedin/linkedin.provider.tsx
index a1e9c079..8aa305a8 100644
--- a/apps/frontend/src/components/launches/providers/linkedin/linkedin.provider.tsx
+++ b/apps/frontend/src/components/launches/providers/linkedin/linkedin.provider.tsx
@@ -3,7 +3,11 @@ import { withProvider } from '@gitroom/frontend/components/launches/providers/hi
import { useIntegration } from '@gitroom/frontend/components/launches/helpers/use.integration';
import { useFormatting } from '@gitroom/frontend/components/launches/helpers/use.formatting';
import { useMediaDirectory } from '@gitroom/react/helpers/use.media.directory';
-import {afterLinkedinCompanyPreventRemove, linkedinCompanyPreventRemove} from "@gitroom/helpers/utils/linkedin.company.prevent.remove";
+import {
+ afterLinkedinCompanyPreventRemove,
+ linkedinCompanyPreventRemove,
+} from '@gitroom/helpers/utils/linkedin.company.prevent.remove';
+import { VideoOrImage } from '@gitroom/react/helpers/video.or.image';
const LinkedinPreview: FC = (props) => {
const { value: topValue, integration } = useIntegration();
@@ -43,7 +47,10 @@ const LinkedinPreview: FC = (props) => {
-
+
{!!firstPost?.images?.length && (
@@ -54,10 +61,7 @@ const LinkedinPreview: FC = (props) => {
className="flex-1"
target="_blank"
>
-
})
+
))}
@@ -89,10 +93,12 @@ const LinkedinPreview: FC = (props) => {
href={mediaDir.set(image.path)}
target="_blank"
>
-
})
+
+
+
))}
diff --git a/apps/frontend/src/components/launches/providers/show.all.providers.tsx b/apps/frontend/src/components/launches/providers/show.all.providers.tsx
index 56dc86fc..85a62f5c 100644
--- a/apps/frontend/src/components/launches/providers/show.all.providers.tsx
+++ b/apps/frontend/src/components/launches/providers/show.all.providers.tsx
@@ -6,6 +6,8 @@ import LinkedinProvider from "@gitroom/frontend/components/launches/providers/li
import RedditProvider from "@gitroom/frontend/components/launches/providers/reddit/reddit.provider";
import MediumProvider from "@gitroom/frontend/components/launches/providers/medium/medium.provider";
import HashnodeProvider from "@gitroom/frontend/components/launches/providers/hashnode/hashnode.provider";
+import FacebookProvider from '@gitroom/frontend/components/launches/providers/facebook/facebook.provider';
+import InstagramProvider from '@gitroom/frontend/components/launches/providers/instagram/instagram.provider';
export const Providers = [
{identifier: 'devto', component: DevtoProvider},
@@ -14,6 +16,8 @@ export const Providers = [
{identifier: 'reddit', component: RedditProvider},
{identifier: 'medium', component: MediumProvider},
{identifier: 'hashnode', component: HashnodeProvider},
+ {identifier: 'facebook', component: FacebookProvider},
+ {identifier: 'instagram', component: InstagramProvider},
];
diff --git a/apps/frontend/src/components/launches/providers/x/x.provider.tsx b/apps/frontend/src/components/launches/providers/x/x.provider.tsx
index 0481cc16..ed2f65b0 100644
--- a/apps/frontend/src/components/launches/providers/x/x.provider.tsx
+++ b/apps/frontend/src/components/launches/providers/x/x.provider.tsx
@@ -5,6 +5,7 @@ import clsx from 'clsx';
import { useIntegration } from '@gitroom/frontend/components/launches/helpers/use.integration';
import { useFormatting } from '@gitroom/frontend/components/launches/helpers/use.formatting';
import { useMediaDirectory } from '@gitroom/react/helpers/use.media.directory';
+import { VideoOrImage } from '@gitroom/react/helpers/video.or.image';
const chirp = localFont({
src: [
@@ -82,11 +83,13 @@ const XPreview: FC = (props) => {
{!!value?.images?.length && (
{value.images.map((image, index) => (
-
-
+
+
))}
diff --git a/apps/frontend/src/components/layout/continue.provider.tsx b/apps/frontend/src/components/layout/continue.provider.tsx
index e69de29b..be656d91 100644
--- a/apps/frontend/src/components/layout/continue.provider.tsx
+++ b/apps/frontend/src/components/layout/continue.provider.tsx
@@ -0,0 +1,101 @@
+import React, { FC, useCallback, useMemo } from 'react';
+import { useRouter, useSearchParams } from 'next/navigation';
+import { TopTitle } from '@gitroom/frontend/components/launches/helpers/top.title.component';
+import { continueProviderList } from '@gitroom/frontend/components/launches/providers/continue-provider/list';
+import { IntegrationContext } from '@gitroom/frontend/components/launches/helpers/use.integration';
+import dayjs from 'dayjs';
+import useSWR, { useSWRConfig } from 'swr';
+import { useFetch } from '@gitroom/helpers/utils/custom.fetch';
+
+export const Null: FC<{ closeModal: () => void; existingId: string[] }> = () =>
+ null;
+export const ContinueProvider: FC = () => {
+ const { mutate } = useSWRConfig();
+ const fetch = useFetch();
+ const searchParams = useSearchParams();
+ const added = searchParams.get('added');
+ const continueId = searchParams.get('continue');
+ const router = useRouter();
+
+ const load = useCallback(async (path: string) => {
+ const list = (await (await fetch(path)).json()).integrations;
+ return list;
+ }, []);
+
+ const { data: integrations } = useSWR('/integrations/list', load, {
+ fallbackData: [],
+ });
+
+ const closeModal = useCallback(() => {
+ mutate('/integrations/list');
+ const url = new URL(window.location.href);
+ url.searchParams.delete('added');
+ url.searchParams.delete('continue');
+ router.push(url.toString());
+ }, []);
+
+ const Provider = useMemo(() => {
+ if (!added) {
+ return Null;
+ }
+ return continueProviderList[added as keyof typeof continueProviderList];
+ }, [added]);
+
+ if (!added || !continueId || !integrations) {
+ return null;
+ }
+
+ return (
+
+
e.stopPropagation()}
+ >
+
+
+
+
+
+ p.internalId)} />
+
+
+
+
+
+ );
+};
diff --git a/apps/frontend/src/components/layout/layout.settings.tsx b/apps/frontend/src/components/layout/layout.settings.tsx
index 0c8b0a5c..c1e63613 100644
--- a/apps/frontend/src/components/layout/layout.settings.tsx
+++ b/apps/frontend/src/components/layout/layout.settings.tsx
@@ -24,6 +24,8 @@ import { ShowLinkedinCompany } from '@gitroom/frontend/components/launches/helpe
import { SettingsComponent } from '@gitroom/frontend/components/layout/settings.component';
import { Onboarding } from '@gitroom/frontend/components/onboarding/onboarding';
import { Support } from '@gitroom/frontend/components/layout/support';
+import { ContinueProvider } from '@gitroom/frontend/components/layout/continue.provider';
+import { isGeneral } from '@gitroom/react/helpers/is.general';
dayjs.extend(utc);
dayjs.extend(weekOfYear);
@@ -54,13 +56,14 @@ export const LayoutSettings = ({ children }: { children: ReactNode }) => {
+
-
Gitroom
+
{isGeneral() ? 'Postiz' : 'Gitroom'}
{user?.orgId ?
:
}
diff --git a/apps/frontend/src/components/layout/top.menu.tsx b/apps/frontend/src/components/layout/top.menu.tsx
index e53fbeb2..5dac13bc 100644
--- a/apps/frontend/src/components/layout/top.menu.tsx
+++ b/apps/frontend/src/components/layout/top.menu.tsx
@@ -20,7 +20,7 @@ export const menuItems = [
]
: []),
{
- name: 'Launches',
+ name: isGeneral() ? 'Calendar' : 'Launches',
icon: 'launches',
path: '/launches',
},
diff --git a/apps/frontend/src/components/media/media.component.tsx b/apps/frontend/src/components/media/media.component.tsx
index 7adb8013..aebed26b 100644
--- a/apps/frontend/src/components/media/media.component.tsx
+++ b/apps/frontend/src/components/media/media.component.tsx
@@ -11,6 +11,7 @@ import EventEmitter from 'events';
import { TopTitle } from '@gitroom/frontend/components/launches/helpers/top.title.component';
import clsx from 'clsx';
import interClass from '@gitroom/react/helpers/inter.font';
+import { VideoFrame } from '@gitroom/react/helpers/video.frame';
const showModalEmitter = new EventEmitter();
export const ShowMediaBoxModal: FC = () => {
@@ -139,10 +140,12 @@ export const MediaBox: FC<{
-