Giter VIP home page Giter VIP logo

s2's Introduction

简体中文 | English

S2

开箱即用的多维可视分析表格。

npm Version Version ci test status Coverage release-date

npm bundle size Discussions issues-helper License: MIT@AntV

S2 是 AntV 在多维交叉分析表格领域的解决方案,完全基于数据驱动的方式。通过提供底层能力库,基础组件,业务场景组件以及自由扩展的能力,让开发者基于自身场景自由选择,既能开箱即用,又能自由发挥。

🏠 官网

homepage

✨ 特性

  1. 多维交叉分析: 告别单一分析维度,全面拥抱任意维度的自由组合分析。
  2. 高性能:能支持全量百万数据下 <8s 渲染,也能通过局部下钻来实现秒级渲染。
  3. 高扩展性:支持任意的自定义扩展(包括但不局限于布局,样式,交互,数据 hook 流等)。
  4. 开箱即用:提供不同分析场景下开箱即用的 React, Vue3 版本表组件及配套分析组件,只需要简单的配置即可轻松实现复杂场景的表渲染。
  5. 可交互:支持丰富的交互形式(单选、圈选、行选、列选、冻结行头、宽高拖拽,自定义交互等)

📦 安装

$ npm install @antv/s2 --save
# yarn add @antv/s2 --save
# pnpm install @antv/s2 --save

🔨 使用

1. 数据准备

s2DataConfig
const s2DataConfig = {
  fields: {
    rows: ['province', 'city'],
    columns: ['type'],
    values: ['price'],
  },
  data: [
     {
      province: '浙江',
      city: '杭州',
      type: '笔',
      price: '1',
    },
    {
      province: '浙江',
      city: '杭州',
      type: '纸张',
      price: '2',
    },
    {
      province: '浙江',
      city: '舟山',
      type: '笔',
      price: '17',
    },
    {
      province: '浙江',
      city: '舟山',
      type: '纸张',
      price: '0.5',
    },
    {
      province: '吉林',
      city: '长春',
      type: '笔',
      price: '8',
    },
    {
      province: '吉林',
      city: '白山',
      type: '笔',
      price: '9',
    },
    {
      province: '吉林',
      city: '长春',
      type: ' 纸张',
      price: '3',
    },
    {
      province: '吉林',
      city: '白山',
      type: '纸张',
      price: '1',
    },
  ],
};

2. 配置项准备

const s2Options = {
  width: 600,
  height: 600,
}

3. 渲染

<div id="container"></div>
import { PivotSheet } from '@antv/s2';

const container = document.getElementById('container');

const s2 = new PivotSheet(container, s2DataConfig, s2Options);

s2.render();

4. 结果

result

📦 版本

Package Latest Beta Alpha Next Size Download
@antv/s2 latest beta alpha next size download
@antv/s2-react latest beta alpha next size download
@antv/s2-vue latest beta alpha next size download

👤 作者

@AntV

🤝 参与贡献

S2 使用 pnpm 作为包管理器

git clone [email protected]:antvis/S2.git

cd S2

# 安装依赖
pnpm install # 或者 pnpm bootstrap

# 打包
pnpm build

# 调试 s2-core
pnpm core:start

# 调试 s2-react
pnpm react:playground

# 调试 s2-vue
pnpm vue:playground

# 单元测试
pnpm test

# 代码风格和类型检测
pnpm lint

# 本地启动官网
pnpm site:start

👁️ 洞察

Alt

📧 反馈问题

有任何问题请严格按照模版 提交 Issue 或在 Discussions 提问。

👬 Contributors

https://github.com/antvis/s2/graphs/contributors

📄 License

MIT@AntV

s2's People

Contributors

1wkk avatar ai-qing-hai avatar alexzjt avatar bobby-ai avatar edison-tianhe avatar esorakouki avatar gaofuhong avatar gehaiyi avatar github-actions[bot] avatar hemisu avatar hexf00 avatar hustcc avatar lcx-seima avatar lijinke666 avatar luuuan avatar noobnotn avatar qubaomingg avatar serializedowen avatar stone-lyl avatar wbbhacker avatar wjgogogo avatar wuhaiyang avatar xiaochong444 avatar xingwanying avatar xrkffgg avatar xxxxz-zhang avatar yangzhanmei avatar yardwill avatar zeyongtsai avatar zxc0328 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

s2's Issues

组件层改造

  • 组件层抽离到单独的 子包 @s2/react

    • 交叉表
    • 明细表
  • core 层 透出 event 整理, 是否需要全量透出到 组件层?

  • 组件层公共hook抽取

框选的逻辑是不是可以优化下

image

image

鼠标拖动框选多个cell时,这样计算会比较耗费性能,最好是计算startCell和endCell的index,然后再处理数据。

另外selectedCells是不是用二维数组表示更好

明细表 Select 交互需求和实现讨论

目前明细表(Dataphin)这边有几个需求,和 Cell 选中态相关:

  1. 通过 API 设置某个格子为选中态
  2. 如果格子不在可视区,可以移动滚动位置让格子可见,类似一个 focus 的效果。
  3. 选中全部格子的能力(常用的 Command + A 然后 Command + C 复制的交互)
  4. 进阶需求:选中一个格子之后按住 Command 多选,全选后按住 Command 反选
  5. 选中不可见区域格子的能力,比如现在冻结行的情况下,滚动一段,然后从冻结的行往下框选,中间一段不可见的行是不会被选中的

这些零碎的需求,总结一下,对能力上的要求有两方面:

  • Select 状态下,可以指定任意的格子被选中,不管是否可见
  • 新增一个 Select All 的状态,可以指定哪些格子不被选中(因为全选情况下去存储不选中的格子空间占用更小)

这都要求目前 InteractionStateInfo 中增加一个表示 被选中/未选中 Cell Id 的数组。和现在直接存储 Cell 实例相比,存储 id 让当前不可见,没有 Cell 实例的格子也可以被选中。

在 Cell 的 update 方法中,在 Select 状态下,可以用 id 去匹配是否被选中。

去除standardData相关逻辑和参数

image

目前的数据转化逻辑存在standardTransform和multiValueTransform两种模式。理论上来说底表只需要确定好一种规范,让使用者遵守即可,需要看下是否有必要保留两种情况,如果无可以将相关逻辑和参数都移除

v 0.1.0 TODO List

💥 基础第一版本交叉表 (due:2021/03/31)

------------------ todo list -----------------------------

  • ✨ feat: AntV主题官网接入 @缨缨

  • 🔧 chore: 工程化(升级webpack5)@缨缨

  • 🔧 chore: 升级g4.0 @哦豁

  • ♻️ refactor: tooltip重构 @蒺藜

  • ♻️ refactor: interaction重构 @茂松

  • ✨ feat: Scrollbar整体优化 @卿珂

  • ✨ feat: 高清屏模糊优化 (多屏切换, 页面缩放) @卿珂

✨ feat: 列宽的适配规则(自适应+计算方式) @卿珂

  • ✨ feat: 做减法 - 去掉自定义行头的设计(后续版本考虑) @哦豁

  • ✨ feat: 下钻组件 @缨缨

  • ✨ feat: 导出组件 @缨缨

  • ✨ feat: 分页组件 @缨缨

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.