-
Notifications
You must be signed in to change notification settings - Fork 396
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: disable context menu (fix #1432) #1515
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
리뷰 완료합니다.
return observable<ContextMenu>({ | ||
posInfo: null, | ||
createMenuGroups: createMenuGroups || createDefaultContextMenu, | ||
return isNull(createMenuGroups) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 부분은 굳이 삼항연산자로 이렇게 긴 로직을 구분해서 넣는 것 보다는 isNull
일 때 early return 하는거로 처리하는게 어떨까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
기존 타입 유지하면서 내부 프로퍼티 값을 다르게 하는 것으로 변경하면서 긴 로직에 대한 삼항 연산자 제거했습니다.
isParentExistWithClassNames(ev.target as HTMLElement, ['cell-header', 'cell-dummy']) || | ||
!this.context.store.contextMenu | ||
) { | ||
if (target) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
어떤 때에 target
값이 없는지 궁금하네요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
곰곰히 생각해보니 target
같은 요소가 없을 상황이 없어서 해당 조건문 제거했습니다.
pos: pos || (contextMenu.posInfo?.pos ?? null), | ||
menuItems: menuItems || contextMenu.flattenTopMenuItems, | ||
pos: pos || (contextMenu?.posInfo?.pos ?? null), | ||
menuItems: menuItems || contextMenu!.flattenTopMenuItems, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이건 옵셔널 체닝 활용 안해도 괜찮을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
기존에는 해당 내부 로직으로 들어올 일이 없어서 옵셔널 체이닝을 사용하지 않았지만, 변경된 코드에서는 그렇지 않기 때문에 옵셔널 체이닝을 사용하는 것으로 변경했습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
리뷰 완료합니다.
@@ -3,7 +3,7 @@ | |||
TOAST UI Grid는 `v4.18.0` 버전부터 컨텍스트 메뉴 기능을 제공한다. 셀에서 마우스 우측 버튼을 누르면 컨텍스트 메뉴가 나오며, `contextMenu` 옵션으로 원하는 컨텍스트 메뉴를 설정할 수 있다. | |||
|
|||
### 옵션 | |||
`contextMenu` 옵션은 반드시 함수가 되어야 하며, 함수의 반환값은 아래와 같은 2차원 배열이어야 한다. | |||
`contextMenu` 옵션은 함수가 되어야 하며, 함수의 반환값은 아래와 같은 2차원 배열이어야 한다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
`contextMenu` 옵션은 함수가 되어야 하며, 함수의 반환값은 아래와 같은 2차원 배열이어야 한다. | |
`contextMenu` 옵션은 함수나 null이 되어야 하며, 함수의 반환값은 아래와 같은 2차원 배열이어야 한다. |
는 어떤가요? 아래에 null일 때 동작을 알려주긴 하는데 옵션 자체는 함수나 null이 될 수 있으니까요.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
말씀해주신 내용으로 변경했습니다.
@@ -51,6 +51,7 @@ const grid = Grid({ | |||
|
|||
![image](https://user-images.githubusercontent.com/37766175/123938532-2a3e0800-d9d2-11eb-9ded-ec4562cb026e.png) | |||
|
|||
`contextMenu` 옵션이 `null`이면 컨텍스트 메뉴는 비활성화 된다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이 경우 브라우저 기본 컨텍스트 메뉴가 활성화된다는 점을 알려주고 이미지도 보여주면 좋곘네요ㅎㅎ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
브라우저 기본 컨텍스트가 활성화 된다는 것을 명시하고, 관련된 이미지 추가했습니다.
? createMenuGroups | ||
: observable<ContextMenu>({ | ||
posInfo: null, | ||
createMenuGroups: createMenuGroups || createDefaultContextMenu, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
조건에 따라서 createMenuGroups
프로퍼티를 null
로 설정하는게 더 낫지 않나요? 가져다 쓰는 쪽에서는 타입을 일관되게 유지할 수 있도록 하는게 이득이 될 것 같아서요.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
결국 createMenuGroups
가 null로 넘어오는 상황이었어서 가져다 쓰는 쪽에서는 타입을 일관되게 유지할 수 있도록 ContextMenu
의 타입 정의에서 null
을 제거하고 CreateMenuGroups
타입 정의에 null
을 추가했습니다.
@@ -26,5 +26,5 @@ export interface Store { | |||
readonly summary: Summary; | |||
readonly renderState: RenderState; | |||
readonly filterLayerState: FilterLayerState; | |||
readonly contextMenu: ContextMenu; | |||
readonly contextMenu: ContextMenu | null; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
위에서 언급한 것처럼 ContextMenu
로 타입을 통일하고 스토어 안에서 분기처리하는게 사용하는 쪽에서 좀 더 일관성있게 할 수 있지 않을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
위에 언급한 것 처럼 ContextMenu
의 타입 정의에서 null
을 제거하고 CreateMenuGroups
타입 정의에 null
을 추가했습니다.
const mouseupEvent = new MouseEvent('mouseup', { | ||
bubbles: true, | ||
cancelable: true, | ||
}); | ||
target.dispatchEvent(mouseupEvent); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
mouseup 발생했을 때 실행되는 dispatch들을 호출하는게 더 가독성에 좋을 것 같습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
mouseup
이 발생됐을 때 mousemove
등에 할당한 핸들러를 제거해주어야 합니다. 그러나 mouseup
이벤트에 할당된 핸들러인 clearDocumentEvents
가 private
이고 이를 public
으로 변경하는게 좋을 것 같지 않아서 기존 처럼 mouseup
을 발생 시키는 것으로 유지 했습니다.
다만, 가독성 개선을 위해 helper/mouse
에 emitMouseup
함수를 추가하고 이를 호출하는 것으로 변경 했습니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
리뷰 완료입니다! 고생하셨어요~
Please check if the PR fulfills these requirements
fix #xxx[,#xxx]
, where "xxx" is the issue number)Description
null
to thecontextMenu
option.To-Be
Thank you for your contribution to TOAST UI product. 🎉 😘 ✨