npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@alicloud/xconsole-rc-dialog2

v1.0.0

Published

Dialog2 - 取缔 Fusion Dialog、Drawer,和以前的 SlidePanel、Confirm 等一切

Downloads

2

Readme

@alicloud/xconsole-rc-dialog2

@alicloud/console-base-rc-dialog 的 XConsole UI 转接。

有了它,Fusion Dialog、SlidePanel 等都可以不需要了。

绝对好用,任何问题联系 @驳是。

简介

引入

XConsole 3 的用户,这样使用:

import {
  Dialog2
} from '@alicloud/xconsole';

非 XConsole 的用户,建议直接使用 @alicloud/console-base-rc-dialog

输出

总的输出是 Dialog2 组件,它上边挂载了一些静态组件、方法和 hook,如下

// 默认输出组件
Dialog2
 ├── AltWrap
 ├── openIndirect
 ├── open
 ├── slide
 ├── slideUp
 ├── alert
 ├── confirm
 ├── prompt
 └── useDialog
// 枚举
Dialog2Mode
Dialog2Size
// 类型
Dialog2IndirectPromise
Dialog2Props
Dialog2AlertProps
Dialog2ConfirmProps
Dialog2PromptProps
Dialog2ButtonProps
Dialog2AlertExtra
Dialog2ConfirmExtra
Dialog2PromptExtra

如何使用

你可以当成组件来使用,但你需要自己控制是否渲染它。通常作为一次性消费品来说,这很不好用。更多的是建议用这边封装好的便捷方法:

  • openIndirect - 高阶用法,用于将多个 Dialog 合并为一个 Dialog 的场景,比如控制台下的 ErrorPrompt 就是用的它
  • open - 打开一个 Dialog,在关闭后返回 Promise,可以指定 Promise 的返回值,也可以用 mode 指定展示模式
  • slide - 右侧抽屉
  • slideUp - 从页面底部出来的抽屉
  • alert - window.alert 的替代,返回 Promise<void>,比只能传对象的 Fusion 好用
  • confirm - window.confirm 的替代,返回 Promise<boolean>,比只能传对象的 Fusion 好用
  • prompt - window.prompt 的替代,返回 Promise<string>,比只能传对象的 Fusion 好用

重点介绍 - useDialog

在 Dialog 的内容组件中,可以通过它获得与 Dialog 交互的能力,可以用来做以下事情:

  • 锁定、解锁 Dialog,使其可以短期无法被关闭
  • 关闭 Dialog(将解决 Promise)
  • 更新 Dialog 的内容、按钮等
  • 强制更新 Dialog,如更新 data 之后需要让 Dialog 重新渲染

FAQ

ok、cancel、onOk、onCancel?

没有,不需要。默认,你只需要写一个 button 的 label 即可,点击后会关掉 Dialog(这解决了你 75% 的工作),你也可以在 buttonsonClick 里处理有关的事情,然后选择是否关闭 Dialog。 总的来说,Dialog 没有 ok 或 cancel 这一说,对它来说,是 buttons,从而也没有 onOk、onCancel,这样的局限性太大了。

可否以组件的形式使用?

当然可以,毫无压力。

内容与 Dialog 如何交互?

内容组件以 props.content 传递给 Dialog,在内容组件中通过 useDialog 可以获得与 Dialog 交互的句柄,useDialog() 得到以下对象:

export interface IContextForContent<R = void, D = TDialogData> {
  data: D; // 存于 dialog 上的自定义数据
  focus(): void; // 触发默认的 focus,比如在 content 发生变化后,可以用它来使 conetnt 中的默认元素获得焦点
  resetScrollTop(): void; // content 发生变化后,可以重置滚动
  lock: TDispatchLock; // 锁住 Dialog,使其无论如何不可能被关闭,`lock(true)` 可以给默认按钮一个 loading 效果
  unlock(): void; // 解锁,lock 后必须 unlock
  update: TDispatchUpdateProps<R, D>; // 更新 Dialog 整体
  updateData: TDispatchUpdateData<D>; // 更新自定义数据,会触发重新 render
  forceUpdate(): void; // 强制重新 render,有的时候需要
  close: TFnCloseWithResult<R>; // 关闭 Dialog,将触发 Promise Resolve
}