@imposium-hub/components 2.5.11 → 2.5.12
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/dist/cjs/components/assets/AssetsTableAssetIdCell.d.ts +2 -0
- package/dist/cjs/components/assets/AssetsTableAssetIdCell.js +54 -0
- package/dist/cjs/components/assets/AssetsTableAssetIdCell.js.map +1 -0
- package/dist/cjs/components/assets/AssetsTableAssetIdFilter.d.ts +2 -0
- package/dist/cjs/components/assets/AssetsTableAssetIdFilter.js +94 -0
- package/dist/cjs/components/assets/AssetsTableAssetIdFilter.js.map +1 -0
- package/dist/cjs/components/assets/AssetsTableGlobalCell.js +2 -1
- package/dist/cjs/components/assets/AssetsTableGlobalCell.js.map +1 -1
- package/dist/cjs/components/assets/StoryTableNameFilter.d.ts +2 -0
- package/dist/cjs/components/assets/StoryTableNameFilter.js +94 -0
- package/dist/cjs/components/assets/StoryTableNameFilter.js.map +1 -0
- package/dist/cjs/components/card/Card.d.ts +1 -0
- package/dist/cjs/components/card/Card.js +17 -4
- package/dist/cjs/components/card/Card.js.map +1 -1
- package/dist/cjs/components/color-field/ColorField.js +9 -14
- package/dist/cjs/components/color-field/ColorField.js.map +1 -1
- package/dist/cjs/components/data-table/DataTable.d.ts +3 -2
- package/dist/cjs/components/data-table/DataTable.js +78 -10
- package/dist/cjs/components/data-table/DataTable.js.map +1 -1
- package/dist/cjs/components/data-table/Paginator.js +76 -11
- package/dist/cjs/components/data-table/Paginator.js.map +1 -1
- package/dist/cjs/components/header/Header.d.ts +2 -0
- package/dist/cjs/components/header/Header.js +39 -8
- package/dist/cjs/components/header/Header.js.map +1 -1
- package/dist/cjs/components/smpte-field/SMPTEField.d.ts +2 -1
- package/dist/cjs/components/smpte-field/SMPTEField.js +9 -3
- package/dist/cjs/components/smpte-field/SMPTEField.js.map +1 -1
- package/dist/cjs/index.d.ts +6 -1
- package/dist/cjs/index.js +14 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/redux/actions/story-filter.d.ts +4 -0
- package/dist/cjs/redux/actions/story-filter.js +18 -0
- package/dist/cjs/redux/actions/story-filter.js.map +1 -0
- package/dist/cjs/redux/reducers/story-filter.d.ts +2 -0
- package/dist/cjs/redux/reducers/story-filter.js +33 -0
- package/dist/cjs/redux/reducers/story-filter.js.map +1 -0
- package/dist/esm/components/assets/AssetsTableAssetIdCell.d.ts +2 -0
- package/dist/esm/components/assets/AssetsTableAssetIdCell.js +29 -0
- package/dist/esm/components/assets/AssetsTableAssetIdCell.js.map +1 -0
- package/dist/esm/components/assets/AssetsTableAssetIdFilter.d.ts +2 -0
- package/dist/esm/components/assets/AssetsTableAssetIdFilter.js +20 -0
- package/dist/esm/components/assets/AssetsTableAssetIdFilter.js.map +1 -0
- package/dist/esm/components/assets/AssetsTableGlobalCell.js +2 -1
- package/dist/esm/components/assets/AssetsTableGlobalCell.js.map +1 -1
- package/dist/esm/components/assets/StoryTableNameFilter.d.ts +2 -0
- package/dist/esm/components/assets/StoryTableNameFilter.js +20 -0
- package/dist/esm/components/assets/StoryTableNameFilter.js.map +1 -0
- package/dist/esm/components/card/Card.d.ts +1 -0
- package/dist/esm/components/card/Card.js +16 -4
- package/dist/esm/components/card/Card.js.map +1 -1
- package/dist/esm/components/color-field/ColorField.js +9 -14
- package/dist/esm/components/color-field/ColorField.js.map +1 -1
- package/dist/esm/components/data-table/DataTable.d.ts +3 -2
- package/dist/esm/components/data-table/DataTable.js +76 -8
- package/dist/esm/components/data-table/DataTable.js.map +1 -1
- package/dist/esm/components/data-table/Paginator.js +95 -44
- package/dist/esm/components/data-table/Paginator.js.map +1 -1
- package/dist/esm/components/header/Header.d.ts +2 -0
- package/dist/esm/components/header/Header.js +30 -7
- package/dist/esm/components/header/Header.js.map +1 -1
- package/dist/esm/components/smpte-field/SMPTEField.d.ts +2 -1
- package/dist/esm/components/smpte-field/SMPTEField.js +9 -3
- package/dist/esm/components/smpte-field/SMPTEField.js.map +1 -1
- package/dist/esm/index.d.ts +6 -1
- package/dist/esm/index.js +6 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/redux/actions/story-filter.d.ts +4 -0
- package/dist/esm/redux/actions/story-filter.js +13 -0
- package/dist/esm/redux/actions/story-filter.js.map +1 -0
- package/dist/esm/redux/reducers/story-filter.d.ts +2 -0
- package/dist/esm/redux/reducers/story-filter.js +16 -0
- package/dist/esm/redux/reducers/story-filter.js.map +1 -0
- package/dist/styles.css +13 -5
- package/dist/styles.less +16 -8
- package/less/components/data-table.less +4 -0
- package/less/components/form-field.less +7 -3
- package/less/components/header.less +0 -5
- package/less/components/tag.less +5 -0
- package/package.json +1 -1
- package/src/components/assets/AssetsTableAssetIdCell.tsx +64 -0
- package/src/components/assets/AssetsTableAssetIdFilter.tsx +41 -0
- package/src/components/assets/AssetsTableGlobalCell.tsx +11 -1
- package/src/components/assets/StoryTableNameFilter.tsx +40 -0
- package/src/components/card/Card.tsx +27 -13
- package/src/components/color-field/ColorField.tsx +16 -17
- package/src/components/data-table/DataTable.tsx +96 -12
- package/src/components/data-table/Paginator.tsx +162 -93
- package/src/components/header/Header.tsx +42 -6
- package/src/components/smpte-field/SMPTEField.tsx +8 -3
- package/src/index.ts +11 -0
- package/src/redux/actions/story-filter.ts +15 -0
- package/src/redux/reducers/story-filter.ts +18 -0
|
@@ -26,102 +26,171 @@ const Paginator: React.FC<any> = ({
|
|
|
26
26
|
setPageSize,
|
|
27
27
|
itemsPerPage,
|
|
28
28
|
onItemsPerPage
|
|
29
|
-
}) =>
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
29
|
+
}) => {
|
|
30
|
+
const [getPageIndex, setPageIndex] = React.useState<number>(pageIndex);
|
|
31
|
+
const [getItemsPerPage, setItemsPerPage] = React.useState<number>(itemsPerPage);
|
|
32
|
+
const [getPageCount, setPageCount] = React.useState<number>(pageCount);
|
|
33
|
+
const [inputPageIndex, setInputPageIndex] = React.useState<string>('');
|
|
34
|
+
const [inputItemsPerPage, setInputItemsPerPage] = React.useState<string>('');
|
|
35
|
+
|
|
36
|
+
React.useEffect(() => {
|
|
37
|
+
if (pageCount === 0) {
|
|
38
|
+
setPageCount(1);
|
|
39
|
+
} else {
|
|
40
|
+
setPageCount(pageCount);
|
|
41
|
+
}
|
|
42
|
+
}, [pageCount]);
|
|
43
|
+
|
|
44
|
+
React.useEffect(() => {
|
|
45
|
+
if (pageIndex !== getPageIndex) {
|
|
46
|
+
setPageIndex(pageIndex);
|
|
47
|
+
setInputPageIndex('');
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (itemsPerPage !== getItemsPerPage) {
|
|
51
|
+
setItemsPerPage(itemsPerPage);
|
|
52
|
+
setInputItemsPerPage('');
|
|
53
|
+
}
|
|
54
|
+
}, [pageIndex, itemsPerPage]);
|
|
55
|
+
|
|
56
|
+
const onItemsPerPageBlur = () => {
|
|
57
|
+
clearTimeout(textInputTimeout);
|
|
58
|
+
if (inputItemsPerPage !== '') {
|
|
59
|
+
onItemsPerPage(inputItemsPerPage);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const onGoToPageBlur = () => {
|
|
64
|
+
clearTimeout(textInputTimeout);
|
|
65
|
+
if (inputPageIndex !== '') {
|
|
66
|
+
gotoPage(inputPageIndex, pageSize);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const onItemsPerPageKeyDown = (e) => {
|
|
71
|
+
if (e.key === 'Enter' && inputItemsPerPage !== '') {
|
|
72
|
+
clearTimeout(textInputTimeout);
|
|
73
|
+
onItemsPerPage(inputItemsPerPage);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
const onGoToPageKeyDown = (e) => {
|
|
78
|
+
if (e.key === 'Enter' && inputPageIndex !== '') {
|
|
79
|
+
clearTimeout(textInputTimeout);
|
|
80
|
+
gotoPage(inputPageIndex, pageSize);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
return (
|
|
85
|
+
<section className='ip-table-pagination'>
|
|
65
86
|
<span>
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
87
|
+
<Button
|
|
88
|
+
style='subtle'
|
|
89
|
+
size='small'
|
|
90
|
+
tooltip='Go to first page'
|
|
91
|
+
disabled={!canPreviousPage}
|
|
92
|
+
onClick={() => gotoPage(1, pageSize)}>
|
|
93
|
+
{ICON_ANGLE_DOUBLE_LEFT}
|
|
94
|
+
</Button>
|
|
95
|
+
<Button
|
|
96
|
+
style='subtle'
|
|
97
|
+
size='small'
|
|
98
|
+
tooltip='Go to previous page'
|
|
99
|
+
disabled={!canPreviousPage}
|
|
100
|
+
onClick={() => previousPage()}>
|
|
101
|
+
{ICON_ANGLE_LEFT}
|
|
102
|
+
</Button>
|
|
103
|
+
<Button
|
|
104
|
+
style='subtle'
|
|
105
|
+
size='small'
|
|
106
|
+
tooltip='Go to next page'
|
|
107
|
+
disabled={!canNextPage}
|
|
108
|
+
onClick={() => nextPage()}>
|
|
109
|
+
{ICON_ANGLE_RIGHT}
|
|
110
|
+
</Button>
|
|
111
|
+
<Button
|
|
112
|
+
style='subtle'
|
|
113
|
+
size='small'
|
|
114
|
+
tooltip='Go to last page'
|
|
115
|
+
disabled={!canNextPage}
|
|
116
|
+
onClick={() => gotoPage(getPageCount, pageSize)}>
|
|
117
|
+
{ICON_ANGLE_DOUBLE_RIGHT}
|
|
118
|
+
</Button>
|
|
70
119
|
|
|
120
|
+
<span>
|
|
121
|
+
{copy.table.page}
|
|
122
|
+
<strong>
|
|
123
|
+
{getPageIndex} of {getPageCount}
|
|
124
|
+
</strong>
|
|
125
|
+
|
|
126
|
+
</span>
|
|
127
|
+
<span>
|
|
128
|
+
{copy.table.goToPage}
|
|
129
|
+
<input
|
|
130
|
+
className='paginator-input'
|
|
131
|
+
type='number'
|
|
132
|
+
placeholder={getPageIndex.toString()}
|
|
133
|
+
value={inputPageIndex}
|
|
134
|
+
onChange={(e) => {
|
|
135
|
+
const input = e.target.value;
|
|
136
|
+
const inputNum = Number(input);
|
|
137
|
+
let next: number;
|
|
138
|
+
|
|
139
|
+
clearTimeout(textInputTimeout);
|
|
140
|
+
setInputPageIndex(input);
|
|
141
|
+
if (!input || inputNum < 1 || inputNum > getPageCount) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (inputNum >= 1 && inputNum <= getPageCount) {
|
|
146
|
+
next = inputNum;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
textInputTimeout = window.setTimeout(
|
|
150
|
+
() => gotoPage(next, pageSize),
|
|
151
|
+
1000
|
|
152
|
+
);
|
|
153
|
+
}}
|
|
154
|
+
onBlur={() => onGoToPageBlur()}
|
|
155
|
+
onKeyDown={(e) => onGoToPageKeyDown(e)}
|
|
156
|
+
/>
|
|
157
|
+
</span>
|
|
158
|
+
|
|
159
|
+
<span>
|
|
160
|
+
{copy.table.itemsPerPage}
|
|
161
|
+
<input
|
|
162
|
+
className='paginator-input'
|
|
163
|
+
type='number'
|
|
164
|
+
placeholder={getItemsPerPage.toString()}
|
|
165
|
+
value={inputItemsPerPage}
|
|
166
|
+
onChange={(e) => {
|
|
167
|
+
const input = e.target.value;
|
|
168
|
+
const inputNum = Number(input);
|
|
169
|
+
|
|
170
|
+
clearTimeout(textInputTimeout);
|
|
171
|
+
|
|
172
|
+
setInputItemsPerPage(input);
|
|
173
|
+
|
|
174
|
+
if (!input || inputNum < 1) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
textInputTimeout = window.setTimeout(
|
|
179
|
+
() => onItemsPerPage(inputNum),
|
|
180
|
+
1000
|
|
181
|
+
);
|
|
182
|
+
}}
|
|
183
|
+
onBlur={() => onItemsPerPageBlur()}
|
|
184
|
+
onKeyDown={(e) => onItemsPerPageKeyDown(e)}
|
|
185
|
+
/>
|
|
186
|
+
</span>
|
|
71
187
|
</span>
|
|
72
|
-
<span>
|
|
73
|
-
{copy.table.goToPage}
|
|
74
|
-
<input
|
|
75
|
-
className='paginator-input'
|
|
76
|
-
type='number'
|
|
77
|
-
placeholder={pageIndex}
|
|
78
|
-
onChange={(e) => {
|
|
79
|
-
const input = e.target.value;
|
|
80
|
-
const inputNum = Number(input);
|
|
81
|
-
let next: number;
|
|
82
|
-
|
|
83
|
-
clearTimeout(textInputTimeout);
|
|
84
|
-
|
|
85
|
-
if (!input || inputNum < 1 || inputNum > pageCount) {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
if (inputNum >= 1 && inputNum <= pageCount) {
|
|
90
|
-
next = inputNum;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
textInputTimeout = window.setTimeout(() => gotoPage(next, pageSize), 300);
|
|
94
|
-
}}
|
|
95
|
-
/>
|
|
96
|
-
</span>
|
|
97
|
-
|
|
98
|
-
<span>
|
|
99
|
-
{copy.table.itemsPerPage}
|
|
100
|
-
<input
|
|
101
|
-
className='paginator-input'
|
|
102
|
-
type='number'
|
|
103
|
-
placeholder={itemsPerPage}
|
|
104
|
-
min={1}
|
|
105
|
-
onChange={(e) => {
|
|
106
|
-
const input = e.target.value;
|
|
107
|
-
const inputNum = Number(input);
|
|
108
|
-
|
|
109
|
-
clearTimeout(textInputTimeout);
|
|
110
|
-
|
|
111
|
-
if (!input || inputNum < 1) {
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
textInputTimeout = window.setTimeout(() => onItemsPerPage(inputNum), 300);
|
|
116
|
-
}}
|
|
117
|
-
/>
|
|
118
|
-
</span>
|
|
119
|
-
</span>
|
|
120
188
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
);
|
|
189
|
+
<span className='total-assets'>
|
|
190
|
+
{copy.table.total} <strong>{totalItems || 0}</strong>
|
|
191
|
+
</span>
|
|
192
|
+
</section>
|
|
193
|
+
);
|
|
194
|
+
};
|
|
126
195
|
|
|
127
196
|
export default Paginator;
|
|
@@ -19,6 +19,8 @@ import Select, { createFilter } from 'react-select';
|
|
|
19
19
|
import { setAccessData } from '../../redux/actions/access';
|
|
20
20
|
import { bindActionCreators } from 'redux';
|
|
21
21
|
import { StoryTableTotalRendersCell } from '../assets/StoryTableTotalRendersCell';
|
|
22
|
+
import StoryTableNameFilter from '../assets/StoryTableNameFilter';
|
|
23
|
+
import { updateStoryFilter } from '../../redux/actions/story-filter';
|
|
22
24
|
|
|
23
25
|
export interface IHeaderProps {
|
|
24
26
|
email?: string;
|
|
@@ -38,6 +40,8 @@ export interface IHeaderProps {
|
|
|
38
40
|
hideDocs?: boolean;
|
|
39
41
|
showFTLogo?: boolean;
|
|
40
42
|
access: any;
|
|
43
|
+
storyFilter: any;
|
|
44
|
+
updateStoryFilter(n): any;
|
|
41
45
|
}
|
|
42
46
|
|
|
43
47
|
export interface IHeaderState {
|
|
@@ -172,12 +176,18 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
172
176
|
});
|
|
173
177
|
};
|
|
174
178
|
|
|
179
|
+
private closeStoriesDropDown() {
|
|
180
|
+
this.setState({ showStoriesDropdown: false }, () =>
|
|
181
|
+
this.props.updateStoryFilter({ name: '' })
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
|
|
175
185
|
private changeStory = (story: any): void => {
|
|
176
186
|
const { onStoryChange } = this.props;
|
|
177
187
|
|
|
178
188
|
if (typeof onStoryChange === 'function') {
|
|
179
189
|
onStoryChange(story);
|
|
180
|
-
this.
|
|
190
|
+
this.closeStoriesDropDown();
|
|
181
191
|
}
|
|
182
192
|
};
|
|
183
193
|
|
|
@@ -290,6 +300,7 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
290
300
|
Header: 'Name',
|
|
291
301
|
width: 115,
|
|
292
302
|
minWidth: 115,
|
|
303
|
+
Search: () => <StoryTableNameFilter />,
|
|
293
304
|
disableSortBy: false
|
|
294
305
|
},
|
|
295
306
|
{
|
|
@@ -513,7 +524,10 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
513
524
|
ref={this.storyToggleRef}
|
|
514
525
|
onClick={() => {
|
|
515
526
|
this.setState({ showStoriesDropdown: !showStoriesDropdown }, () => {
|
|
516
|
-
if (showStoriesDropdown === false)
|
|
527
|
+
if (showStoriesDropdown === false) {
|
|
528
|
+
this.props.updateStoryFilter({ name: '' });
|
|
529
|
+
this.getAccessDataHandler();
|
|
530
|
+
}
|
|
517
531
|
});
|
|
518
532
|
}}>
|
|
519
533
|
<div className='story-name'>
|
|
@@ -533,12 +547,31 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
533
547
|
? [{ id: order, desc: orderDirection === 'desc' }]
|
|
534
548
|
: undefined;
|
|
535
549
|
|
|
536
|
-
|
|
550
|
+
let sortedStories = _.orderBy(
|
|
537
551
|
activeOrganizationBlob.stories,
|
|
538
552
|
['date_modified'],
|
|
539
553
|
['desc']
|
|
540
554
|
);
|
|
541
555
|
|
|
556
|
+
if (this.props.storyFilter && this.props.storyFilter?.name) {
|
|
557
|
+
const storyFilter = this.props.storyFilter.name.toLowerCase();
|
|
558
|
+
|
|
559
|
+
const sortByName = sortedStories.filter((stories) =>
|
|
560
|
+
stories.name.toLowerCase().includes(storyFilter)
|
|
561
|
+
);
|
|
562
|
+
|
|
563
|
+
if (sortByName.length > 0) {
|
|
564
|
+
sortedStories = sortByName;
|
|
565
|
+
} else {
|
|
566
|
+
const sortById = sortedStories.filter((stories) =>
|
|
567
|
+
stories.id.includes(storyFilter)
|
|
568
|
+
);
|
|
569
|
+
if (sortById.length > 0) {
|
|
570
|
+
sortedStories = sortById;
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
|
|
542
575
|
storyMenuInner = (
|
|
543
576
|
<DataTable
|
|
544
577
|
columns={this.getStoriesColumns()}
|
|
@@ -548,6 +581,7 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
548
581
|
itemsPerPage={activeOrganizationBlob.stories.length}
|
|
549
582
|
hidePaginator={true}
|
|
550
583
|
onRowClick={this.changeStory}
|
|
584
|
+
keyboardNav={true}
|
|
551
585
|
/>
|
|
552
586
|
);
|
|
553
587
|
}
|
|
@@ -652,7 +686,7 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
652
686
|
position='bottomright'
|
|
653
687
|
show={showStoriesDropdown}
|
|
654
688
|
toggleRef={this.storyToggleRef}
|
|
655
|
-
onOutsideClick={() => this.
|
|
689
|
+
onOutsideClick={() => this.closeStoriesDropDown()}>
|
|
656
690
|
<div className='stories-menu'>{storyMenuInner}</div>
|
|
657
691
|
</ImposiumDropdown>
|
|
658
692
|
|
|
@@ -672,7 +706,8 @@ class ImposiumHeader extends React.PureComponent<IHeaderProps, IHeaderState> {
|
|
|
672
706
|
const mapDispatchToProps = (dispatch) => {
|
|
673
707
|
return bindActionCreators(
|
|
674
708
|
{
|
|
675
|
-
setAccessData
|
|
709
|
+
setAccessData,
|
|
710
|
+
updateStoryFilter
|
|
676
711
|
},
|
|
677
712
|
dispatch
|
|
678
713
|
);
|
|
@@ -682,7 +717,8 @@ const mapStateToProps = (state): any => {
|
|
|
682
717
|
return {
|
|
683
718
|
auth: state.auth,
|
|
684
719
|
story: state.story,
|
|
685
|
-
access: state.access
|
|
720
|
+
access: state.access,
|
|
721
|
+
storyFilter: state.storyFilter
|
|
686
722
|
};
|
|
687
723
|
};
|
|
688
724
|
|
|
@@ -12,6 +12,7 @@ interface ISMPTEFieldProps {
|
|
|
12
12
|
width?: string | number;
|
|
13
13
|
onChange?(e): void;
|
|
14
14
|
onBlur?(e): void;
|
|
15
|
+
onError?(e): void;
|
|
15
16
|
info?: string;
|
|
16
17
|
labelPosition?: string;
|
|
17
18
|
labelWidth?: string | number;
|
|
@@ -75,7 +76,7 @@ class SMPTEField extends React.PureComponent<ISMPTEFieldProps, ISMPTEFieldState>
|
|
|
75
76
|
|
|
76
77
|
private onBlur(e?) {
|
|
77
78
|
const val = e ? e.target.value : this.inputRef.current.value;
|
|
78
|
-
const isValid = this.
|
|
79
|
+
const isValid = this.SMTPEValidator(val);
|
|
79
80
|
|
|
80
81
|
if (e && e.key === 'Enter') {
|
|
81
82
|
this.setDuration(isValid, val);
|
|
@@ -88,10 +89,12 @@ class SMPTEField extends React.PureComponent<ISMPTEFieldProps, ISMPTEFieldState>
|
|
|
88
89
|
|
|
89
90
|
private onChange() {
|
|
90
91
|
const val = this.inputRef.current.value;
|
|
91
|
-
const isValid = this.
|
|
92
|
+
const isValid = this.SMTPEValidator(val);
|
|
92
93
|
|
|
93
94
|
if (isValid) {
|
|
94
95
|
this.props.onChange(val);
|
|
96
|
+
} else {
|
|
97
|
+
this.props.onError(isValid);
|
|
95
98
|
}
|
|
96
99
|
}
|
|
97
100
|
|
|
@@ -101,11 +104,13 @@ class SMPTEField extends React.PureComponent<ISMPTEFieldProps, ISMPTEFieldState>
|
|
|
101
104
|
const smpte = getSMPTE(frameRate, val);
|
|
102
105
|
if (smpte && this.props.onBlur) {
|
|
103
106
|
this.props.onBlur(smpte);
|
|
107
|
+
} else {
|
|
108
|
+
this.props.onError(isValid);
|
|
104
109
|
}
|
|
105
110
|
}
|
|
106
111
|
}
|
|
107
112
|
|
|
108
|
-
private
|
|
113
|
+
private SMTPEValidator(val) {
|
|
109
114
|
const isValidSMPTETimeCode = new RegExp(this.regex);
|
|
110
115
|
const isValid = isValidSMPTETimeCode.test(val);
|
|
111
116
|
const errorMsg = isValid ? null : TIMECODE.ERROR;
|
package/src/index.ts
CHANGED
|
@@ -40,6 +40,7 @@ import AssetField from './components/assets/AssetField';
|
|
|
40
40
|
import AssetsTableDropzone from './components/assets/AssetsTableDropzone';
|
|
41
41
|
import AssetsTableNameCell from './components/assets/AssetsTableNameCell';
|
|
42
42
|
import AssetsTableNameFilter from './components/assets/AssetsTableNameFilter';
|
|
43
|
+
import AssetsTableAssetIdFilter from './components/assets/AssetsTableAssetIdFilter';
|
|
43
44
|
import AssetsTableSelectCell from './components/assets/AssetsTableSelectCell';
|
|
44
45
|
import AssetsTableSelectFilter from './components/assets/AssetsTableSelectFilter';
|
|
45
46
|
import AssetsTableTagsCell from './components/assets/AssetsTableTagsCell';
|
|
@@ -159,6 +160,10 @@ import ContextMenuTrigger from './components/context-menu/ContextMenuTrigger';
|
|
|
159
160
|
import CopyPropIdButton from './components/copy-prop-id-button/CopyPropIdButton';
|
|
160
161
|
import Submenu from './components/context-menu/SubMenu';
|
|
161
162
|
import { ConfirmModal, IConfirmModalProps } from './components/confirm-modal/ConfirmModal';
|
|
163
|
+
import AssetsTableAssetIdCell from './components/assets/AssetsTableAssetIdCell';
|
|
164
|
+
import { resetStoryFilter, updateStoryFilter } from './redux/actions/story-filter';
|
|
165
|
+
import storyFilter from './redux/reducers/story-filter';
|
|
166
|
+
import StoryTableNameFilter from './components/assets/StoryTableNameFilter';
|
|
162
167
|
|
|
163
168
|
export {
|
|
164
169
|
AppWrapper,
|
|
@@ -217,6 +222,9 @@ export {
|
|
|
217
222
|
AssetsTableGlobalCell,
|
|
218
223
|
AssetsTableStatusCell,
|
|
219
224
|
AssetsTableNameFilter,
|
|
225
|
+
StoryTableNameFilter,
|
|
226
|
+
AssetsTableAssetIdFilter,
|
|
227
|
+
AssetsTableAssetIdCell,
|
|
220
228
|
AssetsTableNameCell,
|
|
221
229
|
AssetsTableDurationCell,
|
|
222
230
|
AssetsTableRateCell,
|
|
@@ -242,6 +250,8 @@ export {
|
|
|
242
250
|
storyDeleted,
|
|
243
251
|
updateFilters,
|
|
244
252
|
resetFilters,
|
|
253
|
+
updateStoryFilter,
|
|
254
|
+
resetStoryFilter,
|
|
245
255
|
getAssets,
|
|
246
256
|
deleteAssets,
|
|
247
257
|
downloadAssets,
|
|
@@ -256,6 +266,7 @@ export {
|
|
|
256
266
|
deselectAsset,
|
|
257
267
|
resetSelection,
|
|
258
268
|
assetFilters,
|
|
269
|
+
storyFilter,
|
|
259
270
|
assetList,
|
|
260
271
|
assetUploads,
|
|
261
272
|
selectedAssets,
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const storyFilterActions: any = {
|
|
2
|
+
UPDATE: 'storyFilter/UPDATE',
|
|
3
|
+
RESET: 'storyFilter/RESET'
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
export const updateStoryFilter = (newFilters: any): any => ({
|
|
7
|
+
type: storyFilterActions.UPDATE,
|
|
8
|
+
newFilters
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
export const resetStoryFilter = (): any => ({
|
|
12
|
+
type: storyFilterActions.RESET
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
export default storyFilterActions;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import storyFilterActions from '../actions/story-filter';
|
|
2
|
+
|
|
3
|
+
const initialState: any = {
|
|
4
|
+
name: ''
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
const storyFilter = (state = initialState, action): any => {
|
|
8
|
+
switch (action.type) {
|
|
9
|
+
case storyFilterActions.UPDATE:
|
|
10
|
+
return { ...state, ...action.newFilters };
|
|
11
|
+
case storyFilterActions.RESET:
|
|
12
|
+
return { ...initialState };
|
|
13
|
+
default:
|
|
14
|
+
return state;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export default storyFilter;
|