npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

useseparatetoggleclick

v0.2.1

Published

react hook for material-ui TreeView onNodeToggle / expanded to facilitate different expansion behaviour for icon and label

Downloads

369

Readme

Installation

npm install useseparatetoggleclick Has typescript definition files

Use case

Currently the TreeView will treat a label click and an icon click the same. If you want to only expand when one or the other is clicked you need to find a solution. This is a solution using a react hook.

There are 3 hooks available

useSeparateToggleClick - this has the most control

useLabelToggleClick - use this if you only want label clicks to toggle expansion useIconToggleClick - use this if you only want icon click to toggle expansion

Signatures

export interface UsedSeparateToggleClick {
  IconWrapper: any;
  expanded: string[];
  onNodeToggle: (evt: React.ChangeEvent<{}>, newExpanded: string[]) => void;
}
export type ShouldToggleClick = (
  isIconClick: boolean,
  isExpanding: boolean
) => boolean;
export type ToggleReason = 'expand' | 'collapse' | 'nochange';
export type ShouldToggleNonClick = (
  reason: ToggleReason,
  newOrRemoved: Array<string>
) => boolean | Array<string>;

export const useSeparateToggleClick = (
  shouldToggleClick: ShouldToggleClick,
  initialExpanded: string[] = [],
  shouldToggleNonClick: ShouldToggleNonClick = () => true
): UsedSeparateToggleClick 

useLabelToggleClick and useIconToggleClick only have the two optional parameters as they provide the relevant ShouldToggleClick;

Usage

It is likely that you only need to provide the ShouldToggleClick argument. Return true to proceed with the toggle.

ShouldToggleNonClick is for toggling due to the keyboard ( Left arrow, Right arrow and *). It differs to ShouldToggleClick in that the reason is a string rather than isExpanding. Currently onNodeToggle is called by mui even if there is no change. Here you can return true to proceed, false to not or you can return an array of node ids that will be the new expanded.

The hook returns an object to be used. Note that onNodeToggle is created with React.useCallback, so too should your shouldToggleClick and shouldToggleNonClick functions.

a) Use onNodeToggle as the TreeView onNodeToggle prop.

b) Use expanded as the TreeView expanded prop.

c) Wrap all icons in the IconWrapper.

Example Sandbox

Example of all usages