Skip to content
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: add typings for hooks #3125

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

bradenmacdonald
Copy link
Contributor

Description

This PR adds typescript types for the various hooks that Paragon provides: useWindowSize, useToggle, useArrowKeyNavigation, useIndexOfLastVisibleChild, and useIsVisible. There should be no changes other than to the typings.

Deploy Preview

Include a direct link to your changes in this PR's deploy preview here (e.g., a specific component page).

Merge Checklist

n/a - doesn't apply to this type of PR.

Post-merge Checklist

  • Verify your changes were released to NPM at the expected version.
  • If you'd like, share your contribution in #show-and-tell.
  • 🎉 🙌 Celebrate! Thanks for your contribution.

@openedx-webhooks openedx-webhooks added the open-source-contribution PR author is not from Axim or 2U label Jul 8, 2024
@openedx-webhooks
Copy link

Thanks for the pull request, @bradenmacdonald! Please note that it may take us up to several weeks or months to complete a review and merge your PR.

Feel free to add as much of the following information to the ticket as you can:

  • supporting documentation
  • Open edX discussion forum threads
  • timeline information ("this must be merged by XX date", and why that is)
  • partner information ("this is a course on edx.org")
  • any other information that can help Product understand the context for the PR

All technical communication about the code itself will be done via the GitHub pull request interface. As a reminder, our process documentation is here.

Please let us know once your PR is ready for our review and all tests are green.

Copy link

netlify bot commented Jul 8, 2024

Deploy Preview for paragon-openedx failed.

Built without sensitive environment variables

Name Link
🔨 Latest commit 9c10177
🔍 Latest deploy log https://app.netlify.com/sites/paragon-openedx/deploys/668bf546222dca0008e0e070

@bradenmacdonald
Copy link
Contributor Author

OK, this is very weird. Without any the other changes, merely renaming useIsVisible.jsx to useIsVisible.tsx totally breaks the build of the Paragon docs site (in dev mode, if I restart it, I cannot access the site). But the error is very obscure.

@@ -12,7 +12,7 @@ window.ResizeObserver = window.ResizeObserver
}));

function TestComponent() {
const [containerElementRef, setContainerElementRef] = React.useState(null);
const [containerElementRef, setContainerElementRef] = React.useState<HTMLDivElement | null>(null);
const overflowElementRef = React.useRef(null);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit/question: should both refs get the same type with HTMLDivElement, given both refs are applied to divs below?

@@ -19,7 +20,7 @@ const resetHandlerMocks = () => {
};

// eslint-disable-next-line react/prop-types
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit/unrelated suggestion: could opt to disable prop-types rule for *.test.* files so we don't need to have these eslint disable comments throughout test files.

Comment on lines +7 to +9
function handleEnter(
{ event, currentIndex, activeElement }: { event: KeyboardEvent, currentIndex: number, activeElement: HTMLElement },
) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

curious/suggestion: would it improve readability/understandability of these types if these function args and the return data structure were abstracted into an interface? E.g., something like the following:

interface HandleEnterOptions {
  event: KeyboardEvent;
  currentIndex: number;
  activeElement: HTMLElement;
}

function handleEnter({ event, currentIndex, activeElement }: HandleEnterOptions) { ... }

Similar question for handleArrowKey below

Comment on lines +14 to +15
containerElementRef: Element | null,
overflowElementRef: Element | null,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit/clarification: should these Element be HTMLElement?

isVisible: boolean,
sentinelRef: React.MutableRefObject<HTMLDivElement | null>,
] => {
const sentinelRef = useRef<HTMLDivElement | null>(null);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[clarification] Will this sentinelRef always be applied to a Div element? Might it be used with non-div elements, too?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
open-source-contribution PR author is not from Axim or 2U
Projects
Status: Waiting on Author
Development

Successfully merging this pull request may close these issues.

3 participants