makabe.t e6d6e477d9 Merged PR 862: パートナー一覧画面&パートナー編集ポップアップ実装
## 概要
[Task3935: パートナー一覧画面&パートナー編集ポップアップ実装](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/3935)

- パートナー一覧画面からパートナー編集ポップアップを表示して情報を変更できる画面実装をしています。

## レビューポイント
- エラーの表示は適切でしょうか?
- 画面イメージは認識通りでしょうか?

## UIの変更
- [Task3935](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/Task3935?csf=1&web=1&e=FdaUMT)

## クエリの変更
- なし
## 動作確認状況
- ローカルで確認
- 行った修正がデグレを発生させていないことを確認できるか
  - 新規機能なので問題なし
2024-04-08 07:41:05 +00:00

192 lines
5.6 KiB
TypeScript

import { createSlice, PayloadAction } from "@reduxjs/toolkit";
import { PartnerState } from "./state";
import {
createPartnerAccountAsync,
getPartnerInfoAsync,
deletePartnerAccountAsync,
getPartnerUsersAsync,
editPartnerInfoAsync,
} from "./operations";
import { LIMIT_PARTNER_VIEW_NUM } from "./constants";
const initialState: PartnerState = {
domain: {
getPartnersInfo: {
total: 0,
partners: [],
},
},
apps: {
addPartner: {
companyName: "",
country: "",
adminName: "",
email: "",
},
editPartner: {
users: [],
id: 0,
companyName: "",
country: "",
selectedAdminId: 0,
},
limit: LIMIT_PARTNER_VIEW_NUM,
offset: 0,
isLoading: false,
},
};
export const partnerSlice = createSlice({
name: "partner",
initialState,
reducers: {
changeCompany: (state, action: PayloadAction<{ company: string }>) => {
const { company } = action.payload;
state.apps.addPartner.companyName = company;
},
changeCountry: (state, action: PayloadAction<{ country: string }>) => {
const { country } = action.payload;
state.apps.addPartner.country = country;
},
changeAdminName: (state, action: PayloadAction<{ adminName: string }>) => {
const { adminName } = action.payload;
state.apps.addPartner.adminName = adminName;
},
changeEmail: (state, action: PayloadAction<{ email: string }>) => {
const { email } = action.payload;
state.apps.addPartner.email = email;
},
cleanupAddPartner: (state) => {
state.apps.addPartner = initialState.apps.addPartner;
},
cleanupApps: (state) => {
state.domain = initialState.domain;
},
savePageInfo: (
state,
action: PayloadAction<{
limit: number;
offset: number;
}>
) => {
const { limit, offset } = action.payload;
state.apps.limit = limit;
state.apps.offset = offset;
},
changeDelegateAccount: (
state,
action: PayloadAction<{
delegatedAccountId?: number;
delegatedCompanyName?: string;
}>
) => {
const { delegatedAccountId, delegatedCompanyName } = action.payload;
state.apps.delegatedAccountId = delegatedAccountId;
state.apps.delegatedCompanyName = delegatedCompanyName;
},
cleanupDelegateAccount: (state) => {
state.apps.delegatedAccountId = undefined;
state.apps.delegatedCompanyName = undefined;
},
changeEditPartner: (
state,
action: PayloadAction<{
id: number;
companyName: string;
country: string;
}>
) => {
const { id, companyName, country } = action.payload;
state.apps.editPartner.id = id;
state.apps.editPartner.companyName = companyName;
state.apps.editPartner.country = country;
},
changeEditCompanyName: (
state,
action: PayloadAction<{ companyName: string }>
) => {
const { companyName } = action.payload;
state.apps.editPartner.companyName = companyName;
},
changeSelectedAdminId: (
state,
action: PayloadAction<{ adminId: number }>
) => {
const { adminId } = action.payload;
state.apps.editPartner.selectedAdminId = adminId;
},
cleanupPartnerAccount: (state) => {
state.apps.editPartner = initialState.apps.editPartner;
},
},
extraReducers: (builder) => {
builder.addCase(createPartnerAccountAsync.pending, (state) => {
state.apps.isLoading = true;
});
builder.addCase(createPartnerAccountAsync.fulfilled, (state) => {
state.apps.isLoading = false;
});
builder.addCase(createPartnerAccountAsync.rejected, (state) => {
state.apps.isLoading = false;
});
builder.addCase(getPartnerInfoAsync.pending, (state) => {
state.apps.isLoading = true;
});
builder.addCase(getPartnerInfoAsync.fulfilled, (state, action) => {
state.domain.getPartnersInfo.total = action.payload.total;
state.domain.getPartnersInfo.partners = action.payload.partners;
state.apps.isLoading = false;
});
builder.addCase(getPartnerInfoAsync.rejected, (state) => {
state.apps.isLoading = false;
});
builder.addCase(deletePartnerAccountAsync.pending, (state) => {
state.apps.isLoading = true;
});
builder.addCase(deletePartnerAccountAsync.fulfilled, (state) => {
state.apps.isLoading = false;
});
builder.addCase(deletePartnerAccountAsync.rejected, (state) => {
state.apps.isLoading = false;
});
builder.addCase(getPartnerUsersAsync.pending, (state) => {
state.apps.isLoading = true;
});
builder.addCase(getPartnerUsersAsync.fulfilled, (state, action) => {
const { users } = action.payload;
state.apps.editPartner.users = users;
state.apps.editPartner.selectedAdminId =
users.find((user) => user.isPrimaryAdmin)?.id ?? 0;
state.apps.isLoading = false;
});
builder.addCase(getPartnerUsersAsync.rejected, (state) => {
state.apps.isLoading = false;
});
builder.addCase(editPartnerInfoAsync.pending, (state) => {
state.apps.isLoading = true;
});
builder.addCase(editPartnerInfoAsync.fulfilled, (state) => {
state.apps.isLoading = false;
});
builder.addCase(editPartnerInfoAsync.rejected, (state) => {
state.apps.isLoading = false;
});
},
});
export const {
changeEmail,
changeAdminName,
changeCompany,
changeCountry,
cleanupAddPartner,
savePageInfo,
changeDelegateAccount,
cleanupDelegateAccount,
changeEditPartner,
changeEditCompanyName,
changeSelectedAdminId,
cleanupPartnerAccount,
} = partnerSlice.actions;
export default partnerSlice.reducer;