@propellerads/table 4.9.0 → 5.0.1

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.
@@ -37,50 +37,59 @@ export const getTableProps: GetTableContainerPropsGetter = (userGetter, getter =
37
37
  return getter;
38
38
  };
39
39
 
40
- export const getTableElementProps:
41
- GetTableElementPropsGetter<ElementHeaderFooterPropGetter> = (userGetter, getter = defaultGetter) => {
42
- if (userGetter) {
43
- return (props, meta) => ({
44
- ...getter(props, meta),
45
- ...userGetter(props, meta),
46
- });
47
- }
40
+ export const getTableElementProps: GetTableElementPropsGetter<ElementHeaderFooterPropGetter> = (
41
+ userGetter,
42
+ getter = defaultGetter,
43
+ ) => {
44
+ if (userGetter) {
45
+ return (props, meta) => ({
46
+ ...getter(props, meta),
47
+ ...userGetter(props, meta),
48
+ });
49
+ }
48
50
 
49
- return getter;
50
- };
51
+ return getter;
52
+ };
51
53
 
52
- export const getTableRowProps:
53
- GetTableElementPropsGetter<ElementRowPropGetter> = (userGetter, getter = defaultGetter) => {
54
- if (userGetter) {
55
- return (props, meta) => ({
56
- ...getter(props, meta),
57
- ...userGetter(props, meta),
58
- });
59
- }
54
+ export const getTableRowProps: GetTableElementPropsGetter<ElementRowPropGetter> = (
55
+ userGetter,
56
+ getter = defaultGetter,
57
+ ) => {
58
+ if (userGetter) {
59
+ return (props, meta) => ({
60
+ ...getter(props, meta),
61
+ ...userGetter(props, meta),
62
+ });
63
+ }
60
64
 
61
- return getter;
62
- };
65
+ return getter;
66
+ };
63
67
 
64
- export const getTableCellProps:
65
- GetTableElementPropsGetter<ElementCellPropGetter> = (userGetter, getter = defaultGetter) => {
66
- if (userGetter) {
67
- return (props, meta) => ({
68
- ...getter(props, meta),
69
- ...userGetter(props, meta),
70
- });
71
- }
68
+ export const getTableCellProps: GetTableElementPropsGetter<ElementCellPropGetter> = (
69
+ userGetter,
70
+ getter = defaultGetter,
71
+ ) => {
72
+ if (userGetter) {
73
+ return (props, meta) => ({
74
+ ...getter(props, meta),
75
+ ...userGetter(props, meta),
76
+ });
77
+ }
72
78
 
73
- return getter;
74
- };
79
+ return getter;
80
+ };
75
81
 
76
- export const getTableElementInternalProps:
77
- GetTableElementInternalPropsGetter = (internalProps, userGetter, getter = defaultGetter) => {
78
- if (userGetter) {
79
- return (props, meta) => ({
80
- ...getter({...props, ...internalProps}, meta),
81
- ...userGetter(props, meta),
82
- });
83
- }
82
+ export const getTableElementInternalProps: GetTableElementInternalPropsGetter = (
83
+ internalProps,
84
+ userGetter,
85
+ getter = defaultGetter,
86
+ ) => {
87
+ if (userGetter) {
88
+ return (props, meta) => ({
89
+ ...getter({...props, ...internalProps}, meta),
90
+ ...userGetter(props, meta),
91
+ });
92
+ }
84
93
 
85
- return (props: DefaultObject, meta: BaseMeta) => getter({...props, ...internalProps}, meta);
86
- };
94
+ return (props: DefaultObject, meta: BaseMeta) => getter({...props, ...internalProps}, meta);
95
+ };
package/src/style.tsx CHANGED
@@ -1,15 +1,6 @@
1
1
  /* eslint max-len: off */
2
- import styled, {
3
- keyframes, css, CSSObject,
4
- } from 'styled-components';
5
- import {
6
- fontNormal,
7
- white,
8
- black,
9
- spacing,
10
- gray80,
11
- gray95,
12
- } from '@propellerads/stylevariables';
2
+ import styled, {keyframes, css, CSSObject} from 'styled-components';
3
+ import {fontNormal, white, black, spacing, gray80, gray95} from '@propellerads/stylevariables';
13
4
 
