front-end/src/user/useCases/updatePersonalInformationUseCase.ts

31 lines
752 B
TypeScript

import {debounce} from "lodash";
import { User } from "../domain/userEntity";
import { updateUser } from "../domain/userModel";
import { UserStore } from "../domain/userStore";
type UpdateUserStore = Pick<
UserStore,
"user" | "updateUser" | "setUser"
>;
const deboucedTask = debounce((task) => Promise.resolve(task()), 500);
const updatePersonalInfoUseCase = (
store: UpdateUserStore,
payload: Partial<User>
): Promise<void> | undefined => {
const updateArtifacts = store.user
? updateUser(store.user, payload)
: store.user;
if (updateArtifacts) {
store.setUser(updateArtifacts.user);
return deboucedTask(() => store.updateUser(payload));
}
};
export { updatePersonalInfoUseCase };
export type { UpdateUserStore };