MCPcopy Create free account
hub / github.com/Linen-dev/linen.dev / MessageForm

Function MessageForm

apps/web/ui/MessageForm/index.tsx:149–471  ·  view source on GitHub ↗
({
  id,
  autoFocus,
  currentUser,
  draft,
  progress,
  uploading,
  uploads,
  rows,
  sendOnEnter,
  preview,
  message: initialMessage,
  onSend,
  onMessageChange,
  onCloseThread,
  onReopenThread,
  onFocus,
  onBlur,
  fetchMentions,
  upload,
  useUsersContext,
  mentions = [],
  onKeyDown,
  onKeyUp,
}: Props)

Source from the content-addressed store, hash-verified

147}
148
149function MessageForm({
150 id,
151 autoFocus,
152 currentUser,
153 draft,
154 progress,
155 uploading,
156 uploads,
157 rows,
158 sendOnEnter,
159 preview,
160 message: initialMessage,
161 onSend,
162 onMessageChange,
163 onCloseThread,
164 onReopenThread,
165 onFocus,
166 onBlur,
167 fetchMentions,
168 upload,
169 useUsersContext,
170 mentions = [],
171 onKeyDown,
172 onKeyUp,
173}: Props) {
174 const STORAGE_KEY = currentUser
175 ? `message.draft.${id}.user.${currentUser.id}`
176 : `message.draft.${id}`;
177 const [message, setMessage] = useState<string>(initialMessage || '');
178
179 const [loading, setLoading] = useState(false);
180 const [users, setUsers] = useState<SerializedUser[]>([]);
181 const [contextUsers, addUsers] = useUsersContext();
182 const [position, setPosition] = useState(0);
183 const ref = useRef(null);
184 const mode = getMode(message, position);
185 const mention = getMention(message, position);
186 const allUsers = [...contextUsers, ...mentions];
187
188 useLayoutEffect(() => {
189 if (draft) {
190 const message = localStorage.get(STORAGE_KEY);
191 if (message) {
192 setMessage(message);
193 }
194 }
195 }, [draft]);
196
197 useEffect(() => {
198 onMessageChange?.(message);
199 draft && localStorage.set(STORAGE_KEY, message);
200 return () => {
201 draft && localStorage.set(STORAGE_KEY, message);
202 };
203 }, [message]);
204
205 const handleSubmit = async (event: React.SyntheticEvent, callback?: any) => {
206 event.preventDefault();

Callers

nothing calls this directly

Calls 15

getCaretPositionFunction · 0.90
postprocessFunction · 0.90
setCaretPositionFunction · 0.90
useUsersContextFunction · 0.85
getModeFunction · 0.85
getMentionFunction · 0.85
addUsersFunction · 0.85
getMentionIndexFunction · 0.85
onKeyDownFunction · 0.85
isMentionKeyFunction · 0.85
handleSendFunction · 0.85
onKeyUpFunction · 0.50

Tested by

no test coverage detected