feat: validation
This commit is contained in:
parent
1faee653d9
commit
a80f0397f2
|
|
@ -74,7 +74,7 @@ export const ManageModal: FC<AddEditModalProps> = (props) => {
|
||||||
integrations: state.integrations,
|
integrations: state.integrations,
|
||||||
setSelectedIntegrations: state.setSelectedIntegrations,
|
setSelectedIntegrations: state.setSelectedIntegrations,
|
||||||
locked: state.locked,
|
locked: state.locked,
|
||||||
activateExitButton: state.activateExitButton
|
activateExitButton: state.activateExitButton,
|
||||||
}))
|
}))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -144,7 +144,8 @@ export const ManageModal: FC<AddEditModalProps> = (props) => {
|
||||||
const notEnoughChars = checkAllValid.filter((p: any) => {
|
const notEnoughChars = checkAllValid.filter((p: any) => {
|
||||||
return p.values.some((a: any) => {
|
return p.values.some((a: any) => {
|
||||||
return (
|
return (
|
||||||
countCharacters(a.content, p?.integration?.identifier || '') === 0 && a.media?.length === 0
|
countCharacters(a.content, p?.integration?.identifier || '') ===
|
||||||
|
0 && a.media?.length === 0
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
@ -239,7 +240,7 @@ export const ManageModal: FC<AddEditModalProps> = (props) => {
|
||||||
posts: checkAllValid.map((p: any) => ({
|
posts: checkAllValid.map((p: any) => ({
|
||||||
integration: p.integration,
|
integration: p.integration,
|
||||||
group,
|
group,
|
||||||
settings: p.settings,
|
settings: { ...(p.settings || {}), __type: p.integration.identifier },
|
||||||
value: p.values.map((a: any) => ({
|
value: p.values.map((a: any) => ({
|
||||||
...a,
|
...a,
|
||||||
image: a.media || [],
|
image: a.media || [],
|
||||||
|
|
@ -335,7 +336,9 @@ export const ManageModal: FC<AddEditModalProps> = (props) => {
|
||||||
onClick={schedule('draft')}
|
onClick={schedule('draft')}
|
||||||
className="rounded-[4px] border-2 border-customColor21"
|
className="rounded-[4px] border-2 border-customColor21"
|
||||||
secondary={true}
|
secondary={true}
|
||||||
disabled={selectedIntegrations.length === 0 || loading || locked}
|
disabled={
|
||||||
|
selectedIntegrations.length === 0 || loading || locked
|
||||||
|
}
|
||||||
>
|
>
|
||||||
{t('save_as_draft', 'Save as draft')}
|
{t('save_as_draft', 'Save as draft')}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
@ -344,7 +347,9 @@ export const ManageModal: FC<AddEditModalProps> = (props) => {
|
||||||
{addEditSets && (
|
{addEditSets && (
|
||||||
<Button
|
<Button
|
||||||
className="rounded-[4px] relative group"
|
className="rounded-[4px] relative group"
|
||||||
disabled={selectedIntegrations.length === 0 || loading || locked}
|
disabled={
|
||||||
|
selectedIntegrations.length === 0 || loading || locked
|
||||||
|
}
|
||||||
onClick={schedule('draft')}
|
onClick={schedule('draft')}
|
||||||
>
|
>
|
||||||
Save Set
|
Save Set
|
||||||
|
|
@ -353,7 +358,9 @@ export const ManageModal: FC<AddEditModalProps> = (props) => {
|
||||||
{!addEditSets && (
|
{!addEditSets && (
|
||||||
<Button
|
<Button
|
||||||
className="rounded-[4px] relative group"
|
className="rounded-[4px] relative group"
|
||||||
disabled={selectedIntegrations.length === 0 || loading || locked}
|
disabled={
|
||||||
|
selectedIntegrations.length === 0 || loading || locked
|
||||||
|
}
|
||||||
>
|
>
|
||||||
<div className="flex justify-center items-center gap-[5px] h-full">
|
<div className="flex justify-center items-center gap-[5px] h-full">
|
||||||
<div
|
<div
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ import { useFieldArray } from 'react-hook-form';
|
||||||
import { Button } from '@gitroom/react/form/button';
|
import { Button } from '@gitroom/react/form/button';
|
||||||
import { deleteDialog } from '@gitroom/react/helpers/delete.dialog';
|
import { deleteDialog } from '@gitroom/react/helpers/delete.dialog';
|
||||||
import { Subreddit } from './subreddit';
|
import { Subreddit } from './subreddit';
|
||||||
import { LemmySettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/lemmy.dto';
|
import { LemmySettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/lemmy.dto';
|
||||||
import { useT } from '@gitroom/react/translation/get.transation.service.client';
|
import { useT } from '@gitroom/react/translation/get.transation.service.client';
|
||||||
const LemmySettings: FC = () => {
|
const LemmySettings: FC = () => {
|
||||||
const { register, control } = useSettings();
|
const { register, control } = useSettings();
|
||||||
|
|
|
||||||
|
|
@ -13,22 +13,9 @@ import {
|
||||||
ValidateNested,
|
ValidateNested,
|
||||||
} from 'class-validator';
|
} from 'class-validator';
|
||||||
import { Type } from 'class-transformer';
|
import { Type } from 'class-transformer';
|
||||||
import { DevToSettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/dev.to.settings.dto';
|
|
||||||
import { MediaDto } from '@gitroom/nestjs-libraries/dtos/media/media.dto';
|
import { MediaDto } from '@gitroom/nestjs-libraries/dtos/media/media.dto';
|
||||||
import { type AllProvidersSettings } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/all.providers.settings';
|
import { allProviders, type AllProvidersSettings, EmptySettings } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/all.providers.settings';
|
||||||
import { MediumSettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/medium.settings.dto';
|
|
||||||
import { HashnodeSettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/hashnode.settings.dto';
|
|
||||||
import { RedditSettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/reddit.dto';
|
|
||||||
import { YoutubeSettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/youtube.settings.dto';
|
|
||||||
import { PinterestSettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/pinterest.dto';
|
|
||||||
import { DribbbleDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/dribbble.dto';
|
|
||||||
import { TikTokDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/tiktok.dto';
|
|
||||||
import { DiscordDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/discord.dto';
|
|
||||||
import { SlackDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/slack.dto';
|
|
||||||
import { LemmySettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/lemmy.dto';
|
|
||||||
import { XDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/x.dto';
|
|
||||||
|
|
||||||
export class EmptySettings {}
|
|
||||||
export class Integration {
|
export class Integration {
|
||||||
@IsDefined()
|
@IsDefined()
|
||||||
@IsString()
|
@IsString()
|
||||||
|
|
@ -70,23 +57,10 @@ export class Post {
|
||||||
|
|
||||||
@ValidateNested()
|
@ValidateNested()
|
||||||
@Type(() => EmptySettings, {
|
@Type(() => EmptySettings, {
|
||||||
keepDiscriminatorProperty: false,
|
keepDiscriminatorProperty: true,
|
||||||
discriminator: {
|
discriminator: {
|
||||||
property: '__type',
|
property: '__type',
|
||||||
subTypes: [
|
subTypes: allProviders(EmptySettings),
|
||||||
{ value: DevToSettingsDto, name: 'devto' },
|
|
||||||
{ value: MediumSettingsDto, name: 'medium' },
|
|
||||||
{ value: HashnodeSettingsDto, name: 'hashnode' },
|
|
||||||
{ value: RedditSettingsDto, name: 'reddit' },
|
|
||||||
{ value: LemmySettingsDto, name: 'lemmy' },
|
|
||||||
{ value: YoutubeSettingsDto, name: 'youtube' },
|
|
||||||
{ value: PinterestSettingsDto, name: 'pinterest' },
|
|
||||||
{ value: DribbbleDto, name: 'dribbble' },
|
|
||||||
{ value: TikTokDto, name: 'tiktok' },
|
|
||||||
{ value: DiscordDto, name: 'discord' },
|
|
||||||
{ value: SlackDto, name: 'slack' },
|
|
||||||
{ value: XDto, name: 'x' },
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
settings: AllProvidersSettings;
|
settings: AllProvidersSettings;
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,13 @@ import { PinterestSettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/provi
|
||||||
import { YoutubeSettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/youtube.settings.dto';
|
import { YoutubeSettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/youtube.settings.dto';
|
||||||
import { TikTokDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/tiktok.dto';
|
import { TikTokDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/tiktok.dto';
|
||||||
import { XDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/x.dto';
|
import { XDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/x.dto';
|
||||||
|
import { LemmySettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/lemmy.dto';
|
||||||
|
import { DribbbleDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/dribbble.dto';
|
||||||
|
import { DiscordDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/discord.dto';
|
||||||
|
import { SlackDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/slack.dto';
|
||||||
|
import { InstagramDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/instagram.dto';
|
||||||
|
import { LinkedinDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/linkedin.dto';
|
||||||
|
import { IsIn, MinLength } from 'class-validator';
|
||||||
|
|
||||||
export type AllProvidersSettings =
|
export type AllProvidersSettings =
|
||||||
| DevToSettingsDto
|
| DevToSettingsDto
|
||||||
|
|
@ -15,4 +22,40 @@ export type AllProvidersSettings =
|
||||||
| YoutubeSettingsDto
|
| YoutubeSettingsDto
|
||||||
| PinterestSettingsDto
|
| PinterestSettingsDto
|
||||||
| XDto
|
| XDto
|
||||||
| TikTokDto;
|
| TikTokDto
|
||||||
|
| InstagramDto;
|
||||||
|
|
||||||
|
export const allProviders = (setEmpty?: any) => {
|
||||||
|
return [
|
||||||
|
{ value: RedditSettingsDto, name: 'reddit' },
|
||||||
|
{ value: LemmySettingsDto, name: 'lemmy' },
|
||||||
|
{ value: YoutubeSettingsDto, name: 'youtube' },
|
||||||
|
{ value: PinterestSettingsDto, name: 'pinterest' },
|
||||||
|
{ value: DribbbleDto, name: 'dribbble' },
|
||||||
|
{ value: TikTokDto, name: 'tiktok' },
|
||||||
|
{ value: DiscordDto, name: 'discord' },
|
||||||
|
{ value: SlackDto, name: 'slack' },
|
||||||
|
{ value: XDto, name: 'x' },
|
||||||
|
{ value: LinkedinDto, name: 'linkedin' },
|
||||||
|
{ value: LinkedinDto, name: 'linkedin-page' },
|
||||||
|
{ value: InstagramDto, name: 'instagram' },
|
||||||
|
{ value: InstagramDto, name: 'instagram-standalone' },
|
||||||
|
{ value: setEmpty, name: 'facebook' },
|
||||||
|
{ value: setEmpty, name: 'threads' },
|
||||||
|
{ value: setEmpty, name: 'mastodon' },
|
||||||
|
{ value: setEmpty, name: 'bluesky' },
|
||||||
|
{ value: setEmpty, name: 'wrapcast' },
|
||||||
|
{ value: setEmpty, name: 'telegram' },
|
||||||
|
{ value: setEmpty, name: 'nostr' },
|
||||||
|
{ value: setEmpty, name: 'vk' },
|
||||||
|
].filter((f) => f.value);
|
||||||
|
};
|
||||||
|
|
||||||
|
export class EmptySettings {
|
||||||
|
@IsIn(allProviders(EmptySettings).map((p) => p.name), {
|
||||||
|
message: `"__type" must be ${allProviders(EmptySettings)
|
||||||
|
.map((p) => p.name)
|
||||||
|
.join(', ')}`,
|
||||||
|
})
|
||||||
|
__type: string;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ import { SocialAbstract } from '@gitroom/nestjs-libraries/integrations/social.ab
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import { Integration } from '@prisma/client';
|
import { Integration } from '@prisma/client';
|
||||||
import { AuthService } from '@gitroom/helpers/auth/auth.service';
|
import { AuthService } from '@gitroom/helpers/auth/auth.service';
|
||||||
import { LemmySettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/lemmy.dto';
|
import { LemmySettingsDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/lemmy.dto';
|
||||||
import { groupBy } from 'lodash';
|
import { groupBy } from 'lodash';
|
||||||
|
|
||||||
export class LemmyProvider extends SocialAbstract implements SocialProvider {
|
export class LemmyProvider extends SocialAbstract implements SocialProvider {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue