Chuyển tới nội dung chính
Phiên bản: 1.9.0

Implementation

Được sử dụng để hiển thị thông tin bổ sung hoặc để người dùng thực hiện một số hành động phụ liên quan đến nội dung chính trên màn hình, tiếp tục sử dụng tiếp một tính năng của ứng dụng

Properties

Sheet

NameTypeDefaultDescription
afterClose() => void

Callback được gọi sau khi sheet được đóng.

autoHeightbooleanfalse

Tự động điều chỉnh chiều cao của sheet theo nội dung.

childrenReact.ReactNode

Nội dung cần được hiển thị bên trong bottom sheet.

classNamestring
contentRefReact.MutableRefObject

Tham chiếu đến phần tử chứa nội dung của sheet trên cây DOM.

defaultSnapPointnumber

Snap point mặc định khi mở sheet. Giá trị được truyền vào dưới dạng index trong mảng snapPoints.

handlerbooleantrue

Sheet handler là một thanh màu đen nằm ngang ở phía trên cùng của sheet, dùng để kéo sheet lên hoặc xuống.

heightstring | number

Chiều cao của sheet. Nếu không thiết lập, sheet sẽ có chiều cao mặc định theo nội dung.

maskbooleantrue

Mask là một lớp overlay màu xám được phủ lên các thành phần bên dưới hộp thoại của picker, ngăn không cho người dùng tương tác với các nội dung đó và tập trung vào hộp thoại được mở.

maskClassNamestring

CSS class của mask.

maskClosablebooleantrue

Cho phép tự động đóng sheet khi click vào mask.

maskStyleReact.CSSProperties

Inline style của mask.

modalClassNamestring

CSS class của sheet.

modalStyleReact.CSSProperties

Inline style của sheet.

refSheetRef

Tham chiếu đến sheet.

snapPoints(props: { sheetModalHeight: number }) => number[] | number[]

Khai báo các snap points của sheet. Snap points là các điểm mà tại đó sheet sẽ dừng lại khi người dùng kéo lên hoặc xuống. Số lượng snap points là không giới hạn.

Mỗi snap point có giá trị từ 0 với 1 với 0 là khi sheet hoàn toàn mở và 1 là khi sheet hoàn toàn đóng. Bên cạnh truyền snap point dưới dạng một số cố định, các hàm để tính toán các snap points dựa trên chiều cao của sheet cũng có thể được truyền vào.

Không giới hạn số lượng snap points.

styleReact.CSSProperties
swipeToClosebooleantrue

Cho phép người dùng đóng sheet bằng thao tác vuốt xuống trên nội dung của sheet.

titlestring

Tiêu đề của sheet, hiển thị ở phía trên cùng.

unmountOnClosebooleanfalse

Mặc định khi người dùng đóng sheet, giao diện của nó vẫn còn được render trong DOM và chỉ bị ẩn đi. Thiết lập này cho phép gỡ sheet ra khỏi cây DOM hoàn toàn sau khi đóng.

Thiết lập này có thể giúp giảm bộ nhớ được sử dụng trong trường hợp sheet có nội dung lớn. Tuy nhiên, khi sheet được mở lại, tất cả nội dung sẽ phải render lại từ đầu.

visiblebooleanfalse

Trạng thái mở hay đóng của sheet.

Cần phải sử dụng cùng với onClose để cập nhật lại giá trị của visible khi người dùng yêu cầu đóng sheet, nếu không sheet sẽ không đóng được.

widthstring | number

Chiều rộng của sheet. Nếu không thiết lập, sheet sẽ có chiều rộng mặc định là toàn màn hình.

zIndexnumber

Độ sâu của sheet, dùng để xác định thứ tự hiển thị của sheet đối với các phần tử lơ lửng khác nếu có.

onClose(e: React.SyntheticEvent) => void

Callback được gọi khi người dùng yêu cầu đóng sheet. Cần phải cập nhật lại giá trị của visible nếu có truyền vào trong callback này.

onSnap(snapPoint: number) => void

