Skip to content

Commit

Permalink
fix: add invite modal callback
Browse files Browse the repository at this point in the history
  • Loading branch information
arn4b committed Jul 12, 2023
1 parent 008b187 commit abeada3
Show file tree
Hide file tree
Showing 4 changed files with 126 additions and 56 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ export interface ISCWIModalProps { // Space Creation Widget Create Modal Interfa
adminsAddressList?: any;
setAdminsAddressList?: any;
onClose: () => void;
customSearch?: (searchString: string) => ICustomSearchResult;
inviteOnly?: boolean;
}

export const SCWInviteModal: React.FC<ISCWIModalProps> = (props) => {
Expand All @@ -55,17 +55,18 @@ export const SCWInviteModal: React.FC<ISCWIModalProps> = (props) => {
adminsAddressList,
setAdminsAddressList,
onClose,
customSearch,
inviteOnly,
} = props;
const theme = useContext(ThemeContext);
console.log("🚀 ~ file: SCWInviteModal.tsx:60 ~ createSpace:", createSpace)

const { env, account } = useSpaceData();
const { env, account, customSearch } = useSpaceData();

const [invitedMember, setInvitedMember] = useState('')
const [loadingAccount, setLoadingAccount] = useState(false)

const [searchedUser, setSearchedUser]= useState<any>({});
const [errorMsg, setErrorMsg] = useState<any>('');
const [errorMsg, setErrorMsg] = useState<string>('');

const searchMember = async (event: any) => {
setInvitedMember(event.target.value)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useState, ReactNode } from 'react'
import { useState } from 'react'
import styled from 'styled-components';
import * as PushAPI from '@pushprotocol/restapi';

Expand All @@ -11,10 +11,13 @@ import { useSpaceData } from '../../../hooks';

export interface ISpaceCreateWidgetProps {
customComponent?: React.ReactElement<React.ButtonHTMLAttributes<HTMLButtonElement>>;
inviteOnly?: boolean;
spaceData?: any;
}

export const SpaceCreationWidget:React.FC<ISpaceCreateWidgetProps> = (props) => {
const { customComponent } = props;
const { customComponent, inviteOnly, spaceData } = props;
console.log("🚀 ~ file: SpaceCreationWidget.tsx:20 ~ inviteOnly:", inviteOnly)

const [isCreateModalVisible, setIsCreateModalVisible] = useState(false);
const [isScheduleModalVisible, setIsScheduleModalVisible] = useState(false);
Expand Down Expand Up @@ -100,7 +103,7 @@ export const SpaceCreationWidget:React.FC<ISpaceCreateWidgetProps> = (props) =>
})
}

