Skip to content

Commit e548ca8

Browse files
luizhf42gustavosbarreto
authored andcommitted
refactor(ui): refactor admin's Users store to setup syntax
1 parent 93b2c65 commit e548ca8

File tree

19 files changed

+289
-480
lines changed

19 files changed

+289
-480
lines changed

ui/admin/src/components/User/UserDelete.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,14 @@ const emit = defineEmits(["update"]);
4444
const showDialog = ref(false);
4545
const router = useRouter();
4646
const snackbar = useSnackbar();
47-
const userStore = useUsersStore();
47+
const usersStore = useUsersStore();
4848
4949
const remove = async () => {
5050
try {
51-
await userStore.remove(props.id);
52-
if (props.redirect) router.push("/users");
51+
await usersStore.deleteUser(props.id);
5352
snackbar.showSuccess("User removed successfully.");
54-
await userStore.refresh();
53+
if (props.redirect) router.push("/users");
54+
await usersStore.fetchUsersList();
5555
showDialog.value = false;
5656
emit("update");
5757
} catch (error) {

ui/admin/src/components/User/UserExport.vue

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ const isLoading = ref(false);
5252
const showDialog = ref(false);
5353
const selectedFilter = ref<FilterOptions>(FilterOptions.MoreThan);
5454
const snackbar = useSnackbar();
55-
const userStore = useUsersStore();
55+
const usersStore = useUsersStore();
5656
const { value: numberOfNamespaces,
5757
errorMessage: numberOfNamespacesError,
5858
} = useField<number>("numberOfNamespaces", yup.number().integer().required().min(0), { initialValue: 0 });
@@ -81,8 +81,7 @@ const handleSubmit = async () => {
8181
isLoading.value = true;
8282
const encodedFilter = encodeFilter();
8383
try {
84-
await userStore.setFilterUsers(encodedFilter);
85-
const response = await userStore.exportUsersToCsv();
84+
const response = await usersStore.exportUsersToCsv(encodedFilter);
8685
const blob = new Blob([response], { type: "text/csv;charset=utf-8" });
8786
saveAs(blob, getFilename());
8887
snackbar.showSuccess("Exported users successfully.");

ui/admin/src/components/User/UserFormDialog.vue

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -134,13 +134,13 @@ import axios, { AxiosError } from "axios";
134134
import * as yup from "yup";
135135
import { useField, useForm } from "vee-validate";
136136
import useUsersStore from "@admin/store/modules/users";
137-
import { IUser } from "@admin/interfaces/IUser";
137+
import { IAdminUser, IAdminUserFormData } from "@admin/interfaces/IUser";
138138
import useSnackbar from "@/helpers/snackbar";
139139
import BaseDialog from "@/components/BaseDialog.vue";
140140
141141
const props = defineProps<{
142142
createUser?: boolean;
143-
user?: IUser;
143+
user?: IAdminUser;
144144
titleCard: string;
145145
}>();
146146
@@ -151,7 +151,7 @@ const disableNamespaceCreation = ref(false);
151151
const maxNamespaces = ref(props.user?.max_namespaces || 0);
152152
const canChangeStatus = props.user?.status === "not-confirmed"; // Only allow changing status if the user is not confirmed
153153
const snackbar = useSnackbar();
154-
const userStore = useUsersStore();
154+
const usersStore = useUsersStore();
155155
const statusTooltipMessage = props.user?.status === "invited"
156156
? "You cannot change the status of an invited user."
157157
: "You cannot remove confirmation from a user.";
@@ -208,7 +208,7 @@ const setMaxNamespaces = () => {
208208
maxNamespaces.value = disableNamespaceCreation.value ? 0 : maxNamespaces.value;
209209
};
210210
211-
const { handleSubmit } = useForm<IUser>();
211+
const { handleSubmit } = useForm<IAdminUser>();
212212
213213
const handleErrors = (error: AxiosError) => {
214214
if (!error.response?.data) return;
@@ -234,14 +234,14 @@ const handleErrors = (error: AxiosError) => {
234234
});
235235
};
236236
237-
const submitUser = async (isCreating: boolean, userData: Record<string, unknown>) => {
237+
const submitUser = async (isCreating: boolean, userData: IAdminUserFormData) => {
238238
try {
239-
const userStoreAction = isCreating ? userStore.addUser : userStore.put;
240-
await userStoreAction(userData);
239+
const usersStoreAction = isCreating ? usersStore.addUser : usersStore.updateUser;
240+
await usersStoreAction(userData);
241241
242242
snackbar.showSuccess(`User ${isCreating ? "added" : "updated"} successfully.`);
243243
244-
await userStore.refresh();
244+
await usersStore.fetchUsersList();
245245
showDialog.value = false;
246246
} catch (error: unknown) {
247247
if (axios.isAxiosError(error)) {
@@ -261,7 +261,7 @@ const getStatus = () => {
261261
return props.user?.status;
262262
};
263263
264-
const prepareUserData = (): Record<string, unknown> => ({
264+
const prepareUserData = () => ({
265265
name: name.value,
266266
email: email.value,
267267
username: username.value,
@@ -270,7 +270,7 @@ const prepareUserData = (): Record<string, unknown> => ({
270270
confirmed: !props.createUser ? isConfirmed.value : undefined,
271271
status: getStatus(),
272272
id: !props.createUser ? props.user?.id : undefined,
273-
});
273+
}) as IAdminUserFormData;
274274
275275
const validateErrors = (): boolean => !nameError.value && !emailError.value && !usernameError.value;
276276

ui/admin/src/components/User/UserList.vue

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,10 @@
6464
<UserResetPassword
6565
v-if="userPrefersSAMLAuthentication(item.preferences.auth_methods)"
6666
:userId="item.id"
67-
@update="refreshUsers"
67+
@update="fetchUsers"
6868
/>
6969

70-
<UserDelete :id="item.id" @update="refreshUsers" />
70+
<UserDelete :id="item.id" />
7171
</td>
7272
</tr>
7373
</template>
@@ -79,7 +79,7 @@
7979
import { computed, onMounted, ref, watch } from "vue";
8080
import { useRouter } from "vue-router";
8181
import useUsersStore from "@admin/store/modules/users";
82-
import { IUser, UserAuthMethods } from "@admin/interfaces/IUser";
82+
import { IAdminUser, UserAuthMethods } from "@admin/interfaces/IUser";
8383
import useAuthStore from "@admin/store/modules/auth";
8484
import useSnackbar from "@/helpers/snackbar";
8585
import DataTable from "@/components/DataTable.vue";
@@ -91,13 +91,13 @@ import handleError from "@/utils/handleError";
9191
9292
const router = useRouter();
9393
const snackbar = useSnackbar();
94-
const userStore = useUsersStore();
94+
const usersStore = useUsersStore();
9595
const authStore = useAuthStore();
9696
const page = ref(1);
9797
const itemsPerPage = ref(10);
9898
const loading = ref(false);
99-
const users = computed(() => userStore.getUsers as unknown as IUser[]);
100-
const userCount = computed(() => userStore.numberUsers);
99+
const users = computed(() => usersStore.users as IAdminUser[]);
100+
const userCount = computed(() => usersStore.usersCount);
101101
const headers = [
102102
{
103103
text: "Name",
@@ -132,7 +132,7 @@ const userPrefersSAMLAuthentication = (authMethods: UserAuthMethods) => (
132132
const fetchUsers = async () => {
133133
try {
134134
loading.value = true;
135-
await userStore.fetch({
135+
await usersStore.fetchUsersList({
136136
perPage: itemsPerPage.value,
137137
page: page.value,
138138
filter: "",
@@ -156,11 +156,7 @@ const loginWithToken = async (userId: string) => {
156156
}
157157
};
158158
159-
const refreshUsers = async () => {
160-
await userStore.refresh();
161-
};
162-
163-
const redirectToUser = async (user: IUser) => {
159+
const redirectToUser = async (user: IAdminUser) => {
164160
router.push({ name: "userDetails", params: { id: user.id } });
165161
};
166162

ui/admin/src/components/User/UserResetPassword.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
</template>
7070

7171
<script setup lang="ts">
72-
import { ref, computed } from "vue";
72+
import { ref } from "vue";
7373
import useUsersStore from "@admin/store/modules/users";
7474
import useSnackbar from "@/helpers/snackbar";
7575
import BaseDialog from "@/components/BaseDialog.vue";
@@ -79,10 +79,10 @@ const props = defineProps<{ userId: string }>();
7979
const emit = defineEmits(["update"]);
8080
8181
const snackbar = useSnackbar();
82-
const userStore = useUsersStore();
82+
const usersStore = useUsersStore();
8383
const showDialog = ref(false);
8484
const step = ref("step-1");
85-
const generatedPassword = computed(() => userStore.generatedPassword);
85+
const generatedPassword = ref("");
8686
8787
const close = () => {
8888
showDialog.value = false;
@@ -99,7 +99,7 @@ const copyText = (value: string | undefined) => {
9999
100100
const proceedToSecondStep = async () => {
101101
try {
102-
await userStore.resetUserPassword(props.userId);
102+
generatedPassword.value = await usersStore.resetUserPassword(props.userId);
103103
step.value = "step-2";
104104
} catch (error) {
105105
snackbar.showError("Failed to reset user password. Please try again.");

ui/admin/src/interfaces/IUser.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ export type UserStatus = "confirmed" | "invited" | "not-confirmed";
22

33
export type UserAuthMethods = Array<"saml" | "local">;
44

5-
export interface IUser {
5+
export interface IAdminUser {
66
id: string;
77
namespaces: number;
88
max_namespaces: number;
@@ -17,3 +17,14 @@ export interface IUser {
1717
auth_methods: UserAuthMethods;
1818
}
1919
}
20+
21+
export interface IAdminUserFormData {
22+
name: string;
23+
email: string;
24+
username: string;
25+
password: string;
26+
max_namespaces?: number;
27+
confirmed?: boolean;
28+
status: UserStatus;
29+
id?: string;
30+
}

ui/admin/src/store/api/users.ts

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
1-
import { IUser } from "@admin/interfaces/IUser";
1+
import { IAdminUserFormData } from "@admin/interfaces/IUser";
22
import { UserAdminRequest } from "@admin/api/client";
33
import { adminApi } from "@admin/api/http";
44

5-
const fetchUsers = async (
6-
perPage: number,
5+
export const fetchUsers = async (
76
page: number,
7+
perPage: number,
88
search?: string,
99
) => adminApi.getUsers(search, page, perPage);
1010

11-
const getUser = (id: string) => adminApi.getUser(id);
11+
export const getUser = (id: string) => adminApi.getUser(id);
1212

13-
const exportUsers = async (filter: string) => adminApi.exportUsers(filter);
13+
export const exportUsers = async (filter: string) => adminApi.exportUsers(filter);
1414

15-
const addUser = (userData: IUser) => adminApi.createUserAdmin({
15+
export const addUser = (userData: IAdminUserFormData) => adminApi.createUserAdmin({
1616
name: userData.name,
1717
email: userData.email,
1818
username: userData.username,
1919
password: userData.password,
2020
max_namespaces: userData.max_namespaces,
2121
});
2222

23-
const putUser = async (id: string, userData: IUser) => adminApi.adminUpdateUser(id, {
23+
export const updateUser = async (id: string, userData: IAdminUserFormData) => adminApi.adminUpdateUser(id, {
2424
name: userData.name,
2525
email: userData.email,
2626
username: userData.username,
@@ -29,8 +29,6 @@ const putUser = async (id: string, userData: IUser) => adminApi.adminUpdateUser(
2929
max_namespaces: userData.max_namespaces,
3030
} as UserAdminRequest);
3131

32-
const resetUserPassword = async (id: string) => adminApi.adminResetUserPassword(id);
33-
34-
const removeUser = (id: string) => adminApi.deleteUser(id);
32+
export const resetUserPassword = async (id: string) => adminApi.adminResetUserPassword(id);
3533

36-
export { fetchUsers, getUser, exportUsers, addUser, putUser, resetUserPassword, removeUser };
34+
export const deleteUser = (id: string) => adminApi.deleteUser(id);

0 commit comments

Comments
 (0)