わずか数ステップで動的ダッシュボード機能を実現
「Thousands of People, Thousands of Faces」のB面でほぼ使われている、ダッシュボード+ウィジェットのカスタマイズニーズを解決します。
わずか数ステップで動的なダッシュボード機能を実現
「数千人」のダッシュボード + ウィジェットのカスタマイズ ニーズを解決します。
https://github.com/yuanguandong/react-dashboard-pro
https://yuanguandong.github.io/react-dashboard-pro/
npm i react-dashboard-pro -S
npm i widgets-cli -D
npx widgets-cli
https://yuanguandong.github.io/react-widgets/
import React , { useState } from 'react' ;
import type { LayoutsIF } from 'react-dashboard-pro' ;
import Dashboard from 'react-dashboard-pro' ;
import allWidgets from '../widgets' ;
export default ( ) => {
const [ layout , setLayout ] = useState < LayoutsIF > ( [ ] ) ;
const onLayoutChange = ( layout : LayoutsIF ) => {
setLayout ( layout ) ;
} ;
return (
< Dashboard
widgets = { allWidgets }
onLayoutChange = { onLayoutChange }
layout = { layout }
/>
) ;
} ;
財産 | 説明 | タイプ | デフォルト値 | 必須 |
---|---|---|---|---|
ウィジェット | アプレット オブジェクトのオプションのコレクション | { [キー: 文字列]:ウィジェット} | 真実 | |
編集モード | ステータスを編集するかどうか | ブール値 | 間違い | 間違い |
デフォルトレイアウト | デフォルトのレイアウト | レイアウト項目[] | [] | 間違い |
ウィジェットラップクラス名 | ウィジェットコンテナクラス名 | 弦 | 間違い | |
ウィジェットラップスタイル | ウィジェットコンテナスタイル | React.CSSProperties | 間違い | |
レイアウト | レイアウトデータ | レイアウト項目[] | ヌル | 間違い |
最小高さ | 最低高さ | 番号 | 300 | 間違い |
maxWidgetLength | 現在のダッシュボードに追加できるウィジェットの最大数 | 番号 | 20 | 間違い |
ツールバー | デフォルトのツールバーを表示するかどうか | {タイプ: '左' | '上' | '下' | | 真実 | 間違い |
ストレージキー | ローカルに保存された一意の識別子 | ブール値 | 'デフォルト' | 間違い |
onLayoutChange | レイアウト変更コールバック | (レイアウト: LayoutsIF) => void | 間違い | |
オンリセット | クリアボタンのコールバック | (dirtyCurrentLayout: LayoutsIF、currentLayout: LayoutItem) => void | 間違い | |
onRemoveウィジェット | アプレットのコールバックを削除する | (ウィジェット: WidgetIF、dirtyCurrentLayout: LayoutsIF、currentLayout: LayoutsIF) => void | 間違い | |
onAddWidget | ミニプログラムにコールバックを追加する | (ウィジェット: WidgetIF、dirtyCurrentLayout: LayoutsIF、currentLayout: LayoutsIF) => void | 間違い | |
リロード時 | 更新ボタンのコールバック | (currentLayout: LayoutsIF) => void | 間違い | |
キャンセル編集 | 編集コールバックのキャンセル | (dirtyCurrentLayout: LayoutsIF,currentLayout: LayoutItem) => void | 間違い | |
編集時 | 編集コールバックを入力します | (currentLayout: LayoutsIF) => void | 間違い | |
保存中 | 保存ボタンのコールバック | (currentLayout: LayoutsIF) => void | 間違い | |
onRevert | 復元ボタンのコールバック | (dirtyCurrentLayout: LayoutsIF、currentLayout: LayoutItem) => void | 間違い |
ウィジェットは任意の開いたコンテンツにすることができ、自由に展開できます。ウィジェットを記述するオブジェクトの形式は次のとおりです。
デフォルトのウィジェットは基本的に antd 以下に依存します。依存関係のインストールに注意してください。
財産 | 説明 | タイプ | デフォルト値 | 必須 |
---|---|---|---|---|
名前 | ミニプログラム名 | 弦 | 真実 | |
説明 | ミニプログラムの説明 | 弦 | 真実 | |
タグ | ミニプログラムセレクターの分類基準として使用されるタグ | 弦[] | 真実 | |
成分 | ミニプログラムコンポーネント | コンポーネント|機能コンポーネント | 真実 | |
構成コンポーネント | ミニプログラムに対応する構成部品 | コンポーネント | 関数コンポーネント | | 真実 | |
最大長さ | このアプレットを現在のダッシュボードに追加できる最大回数 | 番号 | 真実 | |
スナップショット | ミニプログラムのスナップショット画像。ミニプログラムセレクターの表示に使用されます。 | 画像ビットマップソース | 真実 | |
アイコン | ミニ プログラム アイコン。ミニ プログラム セレクターの表示に使用されます。 | 反応要素 | 真実 | |
アイコン背景 | ミニ プログラム アイコンの背景、ミニ プログラム セレクターの表示に使用されます。 | 弦 | 真実 | |
サイズ | ミニプログラムのサイズ情報 | {デフォルト幅: 数値;デフォルト高さ: 数値;最大幅: 数値;最大高さ: 数値;最小幅: 数値;最小高さ: 数値} | 真実 |
// todo/index.tsx
import { CalendarOutlined } from '@ant-design/icons' ;
import Panel from './component' ;
import snapShot from './snapshot.png' ;
export default {
name : 'Todo' ,
description : 'todo list' ,
tags : [ 'all' , 'list' ] ,
component : Panel ,
configComponent : null ,
maxLength : 2 ,
snapShot ,
icon : < CalendarOutlined /> ,
iconBackground : 'linear-gradient(-20deg, #b721ff 0%, #21d4fd 100%)' ,
size : {
defaultWidth : 3 ,
defaultHeight : 11 ,
maxWidth : 12 ,
maxHeight : 16 ,
minWidth : 2 ,
minHeight : 4 ,
} ,
}
// **/**.index ……
// widgets/index.tsx
import clock from './clock' ;
import column from './column' ;
import guide from './guide' ;
import popular from './popular' ;
import ring from './ring' ;
import todo from './todo' ;
export default { clock , guide , popular , todo , column , ring } ;
一般に、レイアウト情報は、リアルタイムでダッシュボード レイアウト データを取得する場合 (たとえば、デフォルト レイアウトを設定する場合)、シリアル化して文字列形式で保存するだけで十分です。ダッシュボードで、ショートカット キー Ctrl+Shift+C を押してレイアウト データをクリップボードにコピーすると、コンソール パネルにもレイアウト データが印刷されます。
財産 | 説明 | タイプ | デフォルト値 | 必須 |
---|---|---|---|---|
私 | ミニ プログラムの一意の識別子で始まり、その後にアンダースコアが続く一意の識別子 (「widgetKey-1234567」など) | 弦 | 真実 | |
w | 横コピー枚数 計12枚 | 番号 | 真実 | |
h | 高さのコピー枚数、1コピーは約30px | 番号 | 真実 | |
× | 横置き、計12部 | 番号 | 真実 | |
y | 縦位置、1部は約30px | 番号 | 真実 | |
分W | 最小幅 | 番号 | 真実 | |
最大W | 最大幅 | 番号 | 真実 | |
h | 最低高さ | 番号 | 真実 | |
最大H | 最大高さ | 番号 | 真実 |
export default [
{
w : 3 ,
h : 16 ,
x : 0 ,
y : 0 ,
i : 'Popular-81735522335293475546087951289435' ,
} ,
{
w : 3 ,
h : 11 ,
x : 3 ,
y : 5 ,
i : 'Todo-53084247679600442035440807237732' ,
}
]
コンポーネントのインスタンスは ref を通じて取得できます。一部のメソッドと dom オブジェクトはインスタンス オブジェクトにマウントされており、カスタマイズされた Toolbar と WidgetSelector を簡単に拡張できます。
財産 | 説明 | タイプ |
---|---|---|
ドム | DOMオブジェクト | HTMLDiv要素 |
ウィジェットを追加 | アプレットの追加 | (ウィジェット)=>無効 |
ウィジェットを削除する | アプレットの削除 | (i:widgetKey)=>void |
リロード | リフレッシュする | ()=>空 |
編集 | 編集を入力してください | ()=>空 |
キャンセル編集 | 編集をキャンセルする | ()=>空 |
元に戻す | リセット | ()=>空 |
保存 | 保存 | ()=>空 |
import React , { useRef } from 'react' ;
import Dashboard from 'react-dashboard-pro' ;
import allWidgets from '../widgets' ;
export default ( ) => {
const ref = useRef ( )
const addWidget = ( ) => {
ref . current . addWidget ( 'Todo-1234567' )
}
return ( < >
< Dashboard
ref = { ref }
widgets = { allWidgets }
/>
< button onClick = { addWidget } >新增</ button >
</ >
) ;
} ;
✅ 構成パネル
☑️ギャップ
☑️ モダンなテーマ
☑️ ダークテーマ
☑️その他のウィジェット
✅ ウィジェット-cli
☑️国際化
役に立ったと思われる場合は、星を付けてください。