const testCreateSpace = async () => {
const createSpace = async () => {
const spaceCreate = {
spaceName: spaceState.spaceName.length === 0 ? `${account}'s Space` : spaceState.spaceName,
spaceDescription: 'Push Space',
Expand All @@ -112,7 +115,7 @@ export const SpaceCreationWidget:React.FC<ISpaceCreateWidgetProps> = (props) =>
signer: signer as PushAPI.SignerType,
env
}

console.log('CREATE API')
try {
setLoading(true);
const response = await PushAPI.space.create(spaceCreate);
Expand All @@ -127,52 +130,43 @@ export const SpaceCreationWidget:React.FC<ISpaceCreateWidgetProps> = (props) =>
}
};

return (
<SCWContainer>
{
customComponent
?
<CustomButtonComponent onClick={showCreateSpace}>
{customComponent}
</CustomButtonComponent>
:
<SCWButton
onCreate={showCreateSpace}
/>
}

{isCreateModalVisible &&
<SCWCreateModal
isInviteVisible={showInviteSpace}
closeCreateModal={closeCreateModal}
nameValue={spaceState.spaceName}
descriptionValue={spaceState.spaceDescription}
handleNameChange={handleNameChange}
handleDescriptionChange={handleDescriptionChange}
isDescriptionEnabled={false}
isScheduleVisible={showScheduleSpace}
onClose={closeCreateModal}
/>
}
const updateSpace = async () => {
const spaceUpdate = {
spaceName: spaceData.spaceName,
spaceDescription: 'Push Space',
members: invitedAddressList,
spaceImage: 'asd',
admins: adminsAddressList,
isPublic: true,
scheduleAt: spaceState.time > Date.now() ? new Date(spaceState.time) : new Date(Date.now() + 120000),
signer: signer as PushAPI.SignerType,
env,
spaceId: spaceData.spaceId,
status: spaceData.status,
}
console.log('UPDATE API')
try {
setLoading(true);
const response = await PushAPI.space.update(spaceUpdate);

{isScheduleModalVisible &&
<SCWScheduleModal
closeScheduleModal={closeScheduleModal}
makeCreateVisible={showCreateSpace}
makeInviteVisible={showInviteSpace}
dateValue={spaceState.date}
timeValue={spaceState.time}
onDateChange={onDateChange}
onTimeChange={onTimeChange}
onClose={closeScheduleModal}
/>
}
console.log(response);
} catch (e:any) {
console.error(e.message);
} finally {
setLoading(false);
closeInviteModal();
clearAllState();
}
};

{isInviteModalVisible &&
return (
<div>
{
inviteOnly ?
<SCWInviteModal
closeInviteModal={closeInviteModal}
makeScheduleVisible={showCreateSpace}
createSpace={testCreateSpace}
createSpace={updateSpace}
isLoading={isLoading}
invitedMembersList={invitedMembersList}
setInvitedMembersList={setInvitedMembersList}
Expand All @@ -184,8 +178,67 @@ export const SpaceCreationWidget:React.FC<ISpaceCreateWidgetProps> = (props) =>
setAdminsAddressList={setAdminsAddressList}
onClose={closeInviteModal}
/>
:
<SCWContainer>
{
customComponent
?
<CustomButtonComponent onClick={showCreateSpace}>
{customComponent}
</CustomButtonComponent>
:
<SCWButton
onCreate={showCreateSpace}
/>
}

{isCreateModalVisible &&
<SCWCreateModal
isInviteVisible={showInviteSpace}
closeCreateModal={closeCreateModal}
nameValue={spaceState.spaceName}
descriptionValue={spaceState.spaceDescription}
handleNameChange={handleNameChange}
handleDescriptionChange={handleDescriptionChange}
isDescriptionEnabled={false}
isScheduleVisible={showScheduleSpace}
onClose={closeCreateModal}
/>
}

{isScheduleModalVisible &&
<SCWScheduleModal
closeScheduleModal={closeScheduleModal}
makeCreateVisible={showCreateSpace}
makeInviteVisible={showInviteSpace}
dateValue={spaceState.date}
timeValue={spaceState.time}
onDateChange={onDateChange}
onTimeChange={onTimeChange}
onClose={closeScheduleModal}
/>
}

{isInviteModalVisible &&
<SCWInviteModal
closeInviteModal={closeInviteModal}
makeScheduleVisible={showCreateSpace}
createSpace={updateSpace}
isLoading={isLoading}
invitedMembersList={invitedMembersList}
setInvitedMembersList={setInvitedMembersList}
invitedAddressList={invitedAddressList}
setInvitedAddressList={setInvitedAddressList}
adminsList={adminsList}
setAdminsList={setAdminsList}
adminsAddressList={adminsAddressList}
setAdminsAddressList={setAdminsAddressList}
onClose={closeInviteModal}
/>
}
</SCWContainer>
}
</SCWContainer>
</div>
)
}

Expand Down
21 changes: 18 additions & 3 deletions packages/uiweb/src/lib/components/space/SpaceWidget/SpacesInfo.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import React, { useContext, MouseEventHandler } from 'react'
import React, { useContext, MouseEventHandler, useState } from 'react'
import styled from 'styled-components';

import { Modal } from '../reusables/Modal'
Expand All @@ -7,6 +7,7 @@ import { IThemeProviderProps, ThemeContext } from '../theme/ThemeProvider';
import { Button } from '../reusables/Button';
import { ProfileContainer } from '../reusables/ProfileContainer';
import Accordion from '../reusables/Accordion';
import { SpaceCreationWidget } from '../SpaceCreationWidget';

export interface ISpacesInfoProps {
closeSpacesInfo: MouseEventHandler;
Expand All @@ -19,11 +20,11 @@ interface IThemeProps {

export const SpacesInfo: React.FC<ISpacesInfoProps> = (props) => {
const { spaceData } = props;
console.log("🚀 ~ file: SpacesInfo.tsx:22 ~ spaceData:", spaceData)
const tempImageUrl = "https://imgv3.fotor.com/images/blog-richtext-image/10-profile-picture-ideas-to-make-you-stand-out.jpg";

const theme = useContext(ThemeContext);

const [isInviteVisible, setIsInviteVisible] = useState(false);

const customStyle = {
color: theme.textColorPrimary,
background: theme.bgColorPrimary,
Expand All @@ -32,6 +33,10 @@ export const SpacesInfo: React.FC<ISpacesInfoProps> = (props) => {
padding: '14px',
}

const showExplicitInvite: React.MouseEventHandler = () => {
setIsInviteVisible(true);
}

const adminsArray = spaceData.members.filter((member: { isSpeaker: boolean; }) => member.isSpeaker);

return (
Expand Down Expand Up @@ -59,6 +64,7 @@ export const SpacesInfo: React.FC<ISpacesInfoProps> = (props) => {

<Button
customStyle={customStyle}
onClick={showExplicitInvite}
>
Invite Members
</Button>
Expand Down Expand Up @@ -91,6 +97,15 @@ export const SpacesInfo: React.FC<ISpacesInfoProps> = (props) => {
}

</SpacesInfoContainer>

{
isInviteVisible ?
<SpaceCreationWidget
inviteOnly
spaceData={spaceData}
/>
: null
}
</Modal>
)
}
Expand Down
7 changes: 4 additions & 3 deletions packages/uiweb/src/lib/context/spacesContext.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,10 @@ export interface ISpacePaginationData {
}

export interface ICustomSearchResult {
name: string;
walletAddress: string;
image: string;
account: string;
name?: string;
handle?: string;
image?: string; // dataURL as string
}

export interface ISpaceDataContextValues {
Expand Down

0 comments on commit abeada3

Please sign in to comment.