diff --git a/packages/d3-state-visualizer/examples/tree/index.js b/packages/d3-state-visualizer/examples/tree/index.ts similarity index 100% rename from packages/d3-state-visualizer/examples/tree/index.js rename to packages/d3-state-visualizer/examples/tree/index.ts diff --git a/packages/d3-state-visualizer/examples/tree/package.json b/packages/d3-state-visualizer/examples/tree/package.json index 43a24992..56170c6b 100644 --- a/packages/d3-state-visualizer/examples/tree/package.json +++ b/packages/d3-state-visualizer/examples/tree/package.json @@ -2,8 +2,17 @@ "name": "d3-state-visualizer-tree-example", "version": "0.0.2", "description": "Visualize your app state as a tree", - "private": true, - "main": "index.js", + "keywords": [ + "d3", + "state", + "store", + "visualization" + ], + "homepage": "https://github.com/reduxjs/redux-devtools/tree/master/packages/d3-state-visualizer/examples/tree", + "bugs": { + "url": "https://github.com/reduxjs/redux-devtools/issues" + }, + "license": "MIT", "scripts": { "start": "webpack-dev-server --open" }, @@ -11,25 +20,9 @@ "type": "git", "url": "https://github.com/reduxjs/redux-devtools.git" }, - "keywords": [ - "d3", - "state", - "store", - "visualization" - ], - "license": "MIT", - "bugs": { - "url": "https://github.com/reduxjs/redux-devtools/issues" - }, - "homepage": "https://github.com/reduxjs/redux-devtools", "dependencies": { "d3-state-visualizer": "^1.3.4", "map2tree": "^1.4.2" }, - "devDependencies": { - "@babel/core": "^7.11.1", - "babel-loader": "^8.1.0", - "webpack": "^4.44.1", - "webpack-dev-server": "^3.11.0" - } + "private": true } diff --git a/packages/d3-state-visualizer/examples/tree/webpack.config.js b/packages/d3-state-visualizer/examples/tree/webpack.config.ts similarity index 76% rename from packages/d3-state-visualizer/examples/tree/webpack.config.js rename to packages/d3-state-visualizer/examples/tree/webpack.config.ts index 9c710375..54df34db 100644 --- a/packages/d3-state-visualizer/examples/tree/webpack.config.js +++ b/packages/d3-state-visualizer/examples/tree/webpack.config.ts @@ -1,9 +1,8 @@ -var path = require('path'); -var webpack = require('webpack'); +import * as path from 'path'; +import * as webpack from 'webpack'; -module.exports = { +export default { mode: process.env.NODE_ENV === 'production' ? 'production' : 'development', - devtool: 'eval-source-map', entry: [ 'webpack-dev-server/client?http://localhost:3000', 'webpack/hot/only-dev-server', @@ -14,23 +13,24 @@ module.exports = { filename: 'bundle.js', publicPath: '/static/', }, - plugins: [new webpack.HotModuleReplacementPlugin()], - resolve: { - extensions: ['.js'], - }, module: { rules: [ { - test: /\.js$/, - loaders: ['babel-loader'], + test: /\.(js|ts)$/, + loaders: 'babel-loader', exclude: /node_modules/, include: __dirname, }, ], }, + resolve: { + extensions: ['.js', '.jsx', '.ts', '.tsx'], + }, + plugins: [new webpack.HotModuleReplacementPlugin()], devServer: { historyApiFallback: true, hot: true, port: 3000, }, + devtool: 'eval-source-map', }; diff --git a/packages/d3-state-visualizer/src/charts/tree/tree.ts b/packages/d3-state-visualizer/src/charts/tree/tree.ts index 246d2df8..e7eb7ac5 100644 --- a/packages/d3-state-visualizer/src/charts/tree/tree.ts +++ b/packages/d3-state-visualizer/src/charts/tree/tree.ts @@ -10,6 +10,44 @@ import { } from './utils'; import d3tooltip from 'd3tooltip'; +interface InputOptions { + // eslint-disable-next-line @typescript-eslint/ban-types + state?: {}; + // eslint-disable-next-line @typescript-eslint/ban-types + tree?: NodeWithId | {}; + + rootKeyName: string; + pushMethod: 'push' | 'unshift'; + id: string; + style: { [key: string]: Primitive }; + size: number; + aspectRatio: number; + initialZoom: number; + margin: { + top: number; + right: number; + bottom: number; + left: number; + }; + isSorted: boolean; + heightBetweenNodesCoeff: number; + widthBetweenNodesCoeff: number; + transitionDuration: number; + blinkDuration: number; + onClickText: () => void; + tooltipOptions: { + disabled?: boolean; + left?: number | undefined; + top?: number | undefined; + offset?: { + left: number; + top: number; + }; + style?: { [key: string]: Primitive } | undefined; + indentationSize?: number; + }; +} + interface Options { // eslint-disable-next-line @typescript-eslint/ban-types state?: {}; @@ -63,6 +101,7 @@ interface Options { top: number; }; style: { [key: string]: Primitive } | undefined; + indentationSize?: number; }; } @@ -141,7 +180,10 @@ interface NodePosition { y: number | undefined; } -export default function (DOMNode: HTMLElement, options: Partial = {}) { +export default function ( + DOMNode: HTMLElement, + options: Partial = {} +) { const { id, style, @@ -160,7 +202,7 @@ export default function (DOMNode: HTMLElement, options: Partial = {}) { tree, tooltipOptions, onClickText, - } = deepmerge(defaultOptions, options); + } = deepmerge(defaultOptions, options) as Options; const width = size - margin.left - margin.right; const height = size * aspectRatio - margin.top - margin.bottom; @@ -363,13 +405,7 @@ export default function (DOMNode: HTMLElement, options: Partial = {}) { if (!tooltipOptions.disabled) { nodeEnter.call( d3tooltip(d3, 'tooltip', { ...tooltipOptions, root }) - .text((d, i) => - getTooltipString( - d, - i, - (tooltipOptions as unknown) as { indentationSize: number } - ) - ) + .text((d, i) => getTooltipString(d, i, tooltipOptions)) .style(tooltipOptions.style) ); }