From 71833f3f39dbde204b67b55152f8fafddd684f15 Mon Sep 17 00:00:00 2001 From: Nevo David Date: Sat, 28 Feb 2026 15:01:54 +0700 Subject: [PATCH] feat: mewe --- .../providers/mewe/mewe.provider.tsx | 15 +++++++++++- .../dtos/posts/providers-settings/mewe.dto.ts | 13 ++++++++--- .../src/integrations/social/mewe.provider.ts | 23 +++++++++++-------- 3 files changed, 38 insertions(+), 13 deletions(-) diff --git a/apps/frontend/src/components/new-launch/providers/mewe/mewe.provider.tsx b/apps/frontend/src/components/new-launch/providers/mewe/mewe.provider.tsx index 8aadca6c..82e27c38 100644 --- a/apps/frontend/src/components/new-launch/providers/mewe/mewe.provider.tsx +++ b/apps/frontend/src/components/new-launch/providers/mewe/mewe.provider.tsx @@ -8,12 +8,25 @@ import { FC } from 'react'; import { MeweDto } from '@gitroom/nestjs-libraries/dtos/posts/providers-settings/mewe.dto'; import { MeweGroupSelect } from '@gitroom/frontend/components/new-launch/providers/mewe/mewe.group.select'; import { useSettings } from '@gitroom/frontend/components/launches/helpers/use.values'; +import { Select } from '@gitroom/react/form/select'; +import { useWatch } from 'react-hook-form'; const MeweComponent: FC = () => { const form = useSettings(); + const postType = useWatch({ control: form.control, name: 'postType' }); + return (
- + + {postType === 'group' && ( + + )}
); }; diff --git a/libraries/nestjs-libraries/src/dtos/posts/providers-settings/mewe.dto.ts b/libraries/nestjs-libraries/src/dtos/posts/providers-settings/mewe.dto.ts index f1039bae..ca4d9647 100644 --- a/libraries/nestjs-libraries/src/dtos/posts/providers-settings/mewe.dto.ts +++ b/libraries/nestjs-libraries/src/dtos/posts/providers-settings/mewe.dto.ts @@ -1,12 +1,19 @@ -import { IsDefined, IsString, MinLength } from 'class-validator'; +import { IsIn, IsOptional, IsString, MinLength, ValidateIf } from 'class-validator'; import { JSONSchema } from 'class-validator-jsonschema'; export class MeweDto { + @IsIn(['timeline', 'group']) + @JSONSchema({ + description: 'Where to post: timeline or group', + }) + postType: 'timeline' | 'group'; + + @ValidateIf((o) => o.postType === 'group') @MinLength(1) - @IsDefined() @IsString() @JSONSchema({ description: 'Group must be an id', }) - group: string; + @IsOptional() + group?: string; } diff --git a/libraries/nestjs-libraries/src/integrations/social/mewe.provider.ts b/libraries/nestjs-libraries/src/integrations/social/mewe.provider.ts index 55640527..07e2e675 100644 --- a/libraries/nestjs-libraries/src/integrations/social/mewe.provider.ts +++ b/libraries/nestjs-libraries/src/integrations/social/mewe.provider.ts @@ -239,6 +239,7 @@ export class MeweProvider extends SocialAbstract implements SocialProvider { integration: Integration ): Promise { const [firstPost] = postDetails; + const postType = firstPost.settings.postType || 'group'; const groupId = firstPost.settings.group; // Upload photos if present (exclude videos) @@ -257,15 +258,17 @@ export class MeweProvider extends SocialAbstract implements SocialProvider { postBody.uploadedPhotoIds = uploadedPhotoIds; } + const postUrl = + postType === 'timeline' + ? `${this.meweHost}/api/dev/me/post` + : `${this.meweHost}/api/dev/group/${groupId}/post`; + // MeWe post endpoint may return 204 (no content), so use raw fetch - const postResponse = await fetch( - `${this.meweHost}/api/dev/group/${groupId}/post`, - { - method: 'POST', - headers: this.authHeaders(accessToken), - body: JSON.stringify(postBody), - } - ); + const postResponse = await fetch(postUrl, { + method: 'POST', + headers: this.authHeaders(accessToken), + body: JSON.stringify(postBody), + }); if (!postResponse.ok) { const errorText = await postResponse.text(); @@ -285,11 +288,13 @@ export class MeweProvider extends SocialAbstract implements SocialProvider { postId = makeId(12); } + const releaseURL = `${this.meweHost}/post/show/${postId}`; + return [ { id: firstPost.id, postId, - releaseURL: `${this.meweHost}/group/${groupId}`, + releaseURL, status: 'success', }, ];