Skip to content

Commit 6121563

Browse files
Type re-exports on WC autoInputs to forward the props
1 parent 431d6b8 commit 6121563

13 files changed

+61
-67
lines changed

packages/react/src/auto/polaris-wc/inputs/PolarisWCAutoBooleanInput.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
import React, { useCallback } from "react";
1+
import React, { type ComponentProps, useCallback } from "react";
22
import { autoInput } from "../../AutoInput.js";
33
import { useBooleanInputController } from "../../hooks/useBooleanInputController.js";
4-
import { type AutoBooleanInputProps } from "../../shared/AutoInputTypes.js";
4+
import type { StringOnlyLabel, AutoBooleanInputProps } from "../../shared/AutoInputTypes.js";
55

6-
export type PolarisWCAutoBooleanInputProps = AutoBooleanInputProps & {
7-
disabled?: boolean;
8-
};
6+
export type PolarisWCAutoBooleanInputProps = StringOnlyLabel<AutoBooleanInputProps> & Partial<ComponentProps<"s-checkbox">>;
97

108
/**
119
* A boolean checkbox within AutoForm using Polaris Web Components.

packages/react/src/auto/polaris-wc/inputs/PolarisWCAutoDateTimePicker.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import { isValidDate, utcToZonedTime, zonedTimeToUtc } from "../../../dateTimeUt
33
import type { GadgetDateTimeConfig } from "../../../internal/gql/graphql.js";
44
import { autoInput } from "../../AutoInput.js";
55
import { useDateTimeField } from "../../hooks/useDateTimeField.js";
6-
import type { AutoDateTimeInputProps } from "../../shared/AutoInputTypes.js";
6+
import type { AutoDateTimeInputProps, StringOnlyLabel } from "../../shared/AutoInputTypes.js";
77

8-
export interface PolarisWCAutoDateTimePickerProps extends AutoDateTimeInputProps {
8+
export type PolarisWCAutoDateTimePickerProps = StringOnlyLabel<AutoDateTimeInputProps> & {
99
/**
1010
* The HTML ID of the DateTime field.
1111
*/
@@ -14,7 +14,7 @@ export interface PolarisWCAutoDateTimePickerProps extends AutoDateTimeInputProps
1414
* Hides the time input.
1515
*/
1616
hideTime?: boolean;
17-
}
17+
};
1818

