Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F32159140
typeahead-utils.js
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
typeahead-utils.js
View Options
// @flow
import
*
as
React
from
'react'
;
import
{
getNewTextAndSelection
,
getRawChatMention
,
type
Selection
,
type
TypeaheadTooltipActionItem
,
type
MentionTypeaheadSuggestionItem
,
}
from
'lib/shared/mention-utils.js'
;
import
{
stringForUserExplicit
}
from
'lib/shared/user-utils.js'
;
import
{
validChatNameRegexString
}
from
'lib/utils/validation-utils.js'
;
// Native regex is a little bit different than web one as
// there are no named capturing groups yet on native.
const
nativeMentionTypeaheadRegex
:
RegExp
=
new
RegExp
(
`((^(.|\n)*\\s+)|^)@(
${
validChatNameRegexString
}
)?$`
,
);
type
FocusAndUpdateTextAndSelection
=
(
text
:
string
,
selection
:
Selection
,
)
=>
void
;
export
type
TypeaheadTooltipActionsParams
<
SuggestionItemType
>
=
{
+
suggestions
:
$ReadOnlyArray
<
SuggestionItemType
>
,
+
textBeforeAtSymbol
:
string
,
+
text
:
string
,
+
query
:
string
,
+
focusAndUpdateTextAndSelection
:
FocusAndUpdateTextAndSelection
,
};
type
MentionTypeaheadTooltipActionExecuteHandlerParams
=
{
+
textBeforeAtSymbol
:
string
,
+
text
:
string
,
+
query
:
string
,
+
mentionText
:
string
,
+
focusAndUpdateTextAndSelection
:
FocusAndUpdateTextAndSelection
,
};
function
mentionTypeaheadTooltipActionExecuteHandler
({
textBeforeAtSymbol
,
text
,
query
,
mentionText
,
focusAndUpdateTextAndSelection
,
}
:
MentionTypeaheadTooltipActionExecuteHandlerParams
)
{
const
{
newText
,
newSelectionStart
}
=
getNewTextAndSelection
(
textBeforeAtSymbol
,
text
,
query
,
mentionText
,
);
focusAndUpdateTextAndSelection
(
newText
,
{
start
:
newSelectionStart
,
end
:
newSelectionStart
,
});
}
function
mentionTypeaheadTooltipActions
({
suggestions
,
textBeforeAtSymbol
,
text
,
query
,
focusAndUpdateTextAndSelection
,
}
:
TypeaheadTooltipActionsParams
<
MentionTypeaheadSuggestionItem
>
)
:
$ReadOnlyArray
<
TypeaheadTooltipActionItem
<
MentionTypeaheadSuggestionItem
>
,
>
{
const
actions
=
[];
for
(
const
suggestion
of
suggestions
)
{
if
(
suggestion
.
type
===
'user'
)
{
const
{
userInfo
}
=
suggestion
;
const
resolvedUsername
=
stringForUserExplicit
(
userInfo
);
if
(
resolvedUsername
===
'anonymous'
)
{
continue
;
}
const
mentionText
=
`@
${
resolvedUsername
}
`
;
actions
.
push
({
key
:
userInfo
.
id
,
execute
:
()
=>
mentionTypeaheadTooltipActionExecuteHandler
({
textBeforeAtSymbol
,
text
,
query
,
mentionText
,
focusAndUpdateTextAndSelection
,
}),
actionButtonContent
:
{
type
:
'user'
,
userInfo
,
},
});
}
else
if
(
suggestion
.
type
===
'chat'
)
{
const
{
threadInfo
}
=
suggestion
;
const
mentionText
=
getRawChatMention
(
threadInfo
);
actions
.
push
({
key
:
threadInfo
.
id
,
execute
:
()
=>
mentionTypeaheadTooltipActionExecuteHandler
({
textBeforeAtSymbol
,
text
,
query
,
mentionText
,
focusAndUpdateTextAndSelection
,
}),
actionButtonContent
:
{
type
:
'chat'
,
threadInfo
,
},
});
}
}
return
actions
;
}
export
type
TypeaheadTooltipButtonComponentType
<
SuggestionItemType
>
=
React
.
ComponentType
<
{
+
item
:
TypeaheadTooltipActionItem
<
SuggestionItemType
>
,
}
>
;
export
{
nativeMentionTypeaheadRegex
,
mentionTypeaheadTooltipActions
};
File Metadata
Details
Attached
Mime Type
text/x-java
Expires
Sun, Dec 7, 4:26 PM (18 h, 9 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5836836
Default Alt Text
typeahead-utils.js (3 KB)
Attached To
Mode
rCOMM Comm
Attached
Detach File
Event Timeline
Log In to Comment