Skip to content

Commit 4709cac

Browse files
authored
feat: Update ChannelPreview to support MFM lastMessage. (#722)
Fixes: [UIKIT-4351](https://sendbird.atlassian.net/browse/UIKIT-4351) Update ChannelPreview to support MFM lastMessage.
1 parent 7a3af4a commit 4709cac

File tree

3 files changed

+72
-24
lines changed

3 files changed

+72
-24
lines changed

.eslintrc.js

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,39 +12,39 @@ module.exports = {
1212
Atomics: 'readonly',
1313
SharedArrayBuffer: 'readonly',
1414
},
15-
parser: "@babel/eslint-parser",
15+
parser: '@babel/eslint-parser',
1616
parserOptions: {
1717
ecmaFeatures: {
1818
jsx: true,
1919
},
2020
ecmaVersion: 2018,
2121
sourceType: 'module',
2222
},
23-
plugins: [ 'react', 'babel', '@typescript-eslint' ],
23+
plugins: ['react', 'babel', '@typescript-eslint'],
2424
rules: {
2525
// uncomment 'linebreak-style' to build in windows - its not adviced to commit from windows
2626
// read more - https://community.perforce.com/s/article/3096
2727
// ['linebreak-style']: 0,
28-
"import/extensions": [
29-
"error",
30-
"ignorePackages",
28+
'import/extensions': [
29+
'error',
30+
'ignorePackages',
3131
{
32-
"js": "never",
33-
"jsx": "never",
34-
"ts": "never",
35-
"tsx": "never",
32+
js: 'never',
33+
jsx: 'never',
34+
ts: 'never',
35+
tsx: 'never',
3636
},
3737
],
38-
"react/forbid-prop-types": 0,
38+
'react/forbid-prop-types': 0,
3939
// we don't want to force to define function component only
40-
"react/function-component-definition": "off",
41-
"no-unused-expressions": "off",
42-
"@typescript-eslint/no-unused-expressions": ["error"],
40+
'react/function-component-definition': 'off',
41+
'no-unused-expressions': 'off',
42+
'@typescript-eslint/no-unused-expressions': ['error'],
4343
},
4444
settings: {
45-
"import/resolver": {
45+
'import/resolver': {
4646
node: {
47-
extensions: [".js", ".jsx", ".ts", ".tsx"],
47+
extensions: ['.js', '.jsx', '.ts', '.tsx'],
4848
},
4949
},
5050
},

src/modules/ChannelList/components/ChannelPreview/__tests__/ChannelPreview.spec.js

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,45 @@ jest.setSystemTime(new Date('March 2, 2022 08:15:52'));
1313
describe('ChannelPreview', () => {
1414
test('utils/getLastMessage returns lastMessage', function () {
1515
const text = 'example-text';
16-
const channel = {};
17-
const channel2 = { lastMessage: { message: '' } };
18-
const channel3 = { lastMessage: { message: text } };
16+
const channel = {
17+
lastMessage: {
18+
isUserMessage: () => true,
19+
isFileMessage: () => false,
20+
isMultipleFilesMessage: () => false,
21+
}
22+
};
23+
const channel2 = {
24+
lastMessage: {
25+
message: '',
26+
isUserMessage: () => true,
27+
isFileMessage: () => false,
28+
isMultipleFilesMessage: () => false,
29+
}
30+
};
31+
const channel3 = {
32+
lastMessage: {
33+
message: text,
34+
isUserMessage: () => true,
35+
isFileMessage: () => false,
36+
isMultipleFilesMessage: () => false,
37+
}
38+
};
39+
const channel4 = {
40+
lastMessage: {
41+
name: 'file1',
42+
isUserMessage: () => false,
43+
isFileMessage: () => true,
44+
isMultipleFilesMessage: () => false,
45+
}
46+
};
47+
const channel5 = {
48+
lastMessage: {
49+
fileInfoList: [{ fileName: 'file1' }, { fileName: 'file2' }],
50+
isUserMessage: () => false,
51+
isFileMessage: () => false,
52+
isMultipleFilesMessage: () => true,
53+
}
54+
};
1955
expect(
2056
getLastMessage(channel)
2157
).toBe('');
@@ -25,6 +61,12 @@ describe('ChannelPreview', () => {
2561
expect(
2662
getLastMessage(channel3)
2763
).toBe(text);
64+
expect(
65+
getLastMessage(channel4)
66+
).toBe('file1');
67+
expect(
68+
getLastMessage(channel5)
69+
).toBe('file1');
2870
});
2971

3072
test('utils/getChannelTitle returns channelTitle', function () {

src/modules/ChannelList/components/ChannelPreview/utils.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import isToday from 'date-fns/isToday';
22
import format from 'date-fns/format';
33
import isThisYear from 'date-fns/isThisYear';
44
import isYesterday from 'date-fns/isYesterday';
5-
65
import { truncateString } from '../../../../utils';
76
import { LabelStringSet } from '../../../../ui/Label';
87

@@ -51,13 +50,20 @@ export const getTotalMembers = (channel) => (
5150
: 0
5251
);
5352

54-
const getPrettyLastMessage = (message = {}) => {
53+
const getPrettyLastMessage = (message = null) => {
5554
const MAXLEN = 30;
56-
const { messageType, name } = message;
57-
if (messageType === 'file') {
58-
return truncateString(name, MAXLEN);
55+
if (!message) return '';
56+
if (message.isFileMessage()) {
57+
return truncateString(message.name, MAXLEN);
58+
}
59+
if (message.isMultipleFilesMessage()) {
60+
const { fileInfoList } = message;
61+
if (fileInfoList.length > 0) {
62+
return truncateString(fileInfoList[0].fileName, MAXLEN);
63+
}
64+
return '';
5965
}
60-
return message.message;
66+
return message.message ?? '';
6167
};
6268

6369
export const getLastMessage = (channel) => (channel?.lastMessage ? getPrettyLastMessage(channel?.lastMessage) : '');

0 commit comments

Comments
 (0)