Skip to content

Commit fd6e5bd

Browse files
committed
feat: add first impl
1 parent 93821e7 commit fd6e5bd

File tree

4 files changed

+54
-51
lines changed

4 files changed

+54
-51
lines changed

packages/example/src/App.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,15 @@ function App() {
88
Build Time: {BUILD_TIME}
99
</div>
1010
<h1>react-block-steps</h1>
11-
<ReactBlockSteps />
12-
<button className='btn btn-info'>Button</button>
11+
<div className="y-3">
12+
<ReactBlockSteps value={1} activeClassName="!bg-red-600 text-white"
13+
itemClassName="rounded-full fcc bg-red-300 size-5 text-xs" className="fcc x-2 bg-gray-200" />
14+
<ReactBlockSteps value={2} activeClassName="!bg-red-600 text-white"
15+
itemClassName="rounded-full fcc bg-red-300 size-5 text-xs" className="fcc x-2 bg-gray-200" />
16+
<ReactBlockSteps value={10} activeClassName="!bg-red-600 text-white"
17+
itemClassName="rounded-full fcc bg-red-300 size-5 text-xs" className="fcc x-2 bg-gray-200" />
18+
</div>
19+
<button className="btn btn-info">Button</button>
1320
</div>
1421
);
1522
}

packages/lib/package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
"@types/react": "^18.2.28",
2222
"@types/react-dom": "^18.2.13",
2323
"autoprefixer": "^10.4.16",
24-
"cssnano": "^6.0.1",
2524
"classnames": "^2.5.1",
25+
"cssnano": "^6.0.1",
2626
"react": "^18.2.0",
2727
"react-dom": "^18.2.0",
2828
"tsup": "^7.2.0",
@@ -31,5 +31,8 @@
3131
"publishConfig": {
3232
"access": "public",
3333
"registry": "https://registry.npmjs.org"
34+
},
35+
"dependencies": {
36+
"@jswork/react-list": "^1.2.7"
3437
}
3538
}

packages/lib/src/index.cls.tsx

Lines changed: 0 additions & 32 deletions
This file was deleted.

packages/lib/src/index.tsx

Lines changed: 41 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,47 @@
1-
import React, { HTMLAttributes } from 'react';
1+
// import noop from '@jswork/noop';
22
import cx from 'classnames';
3+
import React, { Component, HTMLAttributes } from 'react';
4+
import ReactList, { ReactListProps } from '@jswork/react-list';
35

46
const CLASS_NAME = 'react-block-steps';
5-
6-
export type IProps = {
7-
/**
8-
* Additional CSS class names to apply to the component.
9-
* @default ''
10-
*/
11-
className?: string;
12-
/**
13-
* The content of the component.
14-
* @default null
15-
*/
16-
children?: React.ReactNode;
7+
// const uuid = () => Math.random().toString(36).substring(2, 9);
8+
export type ReactBlockStepsProps = {
9+
value: number;
10+
size: number;
11+
withIndex?: boolean;
12+
itemClassName?: string;
13+
activeClassName?: string;
14+
listProps?: Omit<ReactListProps, 'items' | 'template'>;
1715
} & HTMLAttributes<HTMLDivElement>;
1816

19-
export default function ReactBlockSteps(props: IProps) {
20-
const { className, ...rest } = props;
21-
return <div data-component={CLASS_NAME} className={cx(CLASS_NAME, className)} {...rest} />;
17+
export default class ReactBlockSteps extends Component<ReactBlockStepsProps> {
18+
static displayName = CLASS_NAME;
19+
static version = '__VERSION__';
20+
static defaultProps = {
21+
value: 0,
22+
size: 5,
23+
withIndex: false,
24+
activeClassName: 'is-active',
25+
};
26+
27+
get items() {
28+
const { size } = this.props;
29+
return Array.from({ length: size }, (_, index) => index + 1);
30+
}
31+
32+
handleTemplate = ({ item, index }) => {
33+
const { value, itemClassName, withIndex, activeClassName } = this.props;
34+
const isActive = index < value;
35+
const children = withIndex ? item : null;
36+
return <span key={item} className={cx({ [activeClassName!]: isActive }, itemClassName)}>{children}</span>;
37+
};
38+
39+
render() {
40+
const { className, value, listProps, activeClassName, itemClassName, withIndex, ...rest } = this.props;
41+
return (
42+
<div date-value={value} data-component={CLASS_NAME} className={cx(CLASS_NAME, className)} {...rest}>
43+
<ReactList items={this.items} template={this.handleTemplate} {...listProps} />
44+
</div>
45+
);
46+
}
2247
}

0 commit comments

Comments
 (0)