Skip to content

Commit

Permalink
[web] Add "file" input to imageMenuItem in EditUserAvatarMenu
Browse files Browse the repository at this point in the history
Summary:
We add hidden `input` to `EditUserAvatarMenu`, and have browser file selection dialog appear when `imageMenuItem` is clicked.

For now we just log the selected file.

Initially we'll kick off image upload/avatar update as soon as an image is selected, but it will probably make sense to introduce some sort of `ImageSelectionModal` once the most basic flow is complete.

---

Depends on D8313

Test Plan: Logs selected file info as expected:

Reviewers: ashoat, ginsu, rohan

Reviewed By: ginsu

Subscribers: tomek

Differential Revision: https://phab.comm.dev/D8315
  • Loading branch information
atulsmadhugiri committed Jun 27, 2023
1 parent 30f18a8 commit dbfb73e
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 3 deletions.
4 changes: 4 additions & 0 deletions web/avatars/edit-user-avatar-menu.css
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,7 @@
.editAvatarBadge:hover {
filter: brightness(0.8);
}

input[type='file'] {
display: none;
}
37 changes: 34 additions & 3 deletions web/avatars/edit-user-avatar-menu.react.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import css from './edit-user-avatar-menu.css';
import EmojiAvatarSelectionModal from './emoji-avatar-selection-modal.react.js';
import MenuItem from '../components/menu-item.react.js';
import Menu from '../components/menu.react.js';
import { allowedMimeTypeString } from '../media/file-utils.js';

const editIcon = (
<div className={css.editAvatarBadge}>
Expand Down Expand Up @@ -47,10 +48,30 @@ function EditUserAvatarMenu(): React.Node {
),
[openEmojiSelectionModal],
);
const imageMenuItem = React.useMemo(
() => <MenuItem key="image" text="Select image" icon="image-1" />,

const imageInputRef = React.useRef();
const onImageMenuItemClicked = React.useCallback(
() => imageInputRef.current?.click(),
[],
);

const onImageSelected = React.useCallback(
event => console.log(event.target.files),
[],
);

const imageMenuItem = React.useMemo(
() => (
<MenuItem
key="image"
text="Select image"
icon="image-1"
onClick={onImageMenuItemClicked}
/>
),
[onImageMenuItemClicked],
);

const removeMenuItem = React.useMemo(
() => (
<MenuItem
Expand All @@ -68,7 +89,17 @@ function EditUserAvatarMenu(): React.Node {
[emojiMenuItem, imageMenuItem, removeMenuItem],
);

return <Menu icon={editIcon}>{menuItems}</Menu>;
return (
<div>
<input
type="file"
onChange={onImageSelected}
ref={imageInputRef}
accept={allowedMimeTypeString}
/>
<Menu icon={editIcon}>{menuItems}</Menu>
</div>
);
}

export default EditUserAvatarMenu;

0 comments on commit dbfb73e

Please sign in to comment.