@terreno/ui 0.12.2 → 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/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/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/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/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
|
);
|