@terreno/ui 0.10.0 → 0.11.1
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/Banner.js +7 -5
- package/dist/Banner.js.map +1 -1
- package/dist/Common.d.ts +3 -1
- package/dist/Common.js.map +1 -1
- package/dist/TextFieldNumberActionSheet.d.ts +1 -1
- package/dist/Toast.d.ts +1 -1
- package/dist/Toast.js +2 -2
- package/dist/Toast.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/package.json +2 -1
- package/src/ActionSheet.test.tsx +262 -3
- package/src/AddressField.test.tsx +50 -0
- package/src/Banner.test.tsx +65 -0
- package/src/Banner.tsx +7 -5
- package/src/Box.test.tsx +218 -0
- package/src/Button.test.tsx +71 -0
- package/src/Common.ts +3 -1
- package/src/ConsentFormScreen.test.tsx +167 -0
- package/src/ConsentNavigator.test.tsx +206 -0
- package/src/DecimalRangeActionSheet.test.tsx +53 -2
- package/src/EmailField.test.tsx +81 -0
- package/src/EmojiSelector.test.tsx +262 -1
- package/src/HeightActionSheet.test.tsx +57 -2
- package/src/InfoModalIcon.test.tsx +16 -0
- package/src/InfoTooltipButton.test.tsx +53 -1
- package/src/MobileAddressAutoComplete.test.tsx +137 -7
- package/src/Modal.test.tsx +188 -0
- package/src/NumberPickerActionSheet.test.tsx +59 -2
- package/src/Page.test.tsx +162 -1
- package/src/Pagination.test.tsx +16 -0
- package/src/PhoneNumberField.test.tsx +46 -9
- package/src/PickerSelect.test.tsx +230 -0
- package/src/SegmentedControl.test.tsx +38 -0
- package/src/SelectBadge.test.tsx +52 -1
- package/src/SideDrawer.test.tsx +69 -0
- package/src/Signature.test.tsx +42 -5
- package/src/SignatureField.test.tsx +35 -0
- package/src/Slider.test.tsx +59 -0
- package/src/Spinner.test.tsx +6 -0
- package/src/SplitPage.test.tsx +228 -2
- package/src/TapToEdit.test.tsx +171 -1
- package/src/TerrenoProvider.test.tsx +42 -2
- package/src/TextFieldNumberActionSheet.tsx +1 -1
- package/src/Theme.test.tsx +118 -28
- package/src/Toast.test.tsx +95 -2
- package/src/Toast.tsx +3 -3
- package/src/Tooltip.test.tsx +204 -1
- package/src/UnifiedAddressAutoComplete.test.tsx +38 -19
- package/src/UserInactivity.test.tsx +73 -1
- package/src/Utilities.test.tsx +190 -2
- package/src/WebAddressAutocomplete.test.tsx +148 -1
- package/src/__snapshots__/ActionSheet.test.tsx.snap +1736 -0
- package/src/__snapshots__/Button.test.tsx.snap +68 -0
- package/src/__snapshots__/EmojiSelector.test.tsx.snap +1363 -0
- package/src/__snapshots__/InfoTooltipButton.test.tsx.snap +72 -3
- package/src/__snapshots__/MobileAddressAutoComplete.test.tsx.snap +60 -9
- package/src/__snapshots__/Modal.test.tsx.snap +181 -0
- package/src/__snapshots__/Page.test.tsx.snap +48 -2
- package/src/__snapshots__/PhoneNumberField.test.tsx.snap +0 -93
- package/src/__snapshots__/PickerSelect.test.tsx.snap +706 -0
- package/src/__snapshots__/SideDrawer.test.tsx.snap +533 -1399
- package/src/__snapshots__/Signature.test.tsx.snap +0 -3
- package/src/__snapshots__/SplitPage.test.tsx.snap +970 -0
- package/src/__snapshots__/UnifiedAddressAutoComplete.test.tsx.snap +220 -4
- package/src/__snapshots__/WebAddressAutocomplete.test.tsx.snap +93 -0
- package/src/bunSetup.ts +204 -121
- package/src/index.tsx +2 -2
- package/src/table/TableHeaderCell.test.tsx +142 -0
- package/src/table/TableRow.test.tsx +33 -0
- package/src/table/__snapshots__/TableRow.test.tsx.snap +403 -0
- package/src/table/tableContext.test.tsx +96 -0
- package/src/test-utils.tsx +1 -1
- package/src/useConsentForms.test.ts +130 -0
- package/src/useSubmitConsent.test.ts +64 -0
package/dist/Banner.js
CHANGED
|
@@ -39,9 +39,9 @@ const BannerButton = ({ loading: propsLoading, buttonText, buttonIconName, butto
|
|
|
39
39
|
marginRight: 0,
|
|
40
40
|
}, children: _jsx(Icon, { iconName: buttonIconName, type: "solid" }) })), _jsx(NativeText, { style: { fontSize: 12 }, children: buttonText })] }), Boolean(loading) && (_jsx(Box, { marginLeft: 2, children: _jsx(ActivityIndicator, { size: "small" }) }))] }) }));
|
|
41
41
|
};
|
|
42
|
-
|
|
42
|
+
const getKey = (id) => {
|
|
43
43
|
return `@TerrenoUI:${id}`;
|
|
44
|
-
}
|
|
44
|
+
};
|
|
45
45
|
export const hideBanner = (id) => {
|
|
46
46
|
console.debug(`[banner] Hiding ${getKey(id)} `);
|
|
47
47
|
return Unifier.storage.setItem(getKey(id), "true");
|
|
@@ -58,9 +58,9 @@ export const Banner = (props) => {
|
|
|
58
58
|
bgColor = "warning";
|
|
59
59
|
}
|
|
60
60
|
const [show, setShow] = useState(true);
|
|
61
|
-
// Load seen from async storage.
|
|
61
|
+
// Load seen from async storage (only when id is provided).
|
|
62
62
|
useEffect(() => {
|
|
63
|
-
if (dismissible) {
|
|
63
|
+
if (dismissible && id) {
|
|
64
64
|
void Unifier.storage.getItem(getKey(id)).then((isSeen) => {
|
|
65
65
|
console.debug(`[banner] ${getKey(id)} seen? ${isSeen}`);
|
|
66
66
|
setShow(!isSeen);
|
|
@@ -71,7 +71,9 @@ export const Banner = (props) => {
|
|
|
71
71
|
if (!dismissible) {
|
|
72
72
|
return;
|
|
73
73
|
}
|
|
74
|
-
|
|
74
|
+
if (id) {
|
|
75
|
+
await hideBanner(id);
|
|
76
|
+
}
|
|
75
77
|
setShow(false);
|
|
76
78
|
};
|
|
77
79
|
if (!show) {
|
package/dist/Banner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Banner.js","sourceRoot":"","sources":["../src/Banner.tsx"],"names":[],"mappings":";AAAA,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AAEvC,OAAO,EAAC,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAC,iBAAiB,EAAE,IAAI,IAAI,UAAU,EAAE,SAAS,EAAE,IAAI,EAAC,MAAM,cAAc,CAAC;AAEpF,OAAO,EAAC,GAAG,EAAC,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAC;AACjC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AASlC,MAAM,YAAY,GAAG,CAAC,EACpB,OAAO,EAAE,YAAY,EACrB,UAAU,EACV,cAAc,EACd,aAAa,GACK,EAA6B,EAAE;IACjD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrD,MAAM,EAAC,KAAK,EAAC,GAAG,QAAQ,EAAE,CAAC;IAE3B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,KAAC,SAAS,IACR,iBAAiB,EAAE,2BAA2B,UAAU,EAAE,gBAC9C,UAAU,eACZ,QAAQ,EAClB,OAAO,EAAE,QAAQ,CACf,KAAK,IAAI,EAAE;YACT,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC7B,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,CAAC;gBACH,MAAM,aAAa,EAAE,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,UAAU,CAAC,KAAK,CAAC,CAAC;gBAClB,MAAM,KAAK,CAAC;YACd,CAAC;YACD,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC,EACD,GAAG,EACH,EAAC,OAAO,EAAE,IAAI,EAAC,CAChB,EACD,KAAK,EAAE;YACL,UAAU,EAAE,QAAQ;YACpB,SAAS,EAAE,SAAS;YACpB,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI;YACnC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,OAAc;YACzC,aAAa,EAAE,QAAQ;YACvB,cAAc,EAAE,QAAQ;YACxB,iBAAiB,EAAE,EAAE;YACrB,eAAe,EAAE,CAAC;SACnB,YAED,MAAC,IAAI,IAAC,KAAK,EAAE,EAAC,aAAa,EAAE,KAAK,EAAC,aACjC,MAAC,IAAI,IAAC,KAAK,EAAE,EAAC,aAAa,EAAE,aAAa,EAAC,aACxC,OAAO,CAAC,cAAc,CAAC,IAAI,CAC1B,KAAC,IAAI,IACH,KAAK,EAAE;gCACL,SAAS,EAAE,QAAQ;gCACnB,UAAU,EAAE,CAAC;gCACb,WAAW,EAAE,CAAC;6BACf,YAED,KAAC,IAAI,IAAC,QAAQ,EAAE,cAA0B,EAAE,IAAI,EAAC,OAAO,GAAG,GACtD,CACR,EACD,KAAC,UAAU,IAAC,KAAK,EAAE,EAAC,QAAQ,EAAE,EAAE,EAAC,YAAG,UAAU,GAAc,IACvD,EACN,OAAO,CAAC,OAAO,CAAC,IAAI,CACnB,KAAC,GAAG,IAAC,UAAU,EAAE,CAAC,YAChB,KAAC,iBAAiB,IAAC,IAAI,EAAC,OAAO,GAAG,GAC9B,CACP,IACI,GACG,CACb,CAAC;AACJ,CAAC,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"Banner.js","sourceRoot":"","sources":["../src/Banner.tsx"],"names":[],"mappings":"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"}
|
package/dist/Common.d.ts
CHANGED
|
@@ -1183,8 +1183,10 @@ export interface BannerButtonProps {
|
|
|
1183
1183
|
export interface BannerPropsBase {
|
|
1184
1184
|
/**
|
|
1185
1185
|
* Used to identify if banner has been dismissed by the user.
|
|
1186
|
+
* When provided, dismissal state is persisted to AsyncStorage.
|
|
1187
|
+
* When omitted, dismissal is ephemeral (resets on remount).
|
|
1186
1188
|
*/
|
|
1187
|
-
id
|
|
1189
|
+
id?: string;
|
|
1188
1190
|
/**
|
|
1189
1191
|
* The text to display in the main body of the banner.
|
|
1190
1192
|
*/
|
package/dist/Common.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Common.js","sourceRoot":"","sources":["../src/Common.ts"],"names":[],"mappings":"AAqXA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;CACP,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,OAAqB;IAC9C,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,WAAW,CAAC,OAAyB,CAAC,CAAC;AAChD,CAAC;AAqBD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAe,EAAE,EAAE;IAClD,OAAO;QACL,KAAK,EAAE,EAAE;QACT,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,CAAC;KACN,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;AAClB,CAAC,CAAC;AAqTF,MAAM,YAAY,GAAG;IACnB,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,EAAE;IACR,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,CAAC;IACL,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,GAAG;IACZ,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,EAAE;CACP,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,QAAkB;IAC5C,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;
|
|
1
|
+
{"version":3,"file":"Common.js","sourceRoot":"","sources":["../src/Common.ts"],"names":[],"mappings":"AAqXA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,EAAE;CACP,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,OAAqB;IAC9C,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,WAAW,CAAC,OAAyB,CAAC,CAAC;AAChD,CAAC;AAqBD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAe,EAAE,EAAE;IAClD,OAAO;QACL,KAAK,EAAE,EAAE;QACT,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,EAAE;QACN,EAAE,EAAE,CAAC;KACN,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;AAClB,CAAC,CAAC;AAqTF,MAAM,YAAY,GAAG;IACnB,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;IACV,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,EAAE;IACR,EAAE,EAAE,EAAE;IACN,EAAE,EAAE,CAAC;IACL,OAAO,EAAE,CAAC;IACV,OAAO,EAAE,GAAG;IACZ,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,EAAE;CACP,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,QAAkB;IAC5C,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAwnED;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;CACV,CAAC"}
|
|
@@ -2,6 +2,6 @@ import React from "react";
|
|
|
2
2
|
import type { TextFieldPickerActionSheetProps } from "./Common";
|
|
3
3
|
type NumberPickerActionSheetState = {};
|
|
4
4
|
export declare class NumberPickerActionSheet extends React.Component<TextFieldPickerActionSheetProps, NumberPickerActionSheetState> {
|
|
5
|
-
render():
|
|
5
|
+
render(): React.ReactElement;
|
|
6
6
|
}
|
|
7
7
|
export {};
|
package/dist/Toast.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ type UseToastVariantOptions = {
|
|
|
10
10
|
type UseToastOptions = {
|
|
11
11
|
variant?: ToastProps["variant"];
|
|
12
12
|
} & UseToastVariantOptions;
|
|
13
|
-
export declare
|
|
13
|
+
export declare const useToast: () => {
|
|
14
14
|
hide: (id: string) => void;
|
|
15
15
|
success: (title: string, options?: UseToastVariantOptions) => string;
|
|
16
16
|
info: (title: string, options?: UseToastVariantOptions) => string;
|
package/dist/Toast.js
CHANGED
|
@@ -7,7 +7,7 @@ import { useTheme } from "./Theme";
|
|
|
7
7
|
import { useToastNotifications } from "./ToastNotifications";
|
|
8
8
|
import { isAPIError, printAPIError } from "./Utilities";
|
|
9
9
|
const TOAST_DURATION_MS = 3 * 1000;
|
|
10
|
-
export
|
|
10
|
+
export const useToast = () => {
|
|
11
11
|
const toast = useToastNotifications();
|
|
12
12
|
const show = (title, options) => {
|
|
13
13
|
if (!(toast === null || toast === void 0 ? void 0 : toast.show)) {
|
|
@@ -54,7 +54,7 @@ export function useToast() {
|
|
|
54
54
|
return show(title, Object.assign(Object.assign({}, options), { variant: "warning" }));
|
|
55
55
|
},
|
|
56
56
|
};
|
|
57
|
-
}
|
|
57
|
+
};
|
|
58
58
|
// TODO: Support secondary version of Toast.
|
|
59
59
|
// TODO: Support dismissible version of Toast. Currently only persistent are dismissible.
|
|
60
60
|
export const Toast = ({ title, variant = "info", secondary, size = "sm", onDismiss, persistent,
|
package/dist/Toast.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toast.js","sourceRoot":"","sources":["../src/Toast.tsx"],"names":[],"mappings":";AACA,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAC,MAAM,cAAc,CAAC;AAGvD,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAC;AACjC,OAAO,EAAC,qBAAqB,EAAC,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAC,UAAU,EAAE,aAAa,EAAC,MAAM,aAAa,CAAC;AAEtD,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI,CAAC;AAYnC,MAAM,
|
|
1
|
+
{"version":3,"file":"Toast.js","sourceRoot":"","sources":["../src/Toast.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -134,7 +134,8 @@
|
|
|
134
134
|
"local": "tsc-watch --onSuccess \"cp -a dist/* ../flourish/node_modules/@terreno/ui/dist\"",
|
|
135
135
|
"test": "TZ=America/New_York bun test --watch",
|
|
136
136
|
"test:ci": "TZ=America/New_York bun test",
|
|
137
|
+
"test:coverage": "TZ=America/New_York bun run ../scripts/check-coverage.ts",
|
|
137
138
|
"types": "bun typedoc"
|
|
138
139
|
},
|
|
139
|
-
"version": "0.
|
|
140
|
+
"version": "0.11.1"
|
|
140
141
|
}
|
package/src/ActionSheet.test.tsx
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
|
-
import {describe, expect, it} from "bun:test";
|
|
2
|
-
import {render} from "@testing-library/react-native";
|
|
1
|
+
import {beforeAll, describe, expect, it, mock} from "bun:test";
|
|
2
|
+
import {act, render} from "@testing-library/react-native";
|
|
3
3
|
import {createRef} from "react";
|
|
4
4
|
import {Text} from "react-native";
|
|
5
5
|
|
|
6
|
-
import {ActionSheet, getDeviceHeight, getElevation} from "./ActionSheet";
|
|
6
|
+
import {ActionSheet, getDeviceHeight, getElevation, waitAsync} from "./ActionSheet";
|
|
7
7
|
import {ThemeProvider} from "./Theme";
|
|
8
8
|
|
|
9
|
+
beforeAll(() => {
|
|
10
|
+
(global as any).requestAnimationFrame = (callback: FrameRequestCallback) => {
|
|
11
|
+
return setTimeout(() => callback(Date.now()), 0) as unknown as number;
|
|
12
|
+
};
|
|
13
|
+
(global as any).cancelAnimationFrame = (id: number) => {
|
|
14
|
+
clearTimeout(id);
|
|
15
|
+
};
|
|
16
|
+
});
|
|
17
|
+
|
|
9
18
|
describe("ActionSheet", () => {
|
|
10
19
|
it("component is defined", () => {
|
|
11
20
|
expect(ActionSheet).toBeDefined();
|
|
@@ -48,6 +57,249 @@ describe("ActionSheet", () => {
|
|
|
48
57
|
expect(toJSON()).toMatchSnapshot();
|
|
49
58
|
});
|
|
50
59
|
|
|
60
|
+
it("show() sets modalVisible to true", () => {
|
|
61
|
+
const ref = createRef<ActionSheet>();
|
|
62
|
+
render(
|
|
63
|
+
<ThemeProvider>
|
|
64
|
+
<ActionSheet ref={ref}>
|
|
65
|
+
<Text>Content</Text>
|
|
66
|
+
</ActionSheet>
|
|
67
|
+
</ThemeProvider>
|
|
68
|
+
);
|
|
69
|
+
act(() => {
|
|
70
|
+
ref.current?.show();
|
|
71
|
+
});
|
|
72
|
+
expect(ref.current?.state.modalVisible).toBe(true);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it("show() followed by hide() calls hide animation path", () => {
|
|
76
|
+
const ref = createRef<ActionSheet>();
|
|
77
|
+
render(
|
|
78
|
+
<ThemeProvider>
|
|
79
|
+
<ActionSheet closeAnimationDuration={1} ref={ref}>
|
|
80
|
+
<Text>Content</Text>
|
|
81
|
+
</ActionSheet>
|
|
82
|
+
</ThemeProvider>
|
|
83
|
+
);
|
|
84
|
+
act(() => {
|
|
85
|
+
ref.current?.show();
|
|
86
|
+
});
|
|
87
|
+
expect(ref.current?.state.modalVisible).toBe(true);
|
|
88
|
+
act(() => {
|
|
89
|
+
ref.current?.hide();
|
|
90
|
+
});
|
|
91
|
+
// hide() does not immediately flip modalVisible (it animates first)
|
|
92
|
+
expect(ref.current).toBeTruthy();
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it("setModalVisible does nothing when state already matches", () => {
|
|
96
|
+
const ref = createRef<ActionSheet>();
|
|
97
|
+
render(
|
|
98
|
+
<ThemeProvider>
|
|
99
|
+
<ActionSheet ref={ref}>
|
|
100
|
+
<Text>Content</Text>
|
|
101
|
+
</ActionSheet>
|
|
102
|
+
</ThemeProvider>
|
|
103
|
+
);
|
|
104
|
+
// modal starts hidden, call hide again (setModalVisible(false)) - state stays hidden
|
|
105
|
+
act(() => {
|
|
106
|
+
ref.current?.hide();
|
|
107
|
+
});
|
|
108
|
+
expect(ref.current?.state.modalVisible).toBe(false);
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
it("snapToOffset does not throw when called before layout", () => {
|
|
112
|
+
const ref = createRef<ActionSheet>();
|
|
113
|
+
render(
|
|
114
|
+
<ThemeProvider>
|
|
115
|
+
<ActionSheet ref={ref}>
|
|
116
|
+
<Text>Content</Text>
|
|
117
|
+
</ActionSheet>
|
|
118
|
+
</ThemeProvider>
|
|
119
|
+
);
|
|
120
|
+
expect(() => ref.current?.snapToOffset(100)).not.toThrow();
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it("renders with elevation prop", () => {
|
|
124
|
+
const ref = createRef<ActionSheet>();
|
|
125
|
+
const {toJSON} = render(
|
|
126
|
+
<ThemeProvider>
|
|
127
|
+
<ActionSheet elevation={10} ref={ref}>
|
|
128
|
+
<Text>Elevated</Text>
|
|
129
|
+
</ActionSheet>
|
|
130
|
+
</ThemeProvider>
|
|
131
|
+
);
|
|
132
|
+
expect(toJSON()).toMatchSnapshot();
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
it("renders with indicator color", () => {
|
|
136
|
+
const ref = createRef<ActionSheet>();
|
|
137
|
+
const {toJSON} = render(
|
|
138
|
+
<ThemeProvider>
|
|
139
|
+
<ActionSheet indicatorColor="red" ref={ref}>
|
|
140
|
+
<Text>Indicator</Text>
|
|
141
|
+
</ActionSheet>
|
|
142
|
+
</ThemeProvider>
|
|
143
|
+
);
|
|
144
|
+
expect(toJSON()).toMatchSnapshot();
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
it("renders with initialOffsetFromBottom", () => {
|
|
148
|
+
const ref = createRef<ActionSheet>();
|
|
149
|
+
const {toJSON} = render(
|
|
150
|
+
<ThemeProvider>
|
|
151
|
+
<ActionSheet initialOffsetFromBottom={0.5} ref={ref}>
|
|
152
|
+
<Text>Offset</Text>
|
|
153
|
+
</ActionSheet>
|
|
154
|
+
</ThemeProvider>
|
|
155
|
+
);
|
|
156
|
+
expect(toJSON()).toMatchSnapshot();
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
it("renders with bottomOffset", () => {
|
|
160
|
+
const ref = createRef<ActionSheet>();
|
|
161
|
+
const {toJSON} = render(
|
|
162
|
+
<ThemeProvider>
|
|
163
|
+
<ActionSheet bottomOffset={20} ref={ref}>
|
|
164
|
+
<Text>Bottom</Text>
|
|
165
|
+
</ActionSheet>
|
|
166
|
+
</ThemeProvider>
|
|
167
|
+
);
|
|
168
|
+
expect(toJSON()).toMatchSnapshot();
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
it("renders with closable=false and persistent", () => {
|
|
172
|
+
const ref = createRef<ActionSheet>();
|
|
173
|
+
const {toJSON} = render(
|
|
174
|
+
<ThemeProvider>
|
|
175
|
+
<ActionSheet closable={false} ref={ref}>
|
|
176
|
+
<Text>Persistent</Text>
|
|
177
|
+
</ActionSheet>
|
|
178
|
+
</ThemeProvider>
|
|
179
|
+
);
|
|
180
|
+
expect(toJSON()).toMatchSnapshot();
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
it("renders with custom containerStyle", () => {
|
|
184
|
+
const ref = createRef<ActionSheet>();
|
|
185
|
+
const {toJSON} = render(
|
|
186
|
+
<ThemeProvider>
|
|
187
|
+
<ActionSheet containerStyle={{backgroundColor: "blue"}} ref={ref}>
|
|
188
|
+
<Text>Styled</Text>
|
|
189
|
+
</ActionSheet>
|
|
190
|
+
</ThemeProvider>
|
|
191
|
+
);
|
|
192
|
+
expect(toJSON()).toMatchSnapshot();
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
it("invokes onOpen when modal is shown", () => {
|
|
196
|
+
const ref = createRef<ActionSheet>();
|
|
197
|
+
const handleOpen = mock(() => {});
|
|
198
|
+
render(
|
|
199
|
+
<ThemeProvider>
|
|
200
|
+
<ActionSheet onOpen={handleOpen} ref={ref}>
|
|
201
|
+
<Text>Open</Text>
|
|
202
|
+
</ActionSheet>
|
|
203
|
+
</ThemeProvider>
|
|
204
|
+
);
|
|
205
|
+
act(() => {
|
|
206
|
+
ref.current?.show();
|
|
207
|
+
});
|
|
208
|
+
expect(ref.current?.state.modalVisible).toBe(true);
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
it("_onRequestClose hides modal when closeOnPressBack is true", () => {
|
|
212
|
+
const ref = createRef<ActionSheet>();
|
|
213
|
+
render(
|
|
214
|
+
<ThemeProvider>
|
|
215
|
+
<ActionSheet closeAnimationDuration={1} closeOnPressBack ref={ref}>
|
|
216
|
+
<Text>Close</Text>
|
|
217
|
+
</ActionSheet>
|
|
218
|
+
</ThemeProvider>
|
|
219
|
+
);
|
|
220
|
+
act(() => {
|
|
221
|
+
ref.current?.show();
|
|
222
|
+
});
|
|
223
|
+
expect(() => (ref.current as any)._onRequestClose()).not.toThrow();
|
|
224
|
+
});
|
|
225
|
+
|
|
226
|
+
it("_onTouchBackdrop hides modal when closeOnTouchBackdrop is true", () => {
|
|
227
|
+
const ref = createRef<ActionSheet>();
|
|
228
|
+
render(
|
|
229
|
+
<ThemeProvider>
|
|
230
|
+
<ActionSheet closeAnimationDuration={1} closeOnTouchBackdrop ref={ref}>
|
|
231
|
+
<Text>Backdrop</Text>
|
|
232
|
+
</ActionSheet>
|
|
233
|
+
</ThemeProvider>
|
|
234
|
+
);
|
|
235
|
+
act(() => {
|
|
236
|
+
ref.current?.show();
|
|
237
|
+
});
|
|
238
|
+
expect(() => (ref.current as any)._onTouchBackdrop()).not.toThrow();
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
it("_onRequestClose does not hide when closeOnPressBack is false", () => {
|
|
242
|
+
const ref = createRef<ActionSheet>();
|
|
243
|
+
render(
|
|
244
|
+
<ThemeProvider>
|
|
245
|
+
<ActionSheet closeOnPressBack={false} ref={ref}>
|
|
246
|
+
<Text>NoClose</Text>
|
|
247
|
+
</ActionSheet>
|
|
248
|
+
</ThemeProvider>
|
|
249
|
+
);
|
|
250
|
+
act(() => {
|
|
251
|
+
ref.current?.show();
|
|
252
|
+
});
|
|
253
|
+
(ref.current as any)._onRequestClose();
|
|
254
|
+
expect(ref.current?.state.modalVisible).toBe(true);
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
it("_onTouchBackdrop does not hide when closeOnTouchBackdrop is false", () => {
|
|
258
|
+
const ref = createRef<ActionSheet>();
|
|
259
|
+
render(
|
|
260
|
+
<ThemeProvider>
|
|
261
|
+
<ActionSheet closeOnTouchBackdrop={false} ref={ref}>
|
|
262
|
+
<Text>NoBackdrop</Text>
|
|
263
|
+
</ActionSheet>
|
|
264
|
+
</ThemeProvider>
|
|
265
|
+
);
|
|
266
|
+
act(() => {
|
|
267
|
+
ref.current?.show();
|
|
268
|
+
});
|
|
269
|
+
(ref.current as any)._onTouchBackdrop();
|
|
270
|
+
expect(ref.current?.state.modalVisible).toBe(true);
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
it("_onScroll does not throw", () => {
|
|
274
|
+
const ref = createRef<ActionSheet>();
|
|
275
|
+
render(
|
|
276
|
+
<ThemeProvider>
|
|
277
|
+
<ActionSheet ref={ref}>
|
|
278
|
+
<Text>Scroll</Text>
|
|
279
|
+
</ActionSheet>
|
|
280
|
+
</ThemeProvider>
|
|
281
|
+
);
|
|
282
|
+
expect(() =>
|
|
283
|
+
(ref.current as any)._onScroll({
|
|
284
|
+
nativeEvent: {contentOffset: {x: 0, y: 10}},
|
|
285
|
+
})
|
|
286
|
+
).not.toThrow();
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
it("_onTouchStart and _onTouchMove do not throw", () => {
|
|
290
|
+
const ref = createRef<ActionSheet>();
|
|
291
|
+
render(
|
|
292
|
+
<ThemeProvider>
|
|
293
|
+
<ActionSheet ref={ref}>
|
|
294
|
+
<Text>Touch</Text>
|
|
295
|
+
</ActionSheet>
|
|
296
|
+
</ThemeProvider>
|
|
297
|
+
);
|
|
298
|
+
expect(() => (ref.current as any)._onTouchStart()).not.toThrow();
|
|
299
|
+
expect(() => (ref.current as any)._onTouchMove()).not.toThrow();
|
|
300
|
+
expect(() => (ref.current as any)._onTouchEnd()).not.toThrow();
|
|
301
|
+
});
|
|
302
|
+
|
|
51
303
|
describe("getDeviceHeight", () => {
|
|
52
304
|
it("returns a number", () => {
|
|
53
305
|
const height = getDeviceHeight(false);
|
|
@@ -74,4 +326,11 @@ describe("ActionSheet", () => {
|
|
|
74
326
|
expect(result).toHaveProperty("boxShadow");
|
|
75
327
|
});
|
|
76
328
|
});
|
|
329
|
+
|
|
330
|
+
describe("waitAsync", () => {
|
|
331
|
+
it("resolves after the specified time", async () => {
|
|
332
|
+
const result = await waitAsync(1);
|
|
333
|
+
expect(result).toBeNull();
|
|
334
|
+
});
|
|
335
|
+
});
|
|
77
336
|
});
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {afterEach, beforeEach, describe, expect, it, mock} from "bun:test";
|
|
2
2
|
import {fireEvent} from "@testing-library/react-native";
|
|
3
|
+
import type {ReactTestInstance} from "react-test-renderer";
|
|
3
4
|
|
|
4
5
|
import {AddressField} from "./AddressField";
|
|
5
6
|
import {renderWithTheme} from "./test-utils";
|
|
@@ -117,4 +118,53 @@ describe("AddressField", () => {
|
|
|
117
118
|
expect(address1Input.props.accessibilityState.disabled).toBe(true);
|
|
118
119
|
expect(cityInput.props.accessibilityState.disabled).toBe(true);
|
|
119
120
|
});
|
|
121
|
+
|
|
122
|
+
it("calls onChange when address2 changes", () => {
|
|
123
|
+
const {getByTestId} = renderWithTheme(
|
|
124
|
+
<AddressField {...defaultProps} onBlur={mockOnBlur} onChange={mockOnChange} />
|
|
125
|
+
);
|
|
126
|
+
fireEvent.changeText(getByTestId("test-address-address2"), "Suite 500");
|
|
127
|
+
expect(mockOnChange).toHaveBeenCalledWith({...defaultValue, address2: "Suite 500"});
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
it("calls onChange when countyName and countyCode change", () => {
|
|
131
|
+
const {getByTestId} = renderWithTheme(
|
|
132
|
+
<AddressField {...defaultProps} includeCounty onBlur={mockOnBlur} onChange={mockOnChange} />
|
|
133
|
+
);
|
|
134
|
+
fireEvent.changeText(getByTestId("test-address-county"), "Clark");
|
|
135
|
+
expect(mockOnChange).toHaveBeenCalledWith({...defaultValue, countyName: "Clark"});
|
|
136
|
+
fireEvent.changeText(getByTestId("test-address-county-code"), "999");
|
|
137
|
+
expect(mockOnChange).toHaveBeenCalledWith({...defaultValue, countyCode: "999"});
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
it("renders without throwing when value is undefined", () => {
|
|
141
|
+
expect(() =>
|
|
142
|
+
renderWithTheme(
|
|
143
|
+
<AddressField onBlur={mockOnBlur} onChange={mockOnChange} testID="no-value" />
|
|
144
|
+
)
|
|
145
|
+
).not.toThrow();
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
it("invokes autocomplete callbacks with merged values", () => {
|
|
149
|
+
const {UNSAFE_getAllByProps} = renderWithTheme(
|
|
150
|
+
<AddressField {...defaultProps} onBlur={mockOnBlur} onChange={mockOnChange} />
|
|
151
|
+
);
|
|
152
|
+
const autocompletes = UNSAFE_getAllByProps({}).filter(
|
|
153
|
+
(el: ReactTestInstance) =>
|
|
154
|
+
typeof el.props?.handleAutoCompleteChange === "function" &&
|
|
155
|
+
typeof el.props?.handleAddressChange === "function"
|
|
156
|
+
);
|
|
157
|
+
expect(autocompletes.length).toBeGreaterThan(0);
|
|
158
|
+
const ac = autocompletes[0];
|
|
159
|
+
// Trigger handleAddressChange for address1
|
|
160
|
+
ac.props.handleAddressChange("456 Oak Ave");
|
|
161
|
+
expect(mockOnChange).toHaveBeenCalledWith({...defaultValue, address1: "456 Oak Ave"});
|
|
162
|
+
// Trigger handleAutoCompleteChange with a new address object
|
|
163
|
+
ac.props.handleAutoCompleteChange({city: "Chicago", state: "IL"});
|
|
164
|
+
expect(mockOnChange).toHaveBeenCalledWith({
|
|
165
|
+
...defaultValue,
|
|
166
|
+
city: "Chicago",
|
|
167
|
+
state: "IL",
|
|
168
|
+
});
|
|
169
|
+
});
|
|
120
170
|
});
|
package/src/Banner.test.tsx
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import {describe, expect, it, mock} from "bun:test";
|
|
2
2
|
import {act, fireEvent, waitFor} from "@testing-library/react-native";
|
|
3
|
+
import React from "react";
|
|
3
4
|
|
|
4
5
|
import {Banner} from "./Banner";
|
|
5
6
|
import {renderWithTheme} from "./test-utils";
|
|
7
|
+
import {Unifier} from "./Unifier";
|
|
6
8
|
|
|
7
9
|
describe("Banner", () => {
|
|
8
10
|
it("renders correctly with default props", () => {
|
|
@@ -103,4 +105,67 @@ describe("Banner", () => {
|
|
|
103
105
|
expect(handleClick).toHaveBeenCalled();
|
|
104
106
|
});
|
|
105
107
|
});
|
|
108
|
+
|
|
109
|
+
it("invokes buttonOnClick when icon button is pressed", async () => {
|
|
110
|
+
const handleClick = mock(() => Promise.resolve());
|
|
111
|
+
const {getByText} = renderWithTheme(
|
|
112
|
+
<Banner
|
|
113
|
+
buttonIconName="arrow-right"
|
|
114
|
+
buttonOnClick={handleClick}
|
|
115
|
+
buttonText="Go"
|
|
116
|
+
id="test-icon-banner"
|
|
117
|
+
text="Banner"
|
|
118
|
+
/>
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
await act(async () => {
|
|
122
|
+
fireEvent.press(getByText("Go"));
|
|
123
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
await waitFor(() => {
|
|
127
|
+
expect(handleClick).toHaveBeenCalled();
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
// Tests for optional id prop
|
|
132
|
+
it("renders without id prop", () => {
|
|
133
|
+
const {getByText} = renderWithTheme(<Banner text="No id banner" />);
|
|
134
|
+
expect(getByText("No id banner")).toBeTruthy();
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
it("renders without id and without dismissible", () => {
|
|
138
|
+
const {getByText, queryByLabelText} = renderWithTheme(<Banner text="Simple banner no id" />);
|
|
139
|
+
expect(getByText("Simple banner no id")).toBeTruthy();
|
|
140
|
+
expect(queryByLabelText("Dismiss")).toBeNull();
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
it("hides dismissible banner without id when dismissed", async () => {
|
|
144
|
+
const {getByLabelText, queryByText} = renderWithTheme(
|
|
145
|
+
<Banner dismissible text="Ephemeral banner" />
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
await act(async () => {
|
|
149
|
+
fireEvent.press(getByLabelText("Dismiss"));
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
await waitFor(() => {
|
|
153
|
+
expect(queryByText("Ephemeral banner")).toBeNull();
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
it("does not persist dismissal to storage when id is omitted", async () => {
|
|
158
|
+
const setItemMock = Unifier.storage.setItem as ReturnType<typeof mock>;
|
|
159
|
+
setItemMock.mockClear();
|
|
160
|
+
|
|
161
|
+
const {getByLabelText} = renderWithTheme(<Banner dismissible text="No persist banner" />);
|
|
162
|
+
|
|
163
|
+
await act(async () => {
|
|
164
|
+
fireEvent.press(getByLabelText("Dismiss"));
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
await waitFor(() => {
|
|
168
|
+
expect(setItemMock).not.toHaveBeenCalled();
|
|
169
|
+
});
|
|
170
|
+
});
|
|
106
171
|
});
|
package/src/Banner.tsx
CHANGED
|
@@ -86,9 +86,9 @@ const BannerButton = ({
|
|
|
86
86
|
);
|
|
87
87
|
};
|
|
88
88
|
|
|
89
|
-
|
|
89
|
+
const getKey = (id: string): string => {
|
|
90
90
|
return `@TerrenoUI:${id}`;
|
|
91
|
-
}
|
|
91
|
+
};
|
|
92
92
|
|
|
93
93
|
export const hideBanner = (id: string): Promise<void> => {
|
|
94
94
|
console.debug(`[banner] Hiding ${getKey(id)} `);
|
|
@@ -112,9 +112,9 @@ export const Banner = (props: BannerProps): React.ReactElement | null => {
|
|
|
112
112
|
|
|
113
113
|
const [show, setShow] = useState(true);
|
|
114
114
|
|
|
115
|
-
// Load seen from async storage.
|
|
115
|
+
// Load seen from async storage (only when id is provided).
|
|
116
116
|
useEffect(() => {
|
|
117
|
-
if (dismissible) {
|
|
117
|
+
if (dismissible && id) {
|
|
118
118
|
void Unifier.storage.getItem(getKey(id)).then((isSeen) => {
|
|
119
119
|
console.debug(`[banner] ${getKey(id)} seen? ${isSeen}`);
|
|
120
120
|
setShow(!isSeen);
|
|
@@ -126,7 +126,9 @@ export const Banner = (props: BannerProps): React.ReactElement | null => {
|
|
|
126
126
|
if (!dismissible) {
|
|
127
127
|
return;
|
|
128
128
|
}
|
|
129
|
-
|
|
129
|
+
if (id) {
|
|
130
|
+
await hideBanner(id);
|
|
131
|
+
}
|
|
130
132
|
setShow(false);
|
|
131
133
|
};
|
|
132
134
|
|