Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' into feat/add-remark-plugin-to-keep-all-linebreaks
Browse files Browse the repository at this point in the history
arnautov-anton authored Nov 27, 2023
2 parents 3b31c92 + 3dd8dab commit 9cb86a1
Showing 19 changed files with 511 additions and 168 deletions.
45 changes: 0 additions & 45 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -23,51 +23,6 @@ jobs:
- name: 🧪 tsc
run: yarn types --noEmit

e2e:
runs-on: ubuntu-latest
name: End-to-end tests
steps:
- uses: actions/checkout@v3

- name: 💾 Cache Dependencies
uses: actions/cache@v3
with:
path: ./node_modules
key: ${{ runner.os }}-${{ matrix.node }}-modules-${{ hashFiles('**/yarn.lock') }}

- name: 🔨 Install Dependencies
run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts

- name: ⚗️ End-to-end tests
run: |
npx playwright install
npx playwright install-deps
yarn e2e-fixtures
# running with --browser=all causes failures
yarn e2e --browser=chromium
yarn e2e --browser=webkit
yarn e2e --browser=firefox
env:
E2E_JUMP_TO_MESSAGE_CHANNEL: jump-to-message
E2E_ADD_MESSAGE_CHANNEL: add-message
E2E_TEST_USER_1: test-user-1
E2E_TEST_USER_2: test-user-2
E2E_APP_KEY: ${{ secrets.E2E_APP_KEY }}
E2E_APP_SECRET: ${{ secrets.E2E_APP_SECRET }}
E2E_TEST_USER_1_TOKEN: ${{ secrets.E2E_TEST_USER_1_TOKEN }}
E2E_TEST_USER_2_TOKEN: ${{ secrets.E2E_TEST_USER_2_TOKEN }}
E2E_ADDITIONAL_CHANNELS: mr-channel-1, mr-channel-2, edit-message-channel, pin-message-channel
E2E_LONG_MESSAGE_LISTS_CHANNEL: navigate-long-message-lists
E2E_ATTACHMENT_SIZING_CHANNEL: attachment-sizing

- name: 🎥 Upload Artifacts
uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: E2E_Artifacts
path: ./test-results
retention-days: 1

test:
runs-on: ubuntu-latest
strategy:
49 changes: 49 additions & 0 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: E2E

on: [push]

jobs:
e2e:
runs-on: ubuntu-latest
name: End-to-end tests
steps:
- uses: actions/checkout@v3

- name: 💾 Cache Dependencies
uses: actions/cache@v3
with:
path: ./node_modules
key: ${{ runner.os }}-${{ matrix.node }}-modules-${{ hashFiles('**/yarn.lock') }}

- name: 🔨 Install Dependencies
run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts

- name: ⚗️ End-to-end tests
run: |
npx playwright install
npx playwright install-deps
yarn e2e-fixtures
# running with --browser=all causes failures
yarn e2e --browser=chromium
yarn e2e --browser=webkit
yarn e2e --browser=firefox
env:
E2E_JUMP_TO_MESSAGE_CHANNEL: jump-to-message
E2E_ADD_MESSAGE_CHANNEL: add-message
E2E_TEST_USER_1: test-user-1
E2E_TEST_USER_2: test-user-2
E2E_APP_KEY: ${{ secrets.E2E_APP_KEY }}
E2E_APP_SECRET: ${{ secrets.E2E_APP_SECRET }}
E2E_TEST_USER_1_TOKEN: ${{ secrets.E2E_TEST_USER_1_TOKEN }}
E2E_TEST_USER_2_TOKEN: ${{ secrets.E2E_TEST_USER_2_TOKEN }}
E2E_ADDITIONAL_CHANNELS: mr-channel-1, mr-channel-2, edit-message-channel, pin-message-channel
E2E_LONG_MESSAGE_LISTS_CHANNEL: navigate-long-message-lists
E2E_ATTACHMENT_SIZING_CHANNEL: attachment-sizing

