Browse Source

Add fallback ID hook

Use fallback ID hook instead of defining verbose React hooks.
master
TheoryOfNekomata 1 year ago
parent
commit
0f0c823761
25 changed files with 57 additions and 45 deletions
  1. +2
    -3
      categories/blob/react/src/components/FileSelectBox/index.tsx
  2. +1
    -0
      categories/choice/react/package.json
  3. +2
    -2
      categories/choice/react/src/components/ComboBox/index.tsx
  4. +2
    -2
      categories/choice/react/src/components/DropdownSelect/index.tsx
  5. +2
    -2
      categories/choice/react/src/components/MenuSelect/index.tsx
  6. +3
    -2
      categories/choice/react/src/components/RadioButton/index.tsx
  7. +3
    -2
      categories/choice/react/src/components/RadioTickBox/index.tsx
  8. +2
    -2
      categories/formatted/react/src/components/EmailInput/index.tsx
  9. +2
    -2
      categories/formatted/react/src/components/PatternTextInput/index.tsx
  10. +2
    -3
      categories/formatted/react/src/components/PhoneNumberInput/index.tsx
  11. +2
    -2
      categories/formatted/react/src/components/UrlInput/index.tsx
  12. +2
    -2
      categories/freeform/react/src/components/MultilineTextInput/index.tsx
  13. +2
    -2
      categories/freeform/react/src/components/TextInput/index.tsx
  14. +2
    -2
      categories/multichoice/react/src/components/MenuMultiSelect/index.tsx
  15. +2
    -3
      categories/multichoice/react/src/components/TagInput/index.tsx
  16. +2
    -2
      categories/multichoice/react/src/components/ToggleButton/index.tsx
  17. +2
    -2
      categories/multichoice/react/src/components/ToggleSwitch/index.tsx
  18. +2
    -2
      categories/multichoice/react/src/components/ToggleTickBox/index.tsx
  19. +1
    -0
      categories/number/react/package.json
  20. +2
    -2
      categories/number/react/src/components/NumberSpinner/index.tsx
  21. +1
    -0
      categories/temporal/react/package.json
  22. +2
    -2
      categories/temporal/react/src/components/DateDropdown/index.tsx
  23. +2
    -2
      categories/temporal/react/src/components/TimeSpinner/index.tsx
  24. +3
    -2
      packages/react-utils/src/event.ts
  25. +9
    -0
      pnpm-lock.yaml

+ 2
- 3
categories/blob/react/src/components/FileSelectBox/index.tsx View File

@@ -1,5 +1,5 @@
import * as React from 'react';
import { delegateTriggerEvent, useClientSide } from '@modal-sh/react-utils';
import { useClientSide, useFallbackId } from '@modal-sh/react-utils';
import clsx from 'clsx';

