ferns-ui 0.47.9 → 1.0.0-beta.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/Accordion.d.ts +3 -0
- package/dist/Accordion.js +31 -0
- package/dist/Accordion.js.map +1 -0
- package/dist/ActionSheet.d.ts +9 -10
- package/dist/ActionSheet.js +8 -6
- package/dist/ActionSheet.js.map +1 -1
- package/dist/AddressField.d.ts +3 -0
- package/dist/AddressField.js +33 -0
- package/dist/AddressField.js.map +1 -0
- package/dist/Avatar.d.ts +2 -2
- package/dist/Avatar.js +132 -96
- package/dist/Avatar.js.map +1 -1
- package/dist/Badge.d.ts +1 -1
- package/dist/Badge.js +90 -20
- package/dist/Badge.js.map +1 -1
- package/dist/Banner.d.ts +1 -1
- package/dist/Banner.js +89 -51
- package/dist/Banner.js.map +1 -1
- package/dist/Body.js +4 -4
- package/dist/Body.js.map +1 -1
- package/dist/BooleanField.d.ts +3 -0
- package/dist/BooleanField.js +90 -0
- package/dist/BooleanField.js.map +1 -0
- package/dist/Box.js +80 -80
- package/dist/Box.js.map +1 -1
- package/dist/Button.d.ts +2 -2
- package/dist/Button.js +87 -109
- package/dist/Button.js.map +1 -1
- package/dist/Card.js +2 -2
- package/dist/Card.js.map +1 -1
- package/dist/CheckBox.d.ts +2 -2
- package/dist/CheckBox.js +23 -35
- package/dist/CheckBox.js.map +1 -1
- package/dist/Common.d.ts +1071 -406
- package/dist/Common.js +39 -3
- package/dist/Common.js.map +1 -1
- package/dist/CommonIconTypes.d.ts +3 -0
- package/dist/CommonIconTypes.js +2 -0
- package/dist/CommonIconTypes.js.map +1 -0
- package/dist/CustomSelectField.d.ts +3 -0
- package/dist/CustomSelectField.js +64 -0
- package/dist/CustomSelectField.js.map +1 -0
- package/dist/DateTimeActionSheet.d.ts +1 -1
- package/dist/DateTimeActionSheet.js +177 -156
- package/dist/DateTimeActionSheet.js.map +1 -1
- package/dist/DateTimeField.d.ts +3 -3
- package/dist/DateTimeField.js +140 -30
- package/dist/DateTimeField.js.map +1 -1
- package/dist/DateUtilities.js.map +1 -1
- package/dist/DateUtilities.test.js +2 -1
- package/dist/DateUtilities.test.js.map +1 -1
- package/dist/DecimalRangeActionSheet.js +3 -15
- package/dist/DecimalRangeActionSheet.js.map +1 -1
- package/dist/DismissButton.d.ts +3 -0
- package/dist/DismissButton.js +14 -0
- package/dist/DismissButton.js.map +1 -0
- package/dist/EmailField.d.ts +3 -0
- package/dist/EmailField.js +52 -0
- package/dist/EmailField.js.map +1 -0
- package/dist/ErrorBoundary.d.ts +1 -1
- package/dist/ErrorPage.js +2 -2
- package/dist/ErrorPage.js.map +1 -1
- package/dist/FernsProvider.js +1 -1
- package/dist/FernsProvider.js.map +1 -1
- package/dist/Field.d.ts +2 -2
- package/dist/Field.js +67 -136
- package/dist/Field.js.map +1 -1
- package/dist/Heading.js +37 -16
- package/dist/Heading.js.map +1 -1
- package/dist/HeightActionSheet.js +3 -7
- package/dist/HeightActionSheet.js.map +1 -1
- package/dist/Hyperlink.js +7 -1
- package/dist/Hyperlink.js.map +1 -1
- package/dist/Icon.d.ts +1 -2
- package/dist/Icon.js +8 -10
- package/dist/Icon.js.map +1 -1
- package/dist/IconButton.d.ts +2 -2
- package/dist/IconButton.js +93 -92
- package/dist/IconButton.js.map +1 -1
- package/dist/InfoTooltipButton.d.ts +1 -1
- package/dist/InfoTooltipButton.js +2 -2
- package/dist/InfoTooltipButton.js.map +1 -1
- package/dist/Link.d.ts +1 -1
- package/dist/Link.js +7 -3
- package/dist/Link.js.map +1 -1
- package/dist/MobileAddressAutoComplete.js +8 -8
- package/dist/MobileAddressAutoComplete.js.map +1 -1
- package/dist/Modal.d.ts +2 -2
- package/dist/Modal.js +95 -80
- package/dist/Modal.js.map +1 -1
- package/dist/MultiselectField.d.ts +3 -0
- package/dist/MultiselectField.js +49 -0
- package/dist/MultiselectField.js.map +1 -0
- package/dist/NumberField.d.ts +3 -0
- package/dist/NumberField.js +49 -0
- package/dist/NumberField.js.map +1 -0
- package/dist/NumberPickerActionSheet.js +2 -2
- package/dist/NumberPickerActionSheet.js.map +1 -1
- package/dist/OpenAPIContext.js.map +1 -1
- package/dist/Page.js +6 -6
- package/dist/Page.js.map +1 -1
- package/dist/Pagination.d.ts +2 -8
- package/dist/Pagination.js +107 -13
- package/dist/Pagination.js.map +1 -1
- package/dist/PasswordField.d.ts +2 -0
- package/dist/PasswordField.js +6 -0
- package/dist/PasswordField.js.map +1 -0
- package/dist/PhoneNumberField.d.ts +3 -0
- package/dist/PhoneNumberField.js +79 -0
- package/dist/PhoneNumberField.js.map +1 -0
- package/dist/PickerSelect.d.ts +6 -67
- package/dist/PickerSelect.js +145 -115
- package/dist/PickerSelect.js.map +1 -1
- package/dist/Radio.d.ts +3 -0
- package/dist/Radio.js +21 -0
- package/dist/Radio.js.map +1 -0
- package/dist/RadioField.d.ts +3 -0
- package/dist/RadioField.js +22 -0
- package/dist/RadioField.js.map +1 -0
- package/dist/SegmentedControl.d.ts +1 -1
- package/dist/SegmentedControl.js +35 -67
- package/dist/SegmentedControl.js.map +1 -1
- package/dist/SelectField.d.ts +3 -0
- package/dist/SelectField.js +20 -0
- package/dist/SelectField.js.map +1 -0
- package/dist/SideDrawer.js +8 -2
- package/dist/SideDrawer.js.map +1 -1
- package/dist/Signature.d.ts +1 -0
- package/dist/Signature.js +8 -7
- package/dist/Signature.js.map +1 -1
- package/dist/Signature.native.js +8 -7
- package/dist/Signature.native.js.map +1 -1
- package/dist/SignatureField.d.ts +3 -0
- package/dist/SignatureField.js +54 -0
- package/dist/SignatureField.js.map +1 -0
- package/dist/Spinner.js +17 -2
- package/dist/Spinner.js.map +1 -1
- package/dist/SplitPage.d.ts +1 -1
- package/dist/SplitPage.js +10 -10
- package/dist/SplitPage.js.map +1 -1
- package/dist/SplitPage.native.js +7 -7
- package/dist/SplitPage.native.js.map +1 -1
- package/dist/TapToEdit.d.ts +3 -3
- package/dist/TapToEdit.js +40 -32
- package/dist/TapToEdit.js.map +1 -1
- package/dist/Text.d.ts +1 -1
- package/dist/Text.js +70 -64
- package/dist/Text.js.map +1 -1
- package/dist/TextArea.d.ts +1 -1
- package/dist/TextArea.js +2 -14
- package/dist/TextArea.js.map +1 -1
- package/dist/TextField.d.ts +2 -2
- package/dist/TextField.js +89 -206
- package/dist/TextField.js.map +1 -1
- package/dist/TextFieldNumberActionSheet.js +2 -2
- package/dist/TextFieldNumberActionSheet.js.map +1 -1
- package/dist/Theme.d.ts +87 -3
- package/dist/Theme.js +197 -98
- package/dist/Theme.js.map +1 -1
- package/dist/TimezonePicker.js +3 -5
- package/dist/TimezonePicker.js.map +1 -1
- package/dist/Toast.d.ts +18 -5
- package/dist/Toast.js +130 -31
- package/dist/Toast.js.map +1 -1
- package/dist/Tooltip.d.ts +2 -2
- package/dist/Tooltip.js +189 -89
- package/dist/Tooltip.js.map +1 -1
- package/dist/UnifiedAddressAutoComplete.js +2 -2
- package/dist/UnifiedAddressAutoComplete.js.map +1 -1
- package/dist/Unifier.js.map +1 -1
- package/dist/Utilities.js +5 -3
- package/dist/Utilities.js.map +1 -1
- package/dist/WebAddressAutocomplete.js +2 -2
- package/dist/WebAddressAutocomplete.js.map +1 -1
- package/dist/fieldElements/FieldError.d.ts +6 -0
- package/dist/fieldElements/FieldError.js +14 -0
- package/dist/fieldElements/FieldError.js.map +1 -0
- package/dist/fieldElements/FieldHelperText.d.ts +6 -0
- package/dist/fieldElements/FieldHelperText.js +11 -0
- package/dist/fieldElements/FieldHelperText.js.map +1 -0
- package/dist/fieldElements/FieldTitle.d.ts +6 -0
- package/dist/fieldElements/FieldTitle.js +19 -0
- package/dist/fieldElements/FieldTitle.js.map +1 -0
- package/dist/fieldElements/index.d.ts +3 -0
- package/dist/fieldElements/index.js +4 -0
- package/dist/fieldElements/index.js.map +1 -0
- package/dist/icons/MobileIcon.d.ts +3 -0
- package/dist/icons/MobileIcon.js +24 -0
- package/dist/icons/MobileIcon.js.map +1 -0
- package/dist/icons/OfflineIcon.d.ts +3 -0
- package/dist/icons/OfflineIcon.js +23 -0
- package/dist/icons/OfflineIcon.js.map +1 -0
- package/dist/icons/OnlineIcon.d.ts +3 -0
- package/dist/icons/OnlineIcon.js +24 -0
- package/dist/icons/OnlineIcon.js.map +1 -0
- package/dist/icons/OutOfficeIcon.d.ts +3 -0
- package/dist/icons/OutOfficeIcon.js +24 -0
- package/dist/icons/OutOfficeIcon.js.map +1 -0
- package/dist/icons/index.d.ts +4 -0
- package/dist/icons/index.js +5 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/index.d.ts +28 -14
- package/dist/index.js +28 -14
- package/dist/index.js.map +1 -1
- package/dist/setupTests.d.ts +1 -0
- package/dist/setupTests.js +1 -1
- package/dist/setupTests.js.map +1 -1
- package/dist/{Table.d.ts → table/Table.d.ts} +2 -2
- package/dist/{Table.js → table/Table.js} +18 -10
- package/dist/table/Table.js.map +1 -0
- package/dist/table/TableBadge.d.ts +6 -0
- package/dist/table/TableBadge.js +22 -0
- package/dist/table/TableBadge.js.map +1 -0
- package/dist/table/TableBoolean.d.ts +6 -0
- package/dist/table/TableBoolean.js +39 -0
- package/dist/table/TableBoolean.js.map +1 -0
- package/dist/table/TableDate.d.ts +3 -0
- package/dist/table/TableDate.js +26 -0
- package/dist/table/TableDate.js.map +1 -0
- package/dist/{TableHeader.d.ts → table/TableHeader.d.ts} +1 -1
- package/dist/{TableHeader.js → table/TableHeader.js} +2 -2
- package/dist/table/TableHeader.js.map +1 -0
- package/dist/{TableHeaderCell.d.ts → table/TableHeaderCell.d.ts} +2 -2
- package/dist/table/TableHeaderCell.js +58 -0
- package/dist/table/TableHeaderCell.js.map +1 -0
- package/dist/table/TableIconButton.d.ts +3 -0
- package/dist/table/TableIconButton.js +42 -0
- package/dist/table/TableIconButton.js.map +1 -0
- package/dist/table/TableNumber.d.ts +3 -0
- package/dist/table/TableNumber.js +18 -0
- package/dist/table/TableNumber.js.map +1 -0
- package/dist/{TableRow.d.ts → table/TableRow.d.ts} +1 -1
- package/dist/table/TableRow.js +28 -0
- package/dist/table/TableRow.js.map +1 -0
- package/dist/table/TableText.d.ts +3 -0
- package/dist/table/TableText.js +18 -0
- package/dist/table/TableText.js.map +1 -0
- package/dist/table/TableTitle.d.ts +3 -0
- package/dist/table/TableTitle.js +22 -0
- package/dist/table/TableTitle.js.map +1 -0
- package/dist/{tableContext.d.ts → table/tableContext.d.ts} +1 -1
- package/dist/table/tableContext.js.map +1 -0
- package/package.json +10 -4
- package/src/Accordion.tsx +84 -0
- package/src/ActionSheet.tsx +8 -5
- package/src/AddressField.tsx +122 -0
- package/src/Avatar.tsx +193 -147
- package/src/Badge.tsx +107 -49
- package/src/Banner.tsx +158 -111
- package/src/Body.tsx +4 -4
- package/src/BooleanField.tsx +122 -0
- package/src/Box.tsx +92 -82
- package/src/Button.tsx +151 -167
- package/src/Card.tsx +2 -2
- package/src/CheckBox.tsx +30 -111
- package/src/Common.ts +1304 -2041
- package/src/CommonIconTypes.ts +2030 -0
- package/src/CustomSelectField.tsx +116 -0
- package/src/DateTimeActionSheet.tsx +347 -255
- package/src/DateTimeField.tsx +168 -61
- package/src/DateUtilities.test.ts +6 -2
- package/src/DateUtilities.tsx +1 -1
- package/src/DecimalRangeActionSheet.tsx +2 -17
- package/src/DismissButton.tsx +31 -0
- package/src/EmailField.tsx +70 -0
- package/src/ErrorPage.tsx +2 -2
- package/src/FernsProvider.tsx +1 -1
- package/src/Field.tsx +83 -345
- package/src/Heading.tsx +44 -16
- package/src/HeightActionSheet.tsx +2 -9
- package/src/Hyperlink.tsx +8 -1
- package/src/Icon.tsx +22 -14
- package/src/IconButton.tsx +188 -156
- package/src/InfoTooltipButton.tsx +4 -6
- package/src/Link.tsx +14 -5
- package/src/MobileAddressAutoComplete.tsx +17 -13
- package/src/Modal.tsx +214 -190
- package/src/MultiselectField.tsx +103 -0
- package/src/NumberField.tsx +55 -0
- package/src/NumberPickerActionSheet.tsx +1 -4
- package/src/OpenAPIContext.tsx +1 -1
- package/src/Page.tsx +9 -13
- package/src/Pagination.tsx +171 -36
- package/src/PasswordField.tsx +7 -0
- package/src/PhoneNumberField.tsx +103 -0
- package/src/PickerSelect.tsx +169 -151
- package/src/Radio.tsx +33 -0
- package/src/RadioField.tsx +43 -0
- package/src/SegmentedControl.tsx +44 -96
- package/src/SelectField.tsx +41 -0
- package/src/SideDrawer.tsx +8 -2
- package/src/Signature.native.tsx +16 -9
- package/src/Signature.tsx +19 -11
- package/src/SignatureField.tsx +92 -0
- package/src/Spinner.tsx +16 -2
- package/src/SplitPage.native.tsx +9 -7
- package/src/SplitPage.tsx +11 -12
- package/src/TapToEdit.tsx +67 -39
- package/src/Text.tsx +79 -69
- package/src/TextArea.tsx +2 -2
- package/src/TextField.tsx +133 -285
- package/src/TextFieldNumberActionSheet.tsx +1 -4
- package/src/Theme.tsx +223 -172
- package/src/TimezonePicker.tsx +3 -18
- package/src/Toast.tsx +193 -70
- package/src/Tooltip.tsx +258 -141
- package/src/UnifiedAddressAutoComplete.tsx +3 -3
- package/src/Unifier.ts +4 -4
- package/src/Utilities.tsx +11 -3
- package/src/WebAddressAutocomplete.tsx +2 -3
- package/src/fieldElements/FieldError.tsx +24 -0
- package/src/fieldElements/FieldHelperText.tsx +20 -0
- package/src/fieldElements/FieldTitle.tsx +31 -0
- package/src/fieldElements/index.tsx +3 -0
- package/src/icons/MobileIcon.tsx +41 -0
- package/src/icons/OfflineIcon.tsx +38 -0
- package/src/icons/OnlineIcon.tsx +40 -0
- package/src/icons/OutOfficeIcon.tsx +37 -0
- package/src/icons/index.ts +4 -0
- package/src/index.tsx +28 -14
- package/src/setupTests.ts +1 -0
- package/src/{Table.tsx → table/Table.tsx} +24 -14
- package/src/table/TableBadge.tsx +46 -0
- package/src/table/TableBoolean.tsx +70 -0
- package/src/table/TableDate.tsx +38 -0
- package/src/{TableHeader.tsx → table/TableHeader.tsx} +3 -3
- package/src/table/TableHeaderCell.tsx +93 -0
- package/src/table/TableIconButton.tsx +62 -0
- package/src/table/TableNumber.tsx +29 -0
- package/src/{TableRow.tsx → table/TableRow.tsx} +28 -25
- package/src/table/TableText.tsx +29 -0
- package/src/table/TableTitle.tsx +32 -0
- package/src/{tableContext.tsx → table/tableContext.tsx} +1 -1
- package/dist/BlurBox.d.ts +0 -5
- package/dist/BlurBox.js +0 -28
- package/dist/BlurBox.js.map +0 -1
- package/dist/BlurBox.native.d.ts +0 -6
- package/dist/BlurBox.native.js +0 -30
- package/dist/BlurBox.native.js.map +0 -1
- package/dist/CustomSelect.d.ts +0 -3
- package/dist/CustomSelect.js +0 -47
- package/dist/CustomSelect.js.map +0 -1
- package/dist/DateTimeField.android.d.ts +0 -3
- package/dist/DateTimeField.android.js +0 -67
- package/dist/DateTimeField.android.js.map +0 -1
- package/dist/DateTimeField.ios.d.ts +0 -3
- package/dist/DateTimeField.ios.js +0 -49
- package/dist/DateTimeField.ios.js.map +0 -1
- package/dist/FieldWithLabels.d.ts +0 -3
- package/dist/FieldWithLabels.js +0 -8
- package/dist/FieldWithLabels.js.map +0 -1
- package/dist/Form.d.ts +0 -16
- package/dist/Form.js +0 -89
- package/dist/Form.js.map +0 -1
- package/dist/HeaderButtons.d.ts +0 -31
- package/dist/HeaderButtons.js +0 -53
- package/dist/HeaderButtons.js.map +0 -1
- package/dist/Mask.d.ts +0 -2
- package/dist/Mask.js +0 -19
- package/dist/Mask.js.map +0 -1
- package/dist/Pill.d.ts +0 -3
- package/dist/Pill.js +0 -8
- package/dist/Pill.js.map +0 -1
- package/dist/Pog.d.ts +0 -3
- package/dist/Pog.js +0 -48
- package/dist/Pog.js.map +0 -1
- package/dist/ProgressBar.d.ts +0 -3
- package/dist/ProgressBar.js +0 -35
- package/dist/ProgressBar.js.map +0 -1
- package/dist/SelectList.d.ts +0 -27
- package/dist/SelectList.js +0 -56
- package/dist/SelectList.js.map +0 -1
- package/dist/Switch.d.ts +0 -3
- package/dist/Switch.js +0 -20
- package/dist/Switch.js.map +0 -1
- package/dist/Table.js.map +0 -1
- package/dist/TableHeader.js.map +0 -1
- package/dist/TableHeaderCell.js +0 -36
- package/dist/TableHeaderCell.js.map +0 -1
- package/dist/TableRow.js +0 -30
- package/dist/TableRow.js.map +0 -1
- package/dist/WithLabel.d.ts +0 -3
- package/dist/WithLabel.js +0 -15
- package/dist/WithLabel.js.map +0 -1
- package/dist/tableContext.js.map +0 -1
- package/src/BlurBox.native.tsx +0 -40
- package/src/BlurBox.tsx +0 -31
- package/src/CustomSelect.tsx +0 -80
- package/src/DateTimeField.android.tsx +0 -103
- package/src/DateTimeField.ios.tsx +0 -85
- package/src/FieldWithLabels.tsx +0 -36
- package/src/Form.tsx +0 -175
- package/src/HeaderButtons.tsx +0 -107
- package/src/Mask.tsx +0 -21
- package/src/Pill.tsx +0 -22
- package/src/Pog.tsx +0 -75
- package/src/ProgressBar.tsx +0 -47
- package/src/SelectList.tsx +0 -109
- package/src/Switch.tsx +0 -18
- package/src/TableHeaderCell.tsx +0 -72
- package/src/WithLabel.tsx +0 -45
- /package/dist/{tableContext.js → table/tableContext.js} +0 -0
package/src/TapToEdit.tsx
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import React, {ReactElement, useState} from "react";
|
|
1
|
+
import React, {ReactElement, useEffect, useState} from "react";
|
|
2
2
|
import {Linking} from "react-native";
|
|
3
3
|
|
|
4
4
|
import {Box} from "./Box";
|
|
5
5
|
import {Button} from "./Button";
|
|
6
|
-
import {TapToEditProps} from "./Common";
|
|
6
|
+
import {AddressInterface, BoxProps, FieldProps, TapToEditProps} from "./Common";
|
|
7
7
|
import {Field} from "./Field";
|
|
8
8
|
import {Icon} from "./Icon";
|
|
9
9
|
// import {useOpenAPISpec} from "./OpenAPIContext";
|
|
@@ -23,9 +23,9 @@ const TapToEditTitle = ({
|
|
|
23
23
|
}): ReactElement => {
|
|
24
24
|
const Title = (
|
|
25
25
|
<Box flex="grow" justifyContent="center">
|
|
26
|
-
<Text
|
|
26
|
+
<Text bold>{title}:</Text>
|
|
27
27
|
{Boolean(description && !showDescriptionAsTooltip && !onlyShowDescriptionWhileEditing) && (
|
|
28
|
-
<Text color="
|
|
28
|
+
<Text color="secondaryLight" size="sm">
|
|
29
29
|
{description}
|
|
30
30
|
</Text>
|
|
31
31
|
)}
|
|
@@ -33,7 +33,7 @@ const TapToEditTitle = ({
|
|
|
33
33
|
);
|
|
34
34
|
if (showDescriptionAsTooltip) {
|
|
35
35
|
return (
|
|
36
|
-
<Tooltip
|
|
36
|
+
<Tooltip idealPosition="top" text={description}>
|
|
37
37
|
{Title}
|
|
38
38
|
</Tooltip>
|
|
39
39
|
);
|
|
@@ -42,7 +42,7 @@ const TapToEditTitle = ({
|
|
|
42
42
|
}
|
|
43
43
|
};
|
|
44
44
|
|
|
45
|
-
export function formatAddress(address:
|
|
45
|
+
export function formatAddress(address: AddressInterface, asString = false): string {
|
|
46
46
|
let city = "";
|
|
47
47
|
if (address?.city) {
|
|
48
48
|
city = address?.state || address.zipcode ? `${address.city}, ` : `${address.city}`;
|
|
@@ -62,7 +62,7 @@ export function formatAddress(address: any, asString = false): string {
|
|
|
62
62
|
const addressLineOne = address?.address1 ?? "";
|
|
63
63
|
const addressLineTwo = address?.address2 ?? "";
|
|
64
64
|
const addressLineThree = `${city}${state}${zip}`;
|
|
65
|
-
const addressLineFour = `${countyName}${address?.countyCode ? `
|
|
65
|
+
const addressLineFour = `${countyName}${address?.countyCode ? ` (${countyCode})` : ""}`;
|
|
66
66
|
|
|
67
67
|
if (!asString) {
|
|
68
68
|
// Only add new lines if lines before and after are not empty to avoid awkward whitespace
|
|
@@ -83,7 +83,6 @@ export function formatAddress(address: any, asString = false): string {
|
|
|
83
83
|
export const TapToEdit = ({
|
|
84
84
|
value,
|
|
85
85
|
setValue,
|
|
86
|
-
placeholder,
|
|
87
86
|
title,
|
|
88
87
|
onSave,
|
|
89
88
|
editable = true,
|
|
@@ -100,8 +99,14 @@ export const TapToEdit = ({
|
|
|
100
99
|
...fieldProps
|
|
101
100
|
}: TapToEditProps): ReactElement => {
|
|
102
101
|
const [editing, setEditing] = useState(false);
|
|
103
|
-
const [initialValue] = useState(
|
|
102
|
+
const [initialValue, setInitialValue] = useState();
|
|
104
103
|
const description: string | undefined = propsDescription;
|
|
104
|
+
// setInitialValue is called after initial render to handle the case where the value is updated
|
|
105
|
+
useEffect(() => {
|
|
106
|
+
setInitialValue(value);
|
|
107
|
+
// do not update if value changes
|
|
108
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
109
|
+
}, []);
|
|
105
110
|
|
|
106
111
|
if (editable && !setValue) {
|
|
107
112
|
throw new Error("setValue is required if editable is true");
|
|
@@ -116,25 +121,24 @@ export const TapToEdit = ({
|
|
|
116
121
|
<Field
|
|
117
122
|
helperText={description}
|
|
118
123
|
label={title}
|
|
119
|
-
|
|
124
|
+
type={(fieldProps?.type ?? "text") as NonNullable<FieldProps["type"]>}
|
|
120
125
|
value={value}
|
|
121
|
-
onChange={setValue}
|
|
122
|
-
{...fieldProps}
|
|
126
|
+
onChange={setValue ?? (() => {})}
|
|
127
|
+
{...(fieldProps as any)}
|
|
123
128
|
/>
|
|
124
129
|
)}
|
|
125
130
|
{editing && !isEditing && (
|
|
126
131
|
<Box direction="row">
|
|
127
132
|
<Button
|
|
128
|
-
color="blue"
|
|
129
|
-
confirmationHeading={confirmationHeading}
|
|
130
133
|
confirmationText={confirmationText}
|
|
131
|
-
|
|
134
|
+
modalTitle={confirmationHeading}
|
|
132
135
|
text="Save"
|
|
133
136
|
withConfirmation={withConfirmation}
|
|
134
137
|
onClick={async (): Promise<void> => {
|
|
135
138
|
if (!onSave) {
|
|
136
139
|
console.error("No onSave provided for editable TapToEdit");
|
|
137
140
|
} else {
|
|
141
|
+
setInitialValue(value);
|
|
138
142
|
await onSave(value);
|
|
139
143
|
}
|
|
140
144
|
setEditing(false);
|
|
@@ -142,9 +146,8 @@ export const TapToEdit = ({
|
|
|
142
146
|
/>
|
|
143
147
|
<Box marginLeft={2}>
|
|
144
148
|
<Button
|
|
145
|
-
color="red"
|
|
146
|
-
inline
|
|
147
149
|
text="Cancel"
|
|
150
|
+
variant="muted"
|
|
148
151
|
onClick={(): void => {
|
|
149
152
|
if (setValue) {
|
|
150
153
|
setValue(initialValue);
|
|
@@ -166,18 +169,18 @@ export const TapToEdit = ({
|
|
|
166
169
|
// If no transform, try and display the value reasonably.
|
|
167
170
|
if (fieldProps?.type === "boolean") {
|
|
168
171
|
displayValue = value ? "Yes" : "No";
|
|
169
|
-
|
|
170
|
-
// Prevent floating point errors from showing up by using parseFloat and precision.
|
|
171
|
-
// Pass through parseFloat again to trim off insignificant zeroes.
|
|
172
|
-
displayValue = `${parseFloat(parseFloat(String(value * 100)).toPrecision(7))}%`;
|
|
173
|
-
|
|
174
|
-
// TODO: support currencies other than USD in Field and related components.
|
|
175
|
-
const formatter = new Intl.NumberFormat("en-US", {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
});
|
|
180
|
-
displayValue = formatter.format(value);
|
|
172
|
+
// } else if (fieldProps?.type === "percent") {
|
|
173
|
+
// // Prevent floating point errors from showing up by using parseFloat and precision.
|
|
174
|
+
// // Pass through parseFloat again to trim off insignificant zeroes.
|
|
175
|
+
// displayValue = `${parseFloat(parseFloat(String(value * 100)).toPrecision(7))}%`;
|
|
176
|
+
// } else if (fieldProps?.type === "currency") {
|
|
177
|
+
// // TODO: support currencies other than USD in Field and related components.
|
|
178
|
+
// const formatter = new Intl.NumberFormat("en-US", {
|
|
179
|
+
// style: "currency",
|
|
180
|
+
// currency: "USD",
|
|
181
|
+
// minimumFractionDigits: 2, // (this suffices for whole numbers, but will print 2500.10 as $2,500.1)
|
|
182
|
+
// });
|
|
183
|
+
// displayValue = formatter.format(value);
|
|
181
184
|
} else if (fieldProps?.type === "multiselect") {
|
|
182
185
|
// ???
|
|
183
186
|
displayValue = value.join(", ");
|
|
@@ -189,7 +192,7 @@ export const TapToEdit = ({
|
|
|
189
192
|
} catch (error) {
|
|
190
193
|
// Don't print an error message for empty values.
|
|
191
194
|
if (value) {
|
|
192
|
-
console.debug(`Invalid URL: $
|
|
195
|
+
console.debug(`Invalid URL: $value`);
|
|
193
196
|
}
|
|
194
197
|
displayValue = value;
|
|
195
198
|
}
|
|
@@ -221,7 +224,7 @@ export const TapToEdit = ({
|
|
|
221
224
|
paddingX={3}
|
|
222
225
|
paddingY={2}
|
|
223
226
|
width="100%"
|
|
224
|
-
{...rowBoxProps}
|
|
227
|
+
{...(rowBoxProps as Exclude<BoxProps, "onClick">)}
|
|
225
228
|
>
|
|
226
229
|
<Box direction="row" width="100%">
|
|
227
230
|
<TapToEditTitle
|
|
@@ -231,7 +234,12 @@ export const TapToEdit = ({
|
|
|
231
234
|
title={title}
|
|
232
235
|
/>
|
|
233
236
|
<Box direction="row" flex="grow" justifyContent="end" marginLeft={2}>
|
|
234
|
-
<Box
|
|
237
|
+
<Box
|
|
238
|
+
accessibilityHint=""
|
|
239
|
+
accessibilityLabel="Link"
|
|
240
|
+
justifyContent="start"
|
|
241
|
+
onClick={isClickable ? openLink : undefined}
|
|
242
|
+
>
|
|
235
243
|
{Boolean(fieldProps?.type !== "textarea") && (
|
|
236
244
|
<Text align="right" underline={isClickable}>
|
|
237
245
|
{displayValue}
|
|
@@ -239,18 +247,38 @@ export const TapToEdit = ({
|
|
|
239
247
|
)}
|
|
240
248
|
</Box>
|
|
241
249
|
{editable && (
|
|
242
|
-
<Box
|
|
243
|
-
|
|
250
|
+
<Box
|
|
251
|
+
accessibilityHint=""
|
|
252
|
+
accessibilityLabel="Edit"
|
|
253
|
+
marginLeft={2}
|
|
254
|
+
width={16}
|
|
255
|
+
onClick={(): void => setEditing(true)}
|
|
256
|
+
>
|
|
257
|
+
<Icon iconName="pencil" size="md" />
|
|
244
258
|
</Box>
|
|
245
259
|
)}
|
|
246
260
|
</Box>
|
|
247
261
|
</Box>
|
|
248
262
|
{fieldProps?.type === "textarea" && (
|
|
249
|
-
|
|
250
|
-
<
|
|
251
|
-
{
|
|
252
|
-
|
|
253
|
-
|
|
263
|
+
<>
|
|
264
|
+
<Box marginTop={2} paddingY={2} width="100%">
|
|
265
|
+
<Text align="left" underline={isClickable}>
|
|
266
|
+
{displayValue}
|
|
267
|
+
</Text>
|
|
268
|
+
</Box>
|
|
269
|
+
{editable && (
|
|
270
|
+
<Box
|
|
271
|
+
accessibilityHint=""
|
|
272
|
+
accessibilityLabel="Edit"
|
|
273
|
+
alignSelf="end"
|
|
274
|
+
marginLeft={2}
|
|
275
|
+
width={16}
|
|
276
|
+
onClick={(): void => setEditing(true)}
|
|
277
|
+
>
|
|
278
|
+
<Icon color="primary" iconName="pencil" size="md" />
|
|
279
|
+
</Box>
|
|
280
|
+
)}
|
|
281
|
+
</>
|
|
254
282
|
)}
|
|
255
283
|
</Box>
|
|
256
284
|
);
|
package/src/Text.tsx
CHANGED
|
@@ -1,108 +1,118 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import {
|
|
2
|
+
Nunito_400Regular,
|
|
3
|
+
Nunito_400Regular_Italic,
|
|
4
|
+
Nunito_500Medium,
|
|
5
|
+
Nunito_500Medium_Italic,
|
|
6
|
+
Nunito_700Bold,
|
|
7
|
+
Nunito_700Bold_Italic,
|
|
8
|
+
useFonts,
|
|
9
|
+
} from "@expo-google-fonts/nunito";
|
|
10
|
+
import React from "react";
|
|
11
|
+
import {Platform, Text as NativeText, TextStyle} from "react-native";
|
|
3
12
|
|
|
4
13
|
import {TextProps} from "./Common";
|
|
5
14
|
import {Hyperlink} from "./Hyperlink";
|
|
6
|
-
import {
|
|
15
|
+
import {useTheme} from "./Theme";
|
|
7
16
|
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
17
|
+
const fontSizeAndWeightWeb = {
|
|
18
|
+
sm: {size: 12, weight: "regular"},
|
|
19
|
+
md: {size: 16, weight: "regular"},
|
|
20
|
+
lg: {size: 18, weight: "medium"},
|
|
21
|
+
xl: {size: 20, weight: "medium"},
|
|
13
22
|
};
|
|
14
23
|
|
|
24
|
+
const fontSizeAndWeighMobile = {
|
|
25
|
+
sm: {size: 10, weight: "regular"},
|
|
26
|
+
md: {size: 14, weight: "regular"},
|
|
27
|
+
lg: {size: 16, weight: "medium"},
|
|
28
|
+
xl: {size: 18, weight: "medium"},
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const fontSizes = Platform.OS === "web" ? fontSizeAndWeightWeb : fontSizeAndWeighMobile;
|
|
32
|
+
|
|
15
33
|
export const Text = ({
|
|
16
34
|
align = "left",
|
|
35
|
+
bold,
|
|
17
36
|
children,
|
|
18
37
|
color,
|
|
19
|
-
inline = false,
|
|
20
38
|
italic = false,
|
|
21
|
-
overflow,
|
|
22
39
|
size = "md",
|
|
23
40
|
truncate = false,
|
|
24
|
-
font,
|
|
25
|
-
onPress,
|
|
26
41
|
underline,
|
|
27
42
|
numberOfLines,
|
|
28
43
|
skipLinking,
|
|
29
44
|
testID,
|
|
30
|
-
weight = "normal",
|
|
31
45
|
}: TextProps): React.ReactElement => {
|
|
32
|
-
const {theme} =
|
|
46
|
+
const {theme} = useTheme();
|
|
33
47
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
computedFont = "primaryBoldFont";
|
|
45
|
-
} else {
|
|
46
|
-
computedFont = "primaryFont";
|
|
47
|
-
}
|
|
48
|
-
} else if (font === "secondary") {
|
|
49
|
-
if (weight === "bold") {
|
|
50
|
-
computedFont = "secondaryBoldFont";
|
|
51
|
-
} else {
|
|
52
|
-
computedFont = "secondaryFont";
|
|
53
|
-
}
|
|
54
|
-
} else if (font === "button") {
|
|
55
|
-
computedFont = "buttonFont";
|
|
56
|
-
} else if (font === "title") {
|
|
57
|
-
computedFont = "titleFont";
|
|
58
|
-
} else if (font === "accent") {
|
|
59
|
-
if (weight === "bold") {
|
|
60
|
-
computedFont = "accentBoldFont";
|
|
61
|
-
} else {
|
|
62
|
-
computedFont = "accentFont";
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
if (weight === "bold") {
|
|
66
|
-
style.fontWeight = "bold";
|
|
67
|
-
}
|
|
48
|
+
// TODO: make fonts part of theme.
|
|
49
|
+
const [fontsLoaded] = useFonts({
|
|
50
|
+
"text-bold": Nunito_700Bold,
|
|
51
|
+
"text-bold-italic": Nunito_700Bold_Italic,
|
|
52
|
+
"text-medium": Nunito_500Medium,
|
|
53
|
+
"text-medium-italic": Nunito_500Medium_Italic,
|
|
54
|
+
text: Nunito_400Regular,
|
|
55
|
+
"text-regular": Nunito_400Regular,
|
|
56
|
+
"text-regular-italic": Nunito_400Regular_Italic,
|
|
57
|
+
});
|
|
68
58
|
|
|
69
|
-
|
|
59
|
+
// TODO: How should we handle unloaded fonts.
|
|
60
|
+
if (!fontsLoaded) {
|
|
61
|
+
// eslint-disable-next-line react-native/no-raw-text
|
|
62
|
+
return <NativeText />;
|
|
63
|
+
}
|
|
70
64
|
|
|
71
|
-
|
|
72
|
-
if (align) {
|
|
73
|
-
style.textAlign = align;
|
|
74
|
-
}
|
|
75
|
-
if (color) {
|
|
76
|
-
style.color = theme[color];
|
|
77
|
-
} else {
|
|
78
|
-
style.color = theme.darkGray;
|
|
79
|
-
}
|
|
65
|
+
const style: TextStyle = {};
|
|
80
66
|
|
|
81
|
-
|
|
82
|
-
|
|
67
|
+
if (size === "sm" || size === "md") {
|
|
68
|
+
if (bold && italic) {
|
|
69
|
+
style.fontFamily = "text-bold-italic";
|
|
70
|
+
} else if (italic) {
|
|
71
|
+
style.fontFamily = "text-regular-italic";
|
|
72
|
+
} else if (bold) {
|
|
73
|
+
style.fontFamily = "text-bold";
|
|
74
|
+
} else {
|
|
75
|
+
style.fontFamily = "text-regular";
|
|
83
76
|
}
|
|
84
|
-
|
|
85
|
-
|
|
77
|
+
} else {
|
|
78
|
+
if (bold && italic) {
|
|
79
|
+
style.fontFamily = "text-bold-italic";
|
|
80
|
+
} else if (italic) {
|
|
81
|
+
style.fontFamily = "text-medium-italic";
|
|
82
|
+
} else if (bold) {
|
|
83
|
+
style.fontFamily = "text-bold";
|
|
84
|
+
} else {
|
|
85
|
+
style.fontFamily = "text-medium";
|
|
86
86
|
}
|
|
87
|
-
|
|
88
|
-
// if (numberOfLines !== 1 && !inline) {
|
|
89
|
-
// style.flexWrap = "wrap";
|
|
90
|
-
// }
|
|
87
|
+
}
|
|
91
88
|
|
|
92
|
-
|
|
89
|
+
style.fontSize = fontSizes[size].size;
|
|
90
|
+
if (align) {
|
|
91
|
+
style.textAlign = align;
|
|
92
|
+
}
|
|
93
|
+
if (color) {
|
|
94
|
+
style.color = theme.text[color];
|
|
95
|
+
} else {
|
|
96
|
+
style.color = theme.text.primary;
|
|
93
97
|
}
|
|
94
98
|
|
|
99
|
+
if (italic) {
|
|
100
|
+
style.fontStyle = "italic";
|
|
101
|
+
}
|
|
102
|
+
if (underline) {
|
|
103
|
+
style.textDecorationLine = "underline";
|
|
104
|
+
}
|
|
95
105
|
let lines = 0;
|
|
96
106
|
if (numberOfLines && truncate && numberOfLines > 1) {
|
|
97
107
|
console.error(`Cannot truncate Text and have ${numberOfLines} lines`);
|
|
98
108
|
}
|
|
99
109
|
if (numberOfLines) {
|
|
100
110
|
lines = numberOfLines;
|
|
101
|
-
} else if (
|
|
111
|
+
} else if (truncate) {
|
|
102
112
|
lines = 1;
|
|
103
113
|
}
|
|
104
114
|
const inner = (
|
|
105
|
-
<NativeText numberOfLines={lines} style={
|
|
115
|
+
<NativeText numberOfLines={lines} style={style} testID={testID}>
|
|
106
116
|
{children}
|
|
107
117
|
</NativeText>
|
|
108
118
|
);
|
package/src/TextArea.tsx
CHANGED
|
@@ -3,6 +3,6 @@ import React from "react";
|
|
|
3
3
|
import {TextAreaProps} from "./Common";
|
|
4
4
|
import {TextField} from "./TextField";
|
|
5
5
|
|
|
6
|
-
export const TextArea = (
|
|
7
|
-
return <TextField {...
|
|
6
|
+
export const TextArea = (props: TextAreaProps): React.ReactElement => {
|
|
7
|
+
return <TextField {...props} multiline type="text" />;
|
|
8
8
|
};
|