Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
thierryskoda committed Dec 11, 2024
1 parent 815de91 commit 5d9b50a
Show file tree
Hide file tree
Showing 61 changed files with 777 additions and 609 deletions.
1 change: 1 addition & 0 deletions components/ConversationContextMenu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ const ConversationContextMenuComponent: FC = () => {
>
<ConversationReadOnly
topic={conversationTopic as ConversationTopic}
conversationId={conversationId}
/>
</GestureDetector>
</View>
Expand Down
5 changes: 4 additions & 1 deletion data/helpers/conversations/spamScore.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import { URL_REGEX } from "@utils/regex";
import { IConvosContentType, isContentType } from "@utils/xmtpRN/contentTypes";
import {
IConvosContentType,
isContentType,
} from "@/utils/xmtpRN/content-types/content-types";

type V3SpameScoreParams = {
message: string;
Expand Down
2 changes: 1 addition & 1 deletion features/conversation-list/hooks/useMessageText.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
} from "@/features/conversation/conversation-message/conversation-message.utils";
import logger from "@utils/logger";
import { DecodedMessageWithCodecsType } from "@utils/xmtpRN/client";
import { getMessageContentType } from "@utils/xmtpRN/contentTypes";
import { getMessageContentType } from "@/utils/xmtpRN/content-types/content-types";
import { DecodedMessage, ReplyCodec } from "@xmtp/react-native-sdk";
import { useMemo } from "react";

Expand Down
3 changes: 2 additions & 1 deletion features/conversation-list/hooks/useToggleReadStatus.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { useChatStore } from "@/data/store/accountsStore";
import { useSelect } from "@/data/store/storeHelpers";
import { saveTopicsData } from "@utils/api";
import { ConversationTopic } from "@xmtp/react-native-sdk";
import { useCallback } from "react";

type UseToggleReadStatusProps = {
topic: string;
topic: ConversationTopic;
isUnread: boolean;
currentAccount: string;
};
Expand Down
2 changes: 1 addition & 1 deletion features/conversation-list/useV3ConversationItems.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { isConversationAllowed } from "@/features/conversations/utils/isConversationAllowed";
import { isConversationAllowed } from "@/features/conversation/utils/isConversationAllowed";
import { useChatStore, useCurrentAccount } from "@data/store/accountsStore";
import { useSelect } from "@data/store/storeHelpers";
import { useV3ConversationListQuery } from "@queries/useV3ConversationListQuery";
Expand Down
2 changes: 1 addition & 1 deletion features/conversation-requests-list/useV3RequestItems.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { getMessageContentType } from "@/utils/xmtpRN/contentTypes";
import { getMessageContentType } from "@/utils/xmtpRN/content-types/content-types";
import { getV3SpamScore } from "@data/helpers/conversations/spamScore";
import { useCurrentAccount } from "@data/store/accountsStore";
import { useV3ConversationListQuery } from "@queries/useV3ConversationListQuery";
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useCallback } from "react";
import { useConversationTitleLongPress } from "../hooks/useConversationTitleLongPress";
import { useConversationTitleLongPress } from "./hooks/useConversationTitleLongPress";
import { useRouter } from "@navigation/useNavigation";
import { NativeStackNavigationProp } from "@react-navigation/native-stack";
import { NavigationParamList } from "@screens/Navigation/Navigation";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ import Avatar from "@components/Avatar";
import { AvatarSizes } from "@styles/sizes";
import { ThemedStyle, useAppTheme } from "@theme/useAppTheme";
import { GroupAvatarDumb } from "@components/GroupAvatar";
import { useConversationTitleLongPress } from "../hooks/useConversationTitleLongPress";
import { useGroupMembersAvatarData } from "../hooks/useGroupMembersAvatarData";
import { useConversationTitleLongPress } from "./hooks/useConversationTitleLongPress";
import { useGroupMembersAvatarData } from "./hooks/useGroupMembersAvatarData";
import { ConversationTitle } from "@/features/conversation/conversation-title";

type GroupConversationTitleProps = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { SendAttachmentPreview } from "@/features/conversation/conversation-composer/conversation-composer-send-attachment-preview";
import { ISendMessageParams } from "@/features/conversations/hooks/use-send-message";
import { ISendMessageParams } from "@/features/conversation/hooks/use-send-message";
import { saveAttachmentLocally } from "@/utils/attachment/attachment.utils";
import { HStack } from "@design-system/HStack";
import { IconButton } from "@design-system/IconButton/IconButton";
Expand Down
112 changes: 57 additions & 55 deletions features/conversation/conversation-message-date-change.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -15,68 +15,70 @@ import {
withSpring,
} from "react-native-reanimated";

