@xhsreds/reds-rn-next 0.1.2 → 0.1.4
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/benchmarks/out.json +900 -820
- package/coverage/.tmp/coverage-0.json +1 -1
- package/coverage/.tmp/coverage-1.json +1 -1
- package/coverage/.tmp/coverage-10.json +1 -1
- package/coverage/.tmp/coverage-12.json +1 -1
- package/coverage/.tmp/coverage-13.json +1 -1
- package/coverage/.tmp/coverage-14.json +1 -1
- package/coverage/.tmp/coverage-15.json +1 -1
- package/coverage/.tmp/coverage-16.json +1 -1
- package/coverage/.tmp/coverage-17.json +1 -1
- package/coverage/.tmp/coverage-18.json +1 -1
- package/coverage/.tmp/coverage-19.json +1 -1
- package/coverage/.tmp/coverage-2.json +1 -1
- package/coverage/.tmp/coverage-20.json +1 -1
- package/coverage/.tmp/coverage-21.json +1 -1
- package/coverage/.tmp/coverage-22.json +1 -1
- package/coverage/.tmp/coverage-23.json +1 -1
- package/coverage/.tmp/coverage-24.json +1 -1
- package/coverage/.tmp/coverage-25.json +1 -1
- package/coverage/.tmp/coverage-26.json +1 -1
- package/coverage/.tmp/coverage-27.json +1 -1
- package/coverage/.tmp/coverage-28.json +1 -1
- package/coverage/.tmp/coverage-29.json +1 -0
- package/coverage/.tmp/coverage-3.json +1 -1
- package/coverage/.tmp/coverage-30.json +1 -0
- package/coverage/.tmp/coverage-31.json +1 -0
- package/coverage/.tmp/coverage-32.json +1 -0
- package/coverage/.tmp/coverage-4.json +1 -1
- package/coverage/.tmp/coverage-5.json +1 -1
- package/coverage/.tmp/coverage-6.json +1 -1
- package/coverage/.tmp/coverage-7.json +1 -1
- package/coverage/.tmp/coverage-8.json +1 -1
- package/coverage/.tmp/coverage-9.json +1 -1
- package/lib/cjs/_chunks/CkkZzOy_.js +23 -0
- package/lib/cjs/_chunks/CkkZzOy_.js.map +1 -0
- package/lib/cjs/_chunks/GhFTd1qc.js +22 -0
- package/lib/cjs/_chunks/GhFTd1qc.js.map +1 -0
- package/lib/cjs/_chunks/RPaDcSae.js +20 -0
- package/lib/cjs/_chunks/RPaDcSae.js.map +1 -0
- package/lib/cjs/_chunks/bwo-gq0b.js +66 -0
- package/lib/cjs/_chunks/bwo-gq0b.js.map +1 -0
- package/lib/cjs/components/ActionSheets/ActionSheets.js +99 -0
- package/lib/cjs/components/ActionSheets/ActionSheets.js.map +1 -0
- package/lib/cjs/components/ActionSheets/index.js +37 -0
- package/lib/cjs/components/ActionSheets/index.js.map +1 -0
- package/lib/cjs/components/ActionSheets/interface/index.js +9 -0
- package/lib/cjs/components/ActionSheets/interface/index.js.map +1 -0
- package/lib/cjs/components/ActionSheets/styles.js +59 -0
- package/lib/cjs/components/ActionSheets/styles.js.map +1 -0
- package/lib/cjs/components/Alert/Alert.js +143 -0
- package/lib/cjs/components/Alert/Alert.js.map +1 -0
- package/lib/cjs/components/Alert/index.js +145 -0
- package/lib/cjs/components/Alert/index.js.map +1 -0
- package/lib/cjs/components/Alert/interface/index.js +8 -0
- package/lib/cjs/components/Alert/interface/index.js.map +1 -0
- package/lib/cjs/components/Alert/styles.js +124 -0
- package/lib/cjs/components/Alert/styles.js.map +1 -0
- package/lib/cjs/components/Avatar/Avatar.js +1 -1
- package/lib/cjs/components/Avatar/Avatar.js.map +1 -1
- package/lib/cjs/components/AvatarGroup/AvatarGroup.js +97 -98
- package/lib/cjs/components/AvatarGroup/AvatarGroup.js.map +1 -1
- package/lib/cjs/components/AvatarGroup/index.js +61 -21
- package/lib/cjs/components/AvatarGroup/index.js.map +1 -1
- package/lib/cjs/components/Button/Button.js +1 -1
- package/lib/cjs/components/Button/Button.js.map +1 -1
- package/lib/cjs/components/FAB/FAB.js +1 -1
- package/lib/cjs/components/FAB/FAB.js.map +1 -1
- package/lib/cjs/components/Image/hook/index.js +2 -2
- package/lib/cjs/components/Image/hook/index.js.map +1 -1
- package/lib/cjs/components/ImagePreview/ImagePreview.js +96 -68
- package/lib/cjs/components/ImagePreview/ImagePreview.js.map +1 -1
- package/lib/cjs/components/ImagePreview/ImageViewer3.js +3 -3
- package/lib/cjs/components/ImagePreview/ImageViewer3.js.map +1 -1
- package/lib/cjs/components/ImagePreview/index.js +65 -20
- package/lib/cjs/components/ImagePreview/index.js.map +1 -1
- package/lib/cjs/components/List/ListItem/ListItem.js +94 -113
- package/lib/cjs/components/List/ListItem/ListItem.js.map +1 -1
- package/lib/cjs/components/List/index.js +59 -18
- package/lib/cjs/components/List/index.js.map +1 -1
- package/lib/cjs/components/Picker/Picker.js +6 -1
- package/lib/cjs/components/Picker/Picker.js.map +1 -1
- package/lib/cjs/components/Picker/index.js +6 -1
- package/lib/cjs/components/Picker/index.js.map +1 -1
- package/lib/cjs/components/Sheets/Sheets.js +168 -16
- package/lib/cjs/components/Sheets/Sheets.js.map +1 -1
- package/lib/cjs/components/Sheets/index.js +9 -3
- package/lib/cjs/components/Sheets/index.js.map +1 -1
- package/lib/cjs/components/Sheets/interface/index.js +6 -1
- package/lib/cjs/components/Sheets/interface/index.js.map +1 -1
- package/lib/cjs/components/Sheets/styles.js +39 -11
- package/lib/cjs/components/Sheets/styles.js.map +1 -1
- package/lib/cjs/components/Silder/Silder.js +71 -0
- package/lib/cjs/components/Silder/Silder.js.map +1 -0
- package/lib/cjs/components/Silder/index.js +18 -0
- package/lib/cjs/components/Silder/index.js.map +1 -0
- package/lib/cjs/components/Silder/interface/index.js +9 -0
- package/lib/cjs/components/Silder/interface/index.js.map +1 -0
- package/lib/cjs/components/Silder/styles.js +29 -0
- package/lib/cjs/components/Silder/styles.js.map +1 -0
- package/lib/cjs/components/TabBar/TabBar.js +10 -10
- package/lib/cjs/components/TabBar/TabBar.js.map +1 -1
- package/lib/cjs/components/Tag/Tag.js +1 -1
- package/lib/cjs/components/Tag/Tag.js.map +1 -1
- package/lib/cjs/components/Text/hooks/loadFontFromFile.js +1 -1
- package/lib/cjs/components/Text/hooks/loadFontFromFile.js.map +1 -1
- package/lib/cjs/index.js +254 -30
- package/lib/cjs/index.js.map +1 -1
- package/lib/esm/_chunks/BJ2Kj1Vd.js +58 -0
- package/lib/esm/_chunks/BJ2Kj1Vd.js.map +1 -0
- package/lib/esm/_chunks/BKEXyO9m.js +19 -0
- package/lib/esm/_chunks/BKEXyO9m.js.map +1 -0
- package/lib/esm/_chunks/{D-HreRcG.js → CwHnr-H1.js} +2 -2
- package/lib/esm/_chunks/{D-HreRcG.js.map → CwHnr-H1.js.map} +1 -1
- package/lib/esm/_chunks/DHJk9lIr.js +19 -0
- package/lib/esm/_chunks/DHJk9lIr.js.map +1 -0
- package/lib/esm/_chunks/RRfNwNcs.js +17 -0
- package/lib/esm/_chunks/RRfNwNcs.js.map +1 -0
- package/lib/esm/components/ActionSheets/ActionSheets.js +95 -0
- package/lib/esm/components/ActionSheets/ActionSheets.js.map +1 -0
- package/lib/esm/components/ActionSheets/index.js +31 -0
- package/lib/esm/components/ActionSheets/index.js.map +1 -0
- package/lib/esm/components/ActionSheets/interface/index.js +2 -0
- package/lib/esm/components/ActionSheets/interface/index.js.map +1 -0
- package/lib/esm/components/ActionSheets/styles.js +55 -0
- package/lib/esm/components/ActionSheets/styles.js.map +1 -0
- package/lib/esm/components/Alert/Alert.js +135 -0
- package/lib/esm/components/Alert/Alert.js.map +1 -0
- package/lib/esm/components/Alert/index.js +139 -0
- package/lib/esm/components/Alert/index.js.map +1 -0
- package/lib/esm/components/Alert/interface/index.js +2 -0
- package/lib/esm/components/Alert/interface/index.js.map +1 -0
- package/lib/esm/components/Alert/styles.js +122 -0
- package/lib/esm/components/Alert/styles.js.map +1 -0
- package/lib/esm/components/Avatar/Avatar.js +2 -2
- package/lib/esm/components/Avatar/Avatar.js.map +1 -1
- package/lib/esm/components/Avatar/index.js +1 -1
- package/lib/esm/components/Avatar/styles.js +1 -1
- package/lib/esm/components/AvatarGroup/AvatarGroup.js +95 -100
- package/lib/esm/components/AvatarGroup/AvatarGroup.js.map +1 -1
- package/lib/esm/components/AvatarGroup/index.js +59 -19
- package/lib/esm/components/AvatarGroup/index.js.map +1 -1
- package/lib/esm/components/Badge/Badge.js +1 -1
- package/lib/esm/components/Badge/index.js +1 -1
- package/lib/esm/components/BottomBar/BottomBar.js +1 -1
- package/lib/esm/components/BottomBar/index.js +1 -1
- package/lib/esm/components/Button/Button.js +2 -2
- package/lib/esm/components/Button/Button.js.map +1 -1
- package/lib/esm/components/Button/index.js +1 -1
- package/lib/esm/components/Button/styleMap.js +1 -1
- package/lib/esm/components/Collapse/Collapse.js +1 -1
- package/lib/esm/components/Collapse/Item/Item.js +1 -1
- package/lib/esm/components/Collapse/Item/styles.js +1 -1
- package/lib/esm/components/Collapse/index.js +1 -1
- package/lib/esm/components/ConfigProvider/ConfigProvider.js +1 -1
- package/lib/esm/components/ConfigProvider/hooks/ConfigCache/ConfigCache.js +1 -1
- package/lib/esm/components/ConfigProvider/hooks/ConfigCache/index.js +1 -1
- package/lib/esm/components/ConfigProvider/hooks/themeToken/useThemeToken.js +1 -1
- package/lib/esm/components/ConfigProvider/index.js +1 -1
- package/lib/esm/components/Divider/Divider.js +1 -1
- package/lib/esm/components/Divider/index.js +1 -1
- package/lib/esm/components/Divider/styles.js +1 -1
- package/lib/esm/components/DropDown/DropDown.js +1 -1
- package/lib/esm/components/DropDown/DropDownItem.js +1 -1
- package/lib/esm/components/DropDown/index.js +1 -1
- package/lib/esm/components/DropDown/styles.js +1 -1
- package/lib/esm/components/Empty/Empty.js +1 -1
- package/lib/esm/components/Empty/index.js +1 -1
- package/lib/esm/components/Empty/styles.js +1 -1
- package/lib/esm/components/FAB/FAB.js +2 -2
- package/lib/esm/components/FAB/FAB.js.map +1 -1
- package/lib/esm/components/FAB/index.js +1 -1
- package/lib/esm/components/Image/Image.js +1 -1
- package/lib/esm/components/Image/hook/index.js +3 -3
- package/lib/esm/components/Image/hook/index.js.map +1 -1
- package/lib/esm/components/Image/index.js +1 -1
- package/lib/esm/components/ImagePreview/Gesture/useGesture.js +1 -1
- package/lib/esm/components/ImagePreview/ImagePreview.js +95 -71
- package/lib/esm/components/ImagePreview/ImagePreview.js.map +1 -1
- package/lib/esm/components/ImagePreview/ImageViewer.js +1 -1
- package/lib/esm/components/ImagePreview/ImageViewer3.js +4 -4
- package/lib/esm/components/ImagePreview/ImageViewer3.js.map +1 -1
- package/lib/esm/components/ImagePreview/index.js +63 -18
- package/lib/esm/components/ImagePreview/index.js.map +1 -1
- package/lib/esm/components/List/ListItem/ListItem.js +92 -115
- package/lib/esm/components/List/ListItem/ListItem.js.map +1 -1
- package/lib/esm/components/List/index.js +59 -18
- package/lib/esm/components/List/index.js.map +1 -1
- package/lib/esm/components/Picker/Picker.js +7 -2
- package/lib/esm/components/Picker/Picker.js.map +1 -1
- package/lib/esm/components/Picker/index.js +7 -2
- package/lib/esm/components/Picker/index.js.map +1 -1
- package/lib/esm/components/PickerView/PickerView.js +1 -1
- package/lib/esm/components/PickerView/Wheel.js +1 -1
- package/lib/esm/components/PickerView/index.js +1 -1
- package/lib/esm/components/Popover/Popover.js +1 -1
- package/lib/esm/components/Popover/component.js +1 -1
- package/lib/esm/components/Popover/hook.js +1 -1
- package/lib/esm/components/Popover/index.js +1 -1
- package/lib/esm/components/Portal/core/PortalProvider.js +1 -1
- package/lib/esm/components/Portal/index.js +1 -1
- package/lib/esm/components/Progress/Progress.js +1 -1
- package/lib/esm/components/Progress/index.js +1 -1
- package/lib/esm/components/ProgressIndicator/ProgressIndicator.js +1 -1
- package/lib/esm/components/ProgressIndicator/index.js +1 -1
- package/lib/esm/components/ProgressIndicator/styles.js +1 -1
- package/lib/esm/components/PullRefresh/PullRefresh.js +1 -1
- package/lib/esm/components/PullRefresh/component.js +1 -1
- package/lib/esm/components/PullRefresh/index.js +1 -1
- package/lib/esm/components/Result/Result.js +1 -1
- package/lib/esm/components/Result/index.js +1 -1
- package/lib/esm/components/Result/styles.js +1 -1
- package/lib/esm/components/Sheets/Sheets.js +170 -18
- package/lib/esm/components/Sheets/Sheets.js.map +1 -1
- package/lib/esm/components/Sheets/index.js +9 -3
- package/lib/esm/components/Sheets/index.js.map +1 -1
- package/lib/esm/components/Sheets/interface/index.js +1 -1
- package/lib/esm/components/Sheets/styles.js +39 -11
- package/lib/esm/components/Sheets/styles.js.map +1 -1
- package/lib/esm/components/Silder/Silder.js +67 -0
- package/lib/esm/components/Silder/Silder.js.map +1 -0
- package/lib/esm/components/Silder/index.js +12 -0
- package/lib/esm/components/Silder/index.js.map +1 -0
- package/lib/esm/components/Silder/interface/index.js +3 -0
- package/lib/esm/components/Silder/interface/index.js.map +1 -0
- package/lib/esm/components/Silder/styles.js +25 -0
- package/lib/esm/components/Silder/styles.js.map +1 -0
- package/lib/esm/components/Skeleton/Item/SkeletonItem.js +1 -1
- package/lib/esm/components/Skeleton/Skeleton.js +1 -1
- package/lib/esm/components/Skeleton/index.js +1 -1
- package/lib/esm/components/Switch/Switch.js +1 -1
- package/lib/esm/components/Switch/index.js +1 -1
- package/lib/esm/components/Tab/Tab.js +1 -1
- package/lib/esm/components/Tab/index.js +1 -1
- package/lib/esm/components/Tab/styles.js +1 -1
- package/lib/esm/components/TabBar/TabBar.js +11 -11
- package/lib/esm/components/TabBar/TabBar.js.map +1 -1
- package/lib/esm/components/TabBar/index.js +1 -1
- package/lib/esm/components/Tag/Tag.js +2 -2
- package/lib/esm/components/Tag/Tag.js.map +1 -1
- package/lib/esm/components/Tag/index.js +1 -1
- package/lib/esm/components/Text/Text.js +1 -1
- package/lib/esm/components/Text/hooks/cloneContainer.js +1 -1
- package/lib/esm/components/Text/hooks/index.js +1 -1
- package/lib/esm/components/Text/hooks/loadFontFromFile.js +2 -2
- package/lib/esm/components/Text/hooks/loadFontFromFile.js.map +1 -1
- package/lib/esm/components/Text/index.js +1 -1
- package/lib/esm/components/Text/styles.js +1 -1
- package/lib/esm/components/Toast/Toast.js +1 -1
- package/lib/esm/components/Toast/api.js +1 -1
- package/lib/esm/components/Toast/index.js +1 -1
- package/lib/esm/components/Toast/styles.js +1 -1
- package/lib/esm/index.js +253 -28
- package/lib/esm/index.js.map +1 -1
- package/lib/types/components/ActionSheets/ActionSheets.d.ts +10 -0
- package/lib/types/components/ActionSheets/demo/index.d.ts +2 -0
- package/lib/types/components/ActionSheets/index.d.ts +4 -0
- package/lib/types/components/ActionSheets/interface/index.d.ts +23 -0
- package/lib/types/components/ActionSheets/styles.d.ts +51 -0
- package/lib/types/components/ActionSheets/test/index.bench.d.ts +1 -0
- package/lib/types/components/ActionSheets/test/index.test.d.ts +1 -0
- package/lib/types/components/ActionSheets/test/paper.bench.d.ts +1 -0
- package/lib/types/components/Alert/Alert.d.ts +4 -0
- package/lib/types/components/Alert/demo/index.d.ts +2 -0
- package/lib/types/components/Alert/index.d.ts +4 -0
- package/lib/types/components/Alert/interface/index.d.ts +35 -0
- package/lib/types/components/Alert/styles.d.ts +108 -0
- package/lib/types/components/Alert/test/index.bench.d.ts +1 -0
- package/lib/types/components/Alert/test/index.test.d.ts +1 -0
- package/lib/types/components/Alert/test/paper.bench.d.ts +1 -0
- package/lib/types/components/FAB/test/paper.bench.d.ts +1 -0
- package/lib/types/components/Sheets/Sheets.d.ts +17 -1
- package/lib/types/components/Sheets/interface/index.d.ts +45 -0
- package/lib/types/components/Sheets/styles.d.ts +38 -9
- package/lib/types/components/Sheets/test/index.test.d.ts +1 -1
- package/lib/types/components/Silder/Silder.d.ts +13 -0
- package/lib/types/components/Silder/demo/index.d.ts +2 -0
- package/lib/types/components/Silder/index.d.ts +4 -0
- package/lib/types/components/Silder/interface/index.d.ts +19 -0
- package/lib/types/components/Silder/styles.d.ts +20 -0
- package/lib/types/components/Silder/test/index.bench.d.ts +1 -0
- package/lib/types/components/Silder/test/index.test.d.ts +1 -0
- package/lib/types/index.d.ts +6 -0
- package/package.json +2 -3
- package/src/components/ActionSheets/ActionSheets.tsx +66 -0
- package/src/components/ActionSheets/demo/index.tsx +65 -0
- package/src/components/ActionSheets/doc/index.mdx +24 -0
- package/src/components/ActionSheets/index.ts +5 -0
- package/src/components/ActionSheets/interface/index.ts +27 -0
- package/src/components/ActionSheets/styles.ts +54 -0
- package/src/components/ActionSheets/test/index.bench.tsx +13 -0
- package/src/components/ActionSheets/test/index.test.tsx +81 -0
- package/src/components/ActionSheets/test/paper.bench.tsx +17 -0
- package/src/components/Alert/Alert.tsx +170 -0
- package/src/components/Alert/demo/index.tsx +234 -0
- package/src/components/Alert/doc/index.mdx +37 -0
- package/src/components/Alert/index.ts +5 -0
- package/src/components/Alert/interface/index.ts +35 -0
- package/src/components/Alert/styles.ts +116 -0
- package/src/components/Alert/test/__snapshots__/index.test.tsx.snap +519 -0
- package/src/components/Alert/test/index.bench.tsx +13 -0
- package/src/components/Alert/test/index.test.tsx +62 -0
- package/src/components/Alert/test/paper.bench.tsx +26 -0
- package/src/components/Avatar/test/__snapshots__/index.test.tsx.snap +32 -0
- package/src/components/Avatar/test/paper.bench.tsx +1 -1
- package/src/components/Button/test/__snapshots__/index.test.tsx.snap +0 -10
- package/src/components/Divider/test/__snapshots__/index.test.tsx.snap +420 -6
- package/src/components/Divider/test/index.test.tsx +43 -35
- package/src/components/FAB/test/__snapshots__/index.test.tsx.snap +0 -2
- package/src/components/FAB/test/paper.bench.tsx +12 -0
- package/src/components/Picker/test/index.test.tsx +17 -25
- package/src/components/Progress/test/__snapshots__/index.test.tsx.snap +332 -3
- package/src/components/Progress/test/index.test.tsx +29 -19
- package/src/components/PullRefresh/test/index.bench.tsx +1 -1
- package/src/components/Sheets/Sheets.tsx +293 -20
- package/src/components/Sheets/demo/index.tsx +191 -14
- package/src/components/Sheets/doc/index.mdx +16 -5
- package/src/components/Sheets/interface/index.ts +50 -0
- package/src/components/Sheets/styles.ts +38 -10
- package/src/components/Sheets/test/index.test.tsx +71 -48
- package/src/components/Sheets/test/paper.bench.tsx +1 -1
- package/src/components/Silder/Silder.tsx +49 -0
- package/src/components/Silder/demo/index.tsx +53 -0
- package/src/components/Silder/doc/index.mdx +26 -0
- package/src/components/Silder/index.ts +5 -0
- package/src/components/Silder/interface/index.ts +20 -0
- package/src/components/Silder/styles.ts +24 -0
- package/src/components/Silder/test/index.bench.tsx +13 -0
- package/src/components/Silder/test/index.test.tsx +18 -0
- package/src/components/TabBar/TabBar.tsx +17 -17
- package/src/components/Toast/test/paper.bench.tsx +9 -5
- package/src/index.ts +17 -0
- package/lib/cjs/_chunks/DIhBCUjt.js +0 -17
- package/lib/cjs/_chunks/DIhBCUjt.js.map +0 -1
- package/lib/esm/_chunks/B3_9dzWY.js +0 -14
- package/lib/esm/_chunks/B3_9dzWY.js.map +0 -1
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { render, fireEvent } from "@testing-library/react-native";
|
|
3
|
+
import { describe, it, expect, vi } from "vitest";
|
|
4
|
+
import ActionSheets from "../ActionSheets";
|
|
5
|
+
import { ActionType } from "../interface";
|
|
6
|
+
|
|
7
|
+
describe("<ActionSheets />", () => {
|
|
8
|
+
const themeColorMock = {
|
|
9
|
+
Disabled: "gray",
|
|
10
|
+
Primary: "blue",
|
|
11
|
+
Bg1: "white",
|
|
12
|
+
Bg2: "lightgray",
|
|
13
|
+
Title: "black",
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
vi.mock("../ConfigProvider", () => ({
|
|
17
|
+
useThemeColor: () => themeColorMock,
|
|
18
|
+
}));
|
|
19
|
+
|
|
20
|
+
it("renders correctly with description and data", () => {
|
|
21
|
+
const data = [
|
|
22
|
+
{ label: "Option 1", value: "1", type: ActionType.primary },
|
|
23
|
+
{ label: "Option 2", value: "2", type: ActionType.invalid },
|
|
24
|
+
];
|
|
25
|
+
const { getByText } = render(
|
|
26
|
+
<ActionSheets visible={true} description="Description text" data={data} onChange={() => {}} onClose={() => {}} />,
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
expect(getByText("Description text")).toBeTruthy();
|
|
30
|
+
expect(getByText("Option 1")).toBeTruthy();
|
|
31
|
+
expect(getByText("Option 2")).toBeTruthy();
|
|
32
|
+
expect(getByText("取消")).toBeTruthy();
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it("triggers onChange and onClose on item click", () => {
|
|
36
|
+
const handleChange = vi.fn();
|
|
37
|
+
const handleClose = vi.fn();
|
|
38
|
+
|
|
39
|
+
const data = [{ label: "Option 1", value: "1", type: ActionType.primary }];
|
|
40
|
+
|
|
41
|
+
const { getByText } = render(
|
|
42
|
+
<ActionSheets visible={true} data={data} onChange={handleChange} onClose={handleClose} />,
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
fireEvent.press(getByText("Option 1"));
|
|
46
|
+
|
|
47
|
+
expect(handleChange).toHaveBeenCalledWith("1");
|
|
48
|
+
expect(handleClose).toHaveBeenCalled();
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it("triggers onClose when cancel is pressed", () => {
|
|
52
|
+
const handleClose = vi.fn();
|
|
53
|
+
|
|
54
|
+
const { getByText } = render(<ActionSheets visible={true} data={[]} onClose={handleClose} onChange={() => {}} />);
|
|
55
|
+
|
|
56
|
+
fireEvent.press(getByText("取消"));
|
|
57
|
+
|
|
58
|
+
expect(handleClose).toHaveBeenCalled();
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
it("renders correctly without description", () => {
|
|
62
|
+
const { queryByText } = render(<ActionSheets visible={true} data={[]} onChange={() => {}} onClose={() => {}} />);
|
|
63
|
+
|
|
64
|
+
expect(queryByText("Description text")).toBeNull();
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it("renders with correct styles based on action type", () => {
|
|
68
|
+
const data = [
|
|
69
|
+
{ label: "Primary Option", value: "1", type: ActionType.primary },
|
|
70
|
+
{ label: "Invalid Option", value: "2", type: ActionType.invalid },
|
|
71
|
+
];
|
|
72
|
+
|
|
73
|
+
const { getByText } = render(<ActionSheets visible={true} data={data} onChange={() => {}} onClose={() => {}} />);
|
|
74
|
+
|
|
75
|
+
const primaryOption = getByText("Primary Option");
|
|
76
|
+
const invalidOption = getByText("Invalid Option");
|
|
77
|
+
|
|
78
|
+
expect(primaryOption.props.style).toContainEqual({ color: themeColorMock.Primary });
|
|
79
|
+
expect(invalidOption.props.style).toContainEqual({ color: themeColorMock.Disabled });
|
|
80
|
+
});
|
|
81
|
+
});
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { describe } from "vitest";
|
|
3
|
+
// @ts-ignore
|
|
4
|
+
import { redsBench } from "~root/utils/redsBench";
|
|
5
|
+
import { Modal } from "react-native-paper";
|
|
6
|
+
import { render, fireEvent } from "@testing-library/react-native";
|
|
7
|
+
import { Text } from "react-native";
|
|
8
|
+
|
|
9
|
+
describe("paper render", () => {
|
|
10
|
+
redsBench("base", async () => {
|
|
11
|
+
render(
|
|
12
|
+
<Modal visible={true}>
|
|
13
|
+
<Text>Example Modal. Click outside this area to dismiss.</Text>
|
|
14
|
+
</Modal>,
|
|
15
|
+
);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import React, { useState, useEffect, useCallback, useRef } from "react";
|
|
2
|
+
import {
|
|
3
|
+
View,
|
|
4
|
+
Text,
|
|
5
|
+
Modal,
|
|
6
|
+
Image,
|
|
7
|
+
ScrollView,
|
|
8
|
+
TouchableWithoutFeedback,
|
|
9
|
+
StyleSheet,
|
|
10
|
+
GestureResponderEvent,
|
|
11
|
+
Animated,
|
|
12
|
+
} from "react-native";
|
|
13
|
+
import { RedsAlert, AlertDefaultProps } from "./interface";
|
|
14
|
+
import { Button, Divider, Portal } from "../../index";
|
|
15
|
+
import { style } from "./styles";
|
|
16
|
+
|
|
17
|
+
// const scrollViewMask = {
|
|
18
|
+
// default: "https://picasso-static.xiaohongshu.com/fe-platform/d3fab8f89c0d2daa69ecaa87580c8ff42f330a80.png",
|
|
19
|
+
// dark: "https://picasso-static.xiaohongshu.com/fe-platform/953a4a587c93dadda6f4ded4f732c50cf703ac99.png",
|
|
20
|
+
// };
|
|
21
|
+
const Alert: React.FC<RedsAlert> = (props) => {
|
|
22
|
+
const finalProps = { ...AlertDefaultProps, ...props };
|
|
23
|
+
const {
|
|
24
|
+
show,
|
|
25
|
+
title,
|
|
26
|
+
message,
|
|
27
|
+
confirmText,
|
|
28
|
+
cancelText,
|
|
29
|
+
onConfirm,
|
|
30
|
+
onCancel,
|
|
31
|
+
onOpen,
|
|
32
|
+
onClose,
|
|
33
|
+
align,
|
|
34
|
+
// showScrollOverlay,
|
|
35
|
+
footerLayout,
|
|
36
|
+
showConfirmButton,
|
|
37
|
+
showCancelButton,
|
|
38
|
+
mask,
|
|
39
|
+
footerType,
|
|
40
|
+
header,
|
|
41
|
+
footer,
|
|
42
|
+
children,
|
|
43
|
+
} = finalProps;
|
|
44
|
+
|
|
45
|
+
const styles = style(props);
|
|
46
|
+
// const [hasScrollToBottom, setHasScrollToBottom] = useState(true);
|
|
47
|
+
const fadeAnim = useRef(new Animated.Value(0)).current;
|
|
48
|
+
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
if (show && onOpen) onOpen();
|
|
51
|
+
if (!show && onClose) onClose();
|
|
52
|
+
}, [show]);
|
|
53
|
+
|
|
54
|
+
const handleConfirm = (e: GestureResponderEvent) => {
|
|
55
|
+
if (onConfirm) onConfirm(e);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const handleCancel = (e: GestureResponderEvent) => {
|
|
59
|
+
if (onCancel) onCancel(e);
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// const handleScrollView = useCallback(
|
|
63
|
+
// (e: any) => {
|
|
64
|
+
// const offsetY = e.nativeEvent.contentOffset.y;
|
|
65
|
+
// const contentSizeHeight = e.nativeEvent.contentSize.height;
|
|
66
|
+
// var containerScrollHeight = e.nativeEvent.layoutMeasurement.height;
|
|
67
|
+
// if (offsetY + containerScrollHeight + 30 >= contentSizeHeight) {
|
|
68
|
+
// if (hasScrollToBottom) setHasScrollToBottom(false);
|
|
69
|
+
// } else {
|
|
70
|
+
// if (!hasScrollToBottom) setHasScrollToBottom(true);
|
|
71
|
+
// }
|
|
72
|
+
// },
|
|
73
|
+
// [hasScrollToBottom],
|
|
74
|
+
// );
|
|
75
|
+
|
|
76
|
+
// const [canScroll, setCanScroll] = useState(false);
|
|
77
|
+
|
|
78
|
+
// const handleContentSizeChange = (contentWidth: number, contentHeight: number) => {
|
|
79
|
+
// if (contentHeight > 135) {
|
|
80
|
+
// setCanScroll(true);
|
|
81
|
+
// } else {
|
|
82
|
+
// setCanScroll(false);
|
|
83
|
+
// }
|
|
84
|
+
// };
|
|
85
|
+
|
|
86
|
+
return show ? (
|
|
87
|
+
<Portal>
|
|
88
|
+
{mask && (
|
|
89
|
+
<TouchableWithoutFeedback>
|
|
90
|
+
<View style={styles.modalOverlay} />
|
|
91
|
+
</TouchableWithoutFeedback>
|
|
92
|
+
)}
|
|
93
|
+
<Animated.View
|
|
94
|
+
style={[
|
|
95
|
+
styles.centeredView,
|
|
96
|
+
{
|
|
97
|
+
transform: [
|
|
98
|
+
{
|
|
99
|
+
scale: fadeAnim.interpolate({
|
|
100
|
+
inputRange: [0, 1],
|
|
101
|
+
outputRange: [1, 1],
|
|
102
|
+
}),
|
|
103
|
+
},
|
|
104
|
+
],
|
|
105
|
+
},
|
|
106
|
+
]}
|
|
107
|
+
>
|
|
108
|
+
<View style={[styles.alertContainer]}>
|
|
109
|
+
{header}
|
|
110
|
+
<View style={styles.alertContent}>
|
|
111
|
+
<Text style={styles.title}>{title}</Text>
|
|
112
|
+
{message ? (
|
|
113
|
+
<ScrollView
|
|
114
|
+
// onContentSizeChange={handleContentSizeChange}
|
|
115
|
+
// onScroll={handleScrollView}
|
|
116
|
+
style={[styles.message]}
|
|
117
|
+
scrollEventThrottle={16}
|
|
118
|
+
>
|
|
119
|
+
<Text style={[styles.messageText, align === "left" && styles.messageLeft]}>{message}</Text>
|
|
120
|
+
</ScrollView>
|
|
121
|
+
) : (
|
|
122
|
+
children
|
|
123
|
+
)}
|
|
124
|
+
{/* {showScrollOverlay && hasScrollToBottom && canScroll ? (
|
|
125
|
+
<Image source={{ uri: scrollViewMask.default }} style={styles.scrollOverlay} />
|
|
126
|
+
) : null} */}
|
|
127
|
+
</View>
|
|
128
|
+
{footer ? (
|
|
129
|
+
footer
|
|
130
|
+
) : (
|
|
131
|
+
<View
|
|
132
|
+
style={[
|
|
133
|
+
styles.footer,
|
|
134
|
+
footerLayout === "vertical" ? styles.footerVertical : styles.footerHorizontal,
|
|
135
|
+
footerType === "text" && styles.footerText,
|
|
136
|
+
]}
|
|
137
|
+
>
|
|
138
|
+
{showCancelButton && (
|
|
139
|
+
<Button
|
|
140
|
+
variant={footerType === "text" ? "text" : "outline"}
|
|
141
|
+
onClick={handleCancel}
|
|
142
|
+
style={footerLayout === "vertical" ? styles.verButton : styles.button}
|
|
143
|
+
>
|
|
144
|
+
{cancelText}
|
|
145
|
+
</Button>
|
|
146
|
+
)}
|
|
147
|
+
{footerType === "text" && showCancelButton && footerLayout !== "vertical" && (
|
|
148
|
+
<View style={styles.dividerBox}>
|
|
149
|
+
<Divider direction={"vertical"} size={24} />
|
|
150
|
+
</View>
|
|
151
|
+
)}
|
|
152
|
+
{showConfirmButton && (
|
|
153
|
+
<Button
|
|
154
|
+
type="primary"
|
|
155
|
+
variant={footerType === "text" ? "text" : "fill"}
|
|
156
|
+
onClick={handleConfirm}
|
|
157
|
+
style={footerType === "text" || footerLayout === "vertical" ? styles.button : styles.confirmButton}
|
|
158
|
+
>
|
|
159
|
+
{confirmText}
|
|
160
|
+
</Button>
|
|
161
|
+
)}
|
|
162
|
+
</View>
|
|
163
|
+
)}
|
|
164
|
+
</View>
|
|
165
|
+
</Animated.View>
|
|
166
|
+
</Portal>
|
|
167
|
+
) : null;
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
export default Alert;
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { View, Text, StyleSheet, GestureResponderEvent, ScrollView, Image } from "react-native";
|
|
3
|
+
import { Alert, PortalProvider } from "@xhs/reds-rn-next";
|
|
4
|
+
import { Button, Icon, useThemeColor } from "@xhs/reds-rn-next";
|
|
5
|
+
|
|
6
|
+
const styles = StyleSheet.create({
|
|
7
|
+
container: {
|
|
8
|
+
flex: 1,
|
|
9
|
+
justifyContent: "center",
|
|
10
|
+
alignItems: "center",
|
|
11
|
+
padding: 20,
|
|
12
|
+
marginBottom: 800,
|
|
13
|
+
},
|
|
14
|
+
buttonContainer: {
|
|
15
|
+
marginVertical: 10,
|
|
16
|
+
width: "100%",
|
|
17
|
+
alignItems: "center",
|
|
18
|
+
},
|
|
19
|
+
footer: {
|
|
20
|
+
flex: 1,
|
|
21
|
+
// padding: 20,
|
|
22
|
+
// paddingTop: 0,
|
|
23
|
+
// flexDirection: "column-reverse",
|
|
24
|
+
// height: 100,
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
export default function App() {
|
|
29
|
+
const [alertVisible, setAlertVisible] = useState(false);
|
|
30
|
+
const [footerType, setFooterType] = useState<"button" | "text">("button");
|
|
31
|
+
const [showCancelButton, setShowCancelButton] = useState(true);
|
|
32
|
+
|
|
33
|
+
const [alertTitle, setAlertTitle] = useState<string | undefined>("提示");
|
|
34
|
+
const [alertMessage, setAlertMessage] = useState<string | undefined>(
|
|
35
|
+
"这是一个自定义消息内容这是一个自定义消息内容这是一个自定义消息内容这是一个自定义消息内容这是一个自定义消息内容这是一个自定义消息内容这是一个自定义消息内容这是一个自定义消息内容这是一个自定义消息内容这是一个自定义消息内容这是一个自定义消息内容这是一个自定义消息内容这是一个自定义消息内容这是一个自定义消息内容",
|
|
36
|
+
);
|
|
37
|
+
const [align, setAlign] = useState<"left" | "center">("center");
|
|
38
|
+
const [footerLayout, setFooterLayout] = useState<"horizontal" | "vertical">("horizontal");
|
|
39
|
+
const themeColor = useThemeColor("Icon");
|
|
40
|
+
const [mediaSrc, setMediaSrc] = useState<string>("");
|
|
41
|
+
const [footer, setFooter] = useState<React.ReactNode | undefined>(undefined);
|
|
42
|
+
const [header, setHeader] = useState<React.ReactNode | undefined>(undefined);
|
|
43
|
+
const [customMessage, setCustomMessage] = useState(false);
|
|
44
|
+
|
|
45
|
+
const showAlert = () => {
|
|
46
|
+
setAlertVisible(true);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const hideAlert = () => {
|
|
50
|
+
setAlertVisible(false);
|
|
51
|
+
|
|
52
|
+
// 重置状态
|
|
53
|
+
setFooterType("button");
|
|
54
|
+
setFooterLayout("horizontal");
|
|
55
|
+
setAlign("center");
|
|
56
|
+
setAlertTitle("提示");
|
|
57
|
+
setAlertMessage("这是一个消息内容");
|
|
58
|
+
setShowCancelButton(true);
|
|
59
|
+
setFooter(undefined);
|
|
60
|
+
setHeader(undefined);
|
|
61
|
+
setCustomMessage(false);
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const handleConfirm = (e: GestureResponderEvent) => {
|
|
65
|
+
console.log("确认按钮点击", e);
|
|
66
|
+
hideAlert();
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const handleCancel = (e: GestureResponderEvent) => {
|
|
70
|
+
console.log("取消按钮点击", e);
|
|
71
|
+
hideAlert();
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const handleOpen = () => {
|
|
75
|
+
console.log("Alert 打开");
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
const handleClose = () => {
|
|
79
|
+
console.log("Alert 关闭");
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const changeFoolterType = () => {
|
|
83
|
+
setFooterType("text");
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
const renderCusFooter = () => {
|
|
87
|
+
return (
|
|
88
|
+
<View style={{ padding: 20 }}>
|
|
89
|
+
<Button onClick={handleCancel} type="primary">
|
|
90
|
+
自定义footer
|
|
91
|
+
</Button>
|
|
92
|
+
</View>
|
|
93
|
+
);
|
|
94
|
+
};
|
|
95
|
+
const renderCusHeader = () => {
|
|
96
|
+
return (
|
|
97
|
+
<View style={{}}>
|
|
98
|
+
<Image
|
|
99
|
+
source={{ uri: "https://fe-platform.xhscdn.com/platform/104101l0316gv8eebgm06cj00vk900000000000eiv941q" }}
|
|
100
|
+
style={{ width: 270, height: 100 }}
|
|
101
|
+
/>
|
|
102
|
+
</View>
|
|
103
|
+
);
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
return (
|
|
107
|
+
<PortalProvider>
|
|
108
|
+
<ScrollView>
|
|
109
|
+
<View style={styles.container}>
|
|
110
|
+
<View style={styles.buttonContainer}>
|
|
111
|
+
<Button onClick={showAlert} type="primary" variant="fill">
|
|
112
|
+
显示基础Alert
|
|
113
|
+
</Button>
|
|
114
|
+
</View>
|
|
115
|
+
|
|
116
|
+
<View style={styles.buttonContainer}>
|
|
117
|
+
<Button
|
|
118
|
+
onClick={() => {
|
|
119
|
+
setAlertTitle("提示");
|
|
120
|
+
setAlertMessage("不显示取消按钮的alert");
|
|
121
|
+
setFooterLayout("horizontal");
|
|
122
|
+
setShowCancelButton(false);
|
|
123
|
+
showAlert();
|
|
124
|
+
}}
|
|
125
|
+
type="primary"
|
|
126
|
+
variant="outline"
|
|
127
|
+
>
|
|
128
|
+
不显示取消按钮的alert
|
|
129
|
+
</Button>
|
|
130
|
+
</View>
|
|
131
|
+
|
|
132
|
+
<View style={styles.buttonContainer}>
|
|
133
|
+
<Button
|
|
134
|
+
onClick={() => {
|
|
135
|
+
setAlertTitle("标题");
|
|
136
|
+
setAlertMessage("文本按钮样式");
|
|
137
|
+
setFooterLayout("horizontal");
|
|
138
|
+
changeFoolterType();
|
|
139
|
+
showAlert();
|
|
140
|
+
}}
|
|
141
|
+
type="primary"
|
|
142
|
+
variant="ghost"
|
|
143
|
+
>
|
|
144
|
+
文本按钮样式
|
|
145
|
+
</Button>
|
|
146
|
+
</View>
|
|
147
|
+
|
|
148
|
+
<View style={styles.buttonContainer}>
|
|
149
|
+
<Button
|
|
150
|
+
onClick={() => {
|
|
151
|
+
setAlertTitle("提示");
|
|
152
|
+
setAlertMessage(
|
|
153
|
+
"欢迎来到小红书! 请您充分阅读和理解《用户协议》和《隐私政策》,以及本提示的全部内容。点击“同意”按钮即代表您已同意前述协议全部条款以及以下约定。 1.为给您提供发布服务,我们可能会申请手机存储权限、摄像头权限、麦克风权 1.为给您提供发布服务,我们可能会申请手机存储权限、摄像头权限、麦克风权 1.为给您提供发布服务,我们可能会申请手机存储权限、摄像头权限、麦克风权 1.为给您提供发布服务,我们可能会申请手机存储权限、摄像头权限、麦克风权 1.为给您提供发布服务,我们可能会申请手机存储权限、摄像头权限、麦克风权 1.为给您提供发布服务,我们可能会申请手机存储权限、摄像头权限、麦克风权",
|
|
154
|
+
);
|
|
155
|
+
setFooterLayout("horizontal");
|
|
156
|
+
setAlign("left");
|
|
157
|
+
showAlert();
|
|
158
|
+
}}
|
|
159
|
+
type="primary"
|
|
160
|
+
variant="ghost"
|
|
161
|
+
>
|
|
162
|
+
内容可滚动
|
|
163
|
+
</Button>
|
|
164
|
+
</View>
|
|
165
|
+
|
|
166
|
+
<View style={styles.buttonContainer}>
|
|
167
|
+
<Button
|
|
168
|
+
onClick={() => {
|
|
169
|
+
setAlertTitle("标题");
|
|
170
|
+
setAlertMessage("文本");
|
|
171
|
+
setFooterLayout("vertical");
|
|
172
|
+
changeFoolterType();
|
|
173
|
+
setFooter(renderCusFooter());
|
|
174
|
+
showAlert();
|
|
175
|
+
}}
|
|
176
|
+
type="primary"
|
|
177
|
+
variant="ghost"
|
|
178
|
+
>
|
|
179
|
+
自定义footer
|
|
180
|
+
</Button>
|
|
181
|
+
</View>
|
|
182
|
+
|
|
183
|
+
<View style={styles.buttonContainer}>
|
|
184
|
+
<Button
|
|
185
|
+
onClick={() => {
|
|
186
|
+
setHeader(renderCusHeader());
|
|
187
|
+
showAlert();
|
|
188
|
+
}}
|
|
189
|
+
type="primary"
|
|
190
|
+
variant="ghost"
|
|
191
|
+
>
|
|
192
|
+
自定义header
|
|
193
|
+
</Button>
|
|
194
|
+
</View>
|
|
195
|
+
|
|
196
|
+
<View style={styles.buttonContainer}>
|
|
197
|
+
<Button
|
|
198
|
+
onClick={() => {
|
|
199
|
+
setCustomMessage(true);
|
|
200
|
+
setAlertMessage("");
|
|
201
|
+
showAlert();
|
|
202
|
+
}}
|
|
203
|
+
type="primary"
|
|
204
|
+
variant="ghost"
|
|
205
|
+
>
|
|
206
|
+
自定义message
|
|
207
|
+
</Button>
|
|
208
|
+
</View>
|
|
209
|
+
|
|
210
|
+
<Alert
|
|
211
|
+
show={alertVisible}
|
|
212
|
+
title={alertTitle}
|
|
213
|
+
message={alertMessage}
|
|
214
|
+
align={align}
|
|
215
|
+
confirmText="确认"
|
|
216
|
+
cancelText="取消"
|
|
217
|
+
onConfirm={handleConfirm}
|
|
218
|
+
onCancel={handleCancel}
|
|
219
|
+
onOpen={handleOpen}
|
|
220
|
+
onClose={handleClose}
|
|
221
|
+
footerLayout={footerLayout}
|
|
222
|
+
showConfirmButton
|
|
223
|
+
showCancelButton={showCancelButton}
|
|
224
|
+
footerType={footerType}
|
|
225
|
+
footer={footer}
|
|
226
|
+
header={header}
|
|
227
|
+
>
|
|
228
|
+
{customMessage && <Text>这是一个自定义message</Text>}
|
|
229
|
+
</Alert>
|
|
230
|
+
</View>
|
|
231
|
+
</ScrollView>
|
|
232
|
+
</PortalProvider>
|
|
233
|
+
);
|
|
234
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import BaseDemo from "!!raw-loader!../demo/index.tsx";
|
|
2
|
+
|
|
3
|
+
## 演示
|
|
4
|
+
|
|
5
|
+
### 基础用法
|
|
6
|
+
|
|
7
|
+
::BaseDemo::
|
|
8
|
+
|
|
9
|
+
## API
|
|
10
|
+
|
|
11
|
+
### Props
|
|
12
|
+
|
|
13
|
+
| 属性 | 描述 | 类型 | 默认值 |
|
|
14
|
+
| ----------------- | -------------------------------------- | ------------------------------ | ---------- |
|
|
15
|
+
| show | 是否显示弹出框 | boolean | false |
|
|
16
|
+
| title | 标题 string | string | |
|
|
17
|
+
| message | 文本内容 | string | |
|
|
18
|
+
| align | 内容对齐方式 | "left" | "center" | center |
|
|
19
|
+
| footerLayout | 底部按钮区域布局方式,水平还是竖直方向 | "horizontal" | "vertical" | horizontal |
|
|
20
|
+
| showConfirmButton | 是否展示确认按钮 | boolean | true |
|
|
21
|
+
| showCancelButton | 是否展示取消按钮 | boolean | true |
|
|
22
|
+
| confirmText | 确认按钮文案 | string | 确认 |
|
|
23
|
+
| cancelText | 取消按钮文案 | string | 取消 |
|
|
24
|
+
| mask | 是否展示遮罩层 | boolean | true |
|
|
25
|
+
| footerType | 底部按钮样式 | "text" | "button" | button |
|
|
26
|
+
| children | children | React.ReactNode | |
|
|
27
|
+
| footer | 自定义底部按钮区域 | React.ReactNode | |
|
|
28
|
+
| header | 顶部插槽 | React.ReactNode | |
|
|
29
|
+
|
|
30
|
+
### Events
|
|
31
|
+
|
|
32
|
+
| 事件 | 描述 | 类型 | 默认值 |
|
|
33
|
+
| --------- | ------------------ | -------------------------------------- | ------ |
|
|
34
|
+
| onConfirm | 点击确认按钮时触发 | (value: GestureResponderEvent) => void | |
|
|
35
|
+
| onCancel | 点击取消按钮时触发 | (value: GestureResponderEvent) => void | |
|
|
36
|
+
| onOpen | 打开弹窗时触发 | () => void | |
|
|
37
|
+
| onClose | 关闭弹窗时触发 | () => void | |
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { GestureResponderEvent } from "react-native";
|
|
2
|
+
import { lightColor } from "@xhs/reds-token-next";
|
|
3
|
+
export interface RedsAlert {
|
|
4
|
+
show: boolean;
|
|
5
|
+
title?: string;
|
|
6
|
+
message?: string;
|
|
7
|
+
align?: "left" | "center";
|
|
8
|
+
footerLayout?: "horizontal" | "vertical";
|
|
9
|
+
showConfirmButton?: boolean;
|
|
10
|
+
showCancelButton?: boolean;
|
|
11
|
+
confirmText?: string;
|
|
12
|
+
cancelText?: string;
|
|
13
|
+
mask?: boolean;
|
|
14
|
+
footerType?: "text" | "button";
|
|
15
|
+
children?: React.ReactNode;
|
|
16
|
+
footer?: React.ReactNode;
|
|
17
|
+
header?: React.ReactNode;
|
|
18
|
+
onConfirm?: (value: GestureResponderEvent) => void;
|
|
19
|
+
onCancel?: (value: GestureResponderEvent) => void;
|
|
20
|
+
onOpen?: () => void;
|
|
21
|
+
onClose?: () => void;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface RedsAlertEvent {}
|
|
25
|
+
export const AlertDefaultProps = {
|
|
26
|
+
show: false,
|
|
27
|
+
align: "center",
|
|
28
|
+
footerLayout: "horizontal",
|
|
29
|
+
showConfirmButton: true,
|
|
30
|
+
showCancelButton: true,
|
|
31
|
+
confirmText: "确认",
|
|
32
|
+
cancelText: "取消",
|
|
33
|
+
mask: true,
|
|
34
|
+
footerType: "button",
|
|
35
|
+
};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { StyleSheet } from "react-native";
|
|
2
|
+
import { typography, alwaysColor } from "@xhs/reds-token-next";
|
|
3
|
+
import { useThemeColor } from "../ConfigProvider";
|
|
4
|
+
import { RedsAlert } from "./interface";
|
|
5
|
+
|
|
6
|
+
export const style = (props: RedsAlert) => {
|
|
7
|
+
const themeColor = useThemeColor("Button");
|
|
8
|
+
const styles = StyleSheet.create({
|
|
9
|
+
modalOverlay: {
|
|
10
|
+
position: "absolute",
|
|
11
|
+
top: 0,
|
|
12
|
+
left: 0,
|
|
13
|
+
right: 0,
|
|
14
|
+
bottom: 0,
|
|
15
|
+
backgroundColor: alwaysColor.MaskBg,
|
|
16
|
+
},
|
|
17
|
+
centeredView: {
|
|
18
|
+
position: "absolute",
|
|
19
|
+
top: 0,
|
|
20
|
+
left: 0,
|
|
21
|
+
right: 0,
|
|
22
|
+
bottom: 0,
|
|
23
|
+
flex: 1,
|
|
24
|
+
justifyContent: "center",
|
|
25
|
+
alignItems: "center",
|
|
26
|
+
},
|
|
27
|
+
alertContainer: {
|
|
28
|
+
width: 270,
|
|
29
|
+
backgroundColor: themeColor.White,
|
|
30
|
+
borderRadius: 8,
|
|
31
|
+
overflow: "hidden",
|
|
32
|
+
boxShadow: "0 2px 16px rgba(0, 0, 0, 0.1)",
|
|
33
|
+
},
|
|
34
|
+
alertContent: {
|
|
35
|
+
padding: 20,
|
|
36
|
+
},
|
|
37
|
+
title: {
|
|
38
|
+
textAlign: "center",
|
|
39
|
+
marginBottom: 8,
|
|
40
|
+
fontSize: typography.T2FontSize,
|
|
41
|
+
fontWeight: typography.T2FontWeight,
|
|
42
|
+
lineHeight: typography.T2LineHeight,
|
|
43
|
+
},
|
|
44
|
+
message: {
|
|
45
|
+
maxHeight: 126,
|
|
46
|
+
overflow: "hidden",
|
|
47
|
+
position: "relative",
|
|
48
|
+
},
|
|
49
|
+
messageText: {
|
|
50
|
+
fontSize: typography.C2FontSize,
|
|
51
|
+
color: themeColor.Paragraph,
|
|
52
|
+
textAlign: "center",
|
|
53
|
+
lineHeight: typography.C2LineHeight,
|
|
54
|
+
fontWeight: typography.C2FontWeight,
|
|
55
|
+
},
|
|
56
|
+
messageLeft: {
|
|
57
|
+
textAlign: "left",
|
|
58
|
+
},
|
|
59
|
+
scrollOverlay: {
|
|
60
|
+
width: "100%",
|
|
61
|
+
position: "absolute",
|
|
62
|
+
left: 20,
|
|
63
|
+
right: 0,
|
|
64
|
+
bottom: 20,
|
|
65
|
+
height: 40,
|
|
66
|
+
},
|
|
67
|
+
footer: {
|
|
68
|
+
width: "100%",
|
|
69
|
+
height: 56,
|
|
70
|
+
flexDirection: "row",
|
|
71
|
+
justifyContent: "space-between",
|
|
72
|
+
padding: 20,
|
|
73
|
+
paddingTop: 0,
|
|
74
|
+
},
|
|
75
|
+
footerText: {
|
|
76
|
+
borderTopWidth: 0.5,
|
|
77
|
+
borderTopColor: themeColor.Separator,
|
|
78
|
+
padding: 20,
|
|
79
|
+
paddingBottom: 6,
|
|
80
|
+
paddingTop: 6,
|
|
81
|
+
},
|
|
82
|
+
footerHorizontal: {
|
|
83
|
+
flexDirection: "row",
|
|
84
|
+
},
|
|
85
|
+
footerVertical: {
|
|
86
|
+
flexDirection: "column-reverse",
|
|
87
|
+
justifyContent: "center",
|
|
88
|
+
alignItems: "center",
|
|
89
|
+
height: 100,
|
|
90
|
+
},
|
|
91
|
+
button: {
|
|
92
|
+
flex: 1,
|
|
93
|
+
width: "100%",
|
|
94
|
+
margin: 0,
|
|
95
|
+
height: 36,
|
|
96
|
+
},
|
|
97
|
+
dividerBox: {
|
|
98
|
+
marginTop: 5,
|
|
99
|
+
},
|
|
100
|
+
confirmButton: {
|
|
101
|
+
flex: 1,
|
|
102
|
+
margin: 0,
|
|
103
|
+
marginLeft: 10,
|
|
104
|
+
width: "100%",
|
|
105
|
+
height: 36,
|
|
106
|
+
},
|
|
107
|
+
verButton: {
|
|
108
|
+
flex: 1,
|
|
109
|
+
width: "100%",
|
|
110
|
+
margin: 0,
|
|
111
|
+
marginTop: 10,
|
|
112
|
+
height: 36,
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
return styles;
|
|
116
|
+
};
|