Callback được gọi khi sheet được snap đến một snap point mới.

Type

SheetRef

NameTypeDefaultDescription
sheetHTMLDivElement

Trỏ đến phần tử của sheet trên cây DOM

snapTo(snapPoint: number) => void

Hàm dùng để snap đến một snap point đã khai báo. Xem thêm về snapPoints của Sheet.

Sheet.Action

NameTypeDefaultDescription
actionsActionButton[] | ActionButton[][]

Mảng thiết lập các nút action. Có thể nhóm các action lại với nhau bằng cách khai báo nhiều mảng action, với các action liên quan nằm trong cùng một mảng.

dividerbooleanfalse

Hiển thị viền phân cách giữa các nút action

groupDividerbooleanfalse

Hiển thị viền phân cách giữa các nhóm action

ActionButton

NameTypeDefaultDescription
closebooleanfalse

Action này chỉ định việc đóng sheet khi được click

dangerbooleanfalse

Hiển thị action dưới dạng nút danger

disabledbooleanfalse

Trạng thái vô hiệu hoá của action.

highLightbooleanfalse

Hiển thị action dưới dạng nút highlight

textstring

Chữ trên nút action.

onClick(e: React.MouseEvent) => void

Callback được gọi khi người dùng click vào action.

Example

import React, { useRef, useState } from "react";
import { Button, Sheet, Text, Box, Page } from "zmp-ui";

export default function Demo() {
  const [sheetVisible, setSheetVisible] = useState(false);
  const [actionSheetVisible, setActionSheetVisible] = useState(false);
  return (
    <Page className="section-container">
      <Text.Title size="small">Bottom Sheet</Text.Title>
      <Box mt={4}>
        <Button
          variant="secondary"
          fullWidth
          onClick={() => {
            setActionSheetVisible(true);
          }}
        >
          Bottom Action Sheet
        </Button>
      </Box>
      <Box mt={4}>
        <Button
          variant="secondary"
          fullWidth
          onClick={() => {
            setSheetVisible(true);
          }}
        >
          Custom Bottom Sheet
        </Button>
      </Box>

      <Sheet
        visible={sheetVisible}
        onClose={() => setSheetVisible(false)}
        autoHeight
        mask
        handler
        swipeToClose
      >
        <Box p={4} className="custom-bottom-sheet" flex flexDirection="column">
          <Box className="bottom-sheet-cover">
            <img alt="Bottom Sheet" src={""} />
          </Box>
          <Box my={4}>
            <Text.Title>
              Cho phép Starbucks Coffee xác định vị trí của bạn
            </Text.Title>
          </Box>
          <Box className="bottom-sheet-body" style={{ overflowY: "auto" }}>
            <Text>
              Starbucks Coffee sẽ sử dụng vị trí của bạn để hỗ trợ giao nhận
              hàng, tìm kiếm dịch vụ, bạn bè quanh bạn, hoặc các dịch vụ liên
              quan đến địa điểm khác.
            </Text>
          </Box>
          <Box flex flexDirection="row" mt={1}>
            <Box style={{ flex: 1 }} pr={1}>
              <Button
                fullWidth
                variant="secondary"
                onClick={() => {
                  setSheetVisible(false);
                }}
              >
                Để sau
              </Button>
            </Box>
            <Box style={{ flex: 1 }} pl={1}>
              <Button
                fullWidth
                onClick={() => {
                  setSheetVisible(false);
                }}
              >
                Cho phép
              </Button>
            </Box>
          </Box>
        </Box>
      </Sheet>

      <Sheet.Actions
        mask
        visible={actionSheetVisible}
        title="This is title, it can be one line or two line"
        onClose={() => setActionSheetVisible(false)}
        swipeToClose
        actions={[
          [
            { text: "Sample Menu", close: true },
            { text: "Sample Menu", close: true },
            {
              text: "Negative Menu",
              danger: true,
              close: true,
            },
          ],
          [{ text: "Cancel", close: true }],
        ]}
      />
    </Page>
  );
}