Skip to content

Commit

Permalink
fix: made Group Chat Modal More Persistent (#1339)
Browse files Browse the repository at this point in the history
* fix: made Group Chat Modal More Persistent

Modal in the group chat has been modified and now it doesn't close on the clickaway triggered. Also,
added a boolean prop to make it go away when the clickaway is triggered

#1338

* fix: prop issue fixed for UpdateUserProfileModal file as well

* fix: added closeModalOnClickAway to ChatView and UserProfile component

* fix: changed the name of the Modal ClickAway in Group Info and User Profile

* fix: changed the name of modal clickaway prop for user profile and chat profile
  • Loading branch information
abhishek-01k authored Jul 2, 2024
1 parent 484f95d commit 7866a3d
Show file tree
Hide file tree
Showing 8 changed files with 34 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ export interface IChatProfileUserInfo {
// Exported Functions
export const ChatProfile: React.FC<IChatProfile> = ({
chatId,
closeChatProfileInfoModalOnClickAway,
groupInfoModalBackground = MODAL_BACKGROUND_TYPE.OVERLAY,
groupInfoModalPositionType = MODAL_POSITION_TYPE.GLOBAL,
chatProfileRightHelperComponent = null,
Expand Down Expand Up @@ -335,6 +336,7 @@ export const ChatProfile: React.FC<IChatProfile> = ({
<GroupInfoModal
theme={theme}
setModal={setModal}
closeModalOnClickAway={closeChatProfileInfoModalOnClickAway}
groupInfo={initialized.groupInfo!}
chatProfileInfo={initialized.profile}
setGroupInfo={(mutatedGroupInfo) =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@ type GroupSectionProps = GroupInfoModalProps & {
type GroupInfoModalProps = {
theme: IChatTheme;
setModal: React.Dispatch<React.SetStateAction<boolean>>;
closeModalOnClickAway?: boolean;
groupInfo: Group;
setGroupInfo: React.Dispatch<React.SetStateAction<Group | null>>;
chatProfileInfo?: IChatProfileUserInfo;
Expand Down Expand Up @@ -461,6 +462,7 @@ const GroupInformation = ({
export const GroupInfoModal = ({
theme,
setModal,
closeModalOnClickAway,
setGroupInfo,
groupInfo,
chatProfileInfo,
Expand Down Expand Up @@ -927,7 +929,8 @@ export const GroupInfoModal = ({
if (chatProfileInfo) {
return (
<Modal
clickawayClose={onClose}
onClose={onClose}
closeonClickAway={closeModalOnClickAway}
modalBackground={groupInfoModalBackground}
modalPositionType={groupInfoModalPositionType}
>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ export const ChatViewComponent: React.FC<IChatViewComponentProps> = (options: IC
chatProfileRightHelperComponent = null,
chatProfileLeftHelperComponent = null,
welcomeComponent = null,
closeChatProfileInfoModalOnClickAway = false
} = options || {};

const { user } = useChatData();
Expand Down Expand Up @@ -109,6 +110,7 @@ export const ChatViewComponent: React.FC<IChatViewComponentProps> = (options: IC
>
<ChatProfile
key={chatId}
closeChatProfileInfoModalOnClickAway={closeChatProfileInfoModalOnClickAway}
chatProfileRightHelperComponent={chatProfileRightHelperComponent}
chatProfileLeftHelperComponent={chatProfileLeftHelperComponent}
chatId={initialized.derivedChatId}
Expand Down Expand Up @@ -170,12 +172,12 @@ export const ChatViewComponent: React.FC<IChatViewComponentProps> = (options: IC
};

//styles
const Conatiner = styled(Section)<IThemeProps>`
const Conatiner = styled(Section) <IThemeProps>`
border: ${(props) => props.theme.border?.chatViewComponent};
box-sizing: border-box;
`;

const ChatViewSection = styled(Section)<IThemeProps>`
const ChatViewSection = styled(Section) <IThemeProps>`
@media (${device.mobileL}) {
margin: 0;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ export interface GroupInputDetailsType {

export const CreateGroupModal: React.FC<CreateGroupModalProps> = ({
onClose,
closeModalOnClickAway = false,
modalBackground = MODAL_BACKGROUND_TYPE.OVERLAY,
modalPositionType = MODAL_POSITION_TYPE.GLOBAL,
onSuccess,
Expand Down Expand Up @@ -257,7 +258,8 @@ export const CreateGroupModal: React.FC<CreateGroupModalProps> = ({

return (
<Modal
clickawayClose={onClose}
onClose={onClose} // onClose function to close the modal
closeonClickAway={closeModalOnClickAway} // boolean to handle the onClick activity of the user
modalBackground={modalBackground}
modalPositionType={modalPositionType}
>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ type UpdateUserProfileModalProps = {
userProfile: IUser;
setUserProfile: React.Dispatch<React.SetStateAction<IUser | undefined>>;
setModal: React.Dispatch<React.SetStateAction<boolean>>;
closeUserProfileModalOnClickAway?: boolean;
updateUserProfileModalBackground?: ModalBackgroundType;
updateUserProfileModalPositionType?: ModalPositionType;
};
Expand All @@ -33,6 +34,7 @@ export interface UserProfileType {
export const UpdateUserProfileModal = ({
theme,
setModal,
closeUserProfileModalOnClickAway,
userProfile,
setUserProfile,
updateUserProfileModalBackground = MODAL_BACKGROUND_TYPE.OVERLAY,
Expand Down Expand Up @@ -161,7 +163,8 @@ export const UpdateUserProfileModal = ({

return (
<Modal
clickawayClose={onClose}
onClose={onClose}
closeonClickAway={closeUserProfileModalOnClickAway}
modalBackground={updateUserProfileModalBackground}
modalPositionType={updateUserProfileModalPositionType}
>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ export const UserProfile: React.FC<UserProfileProps> = ({
updateUserProfileModalBackground = MODAL_BACKGROUND_TYPE.OVERLAY,
updateUserProfileModalPositionType = MODAL_POSITION_TYPE.GLOBAL,
onUserProfileUpdateModalOpen,
closeUserProfileModalOnClickAway = false
}) => {
const { user } = useChatData();
const [userProfile, setUserProfile] = useState<IUser>();
Expand Down Expand Up @@ -143,6 +144,7 @@ export const UserProfile: React.FC<UserProfileProps> = ({
<UpdateUserProfileModal
theme={theme}
setModal={setShowUpdateUserProfileModal}
closeUserProfileModalOnClickAway={closeUserProfileModalOnClickAway}
userProfile={userProfile!}
setUserProfile={setUserProfile}
updateUserProfileModalBackground={updateUserProfileModalBackground}
Expand All @@ -155,7 +157,7 @@ export const UserProfile: React.FC<UserProfileProps> = ({
};

//styles
const Conatiner = styled(Section)<IThemeProps>`
const Conatiner = styled(Section) <IThemeProps>`
border: ${(props) => props.theme.border?.userProfile};
box-sizing: border-box;
`;
Expand Down
4 changes: 4 additions & 0 deletions packages/uiweb/src/lib/components/chat/exportedTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,12 @@ export interface IChatViewComponentProps {
chatProfileRightHelperComponent?: React.ReactNode;
chatProfileLeftHelperComponent?: React.ReactNode;
welcomeComponent?: React.ReactNode;
closeChatProfileInfoModalOnClickAway?: boolean;
}

export interface IChatProfile {
chatId: string;
closeChatProfileInfoModalOnClickAway?: boolean;
groupInfoModalBackground?: ModalBackgroundType;
groupInfoModalPositionType?: ModalPositionType;
chatProfileRightHelperComponent?: React.ReactNode;
Expand Down Expand Up @@ -172,6 +174,7 @@ export interface User {

export interface CreateGroupModalProps {
onClose: () => void;
closeModalOnClickAway?: boolean;
modalBackground?: ModalBackgroundType;
modalPositionType?: ModalPositionType;
onSuccess?: (group: GroupInfoDTO | GroupDTO | undefined) => void;
Expand All @@ -181,6 +184,7 @@ export interface UserProfileProps {
updateUserProfileModalBackground?: ModalBackgroundType;
updateUserProfileModalPositionType?: ModalPositionType;
onUserProfileUpdateModalOpen?: (open: boolean) => void;
closeUserProfileModalOnClickAway?: boolean;
}

export interface ModalButtonProps {
Expand Down
17 changes: 10 additions & 7 deletions packages/uiweb/src/lib/components/chat/reusables/Modal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ import { device } from '../../../config';

interface IModalProps {
width?: string;
clickawayClose?: () => void;
onClose?: () => void;
closeonClickAway?: boolean;
children: any;
theme?: IChatTheme;
modalBackground?: ModalBackgroundType;
Expand All @@ -31,13 +32,13 @@ interface IModalHeader {
title: string;
}

const ClickawayCloseModal = ({ children, clickawayClose, width }: IModalProps) => {
const ClickawayCloseModal = ({ children, onClose, width, closeonClickAway }: IModalProps) => {
const modalRef = useRef(null);
const theme = useContext(ThemeContext);

useClickAway(modalRef, () => {
if (clickawayClose) {
clickawayClose();
if (onClose && closeonClickAway) {
onClose();
}
});

Expand All @@ -53,7 +54,8 @@ const ClickawayCloseModal = ({ children, clickawayClose, width }: IModalProps) =
};

export const Modal = ({
clickawayClose,
onClose,
closeonClickAway,
children,
width,
modalBackground = MODAL_BACKGROUND_TYPE.OVERLAY,
Expand All @@ -66,10 +68,11 @@ export const Modal = ({
modalBackground={modalBackground}
modalPositionType={modalPositionType}
>
{clickawayClose ? (
{closeonClickAway ? (
<ClickawayCloseModal
clickawayClose={clickawayClose}
onClose={onClose}
width={width}
closeonClickAway={closeonClickAway}
>
{children}
</ClickawayCloseModal>
Expand Down

0 comments on commit 7866a3d

Please sign in to comment.