Skip to content

Commit ec5210b

Browse files
committed
feat: add twitch
1 parent e9f2660 commit ec5210b

File tree

7 files changed

+407
-0
lines changed

7 files changed

+407
-0
lines changed
14.2 KB
Loading

apps/frontend/src/components/new-launch/providers/show.all.providers.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import ThreadsProvider from '@gitroom/frontend/components/new-launch/providers/t
1616
import DiscordProvider from '@gitroom/frontend/components/new-launch/providers/discord/discord.provider';
1717
import SlackProvider from '@gitroom/frontend/components/new-launch/providers/slack/slack.provider';
1818
import KickProvider from '@gitroom/frontend/components/new-launch/providers/kick/kick.provider';
19+
import TwitchProvider from '@gitroom/frontend/components/new-launch/providers/twitch/twitch.provider';
1920
import MastodonProvider from '@gitroom/frontend/components/new-launch/providers/mastodon/mastodon.provider';
2021
import BlueskyProvider from '@gitroom/frontend/components/new-launch/providers/bluesky/bluesky.provider';
2122
import LemmyProvider from '@gitroom/frontend/components/new-launch/providers/lemmy/lemmy.provider';
@@ -108,6 +109,10 @@ export const Providers = [
108109
identifier: 'kick',
109110
component: KickProvider,
110111
},
112+
{
113+
identifier: 'twitch',
114+
component: TwitchProvider,
115+
},
111116
{
112117
identifier: 'mastodon',
113118
component: MastodonProvider,
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
'use client';
2+
3+
import { FC } from 'react';
4+
import {
5+
PostComment,
6+
withProvider,
7+
} from '@gitroom/frontend/components/new-launch/providers/high.order.provider';
8+
import { TwitchDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/twitch.dto';
9+
import { useSettings } from '@gitroom/frontend/components/launches/helpers/use.values';
10+
import { Select } from '@gitroom/react/form/select';
11+
import { useWatch } from 'react-hook-form';
12+
13+
const messageTypes = [
14+
{
15+
label: 'Chat Message',
16+
value: 'message',
17+
},
18+
{
19+
label: 'Announcement',
20+
value: 'announcement',
21+
},
22+
];
23+
24+
const announcementColors = [
25+
{
26+
label: 'Primary (Default)',
27+
value: 'primary',
28+
},
29+
{
30+
label: 'Blue',
31+
value: 'blue',
32+
},
33+
{
34+
label: 'Green',
35+
value: 'green',
36+
},
37+
{
38+
label: 'Orange',
39+
value: 'orange',
40+
},
41+
{
42+
label: 'Purple',
43+
value: 'purple',
44+
},
45+
];
46+
47+
const TwitchSettings: FC = () => {
48+
const { register, control } = useSettings();
49+
const messageType = useWatch({
50+
control,
51+
name: 'messageType',
52+
});
53+
54+
return (
55+
<div className="flex flex-col">
56+
<Select
57+
label="Message Type"
58+
{...register('messageType', {
59+
value: 'message',
60+
})}
61+
>
62+
{messageTypes.map((t) => (
63+
<option key={t.value} value={t.value}>
64+
{t.label}
65+
</option>
66+
))}
67+
</Select>
68+
{messageType === 'announcement' && (
69+
<Select
70+
label="Announcement Color"
71+
{...register('announcementColor', {
72+
value: 'primary',
73+
})}
74+
>
75+
{announcementColors.map((c) => (
76+
<option key={c.value} value={c.value}>
77+
{c.label}
78+
</option>
79+
))}
80+
</Select>
81+
)}
82+
</div>
83+
);
84+
};
85+
86+
export default withProvider({
87+
postComment: PostComment.COMMENT,
88+
comments: 'no-media',
89+
minimumCharacters: [],
90+
SettingsComponent: TwitchSettings,
91+
CustomPreviewComponent: undefined,
92+
dto: TwitchDto,
93+
checkValidity: undefined,
94+
maximumCharacters: 500,
95+
});

libraries/nestjs-libraries/src/dtos/posts/providers-settings/all.providers.settings.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { DribbbleDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-sett
88
import { DiscordDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/discord.dto';
99
import { SlackDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/slack.dto';
1010
import { KickDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/kick.dto';
11+
import { TwitchDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/twitch.dto';
1112
import { InstagramDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/instagram.dto';
1213
import { LinkedinDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/linkedin.dto';
1314
import { IsIn } from 'class-validator';
@@ -31,6 +32,7 @@ export type AllProvidersSettings =
3132
| ProviderExtension<'discord', DiscordDto>
3233
| ProviderExtension<'slack', SlackDto>
3334
| ProviderExtension<'kick', KickDto>
35+
| ProviderExtension<'twitch', TwitchDto>
3436
| ProviderExtension<'x', XDto>
3537
| ProviderExtension<'linkedin', LinkedinDto>
3638
| ProviderExtension<'linkedin-page', LinkedinDto>
@@ -64,6 +66,7 @@ export const allProviders = (setEmpty?: any) => {
6466
{ value: DiscordDto, name: 'discord' },
6567
{ value: SlackDto, name: 'slack' },
6668
{ value: KickDto, name: 'kick' },
69+
{ value: TwitchDto, name: 'twitch' },
6770
{ value: XDto, name: 'x' },
6871
{ value: LinkedinDto, name: 'linkedin' },
6972
{ value: LinkedinDto, name: 'linkedin-page' },
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { IsIn, IsOptional, IsString } from 'class-validator';
2+
3+
export class TwitchDto {
4+
@IsIn(['message', 'announcement'])
5+
@IsOptional()
6+
messageType?: 'message' | 'announcement';
7+
8+
@IsIn(['primary', 'blue', 'green', 'orange', 'purple'])
9+
@IsOptional()
10+
announcementColor?: 'primary' | 'blue' | 'green' | 'orange' | 'purple';
11+
}

libraries/nestjs-libraries/src/integrations/integration.manager.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import { WordpressProvider } from '@gitroom/nestjs-libraries/integrations/social
3030
import { ListmonkProvider } from '@gitroom/nestjs-libraries/integrations/social/listmonk.provider';
3131
import { GmbProvider } from '@gitroom/nestjs-libraries/integrations/social/gmb.provider';
3232
import { KickProvider } from '@gitroom/nestjs-libraries/integrations/social/kick.provider';
33+
import { TwitchProvider } from '@gitroom/nestjs-libraries/integrations/social/twitch.provider';
3334
import { SocialAbstract } from '@gitroom/nestjs-libraries/integrations/social.abstract';
3435

3536
export const socialIntegrationList: Array<SocialAbstract & SocialProvider> = [
@@ -49,6 +50,7 @@ export const socialIntegrationList: Array<SocialAbstract & SocialProvider> = [
4950
new DiscordProvider(),
5051
new SlackProvider(),
5152
new KickProvider(),
53+
new TwitchProvider(),
5254
new MastodonProvider(),
5355
new BlueskyProvider(),
5456
new LemmyProvider(),

0 commit comments

Comments
 (0)