- name: 🎥 Upload Artifacts
uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: E2E_Artifacts
path: ./test-results
retention-days: 1
27 changes: 27 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,30 @@
## [10.20.1](https://github.com/GetStream/stream-chat-react/compare/v10.20.0...v10.20.1) (2023-11-20)


### Bug Fixes

* calculate pagination stop from custom channel query message limit ([#2180](https://github.com/GetStream/stream-chat-react/issues/2180)) ([8374af1](https://github.com/GetStream/stream-chat-react/commit/8374af1048b81c307d0687d7730df6a96633b7e6))

## [10.20.0](https://github.com/GetStream/stream-chat-react/compare/v10.19.0...v10.20.0) (2023-11-16)


### Bug Fixes

* lift notifications above modal overlay ([#2175](https://github.com/GetStream/stream-chat-react/issues/2175)) ([17d98f4](https://github.com/GetStream/stream-chat-react/commit/17d98f40eaea0a134a501deea14605b71d965871))


### Features

* allow to configure channel query options ([#2177](https://github.com/GetStream/stream-chat-react/issues/2177)) ([4f91d9a](https://github.com/GetStream/stream-chat-react/commit/4f91d9a65e752f4bcab2000f5d633b57ae4d6b0e))

## [10.19.0](https://github.com/GetStream/stream-chat-react/compare/v10.18.0...v10.19.0) (2023-11-14)


### Features

* expose optional remark plugin to keep all line breaks and keep HTML in message text ([#2170](https://github.com/GetStream/stream-chat-react/issues/2170)) ([5b191c9](https://github.com/GetStream/stream-chat-react/commit/5b191c94de6ec4ff483be65b15ea00e754e0eb47))
* introduce MessageListContext ([#2166](https://github.com/GetStream/stream-chat-react/issues/2166)) ([8dcb1ac](https://github.com/GetStream/stream-chat-react/commit/8dcb1acd5e8e3465d6b457b07f5de2923ac2daed))

## [10.18.0](https://github.com/GetStream/stream-chat-react/compare/v10.17.0...v10.18.0) (2023-11-07)


2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -8,7 +8,7 @@
> building chat applications.
[![NPM](https://img.shields.io/npm/v/stream-chat-react.svg)](https://www.npmjs.com/package/stream-chat-react)
[![build](https://github.com/GetStream/stream-chat-react/workflows/test/badge.svg)](https://github.com/GetStream/stream-chat-react/actions)
[![build](https://github.com/GetStream/stream-chat-react/actions/workflows/ci.yml/badge.svg)](https://github.com/GetStream/stream-chat-react/actions)
[![Component Reference](https://img.shields.io/badge/docs-component%20reference-blue.svg)](https://getstream.io/chat/docs/sdk/react/)
[![codecov](https://codecov.io/gh/GetStream/stream-chat-react/branch/master/graph/badge.svg)](https://codecov.io/gh/GetStream/stream-chat-react)

33 changes: 33 additions & 0 deletions docusaurus/docs/React/components/core-components/channel.mdx
Original file line number Diff line number Diff line change
@@ -176,6 +176,39 @@ Custom UI component to display a user's avatar.
| --------- | ---------------------------------------------------------- |
| component | <GHComponentLink text='Avatar' path='/Avatar/Avatar.tsx'/> |

### channelQueryOptions

Optional configuration parameters used for the initial channel query. Applied only if the value of `channel.initialized` is false. If the channel instance has already been initialized (channel has been queried), then the channel query will be skipped and channelQueryOptions will not be applied.

In the example below, we specify, that the first page of messages when a channel is queried should have 20 messages (the default is 100). Note that the `channel` prop has to be passed along `channelQueryOptions`.

```tsx
import {ChannelQueryOptions} from "stream-chat";
import {Channel, useChatContext} from "stream-chat-react";

const channelQueryOptions: ChannelQueryOptions = {
messages: { limit: 20 },
};

type ChannelRendererProps = {
id: string;
type: string;
};

const ChannelRenderer = ({id, type}: ChannelRendererProps) => {
const { client } = useChatContext();
return (
<Channel channel={client.channel(type, id)} channelQueryOptions={channelQueryOptions}>
{/* Channel children */}
</Channel>
);
}
```

| Type |
|-----------------------|
| `ChannelQueryOptions` |

### CooldownTimer

Custom UI component to display the slow mode cooldown timer.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -30,7 +30,7 @@
"dependencies": {
"@braintree/sanitize-url": "^6.0.4",
"@popperjs/core": "^2.11.5",
"@stream-io/stream-chat-css": "^3.13.0",
"@stream-io/stream-chat-css": "^3.14.2",
"clsx": "^2.0.0",
"dayjs": "^1.10.4",
"emoji-mart": "3.0.1",
207 changes: 115 additions & 92 deletions src/components/Channel/Channel.tsx

Large diffs are not rendered by default.

273 changes: 257 additions & 16 deletions src/components/Channel/__tests__/Channel.test.js
Original file line number Diff line number Diff line change
@@ -33,6 +33,19 @@ jest.mock('../../Loading', () => ({
LoadingIndicator: jest.fn(() => <div>loading</div>),
}));

const queryChannelWithNewMessages = (newMessages, channel) =>
// generate new channel mock from existing channel with new messages added
getOrCreateChannelApi(
generateChannel({
channel: {
config: channel.getConfig(),
id: channel.id,
type: channel.type,
},
messages: newMessages,
}),
);

const MockAvatar = ({ name }) => (
<div className='avatar' data-testid='custom-avatar'>
{name}
@@ -272,7 +285,103 @@ describe('Channel', () => {
renderComponent({ channel, chatClient });
});

await waitFor(() => expect(watchSpy).toHaveBeenCalledTimes(1));
await waitFor(() => {
expect(watchSpy).toHaveBeenCalledTimes(1);
expect(watchSpy).toHaveBeenCalledWith(undefined);
});
});

it('should apply channelQueryOptions to channel watch call', async () => {
const { channel, chatClient } = await initClient();
const watchSpy = jest.spyOn(channel, 'watch');
const channelQueryOptions = {
messages: { limit: 20 },
};
await act(() => {
renderComponent({ channel, channelQueryOptions, chatClient });
});

await waitFor(() => {
expect(watchSpy).toHaveBeenCalledTimes(1);
expect(watchSpy).toHaveBeenCalledWith(channelQueryOptions);
});
});

it('should set hasMore state to false if the initial channel query returns less messages than the default initial page size', async () => {
const { channel, chatClient } = await initClient();
useMockedApis(chatClient, [queryChannelWithNewMessages([generateMessage()], channel)]);
let hasMore;
await act(() => {
renderComponent({ channel, chatClient }, ({ hasMore: contextHasMore }) => {
hasMore = contextHasMore;
});
});

await waitFor(() => {
expect(hasMore).toBe(false);
});
});

it('should set hasMore state to true if the initial channel query returns count of messages equal to the default initial page size', async () => {
const { channel, chatClient } = await initClient();
useMockedApis(chatClient, [
queryChannelWithNewMessages(Array.from({ length: 25 }, generateMessage), channel),
]);
let hasMore;
await act(() => {
renderComponent({ channel, chatClient }, ({ hasMore: contextHasMore }) => {
hasMore = contextHasMore;
});
});

await waitFor(() => {
expect(hasMore).toBe(true);
});
});

it('should set hasMore state to false if the initial channel query returns less messages than the custom query channels options message limit', async () => {
const { channel, chatClient } = await initClient();
useMockedApis(chatClient, [queryChannelWithNewMessages([generateMessage()], channel)]);
let hasMore;
const channelQueryOptions = {
messages: { limit: 10 },
};
await act(() => {
renderComponent(
{ channel, channelQueryOptions, chatClient },
({ hasMore: contextHasMore }) => {
hasMore = contextHasMore;
},
);
});

await waitFor(() => {
expect(hasMore).toBe(false);
});
});

it('should set hasMore state to true if the initial channel query returns count of messages equal custom query channels options message limit', async () => {
const { channel, chatClient } = await initClient();
const equalCount = 10;
useMockedApis(chatClient, [
queryChannelWithNewMessages(Array.from({ length: equalCount }, generateMessage), channel),
]);
let hasMore;
const channelQueryOptions = {
messages: { limit: equalCount },
};
await act(() => {
renderComponent(
{ channel, channelQueryOptions, chatClient },
({ hasMore: contextHasMore }) => {
hasMore = contextHasMore;
},
);
});

await waitFor(() => {
expect(hasMore).toBe(true);
});
});

it('should not call watch the current channel on mount if channel is initialized', async () => {
@@ -375,7 +484,7 @@ describe('Channel', () => {

// first, wait for the effect in which the channel is watched,
// so we know the event listener is added to the document.
await waitFor(() => expect(watchSpy).toHaveBeenCalledWith());
await waitFor(() => expect(watchSpy).toHaveBeenCalledWith(undefined));
setTimeout(() => fireEvent(document, new Event('visibilitychange')), 0);

await waitFor(() => expect(markReadSpy).toHaveBeenCalledWith());
@@ -586,19 +695,6 @@ describe('Channel', () => {
});

describe('loading more messages', () => {
const queryChannelWithNewMessages = (newMessages, channel) =>
// generate new channel mock from existing channel with new messages added
getOrCreateChannelApi(
generateChannel({
channel: {
config: channel.getConfig(),
id: channel.id,
type: channel.type,
},
messages: newMessages,
}),
);

const limit = 10;
it('should be able to load more messages', async () => {
const { channel, chatClient } = await initClient();
@@ -646,7 +742,7 @@ describe('Channel', () => {
useMockedApis(chatClient, [queryChannelWithNewMessages(newMessages, channel)]);
loadMore(limit);
} else {
// If message has been added, set our checker variable so we can verify if hasMore is false.
// If message has been added, set our checker variable, so we can verify if hasMore is false.
channelHasMore = hasMore;
}
},
@@ -694,6 +790,151 @@ describe('Channel', () => {
});
await waitFor(() => expect(isLoadingMore).toBe(true));
});

it('should not load the second page, if the previous query has returned less then default limit messages', async () => {
const { channel, chatClient } = await initClient();
const firstPageOfMessages = [generateMessage()];
useMockedApis(chatClient, [queryChannelWithNewMessages(firstPageOfMessages, channel)]);
let queryNextPageSpy;
let contextMessageCount;
await act(() => {
renderComponent({ channel, chatClient }, ({ loadMore, messages: contextMessages }) => {
queryNextPageSpy = jest.spyOn(channel, 'query');
contextMessageCount = contextMessages.length;
loadMore();
});
});

await waitFor(() => {
expect(queryNextPageSpy).not.toHaveBeenCalled();
expect(chatClient.axiosInstance.post).toHaveBeenCalledTimes(1);
expect(chatClient.axiosInstance.post.mock.calls[0][1]).toMatchObject(
expect.objectContaining({ data: {}, presence: false, state: true, watch: false }),
);
expect(contextMessageCount).toBe(firstPageOfMessages.length);
});
});
it('should load the second page, if the previous query has returned message count equal default messages limit', async () => {
const { channel, chatClient } = await initClient();
const firstPageMessages = Array.from({ length: 25 }, generateMessage);
const secondPageMessages = Array.from({ length: 15 }, generateMessage);
useMockedApis(chatClient, [queryChannelWithNewMessages(firstPageMessages, channel)]);
let queryNextPageSpy;
let contextMessageCount;
await act(() => {
renderComponent({ channel, chatClient }, ({ loadMore, messages: contextMessages }) => {
queryNextPageSpy = jest.spyOn(channel, 'query');
contextMessageCount = contextMessages.length;
useMockedApis(chatClient, [queryChannelWithNewMessages(secondPageMessages, channel)]);
loadMore();
});
});

await waitFor(() => {
expect(queryNextPageSpy).toHaveBeenCalledTimes(1);
expect(chatClient.axiosInstance.post).toHaveBeenCalledTimes(2);
expect(chatClient.axiosInstance.post.mock.calls[0][1]).toMatchObject({
data: {},
presence: false,
state: true,
watch: false,
});
expect(chatClient.axiosInstance.post.mock.calls[1][1]).toMatchObject(
expect.objectContaining({
data: {},
messages: { id_lt: firstPageMessages[0].id, limit: 100 },
state: true,
watchers: { limit: 100 },
}),
);
expect(contextMessageCount).toBe(firstPageMessages.length + secondPageMessages.length);
});
});
it('should not load the second page, if the previous query has returned less then custom limit messages', async () => {
const { channel, chatClient } = await initClient();
const channelQueryOptions = {
messages: { limit: 10 },
};
const firstPageOfMessages = [generateMessage()];
useMockedApis(chatClient, [queryChannelWithNewMessages(firstPageOfMessages, channel)]);
let queryNextPageSpy;
let contextMessageCount;
await act(() => {
renderComponent(
{ channel, channelQueryOptions, chatClient },
({ loadMore, messages: contextMessages }) => {
queryNextPageSpy = jest.spyOn(channel, 'query');
contextMessageCount = contextMessages.length;
loadMore(channelQueryOptions.messages.limit);
},
);
});

await waitFor(() => {
expect(queryNextPageSpy).not.toHaveBeenCalled();
expect(chatClient.axiosInstance.post).toHaveBeenCalledTimes(1);
expect(chatClient.axiosInstance.post.mock.calls[0][1]).toMatchObject({
data: {},
messages: {
limit: channelQueryOptions.messages.limit,
},
presence: false,
state: true,
watch: false,
});
expect(contextMessageCount).toBe(firstPageOfMessages.length);
});
});
it('should load the second page, if the previous query has returned message count equal custom messages limit', async () => {
const { channel, chatClient } = await initClient();
const equalCount = 10;
const channelQueryOptions = {
messages: { limit: equalCount },
};
const firstPageMessages = Array.from({ length: equalCount }, generateMessage);
const secondPageMessages = Array.from({ length: equalCount - 1 }, generateMessage);
useMockedApis(chatClient, [queryChannelWithNewMessages(firstPageMessages, channel)]);
let queryNextPageSpy;
let contextMessageCount;

await act(() => {
renderComponent(
{ channel, channelQueryOptions, chatClient },
({ loadMore, messages: contextMessages }) => {
queryNextPageSpy = jest.spyOn(channel, 'query');
contextMessageCount = contextMessages.length;
useMockedApis(chatClient, [queryChannelWithNewMessages(secondPageMessages, channel)]);
loadMore(channelQueryOptions.messages.limit);
},
);
});

await waitFor(() => {
expect(queryNextPageSpy).toHaveBeenCalledTimes(1);
expect(chatClient.axiosInstance.post).toHaveBeenCalledTimes(2);
expect(chatClient.axiosInstance.post.mock.calls[0][1]).toMatchObject({
data: {},
messages: {
limit: channelQueryOptions.messages.limit,
},
presence: false,
state: true,
watch: false,
});
expect(chatClient.axiosInstance.post.mock.calls[1][1]).toMatchObject(
expect.objectContaining({
data: {},
messages: {
id_lt: firstPageMessages[0].id,
limit: channelQueryOptions.messages.limit,
},
state: true,
watchers: { limit: channelQueryOptions.messages.limit },
}),
);
expect(contextMessageCount).toBe(firstPageMessages.length + secondPageMessages.length);
});
});
});

describe('Sending/removing/updating messages', () => {
4 changes: 3 additions & 1 deletion src/components/Channel/channelState.ts
Original file line number Diff line number Diff line change
@@ -30,6 +30,7 @@ export type ChannelStateReducerAction<
}
| {
channel: Channel<StreamChatGenerics>;
hasMore: boolean;
type: 'initStateFromChannel';
}
| {
@@ -132,9 +133,10 @@ export const channelReducer = <
}

case 'initStateFromChannel': {
const { channel } = action;
const { channel, hasMore } = action;
return {
...state,
hasMore,
loading: false,
members: { ...channel.state.members },
messages: [...channel.state.messages],
2 changes: 1 addition & 1 deletion src/components/InfiniteScrollPaginator/InfiniteScroll.tsx
Original file line number Diff line number Diff line change
@@ -91,7 +91,7 @@ export const InfiniteScroll = (props: PropsWithChildren<InfiniteScrollProps>) =>
}

if (isLoading) return;

// FIXME: this triggers loadMore call when a user types messages in thread and the scroll container container expands
if (
reverseOffset < Number(threshold) &&
typeof loadPreviousPageFn === 'function' &&
2 changes: 1 addition & 1 deletion src/components/MML/__tests__/MML.test.js
Original file line number Diff line number Diff line change
@@ -41,7 +41,7 @@ describe('MML', () => {
/>
</div>
`);
});
}, 10000);

it('should render a basic mml', async () => {
const tree = await renderComponent({
1 change: 1 addition & 0 deletions src/components/MessageInput/index.ts
Original file line number Diff line number Diff line change
@@ -5,6 +5,7 @@ export * from './EditMessageForm';
export * from './EmojiPicker';
export * from './hooks';
export * from './icons';
export * from './LinkPreviewList';
export * from './MessageInput';
export * from './MessageInputFlat';
export * from './MessageInputSmall';
1 change: 1 addition & 0 deletions src/components/MessageList/CustomNotification.tsx
Original file line number Diff line number Diff line change
@@ -18,6 +18,7 @@ const UnMemoizedCustomNotification = (props: PropsWithChildren<CustomNotificatio
className={clsx(
`str-chat__custom-notification notification-${type}`,
`str-chat__notification`,
`str-chat-react__notification`,
className,
)}
data-testid='custom-notification'
Original file line number Diff line number Diff line change
@@ -23,7 +23,7 @@ describe('CustomNotification', () => {
expect(tree).toMatchInlineSnapshot(`
<div
aria-live="polite"
className="str-chat__custom-notification notification-undefined str-chat__notification"
className="str-chat__custom-notification notification-undefined str-chat__notification str-chat-react__notification"
data-testid="custom-notification"
>
children
1 change: 1 addition & 0 deletions src/components/MessageList/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
export * from './ConnectionStatus'; // TODO: export this under its own folder
export * from './GiphyPreviewMessage';
export * from './MessageList';
export * from './MessageListNotifications';
export * from './MessageNotification';
export * from './ScrollToBottomButton';
export * from './VirtualizedMessageList';
1 change: 1 addition & 0 deletions src/components/MessageList/utils.ts
Original file line number Diff line number Diff line change
@@ -318,5 +318,6 @@ export const getGroupStyles = <
export const hasMoreMessagesProbably = (returnedCountMessages: number, limit: number) =>
returnedCountMessages === limit;

// @deprecated
export const hasNotMoreMessages = (returnedCountMessages: number, limit: number) =>
returnedCountMessages < limit;
1 change: 1 addition & 0 deletions src/components/Thread/Thread.tsx
Original file line number Diff line number Diff line change
@@ -125,6 +125,7 @@ const ThreadInner = <

useEffect(() => {
if (thread?.id && thread?.reply_count) {
// FIXME: integrators can customize channel query options but cannot customize channel.getReplies() options
loadMoreThread();
}
}, []);
12 changes: 10 additions & 2 deletions src/utils/getChannel.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
import type { Channel, QueryChannelAPIResponse, StreamChat } from 'stream-chat';
import type {
Channel,
ChannelQueryOptions,
QueryChannelAPIResponse,
StreamChat,
} from 'stream-chat';
import type { DefaultStreamChatGenerics } from '../types/types';

/**
@@ -17,12 +22,14 @@ type GetChannelParams<
channel?: Channel<StreamChatGenerics>;
id?: string;
members?: string[];
options?: ChannelQueryOptions<StreamChatGenerics>;
type?: string;
};
/**
* Calls channel.watch() if it was not already recently called. Waits for watch promise to resolve even if it was invoked previously.
* @param client
* @param members
* @param options
* @param type
* @param id
* @param channel
@@ -34,6 +41,7 @@ export const getChannel = async <
client,
id,
members,
options,
type,
}: GetChannelParams<StreamChatGenerics>) => {
if (!channel && !type) {
@@ -60,7 +68,7 @@ export const getChannel = async <
if (queryPromise) {
await queryPromise;
} else {
WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL[originalCid] = theChannel.watch();
WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL[originalCid] = theChannel.watch(options);
await WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL[originalCid];
delete WATCH_QUERY_IN_PROGRESS_FOR_CHANNEL[originalCid];
}
14 changes: 7 additions & 7 deletions yarn.lock
Original file line number Diff line number Diff line change
@@ -2571,10 +2571,10 @@
crypto-browserify "^3.11.0"
process-es6 "^0.11.2"

"@stream-io/stream-chat-css@^3.13.0":
version "3.13.0"
resolved "https://registry.yarnpkg.com/@stream-io/stream-chat-css/-/stream-chat-css-3.13.0.tgz#3c49d17baeddf9d48b4fea377387eca23663b5fe"
integrity sha512-dF0VauSvAVeq+71z9zIru2Jpaj9D3yMK5S2+o1RGApYvGXkl07nS3vcPXv9btZ6c1RFskoVnzG/2xb42P0nleA==
"@stream-io/stream-chat-css@^3.14.2":
version "3.14.2"
resolved "https://registry.yarnpkg.com/@stream-io/stream-chat-css/-/stream-chat-css-3.14.2.tgz#11674178b538e2a7630038a420a642d411ce03de"
integrity sha512-S54qkFRJ4GwQ0uR36z+m3uv1aYD+Ut/tNG0i/9FpjE/mcqQLcpV7GrTYTfZh0hr5w4m3xJ5N+Mruz/A3BHe5mw==

"@stream-io/transliterate@^1.5.5":
version "1.5.5"
@@ -13799,9 +13799,9 @@ stream-browserify@^2.0.1:
readable-stream "^2.0.2"

stream-chat@^8.13.1:
version "8.14.0"
resolved "https://registry.yarnpkg.com/stream-chat/-/stream-chat-8.14.0.tgz#ba96badaaf6c2d3025f31a6d5c0c5545d883c691"
integrity sha512-WEAssYcY/qSJXVK4B39JZJjyBzLSE4Wn+Gliywm8Nc2cmM0+fJF0853H5jZNy6AEeZhzxzRfxwq71r0FfZKudQ==
version "8.14.3"
resolved "https://registry.yarnpkg.com/stream-chat/-/stream-chat-8.14.3.tgz#165402d2ed6fc4085f0cc0121b28c664159f8976"
integrity sha512-GYYf4bfpSdl4Itaw981D7R3OUiSBWUUOQypvUd6tvhs20O76Pu+gR/eOUkpl40jBfYSAFVkbhd/CnDFxJJafug==
dependencies:
"@babel/runtime" "^7.16.3"
"@types/jsonwebtoken" "~9.0.0"

0 comments on commit 9cb86a1

Please sign in to comment.