export interface CommonPreviewProps<F extends Partial<File> = Partial<File>> {
@@ -64,8 +64,7 @@ export const FileSelectBox = React.forwardRef<FileSelectBoxDerivedElement, FileS
const defaultRef = React.useRef<HTMLInputElement>(null);
const ref = forwardedRef ?? defaultRef;
const labelId = React.useId();
const defaultId = React.useId();
const id = idProp ?? defaultId;
const id = useFallbackId(idProp);

const doSetFileList: React.ChangeEventHandler<HTMLInputElement> = (e) => {
if (enhancedProp) {


+ 1
- 0
categories/choice/react/package.json View File

@@ -62,6 +62,7 @@
},
"dependencies": {
"@tesseract-design/web-base": "workspace:*",
"@modal-sh/react-utils": "workspace:*",
"clsx": "^1.2.1",
"tailwindcss": "3.3.2"
},


+ 2
- 2
categories/choice/react/src/components/ComboBox/index.tsx View File

@@ -1,5 +1,6 @@
import * as React from 'react';
import { TextControl } from '@tesseract-design/web-base';
import { useFallbackId } from '@modal-sh/react-utils';
import clsx from 'clsx';

/**
@@ -85,8 +86,7 @@ export const ComboBox = React.forwardRef<ComboBoxDerivedElement, ComboBoxProps>(
) => {
const labelId = React.useId();
const datalistId = React.useId();
const defaultId = React.useId();
const id = idProp ?? defaultId;
const id = useFallbackId(idProp);

let resultInputMode = inputMode as React.HTMLProps<ComboBoxDerivedElement>['inputMode'];
if (type === 'text' && resultInputMode === 'search') {


+ 2
- 2
categories/choice/react/src/components/DropdownSelect/index.tsx View File

@@ -2,6 +2,7 @@ import * as React from 'react';
import { TextControl } from '@tesseract-design/web-base';
import plugin from 'tailwindcss/plugin';
import clsx from 'clsx';
import { useFallbackId } from '@modal-sh/react-utils';

/**
* Derived HTML element of the {@link DropdownSelect} component.
@@ -85,8 +86,7 @@ export const DropdownSelect = React.forwardRef<DropdownSelectDerivedElement, Dro
forwardedRef,
) => {
const labelId = React.useId();
const defaultId = React.useId();
const id = idProp ?? defaultId;
const id = useFallbackId(idProp);

return (
<div


+ 2
- 2
categories/choice/react/src/components/MenuSelect/index.tsx View File

@@ -2,6 +2,7 @@ import * as React from 'react';
import { TextControl } from '@tesseract-design/web-base';
import clsx from 'clsx';
import plugin from 'tailwindcss/plugin';
import { useFallbackId } from '@modal-sh/react-utils';

/**
* Derived HTML element of the {@link MenuSelect} component.
@@ -93,8 +94,7 @@ export const MenuSelect = React.forwardRef<MenuSelectDerivedElement, MenuSelectP
forwardedRef,
) => {
const labelId = React.useId();
const defaultId = React.useId();
const id = idProp ?? defaultId;
const id = useFallbackId(idProp);

return (
<div


+ 3
- 2
categories/choice/react/src/components/RadioButton/index.tsx View File

@@ -2,6 +2,7 @@ import * as React from 'react';
import clsx from 'clsx';
import { Button } from '@tesseract-design/web-base';
import plugin from 'tailwindcss/plugin';
import { useFallbackId } from '@modal-sh/react-utils';

/**
* Derived HTML element of the {@link RadioButton} component.
@@ -72,8 +73,8 @@ export const RadioButton = React.forwardRef<RadioButtonDerivedElement, RadioButt
},
forwardedRef,
) => {
const defaultId = React.useId();
const id = idProp ?? defaultId;
const id = useFallbackId(idProp);
return (
<>
<input


+ 3
- 2
categories/choice/react/src/components/RadioTickBox/index.tsx View File

@@ -1,6 +1,7 @@
import * as React from 'react';
import clsx from 'clsx';
import plugin from 'tailwindcss/plugin';
import { useFallbackId } from '@modal-sh/react-utils';

/**
* Derived HTML element of the {@link RadioTickBox} component.
@@ -51,8 +52,8 @@ export const RadioTickBox = React.forwardRef<RadioTickBoxDerivedElement, RadioTi
},
forwardedRef,
) => {
const defaultId = React.useId();
const id = idProp ?? defaultId;
const id = useFallbackId(idProp);
return (
<div
className={clsx(


+ 2
- 2
categories/formatted/react/src/components/EmailInput/index.tsx View File

@@ -1,6 +1,7 @@
import * as React from 'react';
import { TextControl } from '@tesseract-design/web-base';
import clsx from 'clsx';
import {useFallbackId} from '@modal-sh/react-utils';

export type EmailInputDerivedElement = HTMLInputElement;

@@ -66,8 +67,7 @@ export const EmailInput = React.forwardRef<EmailInputDerivedElement, EmailInputP
forwardedRef,
) => {
const labelId = React.useId();
const defaultId = React.useId();
const id = idProp ?? defaultId;
const id = useFallbackId(idProp);

const pattern = (
Array.isArray(domains) && domains.length > 0


+ 2
- 2
categories/formatted/react/src/components/PatternTextInput/index.tsx View File

@@ -1,6 +1,7 @@
import * as React from 'react';
import { TextControl } from '@tesseract-design/web-base';
import clsx from 'clsx';
import {useFallbackId} from '@modal-sh/react-utils';

export type PatternTextInputDerivedElement = HTMLInputElement;

@@ -80,8 +81,7 @@ export const PatternTextInput = React.forwardRef<
forwardedRef,
) => {
const labelId = React.useId();
const defaultId = React.useId();
const id = idProp ?? defaultId;
const id = useFallbackId(idProp);

let resultInputMode = inputMode as React.HTMLProps<PatternTextInputDerivedElement>['inputMode'];
if (type === 'text' && resultInputMode === 'search') {


+ 2
- 3
categories/formatted/react/src/components/PhoneNumberInput/index.tsx View File

@@ -1,6 +1,6 @@
import * as React from 'react';
import { TextControl } from '@tesseract-design/web-base';
import { useClientSide, useProxyInput } from '@modal-sh/react-utils';
import {useClientSide, useFallbackId, useProxyInput} from '@modal-sh/react-utils';
import PhoneInput, { Country, Value } from 'react-phone-number-input/input';
import clsx from 'clsx';

@@ -83,8 +83,7 @@ export const PhoneNumberInput = React.forwardRef<
value?.toString() ?? defaultValue?.toString() ?? '',
);
const labelId = React.useId();
const defaultId = React.useId();
const id = idProp ?? defaultId;
const id = useFallbackId(idProp);
const {
defaultRef,
handleChange: handlePhoneInputChange,


+ 2
- 2
categories/formatted/react/src/components/UrlInput/index.tsx View File

@@ -1,6 +1,7 @@
import * as React from 'react';
import { TextControl } from '@tesseract-design/web-base';
import clsx from 'clsx';
import {useFallbackId} from '@modal-sh/react-utils';

export type UrlInputDerivedElement = HTMLInputElement;

@@ -60,8 +61,7 @@ export const UrlInput = React.forwardRef<UrlInputDerivedElement, UrlInputProps>(
forwardedRef,
) => {
const labelId = React.useId();
const defaultId = React.useId();
const id = idProp ?? defaultId;
const id = useFallbackId(idProp);

return (
<div


+ 2
- 2
categories/freeform/react/src/components/MultilineTextInput/index.tsx View File

@@ -1,6 +1,7 @@
import * as React from 'react';
import { TextControl } from '@tesseract-design/web-base';
import clsx from 'clsx';
import {useFallbackId} from '@modal-sh/react-utils';

export type MultilineTextInputDerivedElement = HTMLTextAreaElement;

@@ -65,8 +66,7 @@ export const MultilineTextInput = React.forwardRef<
forwardedRef,
) => {
const labelId = React.useId();
const defaultId = React.useId();
const id = idProp ?? defaultId;
const id = useFallbackId(idProp);

return (
<div


+ 2
- 2
categories/freeform/react/src/components/TextInput/index.tsx View File

@@ -1,6 +1,7 @@
import * as React from 'react';
import { TextControl } from '@tesseract-design/web-base';
import clsx from 'clsx';
import {useFallbackId} from '@modal-sh/react-utils';

export type TextInputDerivedElement = HTMLInputElement;

@@ -77,8 +78,7 @@ export const TextInput = React.forwardRef<TextInputDerivedElement, TextInputProp
forwardedRef,
) => {
const labelId = React.useId();
const defaultId = React.useId();
const id = idProp ?? defaultId;
const id = useFallbackId(idProp);

let resultInputMode = inputMode as React.HTMLProps<TextInputDerivedElement>['inputMode'];
if (type === 'text' && resultInputMode === 'search') {


+ 2
- 2
categories/multichoice/react/src/components/MenuMultiSelect/index.tsx View File

@@ -2,6 +2,7 @@ import * as React from 'react';
import { TextControl } from '@tesseract-design/web-base';
import clsx from 'clsx';
import plugin from 'tailwindcss/plugin';
import {useFallbackId} from '@modal-sh/react-utils';

export type MenuMultiSelectDerivedElement = HTMLSelectElement;

@@ -92,8 +93,7 @@ export const MenuMultiSelect = React.forwardRef<
forwardedRef,
) => {
const labelId = React.useId();
const defaultId = React.useId();
const id = idProp ?? defaultId;
const id = useFallbackId(idProp);

return (
<div


+ 2
- 3
categories/multichoice/react/src/components/TagInput/index.tsx View File

@@ -1,7 +1,7 @@
import * as React from 'react';
import { TagsInput } from 'react-tag-input-component';
import clsx from 'clsx';
import { useClientSide, useProxyInput } from '@modal-sh/react-utils';
import {useClientSide, useFallbackId, useProxyInput} from '@modal-sh/react-utils';
import { TextControl } from '@tesseract-design/web-base';
import plugin from 'tailwindcss/plugin';

@@ -260,8 +260,7 @@ export const TagInput = React.forwardRef<TagInputDerivedElement, TagInputProps>(
});
const ref = forwardedRef ?? defaultRef;
const labelId = React.useId();
const defaultId = React.useId();
const id = idProp ?? defaultId;
const id = useFallbackId(idProp);

const handleFocus: React.FocusEventHandler<TagInputDerivedElement> = (e) => {
if (!clientSide) {


+ 2
- 2
categories/multichoice/react/src/components/ToggleButton/index.tsx View File

@@ -2,6 +2,7 @@ import * as React from 'react';
import clsx from 'clsx';
import { Button } from '@tesseract-design/web-base';
import plugin from 'tailwindcss/plugin';
import {useFallbackId} from '@modal-sh/react-utils';

export type ToggleButtonDerivedElement = HTMLInputElement;

@@ -52,8 +53,7 @@ export const ToggleButton = React.forwardRef<ToggleButtonDerivedElement, ToggleB
) => {
const defaultRef = React.useRef<ToggleButtonDerivedElement>(null);
const ref = forwardedRef ?? defaultRef;
const defaultId = React.useId();
const id = idProp ?? defaultId;
const id = useFallbackId(idProp);

React.useEffect(() => {
if (typeof ref === 'function') {


+ 2
- 2
categories/multichoice/react/src/components/ToggleSwitch/index.tsx View File

@@ -1,6 +1,7 @@
import * as React from 'react';
import clsx from 'clsx';
import plugin from 'tailwindcss/plugin';
import {useFallbackId} from '@modal-sh/react-utils';

export type ToggleSwitchDerivedElement = HTMLInputElement;

@@ -149,8 +150,7 @@ export const ToggleSwitch = React.forwardRef<ToggleSwitchDerivedElement, ToggleS
) => {
const defaultRef = React.useRef<ToggleSwitchDerivedElement>(null);
const ref = forwardedRef ?? defaultRef;
const defaultId = React.useId();
const id = idProp ?? defaultId;
const id = useFallbackId(idProp);

React.useEffect(() => {
if (typeof ref === 'function') {


+ 2
- 2
categories/multichoice/react/src/components/ToggleTickBox/index.tsx View File

@@ -1,6 +1,7 @@
import * as React from 'react';
import clsx from 'clsx';
import plugin from 'tailwindcss/plugin';
import {useFallbackId} from '@modal-sh/react-utils';

export type ToggleTickBoxDerivedElement = HTMLInputElement;

@@ -44,8 +45,7 @@ export const ToggleTickBox = React.forwardRef<ToggleTickBoxDerivedElement, Toggl
) => {
const defaultRef = React.useRef<ToggleTickBoxDerivedElement>(null);
const ref = forwardedRef ?? defaultRef;
const defaultId = React.useId();
const id = idProp ?? defaultId;
const id = useFallbackId(idProp);

React.useEffect(() => {
if (typeof ref === 'function') {


+ 1
- 0
categories/number/react/package.json View File

@@ -62,6 +62,7 @@
},
"dependencies": {
"@tesseract-design/web-base": "workspace:*",
"@modal-sh/react-utils": "workspace:*",
"clsx": "^1.2.1",
"tailwindcss": "3.3.3"
},


+ 2
- 2
categories/number/react/src/components/NumberSpinner/index.tsx View File

@@ -2,6 +2,7 @@ import * as React from 'react';
import { TextControl } from '@tesseract-design/web-base';
import clsx from 'clsx';
import plugin from 'tailwindcss/plugin';
import {useFallbackId} from '@modal-sh/react-utils';

export type NumberSpinnerDerivedElement = HTMLInputElement;

@@ -81,8 +82,7 @@ export const NumberSpinner = React.forwardRef<NumberSpinnerDerivedElement, Numbe
forwardedRef,
) => {
const labelId = React.useId();
const defaultId = React.useId();
const id = idProp ?? defaultId;
const id = useFallbackId(idProp);

return (
<div


+ 1
- 0
categories/temporal/react/package.json View File

@@ -59,6 +59,7 @@
},
"dependencies": {
"@tesseract-design/web-base": "workspace:*",
"@modal-sh/react-utils": "workspace:*",
"clsx": "^1.2.1",
"tailwindcss": "3.3.3"
},


+ 2
- 2
categories/temporal/react/src/components/DateDropdown/index.tsx View File

@@ -2,6 +2,7 @@ import * as React from 'react';
import { TextControl } from '@tesseract-design/web-base';
import clsx from 'clsx';
import plugin from 'tailwindcss/plugin';
import {useFallbackId} from '@modal-sh/react-utils';

export type DateDropdownDerivedElement = HTMLInputElement;

@@ -90,8 +91,7 @@ export const DateDropdown = React.forwardRef<
forwardedRef,
) => {
const labelId = React.useId();
const defaultId = React.useId();
const id = idProp ?? defaultId;
const id = useFallbackId(idProp);

return (
<div


+ 2
- 2
categories/temporal/react/src/components/TimeSpinner/index.tsx View File

@@ -2,6 +2,7 @@ import * as React from 'react';
import { TextControl } from '@tesseract-design/web-base';
import clsx from 'clsx';
import plugin from 'tailwindcss/plugin';
import {useFallbackId} from '@modal-sh/react-utils';

export type TimeSpinnerDerivedElement = HTMLInputElement;

@@ -105,8 +106,7 @@ export const TimeSpinner = React.forwardRef<
forwardedRef,
) => {
const labelId = React.useId();
const defaultId = React.useId();
const id = idProp ?? defaultId;
const id = useFallbackId(idProp);

const [hh, mm, ss = 0] = step.split(':').map((s: string) => parseInt(s, 10)) as number[];
const stepValue = ss + (mm * 60) + (hh * 3600);


+ 3
- 2
packages/react-utils/src/event.ts View File

@@ -13,7 +13,9 @@ export const delegateTriggerEvent = <T extends HTMLElement>(
'TEXTAREA': window.HTMLTextAreaElement,
} as const;

const { [target.tagName as keyof typeof TAG_NAME_ELEMENT_CONSTRUCTOR]: elementCtor } = TAG_NAME_ELEMENT_CONSTRUCTOR;
const {
[target.tagName as keyof typeof TAG_NAME_ELEMENT_CONSTRUCTOR]: elementCtor,
} = TAG_NAME_ELEMENT_CONSTRUCTOR;

if (!elementCtor) {
return;
@@ -31,6 +33,5 @@ export const delegateTriggerEvent = <T extends HTMLElement>(
const simulatedEvent = new Event(eventName, {bubbles: true});
target.dispatchEvent(simulatedEvent);
}
return;
}
};

+ 9
- 0
pnpm-lock.yaml View File

@@ -145,6 +145,9 @@ importers:

categories/choice/react:
dependencies:
'@modal-sh/react-utils':
specifier: workspace:*
version: link:../../../packages/react-utils
'@tesseract-design/web-base':
specifier: workspace:*
version: link:../../../base
@@ -584,6 +587,9 @@ importers:

categories/number/react:
dependencies:
'@modal-sh/react-utils':
specifier: workspace:*
version: link:../../../packages/react-utils
'@tesseract-design/web-base':
specifier: workspace:*
version: link:../../../base
@@ -648,6 +654,9 @@ importers:

categories/temporal/react:
dependencies:
'@modal-sh/react-utils':
specifier: workspace:*
version: link:../../../packages/react-utils
'@tesseract-design/web-base':
specifier: workspace:*
version: link:../../../base


Loading…
Cancel
Save