fleet/frontend/services/entities/users.ts
Martavis Parker 384c987389
Removed all traces of Redux from the app! (#5287)
* clean up routes and useless components

* component clean up

* removed redux from routes

* rename file

* moved useDeepEffect hook with others

* removed redux, fleet, app_constants dirs; added types to utilities

* style cleanup

* typo fix

* removed unused ts-ignore comments

* removed redux packages!!!

* formatting

* fixed typing for simple search function

* updated frontend readme
2022-04-22 09:45:35 -07:00

191 lines
5.2 KiB
TypeScript

/* eslint-disable @typescript-eslint/explicit-module-boundary-types */
import sendRequest from "services";
import endpoints from "utilities/endpoints";
import helpers from "utilities/helpers";
import {
ICreateUserFormData,
IUpdateUserFormData,
IUser,
ICreateUserWithInvitationFormData,
} from "interfaces/user";
import { ITeamSummary } from "interfaces/team";
export interface ISortOption {
id: number;
desc: boolean;
}
interface IUserSearchOptions {
page?: number;
perPage?: number;
globalFilter?: string;
sortBy?: ISortOption[];
teamId?: number;
}
interface IForgotPassword {
email: string;
}
interface IUpdatePassword {
new_password: string;
old_password: string;
}
interface IRequirePasswordReset {
require: boolean;
}
export interface IGetMeResponse {
user: IUser;
available_teams: ITeamSummary[];
}
export default {
changePassword: (passwordParams: IUpdatePassword) => {
const { CHANGE_PASSWORD } = endpoints;
return sendRequest("POST", CHANGE_PASSWORD, passwordParams);
},
confirmEmailChange: (currentUser: IUser, token: string) => {
const { CONFIRM_EMAIL_CHANGE } = endpoints;
return sendRequest("GET", CONFIRM_EMAIL_CHANGE(token)).then((response) => {
return { ...currentUser, email: response.new_email };
});
},
create: (formData: ICreateUserWithInvitationFormData) => {
const { USERS } = endpoints;
return sendRequest("POST", USERS, formData).then((response) =>
helpers.addGravatarUrlToResource(response.user)
);
},
createUserWithoutInvitation: (formData: ICreateUserFormData) => {
const { USERS_ADMIN } = endpoints;
return sendRequest("POST", USERS_ADMIN, formData).then((response) =>
helpers.addGravatarUrlToResource(response.user)
);
},
deleteSessions: (userId: number) => {
const { USER_SESSIONS } = endpoints;
const path = USER_SESSIONS(userId);
return sendRequest("DELETE", path);
},
destroy: (userId: number) => {
const { USERS } = endpoints;
const path = `${USERS}/${userId}`;
return sendRequest("DELETE", path);
},
enable: (user: IUser, enabled: boolean) => {
const { ENABLE_USER } = endpoints;
return sendRequest("POST", ENABLE_USER(user.id), {
enabled,
}).then((response) => helpers.addGravatarUrlToResource(response.user));
},
forgotPassword: ({ email }: IForgotPassword) => {
const { FORGOT_PASSWORD } = endpoints;
return sendRequest("POST", FORGOT_PASSWORD, { email });
},
loadAll: ({
page = 0,
perPage = 100,
globalFilter = "",
sortBy = [],
teamId,
}: IUserSearchOptions = {}) => {
const { USERS } = endpoints;
// TODO: add this query param logic to client class
const pagination = `page=${page}&per_page=${perPage}`;
let orderKeyParam = "";
let orderDirection = "";
if (sortBy.length !== 0) {
const sortItem = sortBy[0];
orderKeyParam += `&order_key=${sortItem.id}`;
orderDirection = sortItem.desc
? "&order_direction=desc"
: "&order_direction=asc";
}
let searchQuery = "";
if (globalFilter !== "") {
searchQuery = `&query=${globalFilter}`;
}
let teamQuery = "";
if (teamId !== undefined) {
teamQuery = `&team_id=${teamId}`;
}
const path = `${USERS}?${pagination}${searchQuery}${orderKeyParam}${orderDirection}${teamQuery}`;
return sendRequest("GET", path).then((response) => {
const { users } = response;
return users.map((u: IUser) => helpers.addGravatarUrlToResource(u));
});
},
me: (): Promise<IGetMeResponse> => {
const { ME } = endpoints;
return sendRequest("GET", ME).then(({ user, available_teams }) => {
return {
user: helpers.addGravatarUrlToResource(user),
available_teams,
};
});
},
performRequiredPasswordReset: (new_password: string) => {
const { PERFORM_REQUIRED_PASSWORD_RESET } = endpoints;
return sendRequest("POST", PERFORM_REQUIRED_PASSWORD_RESET, {
new_password,
}).then((response) => helpers.addGravatarUrlToResource(response.user));
},
requirePasswordReset: (
userId: number,
{ require }: IRequirePasswordReset
) => {
const { USERS } = endpoints;
const path = `${USERS}/${userId}/require_password_reset`;
return sendRequest("POST", path, { require }).then((response) =>
helpers.addGravatarUrlToResource(response.user)
);
},
resetPassword: (formData: any) => {
const { RESET_PASSWORD } = endpoints;
return sendRequest("POST", RESET_PASSWORD, formData);
},
setup: (formData: any) => {
const { SETUP } = endpoints;
const setupData = helpers.setupData(formData);
return sendRequest("POST", SETUP, setupData);
},
update: (userId: number, formData: IUpdateUserFormData) => {
const { USERS } = endpoints;
const path = `${USERS}/${userId}`;
return sendRequest("PATCH", path, formData).then((response) =>
helpers.addGravatarUrlToResource(response.user)
);
},
updateAdmin: (user: IUser, admin: boolean) => {
const { UPDATE_USER_ADMIN } = endpoints;
return sendRequest(
"POST",
UPDATE_USER_ADMIN(user.id),
admin
).then((response) => helpers.addGravatarUrlToResource(response.user));
},
};