Merge branch 'carousel-seen-feature' into 'develop'
Carousel: make `seen` optional, only hit the API if features.carouselSeen is supported See merge request soapbox-pub/soapbox!2001
This commit is contained in:
commit
e2c7933513
5 changed files with 29 additions and 12 deletions
|
@ -21,7 +21,7 @@ jest.mock('../../../hooks/useDimensions', () => ({
|
|||
describe('<FeedCarousel />', () => {
|
||||
let store: any;
|
||||
|
||||
describe('with "feedUserFiltering" disabled', () => {
|
||||
describe('with "carousel" disabled', () => {
|
||||
beforeEach(() => {
|
||||
store = {
|
||||
instance: {
|
||||
|
@ -42,7 +42,7 @@ describe('<FeedCarousel />', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('with "feedUserFiltering" enabled', () => {
|
||||
describe('with "carousel" enabled', () => {
|
||||
beforeEach(() => {
|
||||
store = {
|
||||
instance: {
|
||||
|
@ -70,6 +70,8 @@ describe('<FeedCarousel />', () => {
|
|||
mock.onGet('/api/v1/accounts/1/statuses').reply(200, [], {
|
||||
link: '<https://example.com/api/v1/accounts/1/statuses?since_id=1>; rel=\'prev\'',
|
||||
});
|
||||
|
||||
mock.onPost('/api/v1/truth/carousels/avatars/seen').reply(200);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
@ -96,7 +96,7 @@ const FeedCarousel = () => {
|
|||
if (avatars.length > 0) {
|
||||
setSeenAccountIds(
|
||||
avatars
|
||||
.filter((avatar) => avatar.seen)
|
||||
.filter((avatar) => avatar.seen !== false)
|
||||
.map((avatar) => avatar.account_id),
|
||||
);
|
||||
}
|
||||
|
|
|
@ -59,7 +59,7 @@ const HomePage: React.FC = ({ children }) => {
|
|||
</Card>
|
||||
)}
|
||||
|
||||
{features.feedUserFiltering && <FeedCarousel />}
|
||||
{features.carousel && <FeedCarousel />}
|
||||
|
||||
{children}
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
import { useMutation, useQuery } from '@tanstack/react-query';
|
||||
|
||||
import { useApi } from 'soapbox/hooks';
|
||||
import { useApi, useFeatures } from 'soapbox/hooks';
|
||||
|
||||
export type Avatar = {
|
||||
account_id: string
|
||||
account_avatar: string
|
||||
acct: string
|
||||
seen: boolean
|
||||
seen?: boolean
|
||||
}
|
||||
|
||||
const CarouselKeys = {
|
||||
|
@ -36,10 +36,15 @@ function useCarouselAvatars() {
|
|||
|
||||
function useMarkAsSeen() {
|
||||
const api = useApi();
|
||||
const features = useFeatures();
|
||||
|
||||
return useMutation((account_id: string) => api.post('/api/v1/truth/carousels/avatars/seen', {
|
||||
account_id,
|
||||
}));
|
||||
return useMutation(async (accountId: string) => {
|
||||
if (features.carouselSeen) {
|
||||
await void api.post('/api/v1/truth/carousels/avatars/seen', {
|
||||
account_id: accountId,
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
export { useCarouselAvatars, useMarkAsSeen };
|
|
@ -205,6 +205,19 @@ const getInstanceFeatures = (instance: Instance) => {
|
|||
v.software === PLEROMA,
|
||||
]),
|
||||
|
||||
/**
|
||||
* Whether to show the Feed Carousel for suggested Statuses.
|
||||
* @see GET /api/v1/truth/carousels/avatars
|
||||
* @see GET /api/v1/truth/carousels/suggestions
|
||||
*/
|
||||
carousel: v.software === TRUTHSOCIAL,
|
||||
|
||||
/**
|
||||
* Ability to mark a carousel avatar as "seen."
|
||||
* @see POST /api/v1/truth/carousels/avatars/seen
|
||||
*/
|
||||
carouselSeen: v.software === TRUTHSOCIAL,
|
||||
|
||||
/**
|
||||
* Ability to accept a chat.
|
||||
* POST /api/v1/pleroma/chats/:id/accept
|
||||
|
@ -371,9 +384,6 @@ const getInstanceFeatures = (instance: Instance) => {
|
|||
/** Whether the instance federates. */
|
||||
federating: federation.get('enabled', true) === true, // Assume true unless explicitly false
|
||||
|
||||
/** Whether or not to show the Feed Carousel for suggested Statuses */
|
||||
feedUserFiltering: v.software === TRUTHSOCIAL,
|
||||
|
||||
/**
|
||||
* Can edit and manage timeline filters (aka "muted words").
|
||||
* @see {@link https://docs.joinmastodon.org/methods/accounts/filters/}
|
||||
|
|
Loading…
Reference in a new issue