import { createSlice, PayloadAction } from '@reduxjs/toolkit'; import { SessionConfirmDialogProps } from '../../components/dialog/SessionConfirm'; import { PasswordAction } from '../../components/dialog/SessionPasswordDialog'; import { EditProfilePictureModalProps } from '../../components/dialog/EditProfilePictureModal'; import { Noop } from '../../types/Util'; export type BanType = 'ban' | 'unban'; export type ConfirmModalState = SessionConfirmDialogProps | null; export type InviteContactModalState = { conversationId: string } | null; export type BanOrUnbanUserModalState = { conversationId: string; banType: BanType; pubkey?: string; } | null; export type AddModeratorsModalState = InviteContactModalState; export type RemoveModeratorsModalState = InviteContactModalState; export type UpdateGroupMembersModalState = InviteContactModalState; export type UpdateGroupNameModalState = InviteContactModalState; export type ChangeNickNameModalState = InviteContactModalState; export type AdminLeaveClosedGroupModalState = InviteContactModalState; export type EditProfileModalState = object | null; export type OnionPathModalState = EditProfileModalState; export type RecoveryPhraseModalState = EditProfileModalState; export type DeleteAccountModalState = EditProfileModalState; export type SessionPasswordModalState = { passwordAction: PasswordAction; onOk: Noop } | null; export type UserDetailsModalState = { conversationId: string; authorAvatarPath: string | null; userName: string; } | null; export type ReactModalsState = { reaction: string; messageId: string; } | null; export type EditProfilePictureModalState = EditProfilePictureModalProps | null; export type ModalState = { confirmModal: ConfirmModalState; inviteContactModal: InviteContactModalState; banOrUnbanUserModal: BanOrUnbanUserModalState; removeModeratorsModal: RemoveModeratorsModalState; addModeratorsModal: AddModeratorsModalState; groupNameModal: UpdateGroupNameModalState; groupMembersModal: UpdateGroupMembersModalState; userDetailsModal: UserDetailsModalState; nickNameModal: ChangeNickNameModalState; editProfileModal: EditProfileModalState; onionPathModal: OnionPathModalState; recoveryPhraseModal: RecoveryPhraseModalState; adminLeaveClosedGroup: AdminLeaveClosedGroupModalState; sessionPasswordModal: SessionPasswordModalState; deleteAccountModal: DeleteAccountModalState; reactListModalState: ReactModalsState; reactClearAllModalState: ReactModalsState; editProfilePictureModalState: EditProfilePictureModalState; }; export const initialModalState: ModalState = { confirmModal: null, inviteContactModal: null, addModeratorsModal: null, removeModeratorsModal: null, banOrUnbanUserModal: null, groupNameModal: null, groupMembersModal: null, userDetailsModal: null, nickNameModal: null, editProfileModal: null, onionPathModal: null, recoveryPhraseModal: null, adminLeaveClosedGroup: null, sessionPasswordModal: null, deleteAccountModal: null, reactListModalState: null, reactClearAllModalState: null, editProfilePictureModalState: null, }; const ModalSlice = createSlice({ name: 'modals', initialState: initialModalState, reducers: { updateConfirmModal(state, action: PayloadAction) { return { ...state, confirmModal: action.payload }; }, updateInviteContactModal(state, action: PayloadAction) { return { ...state, inviteContactModal: action.payload }; }, updateBanOrUnbanUserModal(state, action: PayloadAction) { return { ...state, banOrUnbanUserModal: action.payload }; }, updateAddModeratorsModal(state, action: PayloadAction) { return { ...state, addModeratorsModal: action.payload }; }, updateRemoveModeratorsModal(state, action: PayloadAction) { return { ...state, removeModeratorsModal: action.payload }; }, updateGroupNameModal(state, action: PayloadAction) { return { ...state, groupNameModal: action.payload }; }, updateGroupMembersModal(state, action: PayloadAction) { return { ...state, groupMembersModal: action.payload }; }, updateUserDetailsModal(state, action: PayloadAction) { return { ...state, userDetailsModal: action.payload }; }, changeNickNameModal(state, action: PayloadAction) { return { ...state, nickNameModal: action.payload }; }, editProfileModal(state, action: PayloadAction) { return { ...state, editProfileModal: action.payload }; }, onionPathModal(state, action: PayloadAction) { return { ...state, onionPathModal: action.payload }; }, recoveryPhraseModal(state, action: PayloadAction) { return { ...state, recoveryPhraseModal: action.payload }; }, adminLeaveClosedGroup(state, action: PayloadAction) { return { ...state, adminLeaveClosedGroup: action.payload }; }, sessionPassword(state, action: PayloadAction) { return { ...state, sessionPasswordModal: action.payload }; }, updateDeleteAccountModal(state, action: PayloadAction) { return { ...state, deleteAccountModal: action.payload }; }, updateReactListModal(state, action: PayloadAction) { return { ...state, reactListModalState: action.payload }; }, updateReactClearAllModal(state, action: PayloadAction) { return { ...state, reactClearAllModalState: action.payload }; }, updateEditProfilePictureModel(state, action: PayloadAction) { return { ...state, editProfilePictureModalState: action.payload }; }, }, }); export const { actions, reducer } = ModalSlice; export const { updateConfirmModal, updateInviteContactModal, updateAddModeratorsModal, updateRemoveModeratorsModal, updateGroupNameModal, updateGroupMembersModal, updateUserDetailsModal, changeNickNameModal, editProfileModal, onionPathModal, recoveryPhraseModal, adminLeaveClosedGroup, sessionPassword, updateDeleteAccountModal, updateBanOrUnbanUserModal, updateReactListModal, updateReactClearAllModal, updateEditProfilePictureModel, } = actions; export const modalReducer = reducer;