## 概要 [Task3506: テスト対応](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/3506) - ライセンスが割り当たっている状態の表示をLicense Assignedにする - ライセンスの期限切れ状態の表示をNo Licenseとする - ヘッダーのOMDSCloudの表記を削除 ## レビューポイント - 修正内容に不足はないか - 修正の認識ずれはないか - ほかに修正が影響している箇所はないか ## UIの変更 - https://ndstokyo.sharepoint.com/:f:/r/sites/Piranha/Shared%20Documents/General/OMDS/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88/Task3506?csf=1&web=1&e=g2Hkr3 ## 動作確認状況 - ローカルで確認 ## 補足 - 相談、参考資料などがあれば
323 lines
10 KiB
TypeScript
323 lines
10 KiB
TypeScript
import { PayloadAction, createSlice } from "@reduxjs/toolkit";
|
|
import { USER_ROLES } from "components/auth/constants";
|
|
import { UsersState } from "./state";
|
|
import {
|
|
addUserAsync,
|
|
listUsersAsync,
|
|
updateUserAsync,
|
|
getAllocatableLicensesAsync,
|
|
deallocateLicenseAsync,
|
|
} from "./operations";
|
|
import { RoleType, UserView } from "./types";
|
|
|
|
const initialState: UsersState = {
|
|
domain: { users: [], allocatableLicenses: [] },
|
|
apps: {
|
|
updateUser: {
|
|
id: 0,
|
|
name: "",
|
|
email: "",
|
|
role: USER_ROLES.NONE,
|
|
authorId: undefined,
|
|
encryption: undefined,
|
|
encryptionPassword: undefined,
|
|
prompt: undefined,
|
|
autoRenew: true,
|
|
notification: true,
|
|
},
|
|
selectedUser: {
|
|
id: 0,
|
|
name: "",
|
|
email: "",
|
|
role: USER_ROLES.NONE,
|
|
authorId: undefined,
|
|
encryption: undefined,
|
|
encryptionPassword: undefined,
|
|
prompt: undefined,
|
|
autoRenew: true,
|
|
notification: true,
|
|
},
|
|
addUser: {
|
|
name: "",
|
|
role: USER_ROLES.NONE,
|
|
email: "",
|
|
autoRenew: true,
|
|
notification: true,
|
|
authorId: undefined,
|
|
encryption: false,
|
|
prompt: false,
|
|
encryptionPassword: undefined,
|
|
},
|
|
licenseAllocateUser: {
|
|
id: 0,
|
|
name: "",
|
|
email: "",
|
|
authorId: "",
|
|
licenseStatus: "",
|
|
expiration: undefined,
|
|
remaining: undefined,
|
|
},
|
|
selectedlicenseId: 0,
|
|
hasPasswordMask: false,
|
|
isLoading: false,
|
|
},
|
|
};
|
|
|
|
export const userSlice = createSlice({
|
|
name: "user",
|
|
initialState,
|
|
reducers: {
|
|
changeName: (state, action: PayloadAction<{ name: string }>) => {
|
|
const { name } = action.payload;
|
|
state.apps.addUser.name = name;
|
|
},
|
|
changeEmail: (state, action: PayloadAction<{ email: string }>) => {
|
|
const { email } = action.payload;
|
|
state.apps.addUser.email = email;
|
|
},
|
|
changeRole: (state, action: PayloadAction<{ role: RoleType }>) => {
|
|
const { role } = action.payload;
|
|
state.apps.addUser.role = role;
|
|
},
|
|
changeAuthorId: (
|
|
state,
|
|
action: PayloadAction<{ authorId: string | undefined }>
|
|
) => {
|
|
const { authorId } = action.payload;
|
|
state.apps.addUser.authorId = authorId?.toUpperCase();
|
|
},
|
|
changeAutoRenew: (state, action: PayloadAction<{ autoRenew: boolean }>) => {
|
|
const { autoRenew } = action.payload;
|
|
state.apps.addUser.autoRenew = autoRenew;
|
|
},
|
|
changeEncryption: (
|
|
state,
|
|
action: PayloadAction<{ encryption: boolean }>
|
|
) => {
|
|
const { encryption } = action.payload;
|
|
state.apps.addUser.encryption = encryption;
|
|
if (!encryption) {
|
|
state.apps.addUser.encryptionPassword = undefined;
|
|
}
|
|
},
|
|
changePrompt: (state, action: PayloadAction<{ prompt: boolean }>) => {
|
|
const { prompt } = action.payload;
|
|
state.apps.addUser.prompt = prompt;
|
|
},
|
|
changeEncryptionPassword: (
|
|
state,
|
|
action: PayloadAction<{ encryptionPassword: string }>
|
|
) => {
|
|
const { encryptionPassword } = action.payload;
|
|
state.apps.addUser.encryptionPassword = encryptionPassword;
|
|
},
|
|
changeNotification: (
|
|
state,
|
|
action: PayloadAction<{ notification: boolean }>
|
|
) => {
|
|
const { notification } = action.payload;
|
|
state.apps.addUser.notification = notification;
|
|
},
|
|
cleanupAddUser: (state) => {
|
|
state.apps.addUser = initialState.apps.addUser;
|
|
},
|
|
changeUpdateUser: (state, action: PayloadAction<{ id: number }>) => {
|
|
const { id } = action.payload;
|
|
|
|
const user = state.domain.users.find((x) => x.id === id);
|
|
|
|
if (!user) {
|
|
return;
|
|
}
|
|
|
|
state.apps.updateUser.id = user.id;
|
|
state.apps.updateUser.name = user.name;
|
|
state.apps.updateUser.email = user.email;
|
|
state.apps.updateUser.role = user.role as RoleType;
|
|
state.apps.updateUser.authorId = user.authorId?.toUpperCase();
|
|
state.apps.updateUser.encryption = user.encryption;
|
|
state.apps.updateUser.encryptionPassword = undefined;
|
|
state.apps.updateUser.prompt = user.prompt;
|
|
state.apps.updateUser.autoRenew = user.autoRenew;
|
|
state.apps.updateUser.notification = user.notification;
|
|
|
|
state.apps.selectedUser.id = user.id;
|
|
state.apps.selectedUser.name = user.name;
|
|
state.apps.selectedUser.email = user.email;
|
|
state.apps.selectedUser.role = user.role as RoleType;
|
|
state.apps.selectedUser.authorId = user.authorId?.toUpperCase();
|
|
state.apps.selectedUser.encryption = user.encryption;
|
|
state.apps.selectedUser.encryptionPassword = undefined;
|
|
state.apps.selectedUser.prompt = user.prompt;
|
|
state.apps.selectedUser.autoRenew = user.autoRenew;
|
|
state.apps.selectedUser.notification = user.notification;
|
|
|
|
state.apps.hasPasswordMask = user.encryption;
|
|
},
|
|
changeUpdateRole: (state, action: PayloadAction<{ role: RoleType }>) => {
|
|
const { role } = action.payload;
|
|
state.apps.updateUser.role = role;
|
|
},
|
|
changeUpdateAuthorId: (
|
|
state,
|
|
action: PayloadAction<{ authorId: string }>
|
|
) => {
|
|
const { authorId } = action.payload;
|
|
state.apps.updateUser.authorId = authorId.toUpperCase();
|
|
},
|
|
changeUpdateEncryption: (
|
|
state,
|
|
action: PayloadAction<{ encryption: boolean }>
|
|
) => {
|
|
const { encryption } = action.payload;
|
|
state.apps.updateUser.encryption = encryption;
|
|
const initEncryption = state.apps.selectedUser.encryption;
|
|
const password = state.apps.updateUser.encryptionPassword;
|
|
|
|
if (initEncryption && encryption && !password) {
|
|
state.apps.hasPasswordMask = true;
|
|
}
|
|
if (!encryption) {
|
|
state.apps.updateUser.encryptionPassword = undefined;
|
|
}
|
|
},
|
|
changeUpdateEncryptionPassword: (
|
|
state,
|
|
action: PayloadAction<{ encryptionPassword: string }>
|
|
) => {
|
|
const { encryptionPassword } = action.payload;
|
|
state.apps.updateUser.encryptionPassword = encryptionPassword;
|
|
},
|
|
changeUpdatePrompt: (state, action: PayloadAction<{ prompt: boolean }>) => {
|
|
const { prompt } = action.payload;
|
|
state.apps.updateUser.prompt = prompt;
|
|
},
|
|
changeUpdateAutoRenew: (
|
|
state,
|
|
action: PayloadAction<{ autoRenew: boolean }>
|
|
) => {
|
|
const { autoRenew } = action.payload;
|
|
state.apps.updateUser.autoRenew = autoRenew;
|
|
},
|
|
changeUpdateNotification: (
|
|
state,
|
|
action: PayloadAction<{ notification: boolean }>
|
|
) => {
|
|
const { notification } = action.payload;
|
|
state.apps.updateUser.notification = notification;
|
|
},
|
|
changeHasPasswordMask: (
|
|
state,
|
|
action: PayloadAction<{ hasPasswordMask: boolean }>
|
|
) => {
|
|
const { hasPasswordMask } = action.payload;
|
|
state.apps.hasPasswordMask = hasPasswordMask;
|
|
},
|
|
cleanupUpdateUser: (state) => {
|
|
state.apps.updateUser = initialState.apps.updateUser;
|
|
},
|
|
changeLicenseAllocateUser: (
|
|
state,
|
|
action: PayloadAction<{ selectedUser: UserView }>
|
|
) => {
|
|
const { selectedUser } = action.payload;
|
|
state.apps.licenseAllocateUser.id = selectedUser.id;
|
|
state.apps.licenseAllocateUser.name = selectedUser.name;
|
|
state.apps.licenseAllocateUser.email = selectedUser.email;
|
|
state.apps.licenseAllocateUser.authorId =
|
|
selectedUser.authorId.toUpperCase();
|
|
state.apps.licenseAllocateUser.licenseStatus = selectedUser.licenseStatus;
|
|
state.apps.licenseAllocateUser.expiration = selectedUser.expiration;
|
|
state.apps.licenseAllocateUser.remaining = selectedUser.remaining;
|
|
},
|
|
changeSelectedlicenseId: (
|
|
state,
|
|
action: PayloadAction<{ selectedlicenseId: number }>
|
|
) => {
|
|
const { selectedlicenseId } = action.payload;
|
|
state.apps.selectedlicenseId = selectedlicenseId;
|
|
},
|
|
cleanupLicenseAllocateInfo: (state) => {
|
|
state.apps.licenseAllocateUser = initialState.apps.licenseAllocateUser;
|
|
state.apps.selectedlicenseId = initialState.apps.selectedlicenseId;
|
|
},
|
|
},
|
|
extraReducers: (builder) => {
|
|
builder.addCase(listUsersAsync.pending, (state) => {
|
|
state.apps.isLoading = true;
|
|
});
|
|
builder.addCase(listUsersAsync.fulfilled, (state, action) => {
|
|
state.domain.users = action.payload.users;
|
|
state.apps.isLoading = false;
|
|
});
|
|
builder.addCase(listUsersAsync.rejected, (state) => {
|
|
state.apps.isLoading = false;
|
|
});
|
|
builder.addCase(addUserAsync.pending, (state) => {
|
|
state.apps.isLoading = true;
|
|
});
|
|
builder.addCase(addUserAsync.fulfilled, (state) => {
|
|
state.apps.isLoading = false;
|
|
});
|
|
builder.addCase(addUserAsync.rejected, (state) => {
|
|
state.apps.isLoading = false;
|
|
});
|
|
builder.addCase(updateUserAsync.pending, (state) => {
|
|
state.apps.isLoading = true;
|
|
});
|
|
builder.addCase(updateUserAsync.fulfilled, (state) => {
|
|
state.apps.isLoading = false;
|
|
});
|
|
builder.addCase(updateUserAsync.rejected, (state) => {
|
|
state.apps.isLoading = false;
|
|
});
|
|
builder.addCase(getAllocatableLicensesAsync.pending, (state) => {
|
|
state.apps.isLoading = true;
|
|
});
|
|
builder.addCase(getAllocatableLicensesAsync.fulfilled, (state, action) => {
|
|
state.domain.allocatableLicenses = action.payload.allocatableLicenses;
|
|
state.apps.isLoading = false;
|
|
});
|
|
builder.addCase(getAllocatableLicensesAsync.rejected, (state) => {
|
|
state.apps.isLoading = false;
|
|
});
|
|
builder.addCase(deallocateLicenseAsync.pending, (state) => {
|
|
state.apps.isLoading = true;
|
|
});
|
|
builder.addCase(deallocateLicenseAsync.fulfilled, (state) => {
|
|
state.apps.isLoading = false;
|
|
});
|
|
builder.addCase(deallocateLicenseAsync.rejected, (state) => {
|
|
state.apps.isLoading = false;
|
|
});
|
|
},
|
|
});
|
|
|
|
export const {
|
|
changeName,
|
|
changeEmail,
|
|
changeRole,
|
|
changeAuthorId,
|
|
changeAutoRenew,
|
|
changeNotification,
|
|
cleanupAddUser,
|
|
changeUpdateUser,
|
|
changeUpdateRole,
|
|
changeUpdateAuthorId,
|
|
changeUpdateEncryption,
|
|
changeUpdateEncryptionPassword,
|
|
changeUpdatePrompt,
|
|
changeUpdateAutoRenew,
|
|
changeUpdateNotification,
|
|
cleanupUpdateUser,
|
|
changeEncryption,
|
|
changePrompt,
|
|
changeEncryptionPassword,
|
|
changeHasPasswordMask,
|
|
changeLicenseAllocateUser,
|
|
changeSelectedlicenseId,
|
|
cleanupLicenseAllocateInfo,
|
|
} = userSlice.actions;
|
|
|
|
export default userSlice.reducer;
|