## 概要 [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) ## クエリの変更 - なし ## 動作確認状況 - ローカルで確認 - 行った修正がデグレを発生させていないことを確認できるか - 新規機能なので問題なし
192 lines
5.6 KiB
TypeScript
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;
|