From abeada30bfd38662f0b6e5a58e51c151d5a0f8f8 Mon Sep 17 00:00:00 2001 From: Arnab Chatterjee Date: Wed, 12 Jul 2023 17:55:19 +0530 Subject: [PATCH] fix: add invite modal callback --- .../SCWInviteModal/SCWInviteModal.tsx | 9 +- .../SpaceCreationWidget.tsx | 145 ++++++++++++------ .../space/SpaceWidget/SpacesInfo.tsx | 21 ++- .../uiweb/src/lib/context/spacesContext.ts | 7 +- 4 files changed, 126 insertions(+), 56 deletions(-) diff --git a/packages/uiweb/src/lib/components/space/SpaceCreationWidget/SCWInviteModal/SCWInviteModal.tsx b/packages/uiweb/src/lib/components/space/SpaceCreationWidget/SCWInviteModal/SCWInviteModal.tsx index 97150f90f..3c9dee1d4 100644 --- a/packages/uiweb/src/lib/components/space/SpaceCreationWidget/SCWInviteModal/SCWInviteModal.tsx +++ b/packages/uiweb/src/lib/components/space/SpaceCreationWidget/SCWInviteModal/SCWInviteModal.tsx @@ -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 = (props) => { @@ -55,17 +55,18 @@ export const SCWInviteModal: React.FC = (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({}); - const [errorMsg, setErrorMsg] = useState(''); + const [errorMsg, setErrorMsg] = useState(''); const searchMember = async (event: any) => { setInvitedMember(event.target.value) diff --git a/packages/uiweb/src/lib/components/space/SpaceCreationWidget/SpaceCreationWidget.tsx b/packages/uiweb/src/lib/components/space/SpaceCreationWidget/SpaceCreationWidget.tsx index e974c6cf7..44464284a 100644 --- a/packages/uiweb/src/lib/components/space/SpaceCreationWidget/SpaceCreationWidget.tsx +++ b/packages/uiweb/src/lib/components/space/SpaceCreationWidget/SpaceCreationWidget.tsx @@ -1,4 +1,4 @@ -import { useState, ReactNode } from 'react' +import { useState } from 'react' import styled from 'styled-components'; import * as PushAPI from '@pushprotocol/restapi'; @@ -11,10 +11,13 @@ import { useSpaceData } from '../../../hooks'; export interface ISpaceCreateWidgetProps { customComponent?: React.ReactElement>; + inviteOnly?: boolean; + spaceData?: any; } export const SpaceCreationWidget:React.FC = (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); @@ -100,7 +103,7 @@ export const SpaceCreationWidget:React.FC = (props) => }) } - const testCreateSpace = async () => { + const createSpace = async () => { const spaceCreate = { spaceName: spaceState.spaceName.length === 0 ? `${account}'s Space` : spaceState.spaceName, spaceDescription: 'Push Space', @@ -112,7 +115,7 @@ export const SpaceCreationWidget:React.FC = (props) => signer: signer as PushAPI.SignerType, env } - + console.log('CREATE API') try { setLoading(true); const response = await PushAPI.space.create(spaceCreate); @@ -127,52 +130,43 @@ export const SpaceCreationWidget:React.FC = (props) => } }; - return ( - - { - customComponent - ? - - {customComponent} - - : - - } - - {isCreateModalVisible && - - } + 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 && - - } + console.log(response); + } catch (e:any) { + console.error(e.message); + } finally { + setLoading(false); + closeInviteModal(); + clearAllState(); + } + }; - {isInviteModalVisible && + return ( +
+ { + inviteOnly ? = (props) => setAdminsAddressList={setAdminsAddressList} onClose={closeInviteModal} /> + : + + { + customComponent + ? + + {customComponent} + + : + + } + + {isCreateModalVisible && + + } + + {isScheduleModalVisible && + + } + + {isInviteModalVisible && + + } + } - +
) } diff --git a/packages/uiweb/src/lib/components/space/SpaceWidget/SpacesInfo.tsx b/packages/uiweb/src/lib/components/space/SpaceWidget/SpacesInfo.tsx index 8b63040d7..04ae70a66 100644 --- a/packages/uiweb/src/lib/components/space/SpaceWidget/SpacesInfo.tsx +++ b/packages/uiweb/src/lib/components/space/SpaceWidget/SpacesInfo.tsx @@ -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' @@ -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; @@ -19,11 +20,11 @@ interface IThemeProps { export const SpacesInfo: React.FC = (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, @@ -32,6 +33,10 @@ export const SpacesInfo: React.FC = (props) => { padding: '14px', } + const showExplicitInvite: React.MouseEventHandler = () => { + setIsInviteVisible(true); + } + const adminsArray = spaceData.members.filter((member: { isSpeaker: boolean; }) => member.isSpeaker); return ( @@ -59,6 +64,7 @@ export const SpacesInfo: React.FC = (props) => { @@ -91,6 +97,15 @@ export const SpacesInfo: React.FC = (props) => { } + + { + isInviteVisible ? + + : null + } ) } diff --git a/packages/uiweb/src/lib/context/spacesContext.ts b/packages/uiweb/src/lib/context/spacesContext.ts index 9f6c58565..e669f5a5d 100644 --- a/packages/uiweb/src/lib/context/spacesContext.ts +++ b/packages/uiweb/src/lib/context/spacesContext.ts @@ -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 {