Merge remote-tracking branch 'upstream/dev' into dev

This commit is contained in:
thororen1234 2026-06-04 11:59:44 -04:00
commit 386d03ae69
No known key found for this signature in database
2 changed files with 56 additions and 56 deletions

View file

@ -316,7 +316,7 @@ export default definePlugin({
},
// Allow users to use custom client themes
{
find: '"custom_themes_editor_footer"',
find: '("custom_themes_editor_footer")',
replacement: {
match: /(?<=\i=)\(0,\i\.\i\)\(\i\.\i\.TIER_2\)(?=,|;)/g,
replace: "true"

View file

@ -28,7 +28,7 @@ import { useAwaiter } from "@utils/react";
import definePlugin from "@utils/types";
import { Guild, User } from "@vencord/discord-types";
import { findCssClassesLazy } from "@webpack";
import { Clickable, ConfirmModal,IconUtils, Menu, openModal, Parser } from "@webpack/common";
import { Clickable, ConfirmModal, IconUtils, Menu, openModal, Parser } from "@webpack/common";
import { Auth, initAuth, updateAuth } from "./auth";
import { openReviewsModal } from "./components/ReviewModal";
@ -146,62 +146,62 @@ export default definePlugin({
renderProfileCollection: {
priority: 0,
render: ({ user, isSideBar = false }: { user: User; isSideBar?: boolean; }) => {
const [reviewData] = useAwaiter(() => getReviews(user.id, { limit: 4 }), { deps: [user.id], fallbackValue: null });
const [reviewData] = useAwaiter(() => getReviews(user.id, { limit: 4 }), { deps: [user.id], fallbackValue: null });
// Discord are masters at using a crap ton of html elements and css classes to create a simple ui that could have
// been made with less than half of the number of elements, so we have to do this insanity to replicate their ui
const reviewsSection = (
<section className={ProfileCardClasses.container}>
<ul className={ProfileCardClasses.cardsList} tabIndex={-1}>
<li className={ProfileCardClasses.firstCardContainer}>
<Clickable
className={classes(ProfileCardContainerClasses.breadcrumb, reviewData?.hasOptedOut && cl("profile-popout-disabled"))}
onClick={() => !reviewData?.hasOptedOut && openReviewsModal(user.id, user.username, ReviewType.User)}
>
<div className={classes(ProfileCardOverlayClasses.overlay, ProfileCardContainerClasses.innerContainer, ProfileCardClasses.card)}>
<Paragraph size={isSideBar ? "sm" : "xs"} weight="medium">User Reviews</Paragraph>
{!!reviewData?.reviewCount
? (
<div className={ProfileCardContainerClasses.icons}>
{reviewData.reviews
.filter(review => review.id !== 0)
.slice(0, 4)
.reverse()
.map((review, idx) => {
const showCount = idx === 3 && reviewData.reviewCount > 4;
// Discord are masters at using a crap ton of html elements and css classes to create a simple ui that could have
// been made with less than half of the number of elements, so we have to do this insanity to replicate their ui
const reviewsSection = (
<section className={ProfileCardClasses.container}>
<ul className={ProfileCardClasses.cardsList} tabIndex={-1}>
<li className={ProfileCardClasses.firstCardContainer}>
<Clickable
className={classes(ProfileCardContainerClasses.breadcrumb, reviewData?.hasOptedOut && cl("profile-popout-disabled"))}
onClick={() => !reviewData?.hasOptedOut && openReviewsModal(user.id, user.username, ReviewType.User)}
>
<div className={classes(ProfileCardOverlayClasses.overlay, ProfileCardContainerClasses.innerContainer, ProfileCardClasses.card)}>
<Paragraph size={isSideBar ? "sm" : "xs"} weight="medium">User Reviews</Paragraph>
{!!reviewData?.reviewCount
? (
<div className={ProfileCardContainerClasses.icons}>
{reviewData.reviews
.filter(review => review.id !== 0)
.slice(0, 4)
.reverse()
.map((review, idx) => {
const showCount = idx === 3 && reviewData.reviewCount > 4;
return (
<div className={ProfileCardContainerClasses.icon} key={review.id}>
<img
src={review.sender.profilePhoto}
alt={review.sender.username}
className={showCount ? ProfileCardContainerClasses.displayCount : undefined}
onError={e => e.currentTarget.src = IconUtils.getDefaultAvatarURL(review.sender.discordID)}
/>
{showCount && (
<div className={ProfileCardContainerClasses.displayCountText}>
<Span className={ProfileCardContainerClasses.displayCountTextColor} size="xs" weight="medium" defaultColor={false}>
+{reviewData.reviewCount - 4}
</Span>
</div>
)}
</div>
);
})}
</div>
)
: <Paragraph size={isSideBar ? "sm" : "xs"}>{reviewData?.hasOptedOut ? "User opted out" : "No reviews yet"}</Paragraph>
}
</div>
</Clickable>
</li>
</ul>
</section>
);
return (
<div className={ProfileCardContainerClasses.icon} key={review.id}>
<img
src={review.sender.profilePhoto}
alt={review.sender.username}
className={showCount ? ProfileCardContainerClasses.displayCount : undefined}
onError={e => e.currentTarget.src = IconUtils.getDefaultAvatarURL(review.sender.discordID)}
/>
{showCount && (
<div className={ProfileCardContainerClasses.displayCountText}>
<Span className={ProfileCardContainerClasses.displayCountTextColor} size="xs" weight="medium" defaultColor={false}>
+{reviewData.reviewCount - 4}
</Span>
</div>
)}
</div>
);
})}
</div>
)
: <Paragraph size={isSideBar ? "sm" : "xs"}>{reviewData?.hasOptedOut ? "User opted out" : "No reviews yet"}</Paragraph>
}
</div>
</Clickable>
</li>
</ul>
</section>
);
return isSideBar
? <div className={DMSideBarClasses.widgetPreviews}>{reviewsSection}</div>
: reviewsSection;
},
return isSideBar
? <div className={DMSideBarClasses.widgetPreviews}>{reviewsSection}</div>
: reviewsSection;
},
},
});