14
5
  const loadingAnimation = keyframes`
15
6
  from {
@@ -24,23 +15,25 @@ const loadingAnimation = keyframes`
24
15
  `;
25
16
 
26
17
  export const TableLoading = styled.div`
27
- display: block;
28
- position: absolute;
29
- left: 0;
30
- right: 0;
31
- top: 0;
32
- bottom: 0;
33
- background: rgba(255, 255, 255, 0.8);
34
- transition: all 0.3s ease;
35
- z-index: -1;
36
- opacity: 0;
37
- pointer-events: none;
38
-
39
- ${(props: { isLoading: boolean }) => props.isLoading && css`
40
- opacity: 1;
41
- z-index: 2;
42
- pointer-events: all;
43
- `}
18
+ display: block;
19
+ position: absolute;
20
+ left: 0;
21
+ right: 0;
22
+ top: 0;
23
+ bottom: 0;
24
+ background: rgba(255, 255, 255, 0.8);
25
+ transition: all 0.3s ease;
26
+ z-index: -1;
27
+ opacity: 0;
28
+ pointer-events: none;
29
+
30
+ ${(props: {isLoading: boolean}) =>
31
+ props.isLoading &&
32
+ css`
33
+ opacity: 1;
34
+ z-index: 2;
35
+ pointer-events: all;
36
+ `}
44
37
  `;
45
38
 
46
39
  export const TableLoadingInner = styled.div`
@@ -58,7 +51,7 @@ export const TableLoadingInner = styled.div`
58
51
  export const TableWrapper = styled.div`
59
52
  position: relative;
60
53
  overflow: hidden;
61
-
54
+
62
55
  &::before {
63
56
  bottom: 10px;
64
57
  content: '';
@@ -69,7 +62,7 @@ export const TableWrapper = styled.div`
69
62
  height: 100%;
70
63
  top: 0;
71
64
  left: -10px;
72
- box-shadow: 0 3px 6px 0 rgba(0,0,0,0.2);
65
+ box-shadow: 0 3px 6px 0 rgba(0, 0, 0, 0.2);
73
66
  transition: 0.3s opacity;
74
67
  }
75
68
 
@@ -83,16 +76,16 @@ export const TableWrapper = styled.div`
83
76
  position: absolute;
84
77
  top: 0;
85
78
  right: -10px;
86
- box-shadow: 0 3px 6px 0 rgba(0,0,0,0.2);
79
+ box-shadow: 0 3px 6px 0 rgba(0, 0, 0, 0.2);
87
80
  transition: 0.3s opacity;
88
81
  }
89
-
82
+
90
83
  &.shadow_left {
91
84
  &::before {
92
85
  opacity: 1 !important;
93
86
  }
94
87
  }
95
-
88
+
96
89
  &.shadow_right {
97
90
  &::after {
98
91
  opacity: 1 !important;
@@ -119,7 +112,7 @@ export const TableCore = styled.div`
119
112
  flex: auto 1;
120
113
  display: flex;
121
114
  flex-direction: column;
122
- align-items: stretch;
115
+ align-items: stretch;
123
116
  border-collapse: collapse;
124
117
  `;
125
118
 
@@ -128,16 +121,18 @@ export const HeadCell = styled.div`
128
121
  `;
129
122
 
130
123
  export const TD = styled.div`
131
- white-space: nowrap;
132
- text-overflow: ellipsis;
133
- line-height: 1.3rem;
134
- padding: 7px 4px;
135
- overflow: hidden;
136
- transition: width 0.3s ease 0s, min-width, padding, opacity;
137
-
138
- ${({align}: { align?: CSSObject, colSpan?: number }) => align && css`
139
- text-align: ${align}`
140
- }
124
+ white-space: nowrap;
125
+ text-overflow: ellipsis;
126
+ line-height: 1.3rem;
127
+ padding: 7px 4px;
128
+ overflow: hidden;
129
+ transition: width 0.3s ease 0s, min-width, padding, opacity;
130
+
131
+ ${({align}: {align?: CSSObject; colSpan?: number}) =>
132
+ align &&
133
+ css`
134
+ text-align: ${align};
135
+ `}
141
136
  `;
142
137
 
143
138
  export const EmptyStateCell = styled.div`
@@ -163,7 +158,7 @@ export const THead = styled.div`
163
158
  display: flex;
164
159
  flex-direction: column;
165
160
  user-select: none;
166
-
161
+
167
162
  ${TH}, ${TD} {
168
163
  padding: 0 4px;
169
164
  line-height: normal;
@@ -210,7 +205,7 @@ export const TResizer = styled.div`
210
205
  top: 0;
211
206
  z-index: 1;
212
207
  touch-action: none;
213
-
208
+
214
209
  &:after {
215
210
  content: '↔';
216
211
  position: absolute;
package/src/types.tsx CHANGED
@@ -12,149 +12,162 @@ import {
12
12
  Row,
13
13
  RowPropGetter,
14
14
  TableBodyPropGetter,
15
- TablePropGetter, TableState,
16
- UsePaginationInstanceProps, UsePaginationOptions,
15
+ TablePropGetter,
16
+ TableState,
17
+ UsePaginationInstanceProps,
18
+ UsePaginationOptions,
17
19
  UsePaginationState,
18
20
  UseRowSelectInstanceProps,
19
- UseRowSelectState, UseSortByColumnProps, UseRowSelectRowProps,
20
- UseSortByInstanceProps, UseSortByOptions,
21
- UseTableOptions, HeaderPropGetter,
21
+ UseRowSelectState,
22
+ UseSortByColumnProps,
23
+ UseRowSelectRowProps,
24
+ UseSortByInstanceProps,
25
+ UseSortByOptions,
26
+ UseTableOptions,
27
+ HeaderPropGetter,
22
28
  } from 'react-table';
23
29
 
24
30
  export type DefaultObject = Record<string, string | number | unknown>;
25
31
 
26
32
  export type LoadingState = {
27
- loadingColumns?: Column[],
28
- loadingData: any[],
29
- }
33
+ loadingColumns?: Column[];
34
+ loadingData: any[];
35
+ };
30
36
 
31
37
  export enum FOOTER_PLACEMENT {
32
- TOP = 'top',
33
- BOTTOM = 'bottom'
38
+ TOP = 'top',
39
+ BOTTOM = 'bottom',
34
40
  }
35
41
 
36
42
  export type PaginationProps = {
37
- paginationAmount?: string | ReactNode | ReactElement,
38
- parentElementId: string,
39
- labelPerPage?: string,
40
- pageSizes?: Array<string | number>,
41
- pageIndex: number,
42
- perPage: number,
43
- totalPages: number,
44
- totalItems: number,
45
- canNextPage: boolean,
46
- canPreviousPage: boolean,
47
- nextPageHandler: () => void,
48
- previousPageHandler: () => void,
49
- setPageSize: (size: number) => void,
50
- gotoPage: (page: number) => void,
51
- }
43
+ paginationAmount?: string | ReactNode | ReactElement;
44
+ parentElementId: string;
45
+ labelPerPage?: string;
46
+ pageSizes?: Array<string | number>;
47
+ pageIndex: number;
48
+ perPage: number;
49
+ totalPages: number;
50
+ totalItems: number;
51
+ canNextPage: boolean;
52
+ canPreviousPage: boolean;
53
+ nextPageHandler: () => void;
54
+ previousPageHandler: () => void;
55
+ setPageSize: (size: number) => void;
56
+ gotoPage: (page: number) => void;
57
+ };
52
58
 
53
59
  export type ControlledPagination = {
54
- paginationAmount?: string | ReactNode | ReactElement,
55
- pageSize: number,
56
- pageIndex: number,
57
- pageCount: number,
58
- }
60
+ paginationAmount?: string | ReactNode | ReactElement;
61
+ pageSize: number;
62
+ pageIndex: number;
63
+ pageCount: number;
64
+ };
59
65
 
60
66
  export type TableProps = {
61
- columns: Array<Column<DefaultObject>>,
62
- data: [],
63
- totalItems?: number,
64
- PaginationComponent: React.FunctionComponent<PaginationProps>,
65
- initialState: Partial<TableState<DefaultObject>>,
66
- fetchData?: (params: { pageIndex: number, pageSize: number }) => void,
67
- onSortedChange?: (id: string, isDesc: boolean) => void,
68
- isLoading?: boolean,
69
- footerPlacement?: Array<FOOTER_PLACEMENT>,
70
- hasDefaultPagination?: boolean,
71
- onSelectRowsChange?: (rows: Array<DefaultObject>) => void,
72
- controlledPagination?: ControlledPagination,
73
- loadingMessage?: string,
74
- labelPerPage?: string,
75
- parentElementId?: string,
76
- tableContentId?: string,
77
- getRowPreProps?: (row: Row) => DefaultObject,
78
- getTableProps?: TableGetter,
79
- getHeaderGroupProps?: ElementGetter,
80
- getHeaderProps?: ElementGetter,
81
- getRowProps?: ElementGetter,
82
- getCellProps?: ElementGetter,
83
- getFooterProps?: ElementGetter,
84
- getFooterGroupProps?: ElementGetter,
85
- showLoadingState?: boolean,
86
- LoadingCellComponent?: FunctionComponent<DefaultObject>,
87
- noDataMessage?: string | ReactElement
88
- rowSubComponent?: (row: StandardRow) => ReactElement,
89
- isEnableRowSelect?: (original: DefaultObject) => boolean,
90
- }
67
+ columns: Array<Column<DefaultObject>>;
68
+ data: [];
69
+ totalItems?: number;
70
+ PaginationComponent: React.FunctionComponent<PaginationProps>;
71
+ initialState: Partial<TableState<DefaultObject>>;
72
+ fetchData?: (params: {pageIndex: number; pageSize: number}) => void;
73
+ onSortedChange?: (id: string, isDesc: boolean) => void;
74
+ isLoading?: boolean;
75
+ footerPlacement?: Array<FOOTER_PLACEMENT>;
76
+ hasDefaultPagination?: boolean;
77
+ onSelectRowsChange?: (rows: Array<DefaultObject>) => void;
78
+ controlledPagination?: ControlledPagination;
79
+ loadingMessage?: string;
80
+ labelPerPage?: string;
81
+ parentElementId?: string;
82
+ tableContentId?: string;
83
+ getRowPreProps?: (row: Row) => DefaultObject;
84
+ getTableProps?: TableGetter;
85
+ getHeaderGroupProps?: ElementGetter;
86
+ getHeaderProps?: ElementGetter;
87
+ getRowProps?: ElementGetter;
88
+ getCellProps?: ElementGetter;
89
+ getFooterProps?: ElementGetter;
90
+ getFooterGroupProps?: ElementGetter;
91
+ showLoadingState?: boolean;
92
+ LoadingCellComponent?: FunctionComponent<DefaultObject>;
93
+ noDataMessage?: string | ReactElement;
94
+ rowSubComponent?: (row: StandardRow) => ReactElement;
95
+ isEnableRowSelect?: (original: DefaultObject) => boolean;
96
+ };
91
97
 
92
98
  export type TableOptions = {
93
- columns: Array<Column<DefaultObject>>,
94
- data: Array<DefaultObject>,
95
- initialState: {
96
- pageIndex?: number,
97
- pageSize?: number,
98
- },
99
- disableSortRemove: boolean,
100
- disableMultiSort: boolean,
101
- disableMultiRemove: boolean,
102
- manualSortBy?: boolean,
103
- autoResetPage?: boolean,
104
- manualPagination?: boolean,
105
- pageCount?: number,
106
- }
99
+ columns: Array<Column<DefaultObject>>;
100
+ data: Array<DefaultObject>;
101
+ initialState: {
102
+ pageIndex?: number;
103
+ pageSize?: number;
104
+ };
105
+ disableSortRemove: boolean;
106
+ disableMultiSort: boolean;
107
+ disableMultiRemove: boolean;
108
+ manualSortBy?: boolean;
109
+ autoResetPage?: boolean;
110
+ manualPagination?: boolean;
111
+ pageCount?: number;
112
+ };
107
113
 
108
114
  export type MetaProps = {
109
- column?: HeaderGroup<DefaultObject>,
110
- cell?: Cell,
111
- }
115
+ column?: HeaderGroup<DefaultObject>;
116
+ cell?: Cell;
117
+ };
112
118
 
113
- export type BaseMeta = Meta<DefaultObject, MetaProps>
119
+ export type BaseMeta = Meta<DefaultObject, MetaProps>;
114
120
 
115
121
  export type TableGetter = (props: DefaultObject) => DefaultObject;
116
122
 
117
123
  export type ElementGetter = (props: DefaultObject, meta: BaseMeta) => DefaultObject;
118
124
 
119
- export type ElementCellPropGetter = CellPropGetter<DefaultObject>
125
+ export type ElementCellPropGetter = CellPropGetter<DefaultObject>;
120
126
 
121
- export type ElementRowPropGetter = RowPropGetter<DefaultObject>
127
+ export type ElementRowPropGetter = RowPropGetter<DefaultObject>;
122
128
 
123
- export type ElementHeaderFooterPropGetter = FooterGroupPropGetter<DefaultObject> |
124
- HeaderGroupPropGetter<DefaultObject> |
125
- FooterPropGetter<DefaultObject>
129
+ export type ElementHeaderFooterPropGetter =
130
+ | FooterGroupPropGetter<DefaultObject>
131
+ | HeaderGroupPropGetter<DefaultObject>
132
+ | FooterPropGetter<DefaultObject>;
126
133
 
127
- export type GetTableContainerPropsGetter = (userGetter?: TableGetter, getter?: TableGetter) =>
128
- TablePropGetter<DefaultObject> | TableBodyPropGetter<DefaultObject>
134
+ export type GetTableContainerPropsGetter = (
135
+ userGetter?: TableGetter,
136
+ getter?: TableGetter,
137
+ ) => TablePropGetter<DefaultObject> | TableBodyPropGetter<DefaultObject>;
129
138
 
130
- export type GetTableElementPropsGetter<T> = (userGetter?: ElementGetter, getter?: ElementGetter) => T
139
+ export type GetTableElementPropsGetter<T> = (userGetter?: ElementGetter, getter?: ElementGetter) => T;
131
140
 
132
- export type GetTableElementInternalPropsGetter =
133
- (internalProps: DefaultObject, userGetter?: ElementGetter, getter?: ElementGetter) =>
134
- HeaderPropGetter<DefaultObject>
141
+ export type GetTableElementInternalPropsGetter = (
142
+ internalProps: DefaultObject,
143
+ userGetter?: ElementGetter,
144
+ getter?: ElementGetter,
145
+ ) => HeaderPropGetter<DefaultObject>;
135
146
 
136
- export type ColumnWithSort = HeaderGroup<DefaultObject> & Partial<UseSortByColumnProps<DefaultObject>>
147
+ export type ColumnWithSort = HeaderGroup<DefaultObject> & Partial<UseSortByColumnProps<DefaultObject>>;
137
148
 
138
- export type StandardColumn = Column<DefaultObject>
149
+ export type StandardColumn = Column<DefaultObject>;
139
150
 
140
- export type StandardRow = Row<DefaultObject> & { isExpanded?: boolean }
151
+ export type StandardRow = Row<DefaultObject> & {isExpanded?: boolean};
141
152
 
142
- export type SelectableRow = Row<{ id: string }> & UseRowSelectRowProps<DefaultObject>
153
+ export type SelectableRow = Row<{id: string}> & UseRowSelectRowProps<DefaultObject>;
143
154
 
144
- export type StandardCell = Cell<DefaultObject>
155
+ export type StandardCell = Cell<DefaultObject>;
145
156
 
146
- export type SelectableRowInstanceProps = UseRowSelectInstanceProps<DefaultObject>
157
+ export type SelectableRowInstanceProps = UseRowSelectInstanceProps<DefaultObject>;
147
158
 
148
- export type StandardHooks = Hooks<DefaultObject>
159
+ export type StandardHooks = Hooks<DefaultObject>;
149
160
 
150
- export type TableHooksInstanceProps =
151
- UseSortByInstanceProps<DefaultObject> &
152
- UsePaginationInstanceProps<DefaultObject> &
153
- UseRowSelectInstanceProps<DefaultObject> &
154
- { state: UseRowSelectState<DefaultObject> & UsePaginationState<DefaultObject>};
161
+ export type TableHooksInstanceProps = UseSortByInstanceProps<DefaultObject> &
162
+ UsePaginationInstanceProps<DefaultObject> &
163
+ UseRowSelectInstanceProps<DefaultObject> & {
164
+ state: UseRowSelectState<DefaultObject> & UsePaginationState<DefaultObject>;
165
+ };
155
166
 
156
- export type TableOptionsProps =
157
- UseTableOptions<DefaultObject> & UseSortByOptions<DefaultObject> & UsePaginationOptions<DefaultObject> &
158
- { initialState: Partial<TableState<DefaultObject>> & Partial<UsePaginationState<DefaultObject>> }
167
+ export type TableOptionsProps = UseTableOptions<DefaultObject> &
168
+ UseSortByOptions<DefaultObject> &
169
+ UsePaginationOptions<DefaultObject> & {
170
+ initialState: Partial<TableState<DefaultObject>> & Partial<UsePaginationState<DefaultObject>>;
171
+ };
159
172
 
160
173
  export class Table extends React.Component<Partial<TableProps>> {}
@@ -9,15 +9,20 @@ const useLoadingState = (
9
9
  columns: Column<DefaultObject>[],
10
10
  LoadingCellComponent: FunctionComponent<DefaultObject>,
11
11
  ): LoadingState => {
12
- const loadingColumns: Column<DefaultObject>[] | undefined = useMemo(() => (showLoadingState && loading ? columns
13
- .map((column: Column<DefaultObject>) => {
14
- const loadingColumn: Column<DefaultObject> = {
15
- ...column,
16
- Cell: () => <LoadingCellComponent />,
17
- };
18
-
19
- return loadingColumn;
20
- }) : []), [columns, loading, showLoadingState]);
12
+ const loadingColumns: Column<DefaultObject>[] | undefined = useMemo(
13
+ () =>
14
+ showLoadingState && loading
15
+ ? columns.map((column: Column<DefaultObject>) => {
16
+ const loadingColumn: Column<DefaultObject> = {
17
+ ...column,
18
+ Cell: () => <LoadingCellComponent />,
19
+ };
20
+
21
+ return loadingColumn;
22
+ })
23
+ : [],
24
+ [columns, loading, showLoadingState],
25
+ );
21
26
 
22
27
  const loadingData = useMemo(() => {
23
28
  if (showLoadingState && loading && columns && columns.length > 0) {
package/CHANGELOG.md DELETED
@@ -1,89 +0,0 @@
1
- #### `4.9.0`
2
-
3
- * added possibility to resize of each individual column
4
-
5
- #### `4.8.0`
6
-
7
- * added possibility to resize columns
8
-
9
- #### `4.7.0`
10
-
11
- * updated peerDependencies
12
-
13
- #### `4.6.1`
14
-
15
- * add data-role attr for body, head, footer
16
-
17
- #### `4.6.0`
18
-
19
- * add available to disable row select by condition
20
-
21
- #### `4.5.1`
22
-
23
- * fix key warnings
24
-
25
- #### `4.5.0`
26
-
27
- * use columns props for loading state
28
- * added default initial state prop value
29
-
30
- #### `4.4.0`
31
-
32
- * add expanded behavior
33
-
34
- #### `4.3.2`
35
-
36
- * fix wrong enable sort condition for async
37
-
38
- #### `4.3.1`
39
-
40
- * add classnames for main parts
41
- * fix sort on state mode
42
-
43
- #### `4.3.0`
44
-
45
- * usage useFlexLayout instead of useBlockLayout
46
- * add not data message prop
47
-
48
- #### `4.2.0`
49
-
50
- * fix @types version for packages
51
-
52
- #### `4.1.0`
53
-
54
- * fix call possible undefined function
55
-
56
- #### `4.0.0`
57
-
58
- * update react-table version to 7
59
-
60
- #### `3.0.0`
61
-
62
- * edit props data
63
-
64
- #### `2.1.0`
65
-
66
- * Add loading state mode
67
-
68
- #### `2.0.0`
69
-
70
- * TS
71
- * Production build
72
- * Breaking changes:
73
- - rewrite some props like in origin component:
74
- - `items` -> `data`
75
- - `isLoading` -> `loading`
76
- - `subComponent` -> `SubComponent`
77
- - `expanderComponent` -> `ExpanderComponent`
78
-
79
- #### `1.2.0`
80
-
81
- * Add rest props
82
-
83
- #### `1.1.0`
84
-
85
- * Add onChangePage prop
86
-
87
- #### `1.0.2`
88
-
89
- * Add expanderComponent and subComponent props