Merge branch 'rm-lodash' into 'main'
Replace some usages of lodash See merge request soapbox-pub/soapbox!3268
This commit is contained in:
commit
17440c4dbc
|
@ -3,9 +3,6 @@
|
||||||
* @module soapbox/build-config
|
* @module soapbox/build-config
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// eslint-disable-next-line import/extensions
|
|
||||||
import trimEnd from 'lodash/trimEnd.js';
|
|
||||||
|
|
||||||
const {
|
const {
|
||||||
NODE_ENV,
|
NODE_ENV,
|
||||||
BACKEND_URL,
|
BACKEND_URL,
|
||||||
|
@ -13,9 +10,9 @@ const {
|
||||||
SENTRY_DSN,
|
SENTRY_DSN,
|
||||||
} = process.env;
|
} = process.env;
|
||||||
|
|
||||||
const sanitizeURL = (url: string | undefined = ''): string => {
|
const sanitizeURL = (url: string = ''): string => {
|
||||||
try {
|
try {
|
||||||
return trimEnd(new URL(url).toString(), '/');
|
return new URL(url).href;
|
||||||
} catch {
|
} catch {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
import pick from 'lodash/pick';
|
|
||||||
import { describe, expect, it } from 'vitest';
|
import { describe, expect, it } from 'vitest';
|
||||||
|
|
||||||
import search, { addCustomToPool } from './search.ts';
|
import search, { addCustomToPool } from './search.ts';
|
||||||
|
|
||||||
const trimEmojis = (emoji: any) => pick(emoji, ['id', 'unified', 'native', 'custom']);
|
const trimEmojis = ({ id, unified, native, custom }: any) => ({ id, unified, native, custom });
|
||||||
|
|
||||||
describe('emoji_index', () => {
|
describe('emoji_index', () => {
|
||||||
it('should give same result for emoji_index_light and emoji-mart', () => {
|
it('should give same result for emoji_index_light and emoji-mart', () => {
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import clsx from 'clsx';
|
import clsx from 'clsx';
|
||||||
import noop from 'lodash/noop';
|
|
||||||
import { Suspense } from 'react';
|
import { Suspense } from 'react';
|
||||||
|
|
||||||
import { toggleStatusReport } from 'soapbox/actions/reports.ts';
|
import { toggleStatusReport } from 'soapbox/actions/reports.ts';
|
||||||
|
@ -66,7 +65,7 @@ const StatusCheckBox: React.FC<IStatusCheckBox> = ({ id, disabled }) => {
|
||||||
media={status.media_attachments}
|
media={status.media_attachments}
|
||||||
sensitive={status.sensitive}
|
sensitive={status.sensitive}
|
||||||
height={110}
|
height={110}
|
||||||
onOpenMedia={noop}
|
onOpenMedia={() => {}}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
import noop from 'lodash/noop';
|
|
||||||
|
|
||||||
import PollOption from 'soapbox/components/polls/poll-option.tsx';
|
import PollOption from 'soapbox/components/polls/poll-option.tsx';
|
||||||
import Stack from 'soapbox/components/ui/stack.tsx';
|
import Stack from 'soapbox/components/ui/stack.tsx';
|
||||||
import { useAppSelector } from 'soapbox/hooks/useAppSelector.ts';
|
import { useAppSelector } from 'soapbox/hooks/useAppSelector.ts';
|
||||||
|
@ -26,7 +24,7 @@ const PollPreview: React.FC<IPollPreview> = ({ pollId }) => {
|
||||||
index={i}
|
index={i}
|
||||||
showResults={false}
|
showResults={false}
|
||||||
active={false}
|
active={false}
|
||||||
onToggle={noop}
|
onToggle={() => {}}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</Stack>
|
</Stack>
|
||||||
|
|
|
@ -4,7 +4,6 @@ import {
|
||||||
Record as ImmutableRecord,
|
Record as ImmutableRecord,
|
||||||
fromJS,
|
fromJS,
|
||||||
} from 'immutable';
|
} from 'immutable';
|
||||||
import trimStart from 'lodash/trimStart';
|
|
||||||
|
|
||||||
import { normalizeUsername } from 'soapbox/utils/input.ts';
|
import { normalizeUsername } from 'soapbox/utils/input.ts';
|
||||||
import { toTailwind } from 'soapbox/utils/tailwind.ts';
|
import { toTailwind } from 'soapbox/utils/tailwind.ts';
|
||||||
|
@ -123,7 +122,7 @@ type SoapboxConfigMap = ImmutableMap<string, any>;
|
||||||
|
|
||||||
const normalizeCryptoAddress = (address: unknown): CryptoAddress => {
|
const normalizeCryptoAddress = (address: unknown): CryptoAddress => {
|
||||||
return CryptoAddressRecord(ImmutableMap(fromJS(address))).update('ticker', ticker => {
|
return CryptoAddressRecord(ImmutableMap(fromJS(address))).update('ticker', ticker => {
|
||||||
return trimStart(ticker, '$').toLowerCase();
|
return ticker.replace(/^\$/, '').toLowerCase();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import { Map as ImmutableMap } from 'immutable';
|
import { Map as ImmutableMap } from 'immutable';
|
||||||
import sumBy from 'lodash/sumBy';
|
|
||||||
import { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
import { beforeEach, describe, expect, it } from 'vitest';
|
import { beforeEach, describe, expect, it } from 'vitest';
|
||||||
|
|
||||||
|
@ -79,8 +78,9 @@ describe('isLastMessage', () => {
|
||||||
],
|
],
|
||||||
pageParams: [undefined],
|
pageParams: [undefined],
|
||||||
};
|
};
|
||||||
const initialFlattenedData = flattenPages(initialQueryData);
|
const initialFlattenedData = flattenPages<IChat>(initialQueryData);
|
||||||
expect(sumBy(initialFlattenedData, (chat: IChat) => chat.unread)).toBe(0);
|
const count = initialFlattenedData!.reduce((n, chat) => n + chat.unread, 0);
|
||||||
|
expect(count).toBe(0);
|
||||||
|
|
||||||
queryClient.setQueryData(ChatKeys.chatSearch(), initialQueryData);
|
queryClient.setQueryData(ChatKeys.chatSearch(), initialQueryData);
|
||||||
|
|
||||||
|
@ -99,7 +99,8 @@ describe('isLastMessage', () => {
|
||||||
pageParams: [undefined],
|
pageParams: [undefined],
|
||||||
};
|
};
|
||||||
const initialFlattenedData = flattenPages(initialQueryData);
|
const initialFlattenedData = flattenPages(initialQueryData);
|
||||||
expect(sumBy(initialFlattenedData, (chat: IChat) => chat.unread)).toBe(0);
|
const count = initialFlattenedData!.reduce((n, chat) => n + chat.unread, 0);
|
||||||
|
expect(count).toBe(0);
|
||||||
|
|
||||||
queryClient.setQueryData(ChatKeys.chatSearch(), initialQueryData);
|
queryClient.setQueryData(ChatKeys.chatSearch(), initialQueryData);
|
||||||
|
|
||||||
|
@ -297,7 +298,9 @@ describe('useChatActions', () => {
|
||||||
pageParams: [undefined],
|
pageParams: [undefined],
|
||||||
};
|
};
|
||||||
const initialFlattenedData = flattenPages(initialQueryData);
|
const initialFlattenedData = flattenPages(initialQueryData);
|
||||||
expect(sumBy(initialFlattenedData, (chat: IChat) => chat.unread)).toBe(0);
|
const count = initialFlattenedData!.reduce((n, chat) => n + chat.unread, 0);
|
||||||
|
|
||||||
|
expect(count).toBe(0);
|
||||||
|
|
||||||
queryClient.setQueryData(ChatKeys.chatSearch(), initialQueryData);
|
queryClient.setQueryData(ChatKeys.chatSearch(), initialQueryData);
|
||||||
|
|
||||||
|
@ -308,8 +311,10 @@ describe('useChatActions', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
const nextQueryData = queryClient.getQueryData(ChatKeys.chatSearch());
|
const nextQueryData = queryClient.getQueryData(ChatKeys.chatSearch());
|
||||||
const nextFlattenedData = flattenPages(nextQueryData as any);
|
const nextFlattenedData = flattenPages<IChat>(nextQueryData as any);
|
||||||
expect(sumBy(nextFlattenedData as any, (chat: IChat) => chat.unread)).toBe(nextUnreadCount);
|
const nextCount = nextFlattenedData!.reduce((n, chat) => n + chat.unread, 0);
|
||||||
|
|
||||||
|
expect(nextCount).toBe(nextUnreadCount);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import { InfiniteData, keepPreviousData, useInfiniteQuery, useMutation, useQuery } from '@tanstack/react-query';
|
import { InfiniteData, keepPreviousData, useInfiniteQuery, useMutation, useQuery } from '@tanstack/react-query';
|
||||||
import sumBy from 'lodash/sumBy';
|
|
||||||
|
|
||||||
import { importFetchedAccount, importFetchedAccounts } from 'soapbox/actions/importer/index.ts';
|
import { importFetchedAccount, importFetchedAccounts } from 'soapbox/actions/importer/index.ts';
|
||||||
import { ChatWidgetScreens, useChatContext } from 'soapbox/contexts/chat-context.tsx';
|
import { ChatWidgetScreens, useChatContext } from 'soapbox/contexts/chat-context.tsx';
|
||||||
|
@ -146,7 +145,7 @@ const useChats = (search?: string) => {
|
||||||
const { next } = response.pagination();
|
const { next } = response.pagination();
|
||||||
const hasMore = !!next;
|
const hasMore = !!next;
|
||||||
|
|
||||||
setUnreadChatsCount(Number(response.headers.get('x-unread-messages-count')) || sumBy(data, (chat) => chat.unread));
|
setUnreadChatsCount(Number(response.headers.get('x-unread-messages-count')) || data.reduce((n, chat) => n + chat.unread, 0));
|
||||||
|
|
||||||
// Set the relationships to these users in the redux store.
|
// Set the relationships to these users in the redux store.
|
||||||
fetchRelationships.mutate({ accountIds: data.map((item) => item.account.id) });
|
fetchRelationships.mutate({ accountIds: data.map((item) => item.account.id) });
|
||||||
|
@ -225,17 +224,17 @@ const useChatActions = (chatId: string) => {
|
||||||
.then(async (response) => {
|
.then(async (response) => {
|
||||||
const data = await response.json();
|
const data = await response.json();
|
||||||
updatePageItem(ChatKeys.chatSearch(), data, (o, n) => o.id === n.id);
|
updatePageItem(ChatKeys.chatSearch(), data, (o, n) => o.id === n.id);
|
||||||
const queryData = queryClient.getQueryData<InfiniteData<PaginatedResult<unknown>>>(ChatKeys.chatSearch());
|
const queryData = queryClient.getQueryData<InfiniteData<PaginatedResult<IChat>>>(ChatKeys.chatSearch());
|
||||||
|
|
||||||
if (queryData) {
|
if (queryData) {
|
||||||
const flattenedQueryData: any = flattenPages(queryData)?.map((chat: any) => {
|
const flattenedQueryData = flattenPages<IChat>(queryData)?.map((chat: any) => {
|
||||||
if (chat.id === data.id) {
|
if (chat.id === data.id) {
|
||||||
return data;
|
return data;
|
||||||
} else {
|
} else {
|
||||||
return chat;
|
return chat;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
setUnreadChatsCount(sumBy(flattenedQueryData, (chat: IChat) => chat.unread));
|
setUnreadChatsCount(flattenedQueryData?.reduce((n, chat) => n + chat.unread, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import { InfiniteData } from '@tanstack/react-query';
|
import { InfiniteData } from '@tanstack/react-query';
|
||||||
import sumBy from 'lodash/sumBy';
|
|
||||||
|
|
||||||
import { normalizeChatMessage } from 'soapbox/normalizers/index.ts';
|
import { normalizeChatMessage } from 'soapbox/normalizers/index.ts';
|
||||||
import { ChatKeys } from 'soapbox/queries/chats.ts';
|
import { ChatKeys } from 'soapbox/queries/chats.ts';
|
||||||
|
@ -83,7 +82,7 @@ const getUnreadChatsCount = (): number => {
|
||||||
queryClient.getQueryData<InfiniteData<PaginatedResult<Chat>>>(ChatKeys.chatSearch()),
|
queryClient.getQueryData<InfiniteData<PaginatedResult<Chat>>>(ChatKeys.chatSearch()),
|
||||||
);
|
);
|
||||||
|
|
||||||
return sumBy(chats, chat => chat.unread);
|
return chats?.reduce((acc, chat) => acc + chat.unread, 0) ?? 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Update the query cache for an individual Chat Message */
|
/** Update the query cache for an individual Chat Message */
|
||||||
|
|
|
@ -4,7 +4,6 @@ import {
|
||||||
Set as ImmutableSet,
|
Set as ImmutableSet,
|
||||||
fromJS,
|
fromJS,
|
||||||
} from 'immutable';
|
} from 'immutable';
|
||||||
import trimStart from 'lodash/trimStart';
|
|
||||||
|
|
||||||
import { type MRFSimple, mrfSimpleSchema } from 'soapbox/schemas/pleroma.ts';
|
import { type MRFSimple, mrfSimpleSchema } from 'soapbox/schemas/pleroma.ts';
|
||||||
|
|
||||||
|
@ -27,7 +26,7 @@ const toSimplePolicy = (configs: ImmutableList<Config>): MRFSimple => {
|
||||||
const reducer = (acc: ImmutableMap<string, any>, curr: ImmutableMap<string, any>) => {
|
const reducer = (acc: ImmutableMap<string, any>, curr: ImmutableMap<string, any>) => {
|
||||||
const key = curr.getIn(['tuple', 0]) as string;
|
const key = curr.getIn(['tuple', 0]) as string;
|
||||||
const hosts = curr.getIn(['tuple', 1]) as ImmutableList<string>;
|
const hosts = curr.getIn(['tuple', 1]) as ImmutableList<string>;
|
||||||
return acc.set(trimStart(key, ':'), ImmutableSet(hosts));
|
return acc.set(key.replace(/^:/, ''), ImmutableSet(hosts));
|
||||||
};
|
};
|
||||||
|
|
||||||
if (config?.get) {
|
if (config?.get) {
|
||||||
|
|
Loading…
Reference in New Issue