UNPKG

@replyke/core

Version:

Replyke: Build interactive apps with social features like comments, votes, feeds, user lists, notifications, and more.

88 lines 3.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useUpdateUserMutation = exports.userApi = void 0; const baseApi_1 = require("./baseApi"); // Removed FetchUserRequest and FetchUserByForeignIdRequest - these are for other users, not current user management // Helper to build FormData for file uploads function buildUserUpdateFormData(update) { const formData = new FormData(); const avatarIsFile = update.avatar && typeof update.avatar === 'object' && 'file' in update.avatar; // Append non-file fields if (update.name !== undefined) { formData.append("name", update.name === null ? "" : update.name); } if (update.username !== undefined) { formData.append("username", update.username === null ? "" : update.username); } if (update.bio !== undefined) { formData.append("bio", update.bio); } if (update.birthdate !== undefined) { formData.append("birthdate", update.birthdate ? update.birthdate.toISOString() : ""); } // URL-based avatar (legacy support) if (update.avatar && typeof update.avatar === "string") { formData.append("avatar", update.avatar); } // Object fields as JSON strings if (update.location !== undefined) { formData.append("location", update.location === null ? "null" : JSON.stringify(update.location)); } if (update.metadata !== undefined) { formData.append("metadata", JSON.stringify(update.metadata)); } if (update.secureMetadata !== undefined) { formData.append("secureMetadata", JSON.stringify(update.secureMetadata)); } // Append avatar FILE and options if (avatarIsFile && update.avatar && typeof update.avatar === 'object' && 'file' in update.avatar) { formData.append("avatarFile", update.avatar.file); formData.append("avatarFile.options", JSON.stringify(update.avatar.options)); } // Append banner FILE and options if (update.banner) { formData.append("bannerFile", update.banner.file); formData.append("bannerFile.options", JSON.stringify(update.banner.options)); } return formData; } // Inject user-specific endpoints into the base API exports.userApi = baseApi_1.baseApi.injectEndpoints({ endpoints: (builder) => ({ // Update current user (supports both JSON and FormData for file uploads) updateUser: builder.mutation({ query: ({ projectId, userId, update }) => { const avatarIsFile = update.avatar && typeof update.avatar === 'object' && 'file' in update.avatar; const hasFiles = avatarIsFile || update.banner; if (hasFiles) { return { url: `/${projectId}/users/${userId}`, method: 'PATCH', body: buildUserUpdateFormData(update), formData: true, }; } // Simple JSON request (no files) return { url: `/${projectId}/users/${userId}`, method: 'PATCH', body: update, }; }, // No complex optimistic updates needed - let useUserActions handle state updates invalidatesTags: () => [ { type: 'User', id: 'CURRENT' }, ], }), // Removed other-user queries - these should use the existing legacy hooks: // - useFetchUser // - useFetchUserByForeignId // - useFetchUserFollowersCount // - useFetchUserFollowingCount // - useCheckUsernameAvailability // - useFetchUserSuggestions }), }); // Export generated hooks (current user management only) exports.useUpdateUserMutation = exports.userApi.useUpdateUserMutation; //# sourceMappingURL=userApi.js.map