ferns-ui 1.8.0 → 1.9.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/BooleanField.d.ts +2 -2
- package/dist/BooleanField.js.map +1 -1
- package/dist/Box.js +1 -1
- package/dist/Box.js.map +1 -1
- package/dist/Common.d.ts +5 -0
- package/dist/CustomSelectField.d.ts +2 -2
- package/dist/CustomSelectField.js.map +1 -1
- package/dist/DataTable.d.ts +2 -2
- package/dist/DataTable.js.map +1 -1
- package/dist/DateTimeField.d.ts +2 -2
- package/dist/DateTimeField.js +20 -7
- package/dist/DateTimeField.js.map +1 -1
- package/dist/DateTimeField.test.js +5 -5
- package/dist/DateTimeField.test.js.map +1 -1
- package/dist/FernsProvider.d.ts +3 -3
- package/dist/FernsProvider.js.map +1 -1
- package/dist/Icon.d.ts +2 -2
- package/dist/Icon.js.map +1 -1
- package/dist/Pagination.d.ts +2 -2
- package/dist/Pagination.js.map +1 -1
- package/dist/SegmentedControl.d.ts +2 -2
- package/dist/SegmentedControl.js.map +1 -1
- package/dist/Signature.native.d.ts +2 -2
- package/dist/Signature.native.js.map +1 -1
- package/dist/Spinner.d.ts +2 -2
- package/dist/Spinner.js.map +1 -1
- package/dist/TapToEdit.d.ts +2 -2
- package/dist/TapToEdit.js +11 -1
- package/dist/TapToEdit.js.map +1 -1
- package/dist/TimezonePicker.d.ts +2 -2
- package/dist/TimezonePicker.js.map +1 -1
- package/package.json +12 -1
- package/src/BooleanField.tsx +3 -3
- package/src/Box.tsx +1 -1
- package/src/Common.ts +6 -0
- package/src/CustomSelectField.tsx +3 -3
- package/src/DataTable.tsx +10 -10
- package/src/DateTimeField.test.tsx +5 -5
- package/src/DateTimeField.tsx +24 -9
- package/src/FernsProvider.tsx +6 -6
- package/src/Icon.tsx +3 -3
- package/src/Pagination.tsx +15 -15
- package/src/SegmentedControl.tsx +2 -2
- package/src/Signature.native.tsx +2 -2
- package/src/Spinner.tsx +2 -2
- package/src/TapToEdit.tsx +26 -9
- package/src/TimezonePicker.tsx +2 -2
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { FC } from "react";
|
|
2
2
|
interface Props {
|
|
3
3
|
onChange: (signature: string) => void;
|
|
4
4
|
onStart?: () => void;
|
|
5
5
|
onEnd?: () => void;
|
|
6
6
|
}
|
|
7
|
-
export declare const Signature:
|
|
7
|
+
export declare const Signature: FC<Props>;
|
|
8
8
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Signature.native.js","sourceRoot":"","sources":["../src/Signature.native.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"Signature.native.js","sourceRoot":"","sources":["../src/Signature.native.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAK,MAAM,EAAC,MAAM,OAAO,CAAC;AACxC,OAAO,EAAC,IAAI,EAAE,IAAI,EAAC,MAAM,cAAc,CAAC;AACxC,OAAO,eAAmC,MAAM,+BAA+B,CAAC;AAEhF,OAAO,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAC;AAQjC,MAAM,KAAK,GAAG,wDAAwD,CAAC;AAEvE,MAAM,CAAC,MAAM,SAAS,GAAc,CAAC,EAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAQ,EAAE,EAAE;IACxE,MAAM,GAAG,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAC3C,MAAM,EAAC,KAAK,EAAC,GAAG,QAAQ,EAAE,CAAC;IAE3B,MAAM,WAAW,GAAG,GAAG,EAAE;;QACvB,MAAA,GAAG,CAAC,OAAO,0CAAE,cAAc,EAAE,CAAC;IAChC,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,OAAO,IAAI,OAAO,EAAE,CAAC;IACvB,CAAC,CAAC;IAEF,2DAA2D;IAC3D,4FAA4F;IAC5F,MAAM,SAAS,GAAG,GAAG,EAAE;;QACrB,MAAA,GAAG,CAAC,OAAO,0CAAE,aAAa,EAAE,CAAC;QAC7B,KAAK,IAAI,KAAK,EAAE,CAAC;IACnB,CAAC,CAAC;IAEF,OAAO,CACL,oBAAC,IAAI,IAAC,KAAK,EAAE,EAAC,QAAQ,EAAE,GAAG,EAAC;QAC1B,oBAAC,IAAI,IAAC,KAAK,EAAE,EAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAC;YAC1E,oBAAC,eAAe,IACd,GAAG,EAAE,GAAG,EACR,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EACnC,cAAc,QACd,QAAQ,EAAE,KAAK,EACf,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,GAC5B,CACG;QACP,oBAAC,IAAI,IAAC,KAAK,EAAE,EAAC,aAAa,EAAE,KAAK,EAAC;YACjC,oBAAC,IAAI,IACH,KAAK,EAAE,EAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAC,EAChE,OAAO,EAAE,WAAW,YAGf,CACF,CACF,CACR,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/Spinner.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FC } from "react";
|
|
2
2
|
import { SpinnerProps } from "./Common";
|
|
3
|
-
export declare const Spinner:
|
|
3
|
+
export declare const Spinner: FC<SpinnerProps>;
|
package/dist/Spinner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Spinner.js","sourceRoot":"","sources":["../src/Spinner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"Spinner.js","sourceRoot":"","sources":["../src/Spinner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAK,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AACrD,OAAO,EAAC,iBAAiB,EAAC,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAC;AAEjC,MAAM,CAAC,MAAM,OAAO,GAAqB,CAAC,EAAC,IAAI,GAAG,IAAI,EAAE,KAAK,GAAG,OAAO,EAAC,EAAE,EAAE;IAC1E,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,EAAC,KAAK,EAAC,GAAG,QAAQ,EAAE,CAAC;IAE3B,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;IAC9C,CAAC;SAAM,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QAC5B,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;IAC9C,CAAC;SAAM,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;IAC7C,CAAC;SAAM,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;QACjC,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC;IAChD,CAAC;IAED,+FAA+F;IAC/F,gBAAgB;IAChB,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACnD,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAsB,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACzE,OAAO,oBAAC,iBAAiB,IAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,GAAI,CAAC;AACxE,CAAC,CAAC"}
|
package/dist/TapToEdit.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FC } from "react";
|
|
2
2
|
import { AddressInterface, TapToEditProps } from "./Common";
|
|
3
3
|
export declare function formatAddress(address: AddressInterface, asString?: boolean): string;
|
|
4
|
-
export declare const TapToEdit:
|
|
4
|
+
export declare const TapToEdit: FC<TapToEditProps>;
|
package/dist/TapToEdit.js
CHANGED
|
@@ -49,7 +49,7 @@ export function formatAddress(address, asString = false) {
|
|
|
49
49
|
}
|
|
50
50
|
export const TapToEdit = (_a) => {
|
|
51
51
|
var _b, _c, _d;
|
|
52
|
-
var { value, setValue, title, onSave, editable = true, isEditing = false, transform, withConfirmation = false, confirmationText = "Are you sure you want to save your changes?", confirmationTitle = "Confirm", helperText: propsHelperText, onlyShowHelperTextWhileEditing = true } = _a, fieldProps = __rest(_a, ["value", "setValue", "title", "onSave", "editable", "isEditing", "transform", "withConfirmation", "confirmationText", "confirmationTitle", "helperText", "onlyShowHelperTextWhileEditing"]);
|
|
52
|
+
var { value, setValue, title, onSave, editable = true, isEditing = false, transform, withConfirmation = false, confirmationText = "Are you sure you want to save your changes?", confirmationTitle = "Confirm", helperText: propsHelperText, onlyShowHelperTextWhileEditing = true, showClearButton = false } = _a, fieldProps = __rest(_a, ["value", "setValue", "title", "onSave", "editable", "isEditing", "transform", "withConfirmation", "confirmationText", "confirmationTitle", "helperText", "onlyShowHelperTextWhileEditing", "showClearButton"]);
|
|
53
53
|
const [editing, setEditing] = useState(false);
|
|
54
54
|
const [initialValue, setInitialValue] = useState();
|
|
55
55
|
const helperText = propsHelperText;
|
|
@@ -87,6 +87,16 @@ export const TapToEdit = (_a) => {
|
|
|
87
87
|
}
|
|
88
88
|
setEditing(false);
|
|
89
89
|
} }),
|
|
90
|
+
(showClearButton || ["date", "datetime", "time"].includes(fieldProps === null || fieldProps === void 0 ? void 0 : fieldProps.type)) && (React.createElement(Button, { text: "Clear", variant: "muted", onClick: () => {
|
|
91
|
+
if (setValue) {
|
|
92
|
+
setValue("");
|
|
93
|
+
setInitialValue("");
|
|
94
|
+
}
|
|
95
|
+
if (onSave) {
|
|
96
|
+
onSave("");
|
|
97
|
+
}
|
|
98
|
+
setEditing(false);
|
|
99
|
+
} })),
|
|
90
100
|
React.createElement(View, { style: { marginLeft: 8 } },
|
|
91
101
|
React.createElement(Button, { confirmationText: confirmationText, modalTitle: confirmationTitle, text: "Save", withConfirmation: withConfirmation, onClick: async () => {
|
|
92
102
|
if (!onSave) {
|
package/dist/TapToEdit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TapToEdit.js","sourceRoot":"","sources":["../src/TapToEdit.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"TapToEdit.js","sourceRoot":"","sources":["../src/TapToEdit.tsx"],"names":[],"mappings":"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"}
|
package/dist/TimezonePicker.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { FC } from "react";
|
|
2
2
|
import { SelectFieldPropsBase } from "./Common";
|
|
3
3
|
interface TimezonePickerProps extends Omit<SelectFieldPropsBase, "options"> {
|
|
4
4
|
timezone?: string;
|
|
@@ -7,5 +7,5 @@ interface TimezonePickerProps extends Omit<SelectFieldPropsBase, "options"> {
|
|
|
7
7
|
hideTitle?: boolean;
|
|
8
8
|
shortTimezone?: boolean;
|
|
9
9
|
}
|
|
10
|
-
export declare const TimezonePicker:
|
|
10
|
+
export declare const TimezonePicker: FC<TimezonePickerProps>;
|
|
11
11
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimezonePicker.js","sourceRoot":"","sources":["../src/TimezonePicker.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"TimezonePicker.js","sourceRoot":"","sources":["../src/TimezonePicker.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAW,MAAM,OAAO,CAAC;AAGhC,OAAO,EAAC,kBAAkB,EAAC,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAU1C,MAAM,CAAC,MAAM,cAAc,GAA4B,CAAC,EAOlC,EAAsB,EAAE;QAPU,EACtD,QAAQ,EACR,QAAQ,EACR,QAAQ,GAAG,KAAK,EAChB,SAAS,GAAG,KAAK,EACjB,aAAa,GAAG,KAAK,OAED,EADjB,UAAU,cANyC,kEAOvD,CADc;IAEb,8CAA8C;IAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAC7B,GAAG,EAAE,CAAC,kBAAkB,CAAC,QAAQ,EAAE,aAAa,CAAC,EACjD,CAAC,QAAQ,EAAE,aAAa,CAAC,CAC1B,CAAC;IAEF,6CAA6C;IAC7C,MAAM,UAAU,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;IACpE,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,0BAA0B,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;IAEjD,OAAO,CACL,oBAAC,WAAW,kBACV,KAAK,EAAE,KAAK,IACR,UAAU,IACd,OAAO,EAAE,SAAS,EAClB,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,QAAQ,IAClB,CACH,CAAC;AACJ,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ferns-ui",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"scripts": {
|
|
@@ -57,6 +57,10 @@
|
|
|
57
57
|
"rules": {
|
|
58
58
|
"@typescript-eslint/explicit-function-return-type": "off",
|
|
59
59
|
"react-native-a11y/has-valid-accessibility-descriptors": "off",
|
|
60
|
+
"@typescript-eslint/consistent-type-definitions": [
|
|
61
|
+
"error",
|
|
62
|
+
"interface"
|
|
63
|
+
],
|
|
60
64
|
"ban/ban": [
|
|
61
65
|
"error",
|
|
62
66
|
{
|
|
@@ -72,6 +76,13 @@
|
|
|
72
76
|
"*"
|
|
73
77
|
],
|
|
74
78
|
"message": "Use Luxon"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"name": [
|
|
82
|
+
"React",
|
|
83
|
+
"FC"
|
|
84
|
+
],
|
|
85
|
+
"message": "Use FC imported directly from React instead of React.FC"
|
|
75
86
|
}
|
|
76
87
|
]
|
|
77
88
|
}
|
package/src/BooleanField.tsx
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, {FC, useEffect, useRef} from "react";
|
|
2
2
|
import {Animated, TouchableWithoutFeedback, View} from "react-native";
|
|
3
3
|
|
|
4
4
|
import {BooleanFieldProps} from "./Common";
|
|
@@ -11,7 +11,7 @@ const OFFSET = 10;
|
|
|
11
11
|
const WIDTH = 36;
|
|
12
12
|
const WIDTH_WITH_OFFSET = OFFSET + WIDTH;
|
|
13
13
|
|
|
14
|
-
export const BooleanField = ({
|
|
14
|
+
export const BooleanField: FC<BooleanFieldProps> = ({
|
|
15
15
|
title,
|
|
16
16
|
variant,
|
|
17
17
|
value,
|
|
@@ -19,7 +19,7 @@ export const BooleanField = ({
|
|
|
19
19
|
disabled,
|
|
20
20
|
disabledHelperText,
|
|
21
21
|
helperText,
|
|
22
|
-
}
|
|
22
|
+
}) => {
|
|
23
23
|
const {theme} = useTheme();
|
|
24
24
|
const backgroundColor = useRef(
|
|
25
25
|
new Animated.Value(value ? WIDTH_WITH_OFFSET : -1 * WIDTH_WITH_OFFSET)
|
package/src/Box.tsx
CHANGED
|
@@ -221,7 +221,7 @@ export const Box = React.forwardRef((props: BoxProps, ref) => {
|
|
|
221
221
|
}
|
|
222
222
|
}
|
|
223
223
|
|
|
224
|
-
if (props.wrap && props.alignItems) {
|
|
224
|
+
if (props.wrap && props.alignItems && Platform.OS !== "web") {
|
|
225
225
|
console.warn("React Native doesn't support wrap and alignItems together.");
|
|
226
226
|
}
|
|
227
227
|
|
package/src/Common.ts
CHANGED
|
@@ -2310,6 +2310,12 @@ export interface BaseTapToEditProps extends Omit<FieldProps, "onChange" | "value
|
|
|
2310
2310
|
*/
|
|
2311
2311
|
onlyShowHelperTextWhileEditing?: boolean;
|
|
2312
2312
|
|
|
2313
|
+
/**
|
|
2314
|
+
* Show a clear button in the button row alongside Cancel/Save for clearing the field value.
|
|
2315
|
+
* @default false
|
|
2316
|
+
*/
|
|
2317
|
+
showClearButton?: boolean;
|
|
2318
|
+
|
|
2313
2319
|
// openApi to supported in future
|
|
2314
2320
|
// openApiModel?: string;
|
|
2315
2321
|
// openApiField?: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, {FC, useEffect, useMemo, useRef, useState} from "react";
|
|
2
2
|
import {TextInput, View} from "react-native";
|
|
3
3
|
|
|
4
4
|
import {CustomSelectFieldProps} from "./Common";
|
|
@@ -6,7 +6,7 @@ import {FieldHelperText} from "./fieldElements";
|
|
|
6
6
|
import {SelectField} from "./SelectField";
|
|
7
7
|
import {TextField} from "./TextField";
|
|
8
8
|
|
|
9
|
-
export const CustomSelectField = ({
|
|
9
|
+
export const CustomSelectField: FC<CustomSelectFieldProps> = ({
|
|
10
10
|
value,
|
|
11
11
|
onChange,
|
|
12
12
|
placeholder,
|
|
@@ -15,7 +15,7 @@ export const CustomSelectField = ({
|
|
|
15
15
|
title,
|
|
16
16
|
errorText,
|
|
17
17
|
helperText,
|
|
18
|
-
}
|
|
18
|
+
}) => {
|
|
19
19
|
const [currentValue, setCurrentValue] = useState(value);
|
|
20
20
|
const [showCustomInput, setShowCustomInput] = useState(false);
|
|
21
21
|
const textInputRef = useRef<TextInput | null>(null);
|
package/src/DataTable.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {FontAwesome6} from "@expo/vector-icons";
|
|
2
|
-
import React, {useCallback, useMemo, useRef, useState} from "react";
|
|
2
|
+
import React, {FC, useCallback, useMemo, useRef, useState} from "react";
|
|
3
3
|
import {NativeScrollEvent, NativeSyntheticEvent, Pressable, ScrollView, View} from "react-native";
|
|
4
4
|
// @ts-ignore
|
|
5
5
|
import Markdown from "react-native-markdown-display";
|
|
@@ -25,7 +25,7 @@ import {useTheme} from "./Theme";
|
|
|
25
25
|
// TODO: Add permanent horizontal scroll bar so users with only a mouse can scroll left/right
|
|
26
26
|
// easily.
|
|
27
27
|
|
|
28
|
-
const TextCell:
|
|
28
|
+
const TextCell: FC<{
|
|
29
29
|
cellData: {value: string; textSize?: "sm" | "md" | "lg"};
|
|
30
30
|
column: DataTableColumn;
|
|
31
31
|
}> = ({cellData}) => {
|
|
@@ -36,7 +36,7 @@ const TextCell: React.FC<{
|
|
|
36
36
|
);
|
|
37
37
|
};
|
|
38
38
|
|
|
39
|
-
const CheckedCell:
|
|
39
|
+
const CheckedCell: FC<{cellData: {value: boolean}; column: DataTableColumn}> = ({
|
|
40
40
|
cellData,
|
|
41
41
|
}) => {
|
|
42
42
|
return (
|
|
@@ -49,7 +49,7 @@ const CheckedCell: React.FC<{cellData: {value: boolean}; column: DataTableColumn
|
|
|
49
49
|
);
|
|
50
50
|
};
|
|
51
51
|
|
|
52
|
-
const DataTableCell:
|
|
52
|
+
const DataTableCell: FC<DataTableCellProps> = ({
|
|
53
53
|
value,
|
|
54
54
|
columnDef,
|
|
55
55
|
colIndex,
|
|
@@ -119,7 +119,7 @@ interface DataTableRowProps {
|
|
|
119
119
|
rowHeight: number;
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
-
const DataTableRow:
|
|
122
|
+
const DataTableRow: FC<DataTableRowProps> = ({
|
|
123
123
|
rowData,
|
|
124
124
|
rowIndex,
|
|
125
125
|
columns,
|
|
@@ -171,7 +171,7 @@ interface MoreButtonCellProps {
|
|
|
171
171
|
rowHeight: number;
|
|
172
172
|
}
|
|
173
173
|
|
|
174
|
-
const MoreButtonCell:
|
|
174
|
+
const MoreButtonCell: FC<MoreButtonCellProps> = ({
|
|
175
175
|
rowIndex,
|
|
176
176
|
alternateRowBackground,
|
|
177
177
|
onClick,
|
|
@@ -229,7 +229,7 @@ interface DataTableHeaderCellProps {
|
|
|
229
229
|
headerHeight?: number;
|
|
230
230
|
}
|
|
231
231
|
|
|
232
|
-
const DataTableHeaderCell:
|
|
232
|
+
const DataTableHeaderCell: FC<DataTableHeaderCellProps> = ({
|
|
233
233
|
column,
|
|
234
234
|
index,
|
|
235
235
|
isPinnedHorizontal,
|
|
@@ -309,7 +309,7 @@ interface DataTableHeaderProps {
|
|
|
309
309
|
headerHeight?: number;
|
|
310
310
|
}
|
|
311
311
|
|
|
312
|
-
const DataTableHeader:
|
|
312
|
+
const DataTableHeader: FC<DataTableHeaderProps> = ({
|
|
313
313
|
columns,
|
|
314
314
|
hasMoreContent,
|
|
315
315
|
pinnedColumns,
|
|
@@ -416,7 +416,7 @@ interface DataTableContentProps {
|
|
|
416
416
|
rowHeight: number;
|
|
417
417
|
}
|
|
418
418
|
|
|
419
|
-
const DataTableContent:
|
|
419
|
+
const DataTableContent: FC<DataTableContentProps> = ({
|
|
420
420
|
data,
|
|
421
421
|
columns,
|
|
422
422
|
pinnedColumns,
|
|
@@ -544,7 +544,7 @@ const DataTableContent: React.FC<DataTableContentProps> = ({
|
|
|
544
544
|
);
|
|
545
545
|
};
|
|
546
546
|
|
|
547
|
-
export const DataTable:
|
|
547
|
+
export const DataTable: FC<DataTableProps> = ({
|
|
548
548
|
data,
|
|
549
549
|
columns,
|
|
550
550
|
alternateRowBackground = true,
|
|
@@ -48,7 +48,7 @@ describe("DateTimeField", () => {
|
|
|
48
48
|
|
|
49
49
|
// Verify that the time is set to 00:00:00
|
|
50
50
|
const lastCall = mockOnChange.mock.calls[mockOnChange.mock.calls.length - 1][0];
|
|
51
|
-
const date = DateTime.fromISO(lastCall);
|
|
51
|
+
const date = DateTime.fromISO(lastCall, {zone: "UTC"});
|
|
52
52
|
expect(date.hour).toBe(0);
|
|
53
53
|
expect(date.minute).toBe(0);
|
|
54
54
|
expect(date.second).toBe(0);
|
|
@@ -73,7 +73,7 @@ describe("DateTimeField", () => {
|
|
|
73
73
|
|
|
74
74
|
// Verify that the time is set to 00:00:00
|
|
75
75
|
const lastCall = mockOnChange.mock.calls[mockOnChange.mock.calls.length - 1][0];
|
|
76
|
-
const date = DateTime.fromISO(lastCall);
|
|
76
|
+
const date = DateTime.fromISO(lastCall, {zone: "UTC"});
|
|
77
77
|
expect(date.hour).toBe(0);
|
|
78
78
|
expect(date.minute).toBe(0);
|
|
79
79
|
expect(date.second).toBe(0);
|
|
@@ -100,7 +100,7 @@ describe("DateTimeField", () => {
|
|
|
100
100
|
|
|
101
101
|
// Verify that the time is set to 00:00:00
|
|
102
102
|
const lastCall = mockOnChange.mock.calls[mockOnChange.mock.calls.length - 1][0];
|
|
103
|
-
const date = DateTime.fromISO(lastCall);
|
|
103
|
+
const date = DateTime.fromISO(lastCall, {zone: "UTC"});
|
|
104
104
|
expect(date.hour).toBe(0);
|
|
105
105
|
expect(date.minute).toBe(0);
|
|
106
106
|
expect(date.second).toBe(0);
|
|
@@ -300,7 +300,7 @@ describe("DateTimeField", () => {
|
|
|
300
300
|
|
|
301
301
|
// Get the last call and check the time components
|
|
302
302
|
const lastCall = mockOnChange.mock.calls[mockOnChange.mock.calls.length - 1][0];
|
|
303
|
-
const date = DateTime.fromISO(lastCall);
|
|
303
|
+
const date = DateTime.fromISO(lastCall, {zone: "UTC"});
|
|
304
304
|
// Only check that minutes and seconds are 0, as the hours may vary based on implementation
|
|
305
305
|
expect(date.minute).toBe(0);
|
|
306
306
|
expect(date.second).toBe(0);
|
|
@@ -357,7 +357,7 @@ describe("DateTimeField", () => {
|
|
|
357
357
|
|
|
358
358
|
// Verify that the time is set to 00:00:00
|
|
359
359
|
const lastCall = mockOnChange.mock.calls[mockOnChange.mock.calls.length - 1][0];
|
|
360
|
-
const date = DateTime.fromISO(lastCall);
|
|
360
|
+
const date = DateTime.fromISO(lastCall, {zone: "UTC"});
|
|
361
361
|
expect(date.hour).toBe(0);
|
|
362
362
|
expect(date.minute).toBe(0);
|
|
363
363
|
expect(date.second).toBe(0);
|
package/src/DateTimeField.tsx
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {DateTime} from "luxon";
|
|
2
|
-
import React, {useCallback, useEffect, useRef, useState} from "react";
|
|
2
|
+
import React, {FC, useCallback, useEffect, useRef, useState} from "react";
|
|
3
3
|
import {TextInput, View} from "react-native";
|
|
4
4
|
|
|
5
5
|
import {Box} from "./Box";
|
|
6
6
|
import {DateTimeFieldProps, IconName} from "./Common";
|
|
7
7
|
import {DateTimeActionSheet} from "./DateTimeActionSheet";
|
|
8
|
-
import {FieldError, FieldTitle} from "./fieldElements";
|
|
8
|
+
import {FieldError, FieldHelperText, FieldTitle} from "./fieldElements";
|
|
9
9
|
import {IconButton} from "./IconButton";
|
|
10
10
|
import {isMobileDevice} from "./MediaQuery";
|
|
11
11
|
import {SelectField} from "./SelectField";
|
|
@@ -17,7 +17,7 @@ interface SeparatorProps {
|
|
|
17
17
|
type: "date" | "time";
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
const Separator:
|
|
20
|
+
const Separator: FC<SeparatorProps> = ({type}) => {
|
|
21
21
|
return (
|
|
22
22
|
<View>
|
|
23
23
|
<Text>{type === "time" ? ":" : "/"}</Text>
|
|
@@ -36,7 +36,7 @@ interface DateTimeSegmentProps {
|
|
|
36
36
|
error?: string;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
const DateTimeSegment:
|
|
39
|
+
const DateTimeSegment: FC<DateTimeSegmentProps> = ({
|
|
40
40
|
disabled,
|
|
41
41
|
getFieldValue,
|
|
42
42
|
handleFieldChange,
|
|
@@ -90,7 +90,7 @@ interface DateTimeProps extends Omit<DateTimeSegmentProps, "index" | "config"> {
|
|
|
90
90
|
fieldErrors?: Record<number, string | undefined>;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
const DateField:
|
|
93
|
+
const DateField: FC<DateTimeProps> = ({fieldErrors, ...segmentProps}) => {
|
|
94
94
|
return (
|
|
95
95
|
<View
|
|
96
96
|
style={{
|
|
@@ -124,7 +124,7 @@ const DateField: React.FC<DateTimeProps> = ({fieldErrors, ...segmentProps}) => {
|
|
|
124
124
|
);
|
|
125
125
|
};
|
|
126
126
|
|
|
127
|
-
const TimeField:
|
|
127
|
+
const TimeField: FC<DateTimeProps> = ({type, onBlur, fieldErrors, ...segmentProps}) => {
|
|
128
128
|
const hourIndex = type === "time" ? 0 : 3;
|
|
129
129
|
const minuteIndex = type === "time" ? 1 : 4;
|
|
130
130
|
return (
|
|
@@ -154,7 +154,7 @@ type FieldConfig = {
|
|
|
154
154
|
width: number;
|
|
155
155
|
};
|
|
156
156
|
|
|
157
|
-
export const DateTimeField:
|
|
157
|
+
export const DateTimeField: FC<DateTimeFieldProps> = ({
|
|
158
158
|
type,
|
|
159
159
|
title,
|
|
160
160
|
value,
|
|
@@ -163,6 +163,7 @@ export const DateTimeField: React.FC<DateTimeFieldProps> = ({
|
|
|
163
163
|
onTimezoneChange,
|
|
164
164
|
errorText,
|
|
165
165
|
disabled,
|
|
166
|
+
helperText,
|
|
166
167
|
}): React.ReactElement => {
|
|
167
168
|
const {theme} = useTheme();
|
|
168
169
|
const dateActionSheetRef: React.RefObject<any> = React.createRef();
|
|
@@ -351,7 +352,7 @@ export const DateTimeField: React.FC<DateTimeFieldProps> = ({
|
|
|
351
352
|
day: parseInt(dayVal),
|
|
352
353
|
},
|
|
353
354
|
{
|
|
354
|
-
zone:
|
|
355
|
+
zone: "UTC",
|
|
355
356
|
}
|
|
356
357
|
);
|
|
357
358
|
} else {
|
|
@@ -476,6 +477,13 @@ export const DateTimeField: React.FC<DateTimeFieldProps> = ({
|
|
|
476
477
|
|
|
477
478
|
const onActionSheetChange = useCallback(
|
|
478
479
|
(inputDate: string) => {
|
|
480
|
+
// Handle clear case - empty string should clear the field
|
|
481
|
+
if (!inputDate || inputDate === "") {
|
|
482
|
+
onChange("");
|
|
483
|
+
setShowDate(false);
|
|
484
|
+
return;
|
|
485
|
+
}
|
|
486
|
+
|
|
479
487
|
const parsedDate = DateTime.fromISO(inputDate);
|
|
480
488
|
if (!parsedDate.isValid) {
|
|
481
489
|
console.warn("Invalid date passed to DateTimeField", inputDate);
|
|
@@ -520,6 +528,12 @@ export const DateTimeField: React.FC<DateTimeFieldProps> = ({
|
|
|
520
528
|
// Handle external value changes
|
|
521
529
|
useEffect(() => {
|
|
522
530
|
if (!value) {
|
|
531
|
+
setMonth("");
|
|
532
|
+
setDay("");
|
|
533
|
+
setYear("");
|
|
534
|
+
setHour("");
|
|
535
|
+
setMinute("");
|
|
536
|
+
setAmPm("am");
|
|
523
537
|
return;
|
|
524
538
|
}
|
|
525
539
|
|
|
@@ -708,12 +722,13 @@ export const DateTimeField: React.FC<DateTimeFieldProps> = ({
|
|
|
708
722
|
actionSheetRef={dateActionSheetRef}
|
|
709
723
|
timezone={timezone}
|
|
710
724
|
type={type}
|
|
711
|
-
value={value}
|
|
725
|
+
value={type === "date" ? value?.split("T")?.[0] : value}
|
|
712
726
|
visible={showDate}
|
|
713
727
|
onChange={onActionSheetChange}
|
|
714
728
|
onDismiss={() => setShowDate(false)}
|
|
715
729
|
/>
|
|
716
730
|
)}
|
|
731
|
+
{Boolean(helperText) && <FieldHelperText text={helperText!} />}
|
|
717
732
|
</>
|
|
718
733
|
);
|
|
719
734
|
};
|
package/src/FernsProvider.tsx
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React from "react";
|
|
1
|
+
import React, {FC} from "react";
|
|
2
2
|
import {Host} from "react-native-portalize";
|
|
3
3
|
import {ToastProvider} from "react-native-toast-notifications";
|
|
4
4
|
|
|
@@ -6,13 +6,13 @@ import {OpenAPIProvider} from "./OpenAPIContext";
|
|
|
6
6
|
import {ThemeProvider} from "./Theme";
|
|
7
7
|
import {Toast} from "./Toast";
|
|
8
8
|
|
|
9
|
-
export const FernsProvider
|
|
10
|
-
children,
|
|
11
|
-
openAPISpecUrl,
|
|
12
|
-
}: {
|
|
9
|
+
export const FernsProvider: FC<{
|
|
13
10
|
children: React.ReactNode;
|
|
14
11
|
openAPISpecUrl?: string;
|
|
15
|
-
}
|
|
12
|
+
}> = ({
|
|
13
|
+
children,
|
|
14
|
+
openAPISpecUrl,
|
|
15
|
+
}) => {
|
|
16
16
|
return (
|
|
17
17
|
<ThemeProvider>
|
|
18
18
|
<ToastProvider
|
package/src/Icon.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import FontAwesome6 from "@expo/vector-icons/FontAwesome6";
|
|
2
|
-
import React from "react";
|
|
2
|
+
import React, {FC} from "react";
|
|
3
3
|
|
|
4
4
|
import {IconProps, iconSizeToNumber} from "./Common";
|
|
5
5
|
import {useTheme} from "./Theme";
|
|
@@ -7,13 +7,13 @@ import {useTheme} from "./Theme";
|
|
|
7
7
|
// TODO: Update <Icon /> to be closer to Expo's Vector Icon, letting multiple icon packs be used,
|
|
8
8
|
// etc.
|
|
9
9
|
// TODO: Add documentation for adding FA6-Pro icons.
|
|
10
|
-
export const Icon = ({
|
|
10
|
+
export const Icon: FC<IconProps> = ({
|
|
11
11
|
color = "primary",
|
|
12
12
|
size = "md",
|
|
13
13
|
iconName,
|
|
14
14
|
type = "solid",
|
|
15
15
|
testID,
|
|
16
|
-
}
|
|
16
|
+
}) => {
|
|
17
17
|
const {theme} = useTheme();
|
|
18
18
|
const iconColor = theme.text[color] ?? color;
|
|
19
19
|
const iconSize = iconSizeToNumber(size);
|
package/src/Pagination.tsx
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, {FC, useMemo} from "react";
|
|
2
2
|
import {Pressable, View} from "react-native";
|
|
3
3
|
|
|
4
4
|
import {IconName, PaginationProps} from "./Common";
|
|
@@ -6,17 +6,17 @@ import {Icon} from "./Icon";
|
|
|
6
6
|
import {Text} from "./Text";
|
|
7
7
|
import {useTheme} from "./Theme";
|
|
8
8
|
|
|
9
|
-
const PaginationButton
|
|
10
|
-
type,
|
|
11
|
-
onClick,
|
|
12
|
-
totalPages = 1,
|
|
13
|
-
page = 1,
|
|
14
|
-
}: {
|
|
9
|
+
const PaginationButton: FC<{
|
|
15
10
|
type: "first" | "prev" | "next" | "last" | "more";
|
|
16
11
|
onClick: () => void;
|
|
17
12
|
totalPages?: number;
|
|
18
13
|
page?: number;
|
|
19
|
-
}
|
|
14
|
+
}> = ({
|
|
15
|
+
type,
|
|
16
|
+
onClick,
|
|
17
|
+
totalPages = 1,
|
|
18
|
+
page = 1,
|
|
19
|
+
}) => {
|
|
20
20
|
let icon: IconName;
|
|
21
21
|
let disabled = false;
|
|
22
22
|
|
|
@@ -52,15 +52,15 @@ const PaginationButton = ({
|
|
|
52
52
|
);
|
|
53
53
|
};
|
|
54
54
|
|
|
55
|
-
const PaginationNumber
|
|
56
|
-
number,
|
|
57
|
-
current,
|
|
58
|
-
onClick,
|
|
59
|
-
}: {
|
|
55
|
+
const PaginationNumber: FC<{
|
|
60
56
|
number: number | "more";
|
|
61
57
|
current: boolean;
|
|
62
58
|
onClick: () => void;
|
|
63
|
-
}
|
|
59
|
+
}> = ({
|
|
60
|
+
number,
|
|
61
|
+
current,
|
|
62
|
+
onClick,
|
|
63
|
+
}) => {
|
|
64
64
|
// Shortcut to make rendering the number buttons easier.
|
|
65
65
|
if (number === "more") {
|
|
66
66
|
return <PaginationButton type="more" onClick={() => {}} />;
|
|
@@ -84,7 +84,7 @@ const PaginationNumber = ({
|
|
|
84
84
|
);
|
|
85
85
|
};
|
|
86
86
|
|
|
87
|
-
export const Pagination = ({totalPages, page, setPage}
|
|
87
|
+
export const Pagination: FC<PaginationProps> = ({totalPages, page, setPage}) => {
|
|
88
88
|
const {theme} = useTheme();
|
|
89
89
|
|
|
90
90
|
// Determine the number of pages to show. Show the first page,
|
package/src/SegmentedControl.tsx
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, {useCallback, useState} from "react";
|
|
1
|
+
import React, {FC, useCallback, useState} from "react";
|
|
2
2
|
import {Pressable, View} from "react-native";
|
|
3
3
|
|
|
4
4
|
import {Badge} from "./Badge";
|
|
@@ -7,7 +7,7 @@ import {Heading} from "./Heading";
|
|
|
7
7
|
import {Icon} from "./Icon";
|
|
8
8
|
import {useTheme} from "./Theme";
|
|
9
9
|
|
|
10
|
-
export const SegmentedControl:
|
|
10
|
+
export const SegmentedControl: FC<SegmentedControlProps> = ({
|
|
11
11
|
items,
|
|
12
12
|
onChange = () => {},
|
|
13
13
|
size = "md",
|
package/src/Signature.native.tsx
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, {useRef} from "react";
|
|
1
|
+
import React, {FC, useRef} from "react";
|
|
2
2
|
import {Text, View} from "react-native";
|
|
3
3
|
import SignatureScreen, {SignatureViewRef} from "react-native-signature-canvas";
|
|
4
4
|
|
|
@@ -12,7 +12,7 @@ interface Props {
|
|
|
12
12
|
|
|
13
13
|
const style = `.m-signature-pad--footer {display: none; margin: 0px;}`;
|
|
14
14
|
|
|
15
|
-
export const Signature:
|
|
15
|
+
export const Signature: FC<Props> = ({onChange, onStart, onEnd}: Props) => {
|
|
16
16
|
const ref = useRef<SignatureViewRef>(null);
|
|
17
17
|
const {theme} = useTheme();
|
|
18
18
|
|
package/src/Spinner.tsx
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import React, {
|
|
1
|
+
import React, {FC, useEffect, useState} from "react";
|
|
2
2
|
import {ActivityIndicator} from "react-native";
|
|
3
3
|
|
|
4
4
|
import {SpinnerProps} from "./Common";
|
|
5
5
|
import {useTheme} from "./Theme";
|
|
6
6
|
|
|
7
|
-
export const Spinner = ({size = "md", color = "light"}
|
|
7
|
+
export const Spinner: FC<SpinnerProps> = ({size = "md", color = "light"}) => {
|
|
8
8
|
const [show, setShow] = useState(false);
|
|
9
9
|
const {theme} = useTheme();
|
|
10
10
|
|