export const MessageDateChange = memo(function MessageDateChange() {
const { theme } = useAppTheme();
export const ConversationMessageDateChange = memo(
function ConversationMessageDateChange() {
const { theme } = useAppTheme();

const [sentAt, showDateChange] = useMessageContextStoreContext((s) => [
s.sentAt,
s.showDateChange,
]);
const [sentAt, showDateChange] = useMessageContextStoreContext((s) => [
s.sentAt,
s.showDateChange,
]);

const showTimeAV = useSharedValue(0);
const showTimeAV = useSharedValue(0);

const messageStore = useMessageContextStore();
const messageStore = useMessageContextStore();

useEffect(() => {
const unsubscribe = messageStore.subscribe(
(state) => state.isShowingTime,
(isShowingTime) => {
showTimeAV.value = isShowingTime ? 1 : 0;
}
);
return () => unsubscribe();
}, [messageStore, showTimeAV]);
useEffect(() => {
const unsubscribe = messageStore.subscribe(
(state) => state.isShowingTime,
(isShowingTime) => {
showTimeAV.value = isShowingTime ? 1 : 0;
}
);
return () => unsubscribe();
}, [messageStore, showTimeAV]);

const messageTime = sentAt ? getLocalizedTime(sentAt) : "";
const messageTime = sentAt ? getLocalizedTime(sentAt) : "";

const timeInlineAnimatedStyle = useAnimatedStyle(() => {
return {
display: showTimeAV.value ? "flex" : "none",
opacity: withSpring(showTimeAV.value ? 1 : 0, {
damping: SICK_DAMPING,
stiffness: SICK_STIFFNESS,
}),
};
});
const timeInlineAnimatedStyle = useAnimatedStyle(() => {
return {
display: showTimeAV.value ? "flex" : "none",
opacity: withSpring(showTimeAV.value ? 1 : 0, {
damping: SICK_DAMPING,
stiffness: SICK_STIFFNESS,
}),
};
});

if (!showDateChange) {
return null;
}
if (!showDateChange) {
return null;
}

const messageDate = getRelativeDate(sentAt);
const messageDate = getRelativeDate(sentAt);

return (
<AnimatedHStack
layout={theme.animation.reanimatedSpringLayoutTransition}
style={{
// ...debugBorder("red"),
alignSelf: "center",
alignItems: "center",
justifyContent: "center",
columnGap: theme.spacing["4xs"],
marginVertical: theme.spacing.sm,
}}
>
<Text preset="smaller" color="secondary">
{messageDate}
</Text>
<AnimatedText
preset="smaller"
color="secondary"
style={timeInlineAnimatedStyle}
return (
<AnimatedHStack
layout={theme.animation.reanimatedLayoutSpringTransition}
style={{
// ...debugBorder("red"),
alignSelf: "center",
alignItems: "center",
justifyContent: "center",
columnGap: theme.spacing["4xs"],
marginVertical: theme.spacing.sm,
}}
>
{messageTime}
</AnimatedText>
</AnimatedHStack>
);
});
<Text preset="smaller" color="secondary">
{messageDate}
</Text>
<AnimatedText
preset="smaller"
color="secondary"
style={timeInlineAnimatedStyle}
>
{messageTime}
</AnimatedText>
</AnimatedHStack>
);
}
);
150 changes: 76 additions & 74 deletions features/conversation/conversation-message-timestamp.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,89 +18,91 @@ import {
withSpring,
} from "react-native-reanimated";

