chore: satisfies prettier
parent
2c808eab45
commit
0f19bb7d06
|
@ -3,12 +3,12 @@ import { atomWithStorage } from "jotai/utils";
|
|||
type TokenThreshold = {
|
||||
threshold: string;
|
||||
symbol: string;
|
||||
}
|
||||
};
|
||||
|
||||
export type BareUser = {
|
||||
userId: string;
|
||||
rawDisplayName: string;
|
||||
}
|
||||
};
|
||||
|
||||
export const verifiedAccountsAtom = atomWithStorage<Record<string, string>>("VERIFIED_ACCOUNTS", {});
|
||||
export const minimumTokenThresholdAtom = atomWithStorage<Record<string, TokenThreshold>>("TOKEN_THRESHOLD", {});
|
||||
|
|
|
@ -6,14 +6,15 @@ import { _t } from "../../../languageHandler";
|
|||
import { cleanRoomName } from "../../../hooks/useVerifiedRoom";
|
||||
|
||||
export function CommunityRoomPeekMessage({ roomName }: { roomName: string }): ReactElement {
|
||||
const [allTokens] = useAtom(minimumTokenThresholdAtom)
|
||||
const [allTokens] = useAtom(minimumTokenThresholdAtom);
|
||||
const cleanedRoomName = cleanRoomName(roomName);
|
||||
|
||||
const tokenThreshold = allTokens[cleanedRoomName];
|
||||
|
||||
return (
|
||||
<h3>{_t("room|no_peek_join_prompt_community", { roomName: cleanedRoomName })} {
|
||||
tokenThreshold ? (_t('room|no_peek_join_prompt_community_threshold', tokenThreshold)) : ''
|
||||
}</h3>
|
||||
<h3>
|
||||
{_t("room|no_peek_join_prompt_community", { roomName: cleanedRoomName })}{" "}
|
||||
{tokenThreshold ? _t("room|no_peek_join_prompt_community_threshold", tokenThreshold) : ""}
|
||||
</h3>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -5,37 +5,36 @@ import { Room } from "matrix-js-sdk/src/matrix";
|
|||
import { minimumTokenThresholdAtom } from "../../../atoms";
|
||||
import { _t } from "../../../languageHandler";
|
||||
import { useVerifiedRoom } from "../../../hooks/useVerifiedRoom";
|
||||
import { MessageCommunityBotButton } from "./MessageButton";
|
||||
import { MessageCommunityBotButton } from "./MessageButton";
|
||||
|
||||
export function DisabledMessageField({ room }: { room: Room }): JSX.Element {
|
||||
const [allTokens] = useAtom(minimumTokenThresholdAtom)
|
||||
const { isTokenGatedRoom, isCommunityRoom, } = useVerifiedRoom(room);
|
||||
const [allTokens] = useAtom(minimumTokenThresholdAtom);
|
||||
const { isTokenGatedRoom, isCommunityRoom } = useVerifiedRoom(room);
|
||||
|
||||
let tokenThreshold = allTokens[room.name];
|
||||
if(!tokenThreshold) {
|
||||
if (!tokenThreshold) {
|
||||
const tokenName = room.name.match(/\[TG] (.*) \(ct_.*\)/)?.[1];
|
||||
if(isTokenGatedRoom && tokenName) {
|
||||
if (isTokenGatedRoom && tokenName) {
|
||||
tokenThreshold = {
|
||||
threshold: "1",
|
||||
symbol: tokenName,
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (tokenThreshold) {
|
||||
return (
|
||||
<div key="controls_error" className="mx_MessageComposer_noperm_error">
|
||||
{_t("composer|no_perms_token_notice", tokenThreshold)}
|
||||
{ isCommunityRoom ? (
|
||||
{isCommunityRoom ? (
|
||||
<>
|
||||
<span style={{'marginLeft': '1rem', display: 'block'}} />
|
||||
<span style={{ marginLeft: "1rem", display: "block" }} />
|
||||
<MessageCommunityBotButton text="Get room tokens" />
|
||||
</>
|
||||
) : null }
|
||||
) : null}
|
||||
</div>
|
||||
);
|
||||
} else {
|
||||
} else {
|
||||
return (
|
||||
<div key="controls_error" className="mx_MessageComposer_noperm_error">
|
||||
{_t("composer|no_perms_notice")}
|
||||
|
|
|
@ -13,7 +13,7 @@ import { BareUser, communityBotAtom } from "../../../atoms";
|
|||
* Converts the member to a DirectoryMember and starts a DM with them.
|
||||
*/
|
||||
async function openDmForUser(matrixClient: MatrixClient, user: Member | BareUser): Promise<void> {
|
||||
const avatarUrl = user instanceof User ? user.avatarUrl : user instanceof RoomMember ? user.getMxcAvatarUrl() : '';
|
||||
const avatarUrl = user instanceof User ? user.avatarUrl : user instanceof RoomMember ? user.getMxcAvatarUrl() : "";
|
||||
const startDmUser = new DirectoryMember({
|
||||
user_id: user.userId,
|
||||
display_name: user.rawDisplayName,
|
||||
|
@ -22,7 +22,13 @@ async function openDmForUser(matrixClient: MatrixClient, user: Member | BareUser
|
|||
await startDmOnFirstMessage(matrixClient, [startDmUser]);
|
||||
}
|
||||
|
||||
export const MessageButton = ({ member, text = 'Send Message' }: { member: Member | BareUser, text?: string }): JSX.Element => {
|
||||
export const MessageButton = ({
|
||||
member,
|
||||
text = "Send Message",
|
||||
}: {
|
||||
member: Member | BareUser;
|
||||
text?: string;
|
||||
}): JSX.Element => {
|
||||
const cli = useContext(MatrixClientContext);
|
||||
const [busy, setBusy] = useState(false);
|
||||
|
||||
|
@ -44,12 +50,8 @@ export const MessageButton = ({ member, text = 'Send Message' }: { member: Membe
|
|||
);
|
||||
};
|
||||
|
||||
export const MessageCommunityBotButton = ({ text = 'Send Message' }: { text?: string }): JSX.Element => {
|
||||
const [communityBot] = useAtom(communityBotAtom)
|
||||
export const MessageCommunityBotButton = ({ text = "Send Message" }: { text?: string }): JSX.Element => {
|
||||
const [communityBot] = useAtom(communityBotAtom);
|
||||
|
||||
return (
|
||||
<MessageButton member={communityBot} text={text} />
|
||||
);
|
||||
return <MessageButton member={communityBot} text={text} />;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -47,7 +47,11 @@ import { Action } from "matrix-react-sdk/src/dispatcher/actions";
|
|||
import { SettingUpdatedPayload } from "matrix-react-sdk/src/dispatcher/payloads/SettingUpdatedPayload";
|
||||
import { ViewRoomPayload } from "matrix-react-sdk/src/dispatcher/payloads/ViewRoomPayload";
|
||||
import { ComposerInsertPayload } from "matrix-react-sdk/src/dispatcher/payloads/ComposerInsertPayload";
|
||||
import { getConversionFunctions, sendMessage, SendWysiwygComposer } from "matrix-react-sdk/src/components/views/rooms/wysiwyg_composer";
|
||||
import {
|
||||
getConversionFunctions,
|
||||
sendMessage,
|
||||
SendWysiwygComposer,
|
||||
} from "matrix-react-sdk/src/components/views/rooms/wysiwyg_composer";
|
||||
import EditorModel from "matrix-react-sdk/src/editor/model";
|
||||
import { isLocalRoom } from "matrix-react-sdk/src/utils/localRoom/isLocalRoom";
|
||||
import { aboveLeftOf, MenuProps } from "matrix-react-sdk/src/components/structures/ContextMenu";
|
||||
|
@ -55,7 +59,9 @@ import { SdkContextClass } from "matrix-react-sdk/src/contexts/SDKContext";
|
|||
import { VoiceBroadcastInfoState } from "matrix-react-sdk/src/voice-broadcast";
|
||||
import { createCantStartVoiceMessageBroadcastDialog } from "matrix-react-sdk/src/components/views/dialogs/CantStartVoiceMessageBroadcastDialog";
|
||||
import E2EIcon from "matrix-react-sdk/src/components/views/rooms/E2EIcon";
|
||||
import SendMessageComposer, { SendMessageComposer as SendMessageComposerClass } from "matrix-react-sdk/src/components/views/rooms/SendMessageComposer";
|
||||
import SendMessageComposer, {
|
||||
SendMessageComposer as SendMessageComposerClass,
|
||||
} from "matrix-react-sdk/src/components/views/rooms/SendMessageComposer";
|
||||
import Tooltip, { Alignment } from "matrix-react-sdk/src/components/views/elements/Tooltip";
|
||||
import { formatTimeLeft } from "matrix-react-sdk/src/DateUtils";
|
||||
import Stickerpicker from "matrix-react-sdk/src/components/views/rooms/Stickerpicker";
|
||||
|
@ -546,10 +552,7 @@ export class MessageComposer extends React.Component<IProps, IState> {
|
|||
controls.push(
|
||||
<div className="mx_MessageComposer_replaced_wrapper" key="room_replaced">
|
||||
<div className="mx_MessageComposer_replaced_valign">
|
||||
<RoomReplacedIcon
|
||||
aria-hidden
|
||||
className="mx_MessageComposer_roomReplaced_icon"
|
||||
/>
|
||||
<RoomReplacedIcon aria-hidden className="mx_MessageComposer_roomReplaced_icon" />
|
||||
<span className="mx_MessageComposer_roomReplaced_header">
|
||||
{_t("composer|room_upgraded_notice")}
|
||||
</span>
|
||||
|
@ -559,9 +562,7 @@ export class MessageComposer extends React.Component<IProps, IState> {
|
|||
</div>,
|
||||
);
|
||||
} else {
|
||||
controls.push(
|
||||
<DisabledMessageField room={this.props.room} key="controls_error" />,
|
||||
);
|
||||
controls.push(<DisabledMessageField room={this.props.room} key="controls_error" />);
|
||||
}
|
||||
|
||||
let recordingTooltip: JSX.Element | undefined;
|
||||
|
|
|
@ -334,7 +334,6 @@ export default class RoomPreviewBar extends React.Component<IProps, IState> {
|
|||
|
||||
const { isCommunityRoom } = isVerifiedRoom(roomName);
|
||||
|
||||
|
||||
const messageCase = this.getMessageCase();
|
||||
switch (messageCase) {
|
||||
case MessageCase.Joining: {
|
||||
|
@ -704,10 +703,10 @@ export default class RoomPreviewBar extends React.Component<IProps, IState> {
|
|||
);
|
||||
}
|
||||
|
||||
if(isCommunityRoom) {
|
||||
if (isCommunityRoom) {
|
||||
secondaryButton = primaryButton;
|
||||
primaryButton = (<MessageCommunityBotButton text="Message Superhero Bot to get tokens" />);
|
||||
titleElement = (<CommunityRoomPeekMessage roomName={roomName} />);
|
||||
primaryButton = <MessageCommunityBotButton text="Message Superhero Bot to get tokens" />;
|
||||
titleElement = <CommunityRoomPeekMessage roomName={roomName} />;
|
||||
}
|
||||
|
||||
const isPanel = this.props.canPreview;
|
||||
|
|
|
@ -16,7 +16,7 @@ const useMinimumTokenThreshold = (config: any): void => {
|
|||
.then((res) => res.json())
|
||||
.then(setMinimumTokenThreshold)
|
||||
.catch((e) => {
|
||||
console.error('Error loading minimum token threshold', e);
|
||||
console.error("Error loading minimum token threshold", e);
|
||||
})
|
||||
.finally(() => {
|
||||
setIsLoading(false);
|
||||
|
@ -33,8 +33,7 @@ const useMinimumTokenThreshold = (config: any): void => {
|
|||
|
||||
return (): void => clearInterval(interval);
|
||||
}, [loadMinimumTokenThreshold]);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Provides the superhero context to its children components.
|
||||
|
@ -49,7 +48,7 @@ export const SuperheroProvider = ({ children, config }: any): any => {
|
|||
useEffect(() => {
|
||||
setCommunityBot({
|
||||
userId: config.community_bot_user_id,
|
||||
rawDisplayName: 'Community DAO Room Bot',
|
||||
rawDisplayName: "Community DAO Room Bot",
|
||||
});
|
||||
}, [setCommunityBot, config.community_bot_user_id]);
|
||||
|
||||
|
|
|
@ -25,21 +25,23 @@ export function useVerifiedRoom(room?: Room | IPublicRoomsChunkRoom): {
|
|||
|
||||
export const cleanRoomName = (roomName: string): string => {
|
||||
// remove # in the beginning
|
||||
let parsedName = roomName.startsWith('#') ? roomName.slice(1) : roomName;
|
||||
let parsedName = roomName.startsWith("#") ? roomName.slice(1) : roomName;
|
||||
|
||||
// remove domain
|
||||
parsedName = parsedName.split(':')[0];
|
||||
parsedName = parsedName.split(":")[0];
|
||||
|
||||
return parsedName;
|
||||
}
|
||||
};
|
||||
|
||||
export const isVerifiedRoom = (roomName: string): {
|
||||
export const isVerifiedRoom = (
|
||||
roomName: string,
|
||||
): {
|
||||
isTokenGatedRoom: boolean;
|
||||
isCommunityRoom: boolean;
|
||||
} => {
|
||||
} => {
|
||||
const parsedRoomName = cleanRoomName(roomName);
|
||||
return {
|
||||
isTokenGatedRoom: parsedRoomName.startsWith("[TG]"),
|
||||
isCommunityRoom: parsedRoomName.startsWith("$"),
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue