react-ui-basics 0.0.177 → 0.0.179

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-ui-basics",
3
- "version": "0.0.177",
3
+ "version": "0.0.179",
4
4
  "description": "",
5
5
  "module": "index.js",
6
6
  "_main": "index.cjs.js",
package/src/DateTools.ts CHANGED
@@ -17,6 +17,9 @@ export const min = (a: Date, b: Date) => {
17
17
  return timeOf(a) < timeOf(b) ? a : b;
18
18
  };
19
19
 
20
+ // todo: add formatter base on
21
+ //https://stevenlevithan.com/assets/misc/date.format.js
22
+
20
23
  export class TimeUnit {
21
24
  static MILLISECOND = new TimeUnit('Milliseconds');
22
25
  static SECOND = new TimeUnit('Seconds');
package/src/Table.tsx CHANGED
@@ -29,7 +29,7 @@ export interface RowProps<T> {
29
29
  cancelEditing: () => void,
30
30
  onFinishEditing: () => void,
31
31
  handleInputChange: (e: ChangeEvent) => void,
32
- setValue: (v: any) => void,
32
+ setValue: (v: any, t: T, field: String) => void,
33
33
  setEditing: (t: T, i: number, value?: any) => void,
34
34
  onMouseDown?: (e: SyntheticEvent, row: number, column: number) => void,
35
35
  onMouseUp?: (e: SyntheticEvent, row: number, column: number) => void,
@@ -147,8 +147,8 @@ class Table<T> extends Component<TableProps<T>, TableState<T>> {
147
147
  };
148
148
  this.finishEditing = onFinishEditing
149
149
 
150
- const setValue = (value) => {
151
- editingState({...editingState(), value}, onFinishEditing)
150
+ const setValue = (value, item, field) => {
151
+ editingState({item, field, value}, onFinishEditing)
152
152
  };
153
153
 
154
154
 
@@ -332,8 +332,12 @@ class Row<T> extends PureComponent<RowProps<T>> {
332
332
  selectedMode={'inline'}
333
333
  selectedComponent={(column as TableColumnSelect).editorSelectedComponent}
334
334
  mode={(column as TableColumnSelect).multiSelect ? MODE_MULTIPLE_MINI : MODE_DEFAULT}
335
- onChange={(column as TableColumnSelect).multiSelect && ((column as TableColumnSelect).onSelect ? (value => setValue((column as TableColumnSelect).onSelect(value))) : setValue)}
336
- onSelect={!(column as TableColumnSelect).multiSelect && ((column as TableColumnSelect).onSelect ? (value => setValue((column as TableColumnSelect).onSelect(value))) : setValue)}
335
+ onChange={(column as TableColumnSelect).multiSelect && ((column as TableColumnSelect).onSelect ? (value => {
336
+ setValue((column as TableColumnSelect).onSelect(value), item, column.field);
337
+ }) : value => setValue(value, item, column.field))}
338
+ onSelect={!(column as TableColumnSelect).multiSelect && ((column as TableColumnSelect).onSelect ? (value => {
339
+ setValue((column as TableColumnSelect).onSelect(value), item, column.field);
340
+ }) : value => setValue(value, item, column.field))}
337
341
  childComponent={(column as TableColumnSelect).editorChildCompononent}
338
342
  onCancel={cancelEditing}
339
343
  prefilter={(column as TableColumnSelect).prefilter}
@@ -343,7 +347,7 @@ class Row<T> extends PureComponent<RowProps<T>> {
343
347
  <Switch onClick={e => {
344
348
  stopPropagation(e);
345
349
  preventDefault(e);
346
- setValue(!value)
350
+ setValue(!value, item, column.field)
347
351
  }} value={value}/>
348
352
  )}
349
353
  {displayEditor && isFunction(column.editor)
package/src/Tabs.css ADDED
@@ -0,0 +1,65 @@
1
+ .Tabs {
2
+ display: block;
3
+ padding: 16px;
4
+ background: #fff;
5
+ }
6
+ .Tabs .visible {
7
+ position: relative;
8
+ opacity: 1;
9
+ height: auto;
10
+ transition: opacity 0.5s ease-out 0.25s;
11
+ }
12
+ .Tabs .hidden {
13
+ left: 0;
14
+ top: 0;
15
+ position: absolute;
16
+ opacity: 0;
17
+ transition: opacity 0.25s ease-out 0s, transform 1ms linear 0.25s;
18
+ transform: scale(0);
19
+ }
20
+ .Tabs .contents {
21
+ position: relative;
22
+ }
23
+ .Tabs .selector {
24
+ padding: 0;
25
+ margin: 0;
26
+ margin-bottom: 10px;
27
+ display: flex;
28
+ flex-flow: row nowrap;
29
+ position: relative;
30
+ }
31
+ .Tabs .selector .tab {
32
+ display: block;
33
+ height: 32px;
34
+ line-height: 32px;
35
+ padding: 0px 16px;
36
+ text-align: center;
37
+ background: #fff;
38
+ font-weight: bold;
39
+ text-decoration: none;
40
+ color: black;
41
+ font-size: 14px;
42
+ white-space: nowrap;
43
+ }
44
+ .Tabs .selector .tab.active {
45
+ color: #2196F3;
46
+ }
47
+ .Tabs .selector a:first-child {
48
+ border-top-left-radius: 2px;
49
+ }
50
+ .Tabs .selector a:last-of-type {
51
+ border-top-right-radius: 2px;
52
+ }
53
+ .Tabs .highlighter {
54
+ position: absolute;
55
+ z-index: 10;
56
+ bottom: 0;
57
+ height: 2px;
58
+ background: #2196F3;
59
+ width: 1px;
60
+ transform: translateX(0);
61
+ transform-origin: top left;
62
+ display: block;
63
+ left: 0;
64
+ transition: transform 0.23s ease-out;
65
+ }
package/src/Tabs.scss ADDED
@@ -0,0 +1,77 @@
1
+ @import "./global.scss";
2
+
3
+ .Tabs {
4
+ $main-size: 16px;
5
+
6
+ display: block;
7
+ padding: $main-size;
8
+ background: #fff;
9
+
10
+ .visible {
11
+ position: relative;
12
+ opacity: 1;
13
+ height: auto;
14
+ transition: opacity .5s ease-out 0.25s;
15
+ }
16
+ .hidden {
17
+ left: 0;
18
+ top: 0;
19
+ position: absolute;
20
+ opacity: 0;
21
+ transition: opacity .25s ease-out 0s, transform 1ms linear 0.25s;
22
+ transform: scale(0);
23
+ }
24
+
25
+ .contents {
26
+ position: relative;
27
+ }
28
+
29
+ .selector {
30
+ padding: 0;
31
+ margin: 0;
32
+ margin-bottom: 10px;
33
+ display: flex;
34
+ flex-flow: row nowrap;
35
+ position: relative;
36
+
37
+ .tab {
38
+ display: block;
39
+ height: $main-size*2;
40
+ line-height: $main-size*2;
41
+ padding: 0px 16px;
42
+ text-align: center;
43
+ background: #fff;
44
+ font-weight: bold;
45
+ text-decoration: none;
46
+ color: black;
47
+ font-size: 14px;
48
+ white-space: nowrap;
49
+
50
+ &.active {
51
+ color: $colorBlue;
52
+ }
53
+ }
54
+
55
+ a:first-child {
56
+ border-top-left-radius: 2px;
57
+ }
58
+ a:last-of-type {
59
+ border-top-right-radius: 2px;
60
+ }
61
+ }
62
+
63
+ .highlighter {
64
+ position: absolute;
65
+ z-index: 10;
66
+ bottom: 0;
67
+ height: 2px;
68
+ background: $colorBlue;
69
+ width: 1px;
70
+ transform: translateX(0);
71
+ transform-origin: top left;
72
+ display: block;
73
+ left: 0;
74
+ transition: transform .23s ease-out;
75
+ }
76
+
77
+ }
package/src/Tabs.tsx ADDED
@@ -0,0 +1,63 @@
1
+ import React, {PureComponent} from "react";
2
+ import "./Tabs.css";
3
+ import {classNames} from "./Tools";
4
+
5
+ export interface Tab {
6
+ label: string | JSX.Element
7
+ className?: string
8
+ renderer: (active: boolean) => JSX.Element
9
+ }
10
+
11
+ export interface TabsProps {
12
+ tabs: Tab[]
13
+ }
14
+
15
+ interface TabsState {
16
+ active: number,
17
+ highlighterPosition: number,
18
+ highlighterWidth: number,
19
+ }
20
+
21
+ class Tabs extends PureComponent<TabsProps, TabsState> {
22
+ private selector: HTMLDivElement;
23
+
24
+ render() {
25
+ const {tabs} = this.props;
26
+ const {active = 0, highlighterPosition = 0, highlighterWidth = 0} = this.state || {};
27
+ return (<div className="Tabs">
28
+ <div className="selector" ref={el => this.selector = el}>
29
+ {tabs.map((tab, i) => <a key={i}
30
+ className={classNames(`tab `, i === active && 'active', tab.className)}
31
+ href="#"
32
+ onClick={this.openTab}>
33
+ {tab.label}
34
+ </a>)}
35
+ <span className="highlighter" style={{transform: `translateX(${highlighterPosition}px) scale(${highlighterWidth},1)`}}/>
36
+ </div>
37
+ <div className="contents">
38
+ {tabs.map((tab, i) => <div key={i} className={`content ${i === active ? 'visible' : 'hidden'}`}>{tab.renderer(i === active)}</div>)}
39
+ </div>
40
+ </div>
41
+ );
42
+ }
43
+
44
+ openTab = (e) => {
45
+ e.preventDefault();
46
+ let i = 0;
47
+ let child = e.target;
48
+ while ((child = child.previousSibling) != null) i++;
49
+
50
+ this.setState({active: i, highlighterPosition: e.target.offsetLeft, highlighterWidth: e.target.offsetWidth});
51
+ };
52
+
53
+ componentDidMount() {
54
+ const selected = this.selector.childNodes[0] as HTMLElement;
55
+ this.setState({active: 0, highlighterPosition: selected.offsetLeft, highlighterWidth: selected.offsetWidth});
56
+ }
57
+ }
58
+
59
+ export default Tabs;
60
+
61
+
62
+
63
+