export const MessageTimestamp = memo(function MessageTimestamp() {
const { theme, themed } = useAppTheme();
export const ConversationMessageTimestamp = memo(
function ConversationMessageTimestamp() {
const { theme, themed } = useAppTheme();

const [sentAt, showDateChange] = useMessageContextStoreContext((s) => [
s.sentAt,
s.showDateChange,
]);
const [sentAt, showDateChange] = useMessageContextStoreContext((s) => [
s.sentAt,
s.showDateChange,
]);

// const { showTimeAV } = useMessageContext();
// const { showTimeAV } = useMessageContext();

const showTimeAV = useSharedValue(0);
const showTimeAV = useSharedValue(0);

const messageStore = useMessageContextStore();
const messageStore = useMessageContextStore();

useEffect(() => {
const unsubscribe = messageStore.subscribe(
(state) => state.isShowingTime,
(isShowingTime) => {
showTimeAV.value = isShowingTime ? 1 : 0;
}
);
return () => unsubscribe();
}, [messageStore, showTimeAV]);
useEffect(() => {
const unsubscribe = messageStore.subscribe(
(state) => state.isShowingTime,
(isShowingTime) => {
showTimeAV.value = isShowingTime ? 1 : 0;
}
);
return () => unsubscribe();
}, [messageStore, showTimeAV]);

const showTimeProgressAV = useDerivedValue(() => {
return withSpring(showTimeAV.value ? 1 : 0, {
damping: SICK_DAMPING,
stiffness: SICK_STIFFNESS,
const showTimeProgressAV = useDerivedValue(() => {
return withSpring(showTimeAV.value ? 1 : 0, {
damping: SICK_DAMPING,
stiffness: SICK_STIFFNESS,
});
});
});

const messageTime = sentAt ? getLocalizedTime(sentAt) : "";
const messageTime = sentAt ? getLocalizedTime(sentAt) : "";

const textHeight = flattenStyles(
getTextStyle(themed, { preset: "smaller" })
).lineHeight;
const textHeight = flattenStyles(
getTextStyle(themed, { preset: "smaller" })
).lineHeight;

const timeAnimatedStyle = useAnimatedStyle(() => {
return {
height: interpolate(
showTimeProgressAV.value,
[0, 1],
[0, textHeight || 14]
),
opacity: interpolate(showTimeProgressAV.value, [0, 1], [0, 1]),
marginVertical: interpolate(
showTimeProgressAV.value,
[0, 1],
[0, theme.spacing.sm]
),
transform: [
{ scale: showTimeProgressAV.value },
{
translateY: interpolate(
showTimeProgressAV.value,
[0, 1],
[theme.spacing.xl, 0]
),
},
],
};
}, [textHeight]);
const timeAnimatedStyle = useAnimatedStyle(() => {
return {
height: interpolate(
showTimeProgressAV.value,
[0, 1],
[0, textHeight || 14]
),
opacity: interpolate(showTimeProgressAV.value, [0, 1], [0, 1]),
marginVertical: interpolate(
showTimeProgressAV.value,
[0, 1],
[0, theme.spacing.sm]
),
transform: [
{ scale: showTimeProgressAV.value },
{
translateY: interpolate(
showTimeProgressAV.value,
[0, 1],
[theme.spacing.xl, 0]
),
},
],
};
}, [textHeight]);

// Because we'll show the time in the MessageDateChange component instead
if (showDateChange) {
return null;
}
// Because we'll show the time in the MessageDateChange component instead
if (showDateChange) {
return null;
}

return (
<AnimatedVStack
style={[
{
// ...debugBorder("yellow"),
alignItems: "center",
overflow: "hidden",
width: "100%",
},
timeAnimatedStyle,
]}
>
<Text preset="smaller" color="secondary">
{messageTime}
</Text>
</AnimatedVStack>
);
});
return (
<AnimatedVStack
style={[
{
// ...debugBorder("yellow"),
alignItems: "center",
overflow: "hidden",
width: "100%",
},
timeAnimatedStyle,
]}
>
<Text preset="smaller" color="secondary">
{messageTime}
</Text>
</AnimatedVStack>
);
}
);
8 changes: 4 additions & 4 deletions features/conversation/conversation-message.store-context.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
*/

import { convertNanosecondsToMilliseconds } from "@/features/conversation/conversation-message/conversation-message.utils";
import { hasNextMessageInSeries } from "@/features/conversations/utils/hasNextMessageInSeries";
import { hasPreviousMessageInSeries } from "@/features/conversations/utils/hasPreviousMessageInSeries";
import { messageIsFromCurrentUserV3 } from "@/features/conversations/utils/messageIsFromCurrentUser";
import { messageShouldShowDateChange } from "@/features/conversations/utils/messageShouldShowDateChange";
import { hasNextMessageInSeries } from "@/features/conversation/utils/hasNextMessageInSeries";
import { hasPreviousMessageInSeries } from "@/features/conversation/utils/hasPreviousMessageInSeries";
import { messageIsFromCurrentUserV3 } from "@/features/conversation/utils/messageIsFromCurrentUser";
import { messageShouldShowDateChange } from "@/features/conversation/utils/messageShouldShowDateChange";
import { DecodedMessageWithCodecsType } from "@/utils/xmtpRN/client.types";
import { InboxId, MessageId } from "@xmtp/react-native-sdk";
import { createContext, memo, useContext, useEffect, useRef } from "react";
Expand Down
Loading

0 comments on commit 5d9b50a

Please sign in to comment.