feat: validation
This commit is contained in:
parent
1faee653d9
commit
a80f0397f2
|
|
@ -74,7 +74,7 @@ export const ManageModal: FC<AddEditModalProps> = (props) => {
|
|||
integrations: state.integrations,
|
||||
setSelectedIntegrations: state.setSelectedIntegrations,
|
||||
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) => {
|
||||
return p.values.some((a: any) => {
|
||||
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) => ({
|
||||
integration: p.integration,
|
||||
group,
|
||||
settings: p.settings,
|
||||
settings: { ...(p.settings || {}), __type: p.integration.identifier },
|
||||
value: p.values.map((a: any) => ({
|
||||
...a,
|
||||
image: a.media || [],
|
||||
|
|
@ -335,7 +336,9 @@ export const ManageModal: FC<AddEditModalProps> = (props) => {
|
|||
onClick={schedule('draft')}
|
||||
className="rounded-[4px] border-2 border-customColor21"
|
||||
secondary={true}
|
||||
disabled={selectedIntegrations.length === 0 || loading || locked}
|
||||
disabled={
|
||||
selectedIntegrations.length === 0 || loading || locked
|
||||
}
|
||||
>
|
||||
{t('save_as_draft', 'Save as draft')}
|
||||
</Button>
|
||||
|
|
@ -344,7 +347,9 @@ export const ManageModal: FC<AddEditModalProps> = (props) => {
|
|||
{addEditSets && (
|
||||
<Button
|
||||
className="rounded-[4px] relative group"
|
||||
disabled={selectedIntegrations.length === 0 || loading || locked}
|
||||
disabled={
|
||||
selectedIntegrations.length === 0 || loading || locked
|
||||
}
|
||||
onClick={schedule('draft')}
|
||||
>
|
||||
Save Set
|
||||
|
|
@ -353,7 +358,9 @@ export const ManageModal: FC<AddEditModalProps> = (props) => {
|
|||
{!addEditSets && (
|
||||
<Button
|
||||
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
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ import { useFieldArray } from 'react-hook-form';
|
|||
import { Button } from '@gitroom/react/form/button';
|
||||
import { deleteDialog } from '@gitroom/react/helpers/delete.dialog';
|
||||
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';
|
||||
const LemmySettings: FC = () => {
|
||||
const { register, control } = useSettings();
|
||||
|
|
|
|||
|
|
@ -13,22 +13,9 @@ import {
|
|||
ValidateNested,
|
||||
} from 'class-validator';
|
||||
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 { type AllProvidersSettings } 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';
|
||||
import { allProviders, type AllProvidersSettings, EmptySettings } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/all.providers.settings';
|
||||
|
||||
export class EmptySettings {}
|
||||
export class Integration {
|
||||
@IsDefined()
|
||||
@IsString()
|
||||
|
|
@ -70,23 +57,10 @@ export class Post {
|
|||
|
||||
@ValidateNested()
|
||||
@Type(() => EmptySettings, {
|
||||
keepDiscriminatorProperty: false,
|
||||
keepDiscriminatorProperty: true,
|
||||
discriminator: {
|
||||
property: '__type',
|
||||
subTypes: [
|
||||
{ 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' },
|
||||
],
|
||||
subTypes: allProviders(EmptySettings),
|
||||
},
|
||||
})
|
||||
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 { TikTokDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/tiktok.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 =
|
||||
| DevToSettingsDto
|
||||
|
|
@ -15,4 +22,40 @@ export type AllProvidersSettings =
|
|||
| YoutubeSettingsDto
|
||||
| PinterestSettingsDto
|
||||
| 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 { Integration } from '@prisma/client';
|
||||
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';
|
||||
|
||||
export class LemmyProvider extends SocialAbstract implements SocialProvider {
|
||||
|
|
|
|||
Loading…
Reference in New Issue