From ec918d497da66b9dc14c3d79aa9a48a0ca351a83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?marcin=20miko=C5=82ajczak?= Date: Sun, 12 May 2024 19:43:57 +0200 Subject: [PATCH] Fix FormData MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: marcin mikołajczak --- package.json | 1 + src/actions/me.ts | 9 ++++----- src/api/hooks/groups/useCreateGroup.ts | 6 +++--- src/api/hooks/groups/useUpdateGroup.ts | 4 +++- yarn.lock | 5 +++++ 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 0b324f2026..155ed19337 100644 --- a/package.json +++ b/package.json @@ -129,6 +129,7 @@ "localforage": "^1.10.0", "lodash": "^4.7.11", "mini-css-extract-plugin": "^2.6.0", + "object-to-formdata": "^4.5.1", "path-browserify": "^1.0.1", "postcss": "^8.4.29", "process": "^0.11.10", diff --git a/src/actions/me.ts b/src/actions/me.ts index 46333fbdf5..e9dcfae03a 100644 --- a/src/actions/me.ts +++ b/src/actions/me.ts @@ -1,3 +1,5 @@ +import { serialize } from 'object-to-formdata'; + import { selectAccount } from 'soapbox/selectors'; import { setSentryAccount } from 'soapbox/sentry'; import KVStore from 'soapbox/storage/kv-store'; @@ -70,14 +72,11 @@ const patchMe = (params: Record, isFormData = false) => (dispatch: AppDispatch, getState: () => RootState) => { dispatch(patchMeRequest()); - const headers: HeadersInit = isFormData ? { - 'Content-Type': 'multipart/form-data', - } : {}; + const headers: HeadersInit = isFormData ? { 'Content-Type': '' } : {}; let body: FormData | string; if (isFormData) { - body = new FormData(); - Object.entries(params).forEach(([key, value]) => (body as FormData).append(key, value)); + body = serialize(params, { indices: true }); } else { body = JSON.stringify(params); } diff --git a/src/api/hooks/groups/useCreateGroup.ts b/src/api/hooks/groups/useCreateGroup.ts index a504e3b2ce..e916067d51 100644 --- a/src/api/hooks/groups/useCreateGroup.ts +++ b/src/api/hooks/groups/useCreateGroup.ts @@ -1,3 +1,5 @@ +import { serialize } from 'object-to-formdata'; + import { Entities } from 'soapbox/entity-store/entities'; import { useCreateEntity } from 'soapbox/entity-store/hooks'; import { useApi } from 'soapbox/hooks/useApi'; @@ -17,9 +19,7 @@ function useCreateGroup() { const api = useApi(); const { createEntity, ...rest } = useCreateEntity([Entities.GROUPS, 'search', ''], (params: CreateGroupParams) => { - const formData = new FormData(); - - Object.entries(params).forEach(([key, value]) => formData.append(key, value)); + const formData = serialize(params, { indices: true }); return api('/api/v1/groups', { method: 'POST', diff --git a/src/api/hooks/groups/useUpdateGroup.ts b/src/api/hooks/groups/useUpdateGroup.ts index 7e0f848adc..9052faa6c9 100644 --- a/src/api/hooks/groups/useUpdateGroup.ts +++ b/src/api/hooks/groups/useUpdateGroup.ts @@ -1,3 +1,5 @@ +import { serialize } from 'object-to-formdata'; + import { Entities } from 'soapbox/entity-store/entities'; import { useCreateEntity } from 'soapbox/entity-store/hooks'; import { useApi } from 'soapbox/hooks/useApi'; @@ -16,7 +18,7 @@ function useUpdateGroup(groupId: string) { const api = useApi(); const { createEntity, ...rest } = useCreateEntity([Entities.GROUPS], (params: UpdateGroupParams) => { - const formData = new FormData(); + const formData = serialize(params, { indices: true }); Object.entries(params).forEach(([key, value]) => formData.append(key, value)); diff --git a/yarn.lock b/yarn.lock index bbfc911df5..ff861d45f6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6595,6 +6595,11 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== +object-to-formdata@^4.5.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/object-to-formdata/-/object-to-formdata-4.5.1.tgz#b6955a9c505b58df15852fee5f844b418b3eb6fe" + integrity sha512-QiM9D0NiU5jV6J6tjE1g7b4Z2tcUnKs1OPUi4iMb2zH+7jwlcUrASghgkFk9GtzqNNq8rTQJtT8AzjBAvLoNMw== + object.assign@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f"