1919
/**
2020
* A date and time picker within AutoForm using Polaris Web Components.

packages/react/src/auto/polaris-wc/inputs/PolarisWCAutoEncryptedStringInput.tsx

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
import React, { useCallback } from "react";
1+
import React, { type ComponentProps, useCallback } from "react";
22
import { autoInput } from "../../AutoInput.js";
33
import { useStringInputController } from "../../hooks/useStringInputController.js";
4-
import { type AutoEncryptedStringInputProps } from "../../shared/AutoInputTypes.js";
4+
import { type AutoEncryptedStringInputProps, type StringOnlyLabel } from "../../shared/AutoInputTypes.js";
55

6-
export type PolarisWCAutoEncryptedStringInputProps = AutoEncryptedStringInputProps & {
7-
placeholder?: string;
8-
disabled?: boolean;
9-
};
6+
export type PolarisWCAutoEncryptedStringInputProps = StringOnlyLabel<AutoEncryptedStringInputProps> &
7+
Partial<ComponentProps<"s-password-field">>;
108

119
/**
1210
* An encrypted string input within AutoForm using Polaris Web Components.
@@ -21,7 +19,7 @@ export type PolarisWCAutoEncryptedStringInputProps = AutoEncryptedStringInputPro
2119
* @returns The AutoEncryptedStringInput component.
2220
*/
2321
export const PolarisWCAutoEncryptedStringInput = autoInput((props: PolarisWCAutoEncryptedStringInputProps) => {
24-
const { placeholder, disabled, ...restProps } = props;
22+
const { placeholder, disabled, label: _label, ...restProps } = props;
2523
const stringInputController = useStringInputController(restProps);
2624

2725
const handleChange = useCallback(
@@ -36,7 +34,7 @@ export const PolarisWCAutoEncryptedStringInput = autoInput((props: PolarisWCAuto
3634
);
3735

3836
// Ensure label is always a string
39-
const label: string = typeof props.label === "string" ? props.label : String(stringInputController.metadata.name ?? "");
37+
const label: string = (props.label ?? String(stringInputController.metadata.name ?? "")) as string;
4038

4139
return (
4240
<>
@@ -50,6 +48,7 @@ export const PolarisWCAutoEncryptedStringInput = autoInput((props: PolarisWCAuto
5048
required={stringInputController.metadata.requiredArgumentForInput}
5149
error={stringInputController.errorMessage}
5250
onChange={handleChange}
51+
{...restProps}
5352
/>
5453
{/* Hidden native input for form registration and testability (Cypress can type into it; WC does not sync from shadow DOM to React in tests) */}
5554
<input

packages/react/src/auto/polaris-wc/inputs/PolarisWCAutoEnumInput.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import React, { useCallback, useMemo } from "react";
22
import { autoInput } from "../../AutoInput.js";
33
import { useEnumInputController } from "../../hooks/useEnumInputController.js";
4-
import { type AutoEnumInputProps } from "../../shared/AutoInputTypes.js";
4+
import { type AutoEnumInputProps, type StringOnlyLabel } from "../../shared/AutoInputTypes.js";
55
import { PolarisWCDismissibleBadge } from "../commonComponents/PolarisWCDismissibleBadge.js";
66
import { PolarisWCTruncatedTextWithTooltip } from "../commonComponents/PolarisWCTruncatedTextWithTooltip.js";
77
import { PolarisWCCombobox, PolarisWCComboboxOption } from "./PolarisWCCombobox.js";
88

9-
export type PolarisWCAutoEnumInputProps = AutoEnumInputProps & {
9+
export type PolarisWCAutoEnumInputProps = StringOnlyLabel<AutoEnumInputProps> & {
1010
placeholder?: string;
1111
disabled?: boolean;
1212
};

packages/react/src/auto/polaris-wc/inputs/PolarisWCAutoFileInput.tsx

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
import React, { useCallback, useMemo } from "react";
1+
import React, { type ComponentProps, useCallback, useMemo } from "react";
22
import { isAutoFileFieldValue } from "../../../validationSchema.js";
33
import { autoInput } from "../../AutoInput.js";
44
import { imageFileTypes, useFileInputController } from "../../hooks/useFileInputController.js";
5-
import { type AutoFileInputProps } from "../../shared/AutoInputTypes.js";
5+
import { type AutoFileInputProps, type StringOnlyLabel } from "../../shared/AutoInputTypes.js";
66

7-
export type PolarisWCAutoFileInputProps = AutoFileInputProps & {
8-
disabled?: boolean;
9-
};
7+
export type PolarisWCAutoFileInputProps = StringOnlyLabel<AutoFileInputProps> & Partial<ComponentProps<"s-drop-zone">>;
108

119
/**
1210
* A file input within AutoForm using Polaris Web Components.
@@ -21,7 +19,7 @@ export type PolarisWCAutoFileInputProps = AutoFileInputProps & {
2119
* @returns The AutoFileInput component.
2220
*/
2321
export const PolarisWCAutoFileInput = autoInput((props: PolarisWCAutoFileInputProps) => {
24-
const { field: fieldApiIdentifier, control, disabled, ...rest } = props;
22+
const { field: fieldApiIdentifier, control, disabled, label: _label, ...rest } = props;
2523

2624
const {
2725
fieldProps,
@@ -82,7 +80,7 @@ export const PolarisWCAutoFileInput = autoInput((props: PolarisWCAutoFileInputPr
8280
}, [canClearFileValue, clearFileValue, fieldProps.value, imageThumbnailURL]);
8381

8482
// Ensure label is always a string
85-
const label: string = typeof props.label === "string" ? props.label : String(metadata.name ?? "");
83+
const label: string = (props.label ?? String(metadata.name ?? "")) as string;
8684

8785
return (
8886
<div style={{ position: "relative" }}>
@@ -93,6 +91,7 @@ export const PolarisWCAutoFileInput = autoInput((props: PolarisWCAutoFileInputPr
9391
label={label}
9492
error={errorMessage}
9593
required={metadata.requiredArgumentForInput}
94+
{...rest}
9695
>
9796
{!filePreview && actionHintParts ? (
9897
<>

packages/react/src/auto/polaris-wc/inputs/PolarisWCAutoIdInput.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React from "react";
22
import { FieldType } from "../../../metadata.js";
33
import { autoInput } from "../../AutoInput.js";
44
import { useStringInputController } from "../../hooks/useStringInputController.js";
5-
import { type AutoIdInputProps } from "../../shared/AutoInputTypes.js";
5+
import type { StringOnlyLabel, AutoIdInputProps } from "../../shared/AutoInputTypes.js";
66
import { PolarisWCAutoTextInput } from "./PolarisWCAutoTextInput.js";
77

88
/**
@@ -17,13 +17,13 @@ import { PolarisWCAutoTextInput } from "./PolarisWCAutoTextInput.js";
1717
* @param props.label - Label of the Id input.
1818
* @returns The AutoIdInput component
1919
*/
20-
export const PolarisWCAutoIdInput = autoInput((props: AutoIdInputProps) => {
21-
const { field, label } = props;
20+
export const PolarisWCAutoIdInput = autoInput((props: StringOnlyLabel<AutoIdInputProps>) => {
21+
const { field, label, ...rest } = props;
2222
const { name, metadata } = useStringInputController({ field });
2323

2424
if (metadata.fieldType !== FieldType.Id || field !== "id") {
2525
throw new Error(`PolarisWCAutoIdInput: field ${field} is not of type Id`);
2626
}
2727

28-
return <PolarisWCAutoTextInput step={1} field={field} min={1} type="number" label={label || "ID"} />;
28+
return <PolarisWCAutoTextInput field={field} label={label || "ID"} min={1} step={1} type="number" {...rest} />;
2929
});

packages/react/src/auto/polaris-wc/inputs/PolarisWCAutoInput.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React from "react";
22
import { FieldType } from "../../../metadata.js";
33
import { autoInput } from "../../AutoInput.js";
44
import { useFieldMetadata } from "../../hooks/useFieldMetadata.js";
5-
import { type AutoInputProps } from "../../shared/AutoInputTypes.js";
5+
import { type AutoInputProps, type StringOnlyLabel } from "../../shared/AutoInputTypes.js";
66
import { PolarisWCAutoRichTextInput } from "./LazyLoadedPolarisWCAutoRichTextInput.js";
77
import { PolarisWCAutoBooleanInput } from "./PolarisWCAutoBooleanInput.js";
88
import { PolarisWCAutoDateTimePicker } from "./PolarisWCAutoDateTimePicker.js";
@@ -35,7 +35,7 @@ import { PolarisWCAutoHasOneInput } from "./relationships/PolarisWCAutoHasOneInp
3535
* @param props.label - Label of the component.
3636
* @returns The AutoInput component.
3737
*/
38-
export const PolarisWCAutoInput = autoInput((props: AutoInputProps) => {
38+
export const PolarisWCAutoInput = autoInput((props: StringOnlyLabel<AutoInputProps>) => {
3939
const { metadata } = useFieldMetadata(props.field);
4040
const config = metadata.configuration;
4141

packages/react/src/auto/polaris-wc/inputs/PolarisWCAutoJSONInput.tsx

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
1-
// import type * as PolarisTypes from "@shopify/polaris-types";
2-
import React, { useCallback } from "react";
1+
import React, { type ComponentProps, useCallback } from "react";
32
import { useFocus } from "../../../useFocus.js";
43
import { autoInput } from "../../AutoInput.js";
54
import { useJSONInputController } from "../../hooks/useJSONInputController.js";
6-
import { type AutoJSONInputProps } from "../../shared/AutoInputTypes.js";
5+
import { type AutoJSONInputProps, type StringOnlyLabel } from "../../shared/AutoInputTypes.js";
76

8-
export type PolarisWCAutoJSONInputProps = AutoJSONInputProps & {
9-
placeholder?: string;
10-
disabled?: boolean;
11-
};
7+
export type PolarisWCAutoJSONInputProps = StringOnlyLabel<AutoJSONInputProps> & Partial<ComponentProps<"s-text-area">>;
128

139
/**
1410
* A JSON editor within AutoForm using Polaris Web Components.
@@ -23,7 +19,7 @@ export type PolarisWCAutoJSONInputProps = AutoJSONInputProps & {
2319
* @returns The AutoJSONInput component
2420
*/
2521
export const PolarisWCAutoJSONInput = autoInput((props: PolarisWCAutoJSONInputProps) => {
26-
const { placeholder, disabled, ...restProps } = props;
22+
const { placeholder, disabled, label: _label, ...restProps } = props;
2723
const [isFocused, focusProps] = useFocus();
2824
const { type: _type, id, errorMessage, label: controllerLabel, metadata, value, onChange } = useJSONInputController(restProps);
2925

@@ -36,7 +32,7 @@ export const PolarisWCAutoJSONInput = autoInput((props: PolarisWCAutoJSONInputPr
3632
);
3733

3834
// Ensure label is always a string
39-
const label: string = typeof props.label === "string" ? props.label : String(controllerLabel ?? "");
35+
const label: string = (props.label ?? String(controllerLabel ?? "")) as string;
4036
const displayError = !isFocused && errorMessage ? `Invalid JSON: ${errorMessage}` : undefined;
4137
const { onFocus, onBlur } = focusProps;
4238
const handleFocus = useCallback(
@@ -66,6 +62,7 @@ export const PolarisWCAutoJSONInput = autoInput((props: PolarisWCAutoJSONInputPr
6662
onChange={handleChange}
6763
onFocus={handleFocus}
6864
onBlur={handleBlur}
65+
{...restProps}
6966
/>
7067
);
7168
});

packages/react/src/auto/polaris-wc/inputs/PolarisWCAutoNumberInput.tsx

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
1-
import React from "react";
1+
import React, { type ComponentProps } from "react";
22
import { countNumberOfDecimals, getStepFromNumberOfDecimals } from "../../../utils.js";
33
import { autoInput } from "../../AutoInput.js";
4-
import type { AutoNumberInputProps } from "../../shared/AutoInputTypes.js";
4+
import type { AutoNumberInputProps, StringOnlyLabel } from "../../shared/AutoInputTypes.js";
55
import { usePolarisWCTextInputProps } from "./PolarisWCAutoTextInput.js";
66

7-
export type PolarisWCAutoNumberInputProps = AutoNumberInputProps & {
8-
placeholder?: string;
9-
disabled?: boolean;
10-
};
7+
export type PolarisWCAutoNumberInputProps = StringOnlyLabel<AutoNumberInputProps> & Partial<ComponentProps<"s-number-field">>;
118

129
/**
1310
* A number input within AutoForm using Polaris Web Components.

packages/react/src/auto/polaris-wc/inputs/PolarisWCAutoPasswordInput.tsx

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1-
import React from "react";
1+
import React, { type ComponentProps } from "react";
22
import { autoInput } from "../../AutoInput.js";
33
import { existingPasswordPlaceholder, usePasswordController } from "../../hooks/usePasswordController.js";
4-
import type { AutoPasswordInputProps } from "../../shared/AutoInputTypes.js";
4+
import type { AutoPasswordInputProps, StringOnlyLabel } from "../../shared/AutoInputTypes.js";
55
import { PolarisWCAutoEncryptedStringInput } from "./PolarisWCAutoEncryptedStringInput.js";
66

7-
export type PolarisWCAutoPasswordInputProps = AutoPasswordInputProps & {
8-
placeholder?: string;
9-
disabled?: boolean;
10-
};
7+
export type PolarisWCAutoPasswordInputProps = StringOnlyLabel<AutoPasswordInputProps> &
8+
Partial<ComponentProps<typeof PolarisWCAutoEncryptedStringInput>>;
119

1210
/**
1311
* A password input within AutoForm using Polaris Web Components.
@@ -27,13 +25,17 @@ export const PolarisWCAutoPasswordInput = autoInput((props: PolarisWCAutoPasswor
2725
if (!isEditing) {
2826
return (
2927
<div style={{ display: "flex", alignItems: "flex-end", gap: "8px" }}>
30-
<PolarisWCAutoEncryptedStringInput {...props} placeholder={existingPasswordPlaceholder} disabled />
28+
<PolarisWCAutoEncryptedStringInput
29+
placeholder={existingPasswordPlaceholder}
30+
{...props}
31+
disabled={true} // must be disabled to prevent password from being shown
32+
/>
3133
<div style={{ marginBottom: "2px" }}>
3234
<s-button variant="tertiary" onClick={startEditing} icon="edit" {...{ role: `${props.field}EditPasswordButton` }}></s-button>
3335
</div>
3436
</div>
3537
);
3638
}
3739

38-
return <PolarisWCAutoEncryptedStringInput {...props} placeholder="Password" />;
40+
return <PolarisWCAutoEncryptedStringInput placeholder="Password" {...props} />;
3941
});

0 commit comments

Comments
 (0)