Skip to content

Commit 6ed186f

Browse files
committed
feat: initiate composer text from the default value
1 parent 26659f3 commit 6ed186f

File tree

2 files changed

+44
-6
lines changed

2 files changed

+44
-6
lines changed

src/messageComposer/textComposer.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,17 @@ export const textIsEmpty = (text: string) => {
2424
);
2525
};
2626

27-
const initState = (message?: DraftMessage | LocalMessage): TextComposerState => {
27+
const initState = ({
28+
composer,
29+
message,
30+
}: {
31+
composer: MessageComposer;
32+
message?: DraftMessage | LocalMessage;
33+
}): TextComposerState => {
2834
if (!message) {
2935
return {
3036
mentionedUsers: [],
31-
text: '',
37+
text: composer.config.text.defaultValue ?? '',
3238
selection: { start: 0, end: 0 },
3339
};
3440
}
@@ -42,16 +48,14 @@ const initState = (message?: DraftMessage | LocalMessage): TextComposerState =>
4248
};
4349
};
4450

45-
// todo: MessageInputProps?:
46-
// additionalTextareaProps.defaultValue
4751
export class TextComposer {
4852
readonly composer: MessageComposer;
4953
readonly state: StateStore<TextComposerState>;
5054
middlewareExecutor: TextComposerMiddlewareExecutor;
5155

5256
constructor({ composer, message }: TextComposerOptions) {
5357
this.composer = composer;
54-
this.state = new StateStore<TextComposerState>(initState(message));
58+
this.state = new StateStore<TextComposerState>(initState({ composer, message }));
5559
this.middlewareExecutor = new TextComposerMiddlewareExecutor({ composer });
5660
}
5761

@@ -102,7 +106,7 @@ export class TextComposer {
102106
}
103107

104108
initState = ({ message }: { message?: DraftMessage | LocalMessage } = {}) => {
105-
this.state.next(initState(message));
109+
this.state.next(initState({ composer: this.composer, message }));
106110
};
107111

108112
setMentionedUsers(users: UserResponse[]) {

test/unit/MessageComposer/textComposer.test.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,16 @@ describe('TextComposer', () => {
109109
});
110110
});
111111

112+
it('should initialize with custom config', () => {
113+
const defaultValue = 'XXX';
114+
const { messageComposer } = setup({ config: { defaultValue } });
115+
expect(messageComposer.textComposer.state.getLatestValue()).toEqual({
116+
mentionedUsers: [],
117+
text: defaultValue,
118+
selection: { start: 0, end: 0 },
119+
});
120+
});
121+
112122
it('should initialize with message', () => {
113123
const message: LocalMessage = {
114124
id: 'test-message',
@@ -136,6 +146,30 @@ describe('TextComposer', () => {
136146
{ id: 'user-2', name: 'User 2' },
137147
]);
138148
});
149+
150+
it('should ignore default value when initialized with message', () => {
151+
const defaultValue = 'XXX';
152+
const message: LocalMessage = {
153+
id: 'test-message',
154+
type: 'regular',
155+
text: 'Hello world',
156+
created_at: new Date(),
157+
deleted_at: null,
158+
pinned_at: null,
159+
status: 'pending',
160+
updated_at: new Date(),
161+
};
162+
163+
const {
164+
messageComposer: { textComposer },
165+
} = setup({ composition: message, config: { defaultValue } });
166+
167+
expect(textComposer.text).toBe('Hello world');
168+
expect(textComposer.selection).toEqual({
169+
start: message.text?.length,
170+
end: message.text?.length,
171+
});
172+
});
139173
});
140174

141175
describe('getters', () => {

0 commit comments

Comments
 (0)