@terreno/ui 0.12.1 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ConsentFormScreen.js +1 -1
- package/dist/ConsentFormScreen.js.map +1 -1
- package/dist/Field.js.map +1 -1
- package/dist/MarkdownEditor.js +1 -1
- package/dist/MarkdownEditor.js.map +1 -1
- package/package.json +1 -1
- package/src/ConsentFormScreen.test.tsx +44 -23
- package/src/ConsentFormScreen.tsx +10 -0
- package/src/Field.tsx +1 -1
- package/src/MarkdownEditor.tsx +2 -2
- package/src/NumberField.test.tsx +13 -19
- package/src/polyfill.d.ts +1 -1
|
@@ -85,7 +85,7 @@ export const ConsentFormScreen = ({ form, isSubmitting = false, locale, onAgree,
|
|
|
85
85
|
onAgree({ checkboxValues, signature: signatureValue });
|
|
86
86
|
};
|
|
87
87
|
const confirmingCheckbox = confirmModalCheckboxIndex !== null ? form.checkboxes[confirmModalCheckboxIndex] : null;
|
|
88
|
-
const footer = (
|
|
88
|
+
const footer = (_jsxs(Box, { alignSelf: "center", maxWidth: 800, testID: "consent-form-footer", width: "100%", children: [_jsxs(Box, { direction: "row", gap: 4, paddingY: 2, width: "100%", children: [Boolean(form.allowDecline && onDecline) && (_jsx(Box, { flex: "grow", children: _jsx(Button, { fullWidth: true, onClick: onDecline, testID: "consent-form-decline-button", text: form.declineButtonText, variant: "muted" }) })), _jsx(Box, { flex: "grow", children: _jsx(Button, { disabled: !canAgree, fullWidth: true, loading: isSubmitting, onClick: handleAgree, testID: "consent-form-agree-button", text: form.agreeButtonText }) })] }), Boolean(form.requireScrollToBottom && !hasScrolledToBottom) && (_jsx(Text, { align: "center", color: "error", size: "sm", testID: "consent-footer-scroll-hint", children: "Please scroll to the bottom to continue" })), Boolean(form.captureSignature && !signatureValue) && (_jsx(Text, { align: "center", color: "error", size: "sm", testID: "consent-footer-signature-hint", children: "Please provide your signature to continue" }))] }));
|
|
89
89
|
return (_jsxs(Page, { color: "base", footer: footer, maxWidth: "100%", scroll: false, title: form.title, children: [_jsx(ScrollView, { onContentSizeChange: handleContentSizeChange, onLayout: handleLayout, onScroll: handleScroll, scrollEnabled: scrollEnabled, scrollEventThrottle: 16, style: { alignSelf: "center", flex: 1, maxWidth: 800, width: "100%" }, testID: "consent-form-scroll-view", children: _jsxs(Box, { direction: "column", gap: 3, paddingY: 2, children: [_jsx(MarkdownView, { children: content }), form.checkboxes.length > 0 && (_jsx(Box, { direction: "column", gap: 2, testID: "consent-form-checkboxes", children: form.checkboxes.map((checkbox, index) => {
|
|
90
90
|
var _a;
|
|
91
91
|
const key = index.toString();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConsentFormScreen.js","sourceRoot":"","sources":["../src/ConsentFormScreen.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ConsentFormScreen.js","sourceRoot":"","sources":["../src/ConsentFormScreen.tsx"],"names":[],"mappings":"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"}
|
package/dist/Field.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Field.js","sourceRoot":"","sources":["../src/Field.tsx"],"names":[],"mappings":";;;;;;;;;;;;AAEA,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAiB5C,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AACxC,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AACtC,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAEtC,mDAAmD;AACnD,MAAM,CAAC,MAAM,KAAK,GAAmB,CAAC,EAAe,EAAE,EAAE;QAAnB,EAAC,IAAI,OAAU,EAAL,IAAI,cAAd,QAAe,CAAD;IAClD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,CACL,KAAC,WAAW,oBACL,IAAyB,EAK9B,CACH,CAAC;IACJ,CAAC;SAAM,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;QAClC,OAAO,KAAC,gBAAgB,oBAAM,IAA8B,EAAI,CAAC;IACnE,CAAC;SAAM,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,OAAO,KAAC,QAAQ,oBAAM,IAAsB,EAAI,CAAC;IACnD,CAAC;SAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,OAAO,KAAC,YAAY,oBAAM,IAA0B,EAAI,CAAC;IAC3D,CAAC;SAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/D,OAAO,CACL,KAAC,aAAa,oBACP,
|
|
1
|
+
{"version":3,"file":"Field.js","sourceRoot":"","sources":["../src/Field.tsx"],"names":[],"mappings":"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"}
|
package/dist/MarkdownEditor.js
CHANGED
|
@@ -7,6 +7,6 @@ import { TextField } from "./TextField";
|
|
|
7
7
|
export const MarkdownEditor = ({ value, onChange, placeholder, title, disabled, testID, maxHeight = 500, }) => {
|
|
8
8
|
const { width } = useWindowDimensions();
|
|
9
9
|
const isDesktop = width >= 768;
|
|
10
|
-
return (_jsxs(Box, { direction: "column", gap: 2, testID: testID, children: [Boolean(title) && _jsx(Heading, { size: "sm", children: title }), _jsxs(Box, { direction: isDesktop ? "row" : "column", gap: 3, children: [_jsxs(Box, { flex: "grow", children: [_jsx(Heading, { size: "sm", children: "Edit" }), _jsx(Box, { marginTop: 1, children: _jsx(TextField, { disabled: disabled, grow: true, multiline: true, onChange: onChange, placeholder: placeholder, rows: 10, testID: testID ? `${testID}-input` : undefined, value: value }) })] }), _jsxs(Box, { flex: "grow", children: [_jsx(Heading, { size: "sm", children: "Preview" }), _jsx(ScrollView, { style: { maxHeight, minHeight: 100 }, children: _jsx(Box, { border: "default", marginTop: 1, padding: 3, rounding: "sm", testID: testID ? `${testID}-preview` : undefined, children: _jsx(MarkdownView, { children: value || " " }) }) })] })] })] }));
|
|
10
|
+
return (_jsxs(Box, { direction: "column", gap: 2, testID: testID, children: [Boolean(title) && _jsx(Heading, { size: "sm", children: title }), _jsxs(Box, { direction: isDesktop ? "row" : "column", gap: 3, children: [_jsxs(Box, { dangerouslySetInlineStyle: { __style: { flexBasis: 0 } }, flex: "grow", children: [_jsx(Heading, { size: "sm", children: "Edit" }), _jsx(Box, { marginTop: 1, children: _jsx(TextField, { disabled: disabled, grow: true, multiline: true, onChange: onChange, placeholder: placeholder, rows: 10, testID: testID ? `${testID}-input` : undefined, value: value }) })] }), _jsxs(Box, { dangerouslySetInlineStyle: { __style: { flexBasis: 0 } }, flex: "grow", children: [_jsx(Heading, { size: "sm", children: "Preview" }), _jsx(ScrollView, { style: { maxHeight, minHeight: 100 }, children: _jsx(Box, { border: "default", marginTop: 1, padding: 3, rounding: "sm", testID: testID ? `${testID}-preview` : undefined, children: _jsx(MarkdownView, { children: value || " " }) }) })] })] })] }));
|
|
11
11
|
};
|
|
12
12
|
//# sourceMappingURL=MarkdownEditor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkdownEditor.js","sourceRoot":"","sources":["../src/MarkdownEditor.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,UAAU,EAAE,mBAAmB,EAAC,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAYtC,MAAM,CAAC,MAAM,cAAc,GAAkC,CAAC,EAC5D,KAAK,EACL,QAAQ,EACR,WAAW,EACX,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,GAAG,GAAG,GAChB,EAAE,EAAE;IACH,MAAM,EAAC,KAAK,EAAC,GAAG,mBAAmB,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,KAAK,IAAI,GAAG,CAAC;IAE/B,OAAO,CACL,MAAC,GAAG,IAAC,SAAS,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,aAC3C,OAAO,CAAC,KAAK,CAAC,IAAI,KAAC,OAAO,IAAC,IAAI,EAAC,IAAI,YAAE,KAAK,GAAW,EACvD,MAAC,GAAG,IAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,aAClD,MAAC,GAAG,IAAC,IAAI,EAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"MarkdownEditor.js","sourceRoot":"","sources":["../src/MarkdownEditor.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,UAAU,EAAE,mBAAmB,EAAC,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAYtC,MAAM,CAAC,MAAM,cAAc,GAAkC,CAAC,EAC5D,KAAK,EACL,QAAQ,EACR,WAAW,EACX,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,GAAG,GAAG,GAChB,EAAE,EAAE;IACH,MAAM,EAAC,KAAK,EAAC,GAAG,mBAAmB,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,KAAK,IAAI,GAAG,CAAC;IAE/B,OAAO,CACL,MAAC,GAAG,IAAC,SAAS,EAAC,QAAQ,EAAC,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,aAC3C,OAAO,CAAC,KAAK,CAAC,IAAI,KAAC,OAAO,IAAC,IAAI,EAAC,IAAI,YAAE,KAAK,GAAW,EACvD,MAAC,GAAG,IAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,aAClD,MAAC,GAAG,IAAC,yBAAyB,EAAE,EAAC,OAAO,EAAE,EAAC,SAAS,EAAE,CAAC,EAAC,EAAC,EAAE,IAAI,EAAC,MAAM,aACpE,KAAC,OAAO,IAAC,IAAI,EAAC,IAAI,qBAAe,EACjC,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,SAAS,IACR,QAAQ,EAAE,QAAQ,EAClB,IAAI,QACJ,SAAS,QACT,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,EAAE,EACR,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,QAAQ,CAAC,CAAC,CAAC,SAAS,EAC9C,KAAK,EAAE,KAAK,GACZ,GACE,IACF,EACN,MAAC,GAAG,IAAC,yBAAyB,EAAE,EAAC,OAAO,EAAE,EAAC,SAAS,EAAE,CAAC,EAAC,EAAC,EAAE,IAAI,EAAC,MAAM,aACpE,KAAC,OAAO,IAAC,IAAI,EAAC,IAAI,wBAAkB,EACpC,KAAC,UAAU,IAAC,KAAK,EAAE,EAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAC,YAC5C,KAAC,GAAG,IACF,MAAM,EAAC,SAAS,EAChB,SAAS,EAAE,CAAC,EACZ,OAAO,EAAE,CAAC,EACV,QAAQ,EAAC,IAAI,EACb,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,SAAS,YAEhD,KAAC,YAAY,cAAE,KAAK,IAAI,GAAG,GAAgB,GACvC,GACK,IACT,IACF,IACF,CACP,CAAC;AACJ,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,30 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {describe, expect, it, mock} from "bun:test";
|
|
2
2
|
import {act, fireEvent} from "@testing-library/react-native";
|
|
3
|
-
import {Text as RNText} from "react-native";
|
|
4
|
-
|
|
5
|
-
// Capture the real MarkdownView export before mocking so we can restore it in
|
|
6
|
-
// afterAll and avoid leaking a test-only mock to sibling test files.
|
|
7
|
-
const RealMarkdownViewModule = require("./MarkdownView");
|
|
8
|
-
|
|
9
|
-
// Mock MarkdownView with a simple Text passthrough so we can assert on the
|
|
10
|
-
// rendered (variable-substituted) content without depending on
|
|
11
|
-
// react-native-markdown-display's tokenization.
|
|
12
|
-
mock.module("./MarkdownView", () => ({
|
|
13
|
-
MarkdownView: ({children}: {children: string}) => (
|
|
14
|
-
<RNText testID="markdown-view">{children}</RNText>
|
|
15
|
-
),
|
|
16
|
-
}));
|
|
17
3
|
|
|
18
4
|
import {ConsentFormScreen} from "./ConsentFormScreen";
|
|
19
5
|
import {renderWithTheme} from "./test-utils";
|
|
20
6
|
import type {ConsentFormPublic} from "./useConsentForms";
|
|
21
7
|
|
|
22
|
-
// Restore the real MarkdownView so downstream test files (e.g.
|
|
23
|
-
// MarkdownView.test.tsx) see the un-mocked module regardless of test order.
|
|
24
|
-
afterAll(() => {
|
|
25
|
-
mock.module("./MarkdownView", () => RealMarkdownViewModule);
|
|
26
|
-
});
|
|
27
|
-
|
|
28
8
|
const baseForm: ConsentFormPublic = {
|
|
29
9
|
active: true,
|
|
30
10
|
agreeButtonText: "I agree",
|
|
@@ -59,7 +39,7 @@ describe("ConsentFormScreen", () => {
|
|
|
59
39
|
});
|
|
60
40
|
|
|
61
41
|
it("substitutes variables in content and preserves unknown placeholders", () => {
|
|
62
|
-
const {
|
|
42
|
+
const {getByText} = renderWithTheme(
|
|
63
43
|
<ConsentFormScreen
|
|
64
44
|
form={{...baseForm, content: {en: "Hello {{name}}, {{missing}} stays"}}}
|
|
65
45
|
locale="en"
|
|
@@ -67,7 +47,7 @@ describe("ConsentFormScreen", () => {
|
|
|
67
47
|
variables={{name: "Ada"}}
|
|
68
48
|
/>
|
|
69
49
|
);
|
|
70
|
-
expect(
|
|
50
|
+
expect(getByText("Hello Ada, {{missing}} stays")).toBeTruthy();
|
|
71
51
|
});
|
|
72
52
|
|
|
73
53
|
it("invokes onAgree with signature and checkbox values", () => {
|
|
@@ -164,4 +144,45 @@ describe("ConsentFormScreen", () => {
|
|
|
164
144
|
);
|
|
165
145
|
expect(getByTestId("consent-form-scroll-hint")).toBeTruthy();
|
|
166
146
|
});
|
|
147
|
+
|
|
148
|
+
it("shows footer scroll hint when scroll to bottom is required but not done", () => {
|
|
149
|
+
const form = {...baseForm, requireScrollToBottom: true};
|
|
150
|
+
const {getByTestId, queryByTestId} = renderWithTheme(
|
|
151
|
+
<ConsentFormScreen form={form} locale="en" onAgree={() => {}} />
|
|
152
|
+
);
|
|
153
|
+
expect(getByTestId("consent-footer-scroll-hint")).toBeTruthy();
|
|
154
|
+
expect(queryByTestId("consent-footer-signature-hint")).toBeNull();
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
it("hides footer scroll hint when scroll to bottom is not required", () => {
|
|
158
|
+
const {queryByTestId} = renderWithTheme(
|
|
159
|
+
<ConsentFormScreen form={baseForm} locale="en" onAgree={() => {}} />
|
|
160
|
+
);
|
|
161
|
+
expect(queryByTestId("consent-footer-scroll-hint")).toBeNull();
|
|
162
|
+
});
|
|
163
|
+
|
|
164
|
+
it("shows footer signature hint when signature is required but not provided", () => {
|
|
165
|
+
const form = {...baseForm, captureSignature: true};
|
|
166
|
+
const {getByTestId, queryByTestId} = renderWithTheme(
|
|
167
|
+
<ConsentFormScreen form={form} locale="en" onAgree={() => {}} />
|
|
168
|
+
);
|
|
169
|
+
expect(getByTestId("consent-footer-signature-hint")).toBeTruthy();
|
|
170
|
+
expect(queryByTestId("consent-footer-scroll-hint")).toBeNull();
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
it("hides footer signature hint when signature is not required", () => {
|
|
174
|
+
const {queryByTestId} = renderWithTheme(
|
|
175
|
+
<ConsentFormScreen form={baseForm} locale="en" onAgree={() => {}} />
|
|
176
|
+
);
|
|
177
|
+
expect(queryByTestId("consent-footer-signature-hint")).toBeNull();
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
it("shows both footer hints when scroll and signature are both required", () => {
|
|
181
|
+
const form = {...baseForm, captureSignature: true, requireScrollToBottom: true};
|
|
182
|
+
const {getByTestId} = renderWithTheme(
|
|
183
|
+
<ConsentFormScreen form={form} locale="en" onAgree={() => {}} />
|
|
184
|
+
);
|
|
185
|
+
expect(getByTestId("consent-footer-scroll-hint")).toBeTruthy();
|
|
186
|
+
expect(getByTestId("consent-footer-signature-hint")).toBeTruthy();
|
|
187
|
+
});
|
|
167
188
|
});
|
|
@@ -140,6 +140,16 @@ export const ConsentFormScreen: React.FC<ConsentFormScreenProps> = ({
|
|
|
140
140
|
/>
|
|
141
141
|
</Box>
|
|
142
142
|
</Box>
|
|
143
|
+
{Boolean(form.requireScrollToBottom && !hasScrolledToBottom) && (
|
|
144
|
+
<Text align="center" color="error" size="sm" testID="consent-footer-scroll-hint">
|
|
145
|
+
Please scroll to the bottom to continue
|
|
146
|
+
</Text>
|
|
147
|
+
)}
|
|
148
|
+
{Boolean(form.captureSignature && !signatureValue) && (
|
|
149
|
+
<Text align="center" color="error" size="sm" testID="consent-footer-signature-hint">
|
|
150
|
+
Please provide your signature to continue
|
|
151
|
+
</Text>
|
|
152
|
+
)}
|
|
143
153
|
</Box>
|
|
144
154
|
);
|
|
145
155
|
|
package/src/Field.tsx
CHANGED
|
@@ -50,7 +50,7 @@ export const Field: FC<FieldProps> = ({type, ...rest}) => {
|
|
|
50
50
|
} else if (type && ["date", "time", "datetime"].includes(type)) {
|
|
51
51
|
return (
|
|
52
52
|
<DateTimeField
|
|
53
|
-
{...(rest as DateTimeFieldProps
|
|
53
|
+
{...(rest as Omit<DateTimeFieldProps, "type">)}
|
|
54
54
|
type={type as "date" | "time" | "datetime"}
|
|
55
55
|
/>
|
|
56
56
|
);
|
package/src/MarkdownEditor.tsx
CHANGED
|
@@ -31,7 +31,7 @@ export const MarkdownEditor: React.FC<MarkdownEditorProps> = ({
|
|
|
31
31
|
<Box direction="column" gap={2} testID={testID}>
|
|
32
32
|
{Boolean(title) && <Heading size="sm">{title}</Heading>}
|
|
33
33
|
<Box direction={isDesktop ? "row" : "column"} gap={3}>
|
|
34
|
-
<Box flex="grow">
|
|
34
|
+
<Box dangerouslySetInlineStyle={{__style: {flexBasis: 0}}} flex="grow">
|
|
35
35
|
<Heading size="sm">Edit</Heading>
|
|
36
36
|
<Box marginTop={1}>
|
|
37
37
|
<TextField
|
|
@@ -46,7 +46,7 @@ export const MarkdownEditor: React.FC<MarkdownEditorProps> = ({
|
|
|
46
46
|
/>
|
|
47
47
|
</Box>
|
|
48
48
|
</Box>
|
|
49
|
-
<Box flex="grow">
|
|
49
|
+
<Box dangerouslySetInlineStyle={{__style: {flexBasis: 0}}} flex="grow">
|
|
50
50
|
<Heading size="sm">Preview</Heading>
|
|
51
51
|
<ScrollView style={{maxHeight, minHeight: 100}}>
|
|
52
52
|
<Box
|
package/src/NumberField.test.tsx
CHANGED
|
@@ -4,23 +4,23 @@ import {act, fireEvent, waitFor} from "@testing-library/react-native";
|
|
|
4
4
|
import {NumberField} from "./NumberField";
|
|
5
5
|
import {renderWithTheme} from "./test-utils";
|
|
6
6
|
|
|
7
|
+
const noOp = (): void => {};
|
|
8
|
+
|
|
7
9
|
describe("NumberField", () => {
|
|
8
10
|
it("renders correctly with default props", () => {
|
|
9
|
-
const {toJSON} = renderWithTheme(
|
|
10
|
-
<NumberField label="Number" onChange={() => {}} type="number" />
|
|
11
|
-
);
|
|
11
|
+
const {toJSON} = renderWithTheme(<NumberField label="Number" onChange={noOp} type="number" />);
|
|
12
12
|
expect(toJSON()).toMatchSnapshot();
|
|
13
13
|
});
|
|
14
14
|
|
|
15
15
|
it("renders with initial value", () => {
|
|
16
16
|
const {getByDisplayValue} = renderWithTheme(
|
|
17
|
-
<NumberField label="Number" onChange={
|
|
17
|
+
<NumberField label="Number" onChange={noOp} type="number" value="42" />
|
|
18
18
|
);
|
|
19
19
|
expect(getByDisplayValue("42")).toBeTruthy();
|
|
20
20
|
});
|
|
21
21
|
|
|
22
22
|
it("calls onChange with valid integer", async () => {
|
|
23
|
-
const handleChange = mock((_value: string) => {});
|
|
23
|
+
const handleChange = mock((_value: string): void => {});
|
|
24
24
|
const {getByDisplayValue} = renderWithTheme(
|
|
25
25
|
<NumberField label="Number" onChange={handleChange} type="number" value="" />
|
|
26
26
|
);
|
|
@@ -36,7 +36,7 @@ describe("NumberField", () => {
|
|
|
36
36
|
});
|
|
37
37
|
|
|
38
38
|
it("does not call onChange with non-integer for number type", async () => {
|
|
39
|
-
const handleChange = mock((_value: string) => {});
|
|
39
|
+
const handleChange = mock((_value: string): void => {});
|
|
40
40
|
const {getByDisplayValue} = renderWithTheme(
|
|
41
41
|
<NumberField label="Number" onChange={handleChange} type="number" value="" />
|
|
42
42
|
);
|
|
@@ -51,7 +51,7 @@ describe("NumberField", () => {
|
|
|
51
51
|
});
|
|
52
52
|
|
|
53
53
|
it("calls onChange with valid decimal", async () => {
|
|
54
|
-
const handleChange = mock((_value: string) => {});
|
|
54
|
+
const handleChange = mock((_value: string): void => {});
|
|
55
55
|
const {getByDisplayValue} = renderWithTheme(
|
|
56
56
|
<NumberField label="Decimal" onChange={handleChange} type="decimal" value="" />
|
|
57
57
|
);
|
|
@@ -67,7 +67,7 @@ describe("NumberField", () => {
|
|
|
67
67
|
});
|
|
68
68
|
|
|
69
69
|
it("handles leading dot for decimal type", async () => {
|
|
70
|
-
const handleChange = mock((_value: string) => {});
|
|
70
|
+
const handleChange = mock((_value: string): void => {});
|
|
71
71
|
const {getByDisplayValue} = renderWithTheme(
|
|
72
72
|
<NumberField label="Decimal" onChange={handleChange} type="decimal" value="" />
|
|
73
73
|
);
|
|
@@ -84,40 +84,34 @@ describe("NumberField", () => {
|
|
|
84
84
|
|
|
85
85
|
it("validates max value", () => {
|
|
86
86
|
const {getByText} = renderWithTheme(
|
|
87
|
-
<NumberField label="Number" max={100} onChange={
|
|
87
|
+
<NumberField label="Number" max={100} onChange={noOp} type="number" value="150" />
|
|
88
88
|
);
|
|
89
89
|
expect(getByText("Value must be less than or equal to 100")).toBeTruthy();
|
|
90
90
|
});
|
|
91
91
|
|
|
92
92
|
it("validates min value", () => {
|
|
93
93
|
const {getByText} = renderWithTheme(
|
|
94
|
-
<NumberField label="Number" min={10} onChange={
|
|
94
|
+
<NumberField label="Number" min={10} onChange={noOp} type="number" value="5" />
|
|
95
95
|
);
|
|
96
96
|
expect(getByText("Value must be greater than or equal to 10")).toBeTruthy();
|
|
97
97
|
});
|
|
98
98
|
|
|
99
99
|
it("shows custom errorText", () => {
|
|
100
100
|
const {getByText} = renderWithTheme(
|
|
101
|
-
<NumberField
|
|
102
|
-
errorText="Custom error"
|
|
103
|
-
label="Number"
|
|
104
|
-
onChange={() => {}}
|
|
105
|
-
type="number"
|
|
106
|
-
value=""
|
|
107
|
-
/>
|
|
101
|
+
<NumberField errorText="Custom error" label="Number" onChange={noOp} type="number" value="" />
|
|
108
102
|
);
|
|
109
103
|
expect(getByText("Custom error")).toBeTruthy();
|
|
110
104
|
});
|
|
111
105
|
|
|
112
106
|
it("does not show error for valid number within range", () => {
|
|
113
107
|
const {queryByText} = renderWithTheme(
|
|
114
|
-
<NumberField label="Number" max={100} min={0} onChange={
|
|
108
|
+
<NumberField label="Number" max={100} min={0} onChange={noOp} type="number" value="50" />
|
|
115
109
|
);
|
|
116
110
|
expect(queryByText(/must be/)).toBeNull();
|
|
117
111
|
});
|
|
118
112
|
|
|
119
113
|
it("syncs value when prop changes", async () => {
|
|
120
|
-
const handleChange = mock((_value: string) => {});
|
|
114
|
+
const handleChange = mock((_value: string): void => {});
|
|
121
115
|
const {getByDisplayValue, unmount} = renderWithTheme(
|
|
122
116
|
<NumberField label="Number" onChange={handleChange} type="number" value="10" />
|
|
123
117
|
);
|