From 4cabbf7945753b3cb7dc4f2df0accadb254f9239 Mon Sep 17 00:00:00 2001 From: Aleksey <129634706+aleksey2299-1@users.noreply.github.com> Date: Fri, 3 May 2024 02:52:28 +0300 Subject: [PATCH 1/3] Created new mailing page, refactor select component, minor fixes --- .../reducers/ambassadors/model/constants.ts | 4 +- .../reducers/orders/{imdex.ts => index.ts} | 0 src/app/store/reducers/programms/index.ts | 3 + .../programms/model/programmsSlice.ts | 46 +++ src/app/store/store.ts | 4 +- src/entities/Button/types/types.ts | 13 +- src/entities/Button/ui/Button.tsx | 8 +- src/entities/OrderForm/ui/OrderForm.tsx | 2 +- src/entities/OrderMerch/types/types.ts | 1 - src/entities/OrderMerch/ui/OrderMerch.tsx | 62 ++- .../MailingPage/ui/MailingPage.module.scss | 212 ++++++----- src/pages/MailingPage/ui/MailingPage.tsx | 357 ++++++++++++++---- src/pages/NewOrderPage/ui/NewOrderPage.tsx | 18 +- src/shared/Select/types/types.ts | 24 +- src/shared/Select/ui/Select.tsx | 23 +- src/shared/api/ambassadors/dtos.ts | 9 +- src/shared/api/mailing/dtos.ts | 29 ++ src/shared/api/mailing/index.ts | 22 ++ src/shared/api/programms/dtos.ts | 5 + src/shared/api/programms/index.ts | 21 ++ .../NewMailingTable/ui/NewMailingTable.tsx | 117 ++++-- 21 files changed, 695 insertions(+), 285 deletions(-) rename src/app/store/reducers/orders/{imdex.ts => index.ts} (100%) create mode 100644 src/app/store/reducers/programms/index.ts create mode 100644 src/app/store/reducers/programms/model/programmsSlice.ts create mode 100644 src/shared/api/mailing/dtos.ts create mode 100644 src/shared/api/mailing/index.ts create mode 100644 src/shared/api/programms/dtos.ts create mode 100644 src/shared/api/programms/index.ts diff --git a/src/app/store/reducers/ambassadors/model/constants.ts b/src/app/store/reducers/ambassadors/model/constants.ts index 782f40d6..bb7f4c0f 100644 --- a/src/app/store/reducers/ambassadors/model/constants.ts +++ b/src/app/store/reducers/ambassadors/model/constants.ts @@ -10,13 +10,13 @@ const initialAmbassador: IAmbassadorById = { tg_acc: '', status: 'Active', created: '', - gender: '', + gender: 'Male', phone: '', email: '', purpose: '', education: '', work: '', - achievement: '', + achievement: 'new', address: { country: '', city: '', diff --git a/src/app/store/reducers/orders/imdex.ts b/src/app/store/reducers/orders/index.ts similarity index 100% rename from src/app/store/reducers/orders/imdex.ts rename to src/app/store/reducers/orders/index.ts diff --git a/src/app/store/reducers/programms/index.ts b/src/app/store/reducers/programms/index.ts new file mode 100644 index 00000000..4fbc6370 --- /dev/null +++ b/src/app/store/reducers/programms/index.ts @@ -0,0 +1,3 @@ +import programmsReducer from './model/programmsSlice'; + +export { programmsReducer }; diff --git a/src/app/store/reducers/programms/model/programmsSlice.ts b/src/app/store/reducers/programms/model/programmsSlice.ts new file mode 100644 index 00000000..4ec9c0b4 --- /dev/null +++ b/src/app/store/reducers/programms/model/programmsSlice.ts @@ -0,0 +1,46 @@ +import { createSlice } from '@reduxjs/toolkit'; + +import { + getMerchAmbassadorsHistory, + getMerchTypes, +} from 'src/shared/api/merch'; +import { getProgramms } from 'src/shared/api/programms'; +import { TProgramm } from 'src/shared/api/programms/dtos'; + +interface IProgrammsState { + programms: TProgramm[]; + isLoading: boolean; + error: string | unknown | null; +} + +const initialState: IProgrammsState = { + programms: [], + isLoading: false, + error: null, +}; + +const programmsSlice = createSlice({ + name: 'programms', + initialState, + reducers: {}, + extraReducers: builder => { + builder + .addCase(getProgramms.fulfilled, (state, action) => { + state.isLoading = false; + state.error = null; + state.programms = action.payload; + }) + .addCase(getProgramms.pending, state => { + state.isLoading = true; + }) + .addCase(getProgramms.rejected, (state, action) => { + state.isLoading = false; + state.error = action.payload; + }); + }, +}); + +export const selectProgramms = (state: { programms: IProgrammsState }) => + state.programms; + +export default programmsSlice.reducer; diff --git a/src/app/store/store.ts b/src/app/store/store.ts index c4ca3f4c..1f3d2d4b 100644 --- a/src/app/store/store.ts +++ b/src/app/store/store.ts @@ -3,11 +3,12 @@ import { ambassadorsReducer } from './reducers/ambassadors'; import { contentsReducer } from './reducers/contents'; import { merchReducer } from './reducers/merch'; import { promocodesReducer } from './reducers/promocodes'; -import { ordersReducer } from './reducers/orders/imdex'; +import { ordersReducer } from './reducers/orders'; import { questionnaireReducer } from './reducers/questionnaire'; import { notificationsReducer } from './reducers/notifications'; import { modalReducer } from './reducers/modal'; import { userReducer } from './reducers/user'; +import { programmsReducer } from './reducers/programms'; export const store = configureStore({ reducer: { @@ -20,6 +21,7 @@ export const store = configureStore({ questionnaire: questionnaireReducer, modal: modalReducer, user: userReducer, + programms: programmsReducer, }, }); diff --git a/src/entities/Button/types/types.ts b/src/entities/Button/types/types.ts index 3c3c5d56..b412e380 100644 --- a/src/entities/Button/types/types.ts +++ b/src/entities/Button/types/types.ts @@ -1,8 +1,9 @@ -interface ButtonProps { - label: string, - width: number, - height: number, - onClick: React.MouseEventHandler, +import { ButtonProps } from '@mui/material'; + +interface AppButtonProps extends ButtonProps { + label: string; + width: number; + height: number; } -export type { ButtonProps } \ No newline at end of file +export type { AppButtonProps }; diff --git a/src/entities/Button/ui/Button.tsx b/src/entities/Button/ui/Button.tsx index e2708d61..35934069 100644 --- a/src/entities/Button/ui/Button.tsx +++ b/src/entities/Button/ui/Button.tsx @@ -1,15 +1,15 @@ import type { FC } from 'react'; import Button from '@mui/material/Button'; -import type { ButtonProps } from '../types/types'; +import type { AppButtonProps } from '../types/types'; -const ButtonComponent: FC = ({ +const ButtonComponent: FC = ({ width, height, label, - onClick, + ...props }) => (