1.6 KB58 lines
Blame
1/**
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 */
7
8import type {FieldConfig} from './types';
9
10import {extractTokens} from 'isl-components/Tokens';
11import {Typeahead} from 'isl-components/Typeahead';
12import {recentReviewers, SuggestedReviewers} from './SuggestedReviewers';
13import {convertFieldNameToKey, fetchNewSuggestions, getOnClickToken} from './utils';
14
15export function CommitInfoTextField({
16 field,
17 autoFocus,
18 editedMessage,
19 setEditedCommitMessage,
20}: {
21 field: FieldConfig & {type: 'field'};
22 autoFocus: boolean;
23 editedMessage: string;
24 setEditedCommitMessage: (fieldValue: string) => unknown;
25}) {
26 const {key, maxTokens, typeaheadKind} = field;
27 const fieldKey = convertFieldNameToKey(key);
28 const isReviewers = fieldKey === 'reviewers';
29
30 const [tokens] = extractTokens(editedMessage);
31
32 return (
33 <Typeahead
34 tokenString={editedMessage}
35 setTokenString={setEditedCommitMessage}
36 autoFocus={autoFocus}
37 maxTokens={maxTokens}
38 fetchTokens={fetchNewSuggestions.bind(undefined, typeaheadKind)}
39 onSaveNewToken={
40 isReviewers
41 ? value => {
42 recentReviewers.useReviewer(value);
43 }
44 : undefined
45 }
46 data-testid={`commit-info-${fieldKey}-field`}
47 onClickToken={getOnClickToken(field)}
48 renderExtra={
49 !isReviewers
50 ? undefined
51 : saveNewValue => (
52 <SuggestedReviewers existingReviewers={tokens} addReviewer={saveNewValue} />
53 )
54 }
55 />
56 );
57}
58