@imposium-hub/components 2.5.10-9 → 2.5.10
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/app-wrapper/AppWrapper.js +5 -2
- package/dist/cjs/components/app-wrapper/AppWrapper.js.map +1 -1
- package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +27 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js +243 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.d.ts +28 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js +255 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_BASE_73190.js.map +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +27 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js +243 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +1 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +28 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js +251 -0
- package/dist/cjs/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +1 -0
- package/dist/cjs/components/assets/AssetsTableNameCell.js +2 -2
- package/dist/cjs/components/assets/AssetsTableNameCell.js.map +1 -1
- package/dist/cjs/components/assets/AssetsTypeIcon.js +2 -0
- package/dist/cjs/components/assets/AssetsTypeIcon.js.map +1 -1
- package/dist/cjs/components/card/Card.d.ts +0 -1
- package/dist/cjs/components/card/Card.js +4 -17
- package/dist/cjs/components/card/Card.js.map +1 -1
- package/dist/cjs/components/confirm-modal/ConfirmModal.d.ts +9 -9
- package/dist/cjs/components/confirm-modal/ConfirmModal.js +108 -12
- package/dist/cjs/components/confirm-modal/ConfirmModal.js.map +1 -1
- package/dist/cjs/components/data-table/Paginator.js +7 -51
- package/dist/cjs/components/data-table/Paginator.js.map +1 -1
- package/dist/cjs/components/error-message-preview/ErrorMessagePreview.d.ts +15 -0
- package/dist/cjs/components/error-message-preview/ErrorMessagePreview.js +91 -0
- package/dist/cjs/components/error-message-preview/ErrorMessagePreview.js.map +1 -0
- package/dist/cjs/components/header/Header_BACKUP_73021.d.ts +33 -0
- package/dist/cjs/components/header/Header_BACKUP_73021.js +393 -0
- package/dist/cjs/components/header/Header_BACKUP_73021.js.map +1 -0
- package/dist/cjs/components/header/Header_BASE_73021.d.ts +29 -0
- package/dist/cjs/components/header/Header_BASE_73021.js +376 -0
- package/dist/cjs/components/header/Header_BASE_73021.js.map +1 -0
- package/dist/cjs/components/header/Header_LOCAL_73021.d.ts +33 -0
- package/dist/cjs/components/header/Header_LOCAL_73021.js +382 -0
- package/dist/cjs/components/header/Header_LOCAL_73021.js.map +1 -0
- package/dist/cjs/components/header/Header_REMOTE_73021.d.ts +30 -0
- package/dist/cjs/components/header/Header_REMOTE_73021.js +386 -0
- package/dist/cjs/components/header/Header_REMOTE_73021.js.map +1 -0
- package/dist/cjs/components/smpte-field/SMPTEField.d.ts +1 -2
- package/dist/cjs/components/smpte-field/SMPTEField.js +3 -9
- package/dist/cjs/components/smpte-field/SMPTEField.js.map +1 -1
- package/dist/cjs/components/story-previewer/StoryPreviewer.js +11 -1
- package/dist/cjs/components/story-previewer/StoryPreviewer.js.map +1 -1
- package/dist/cjs/constants/copy.js +2 -2
- package/dist/cjs/constants/copy.js.map +1 -1
- package/dist/cjs/constants/icons.d.ts +1 -0
- package/dist/cjs/constants/icons.js +3 -1
- package/dist/cjs/constants/icons.js.map +1 -1
- package/dist/cjs/constants/variables.d.ts +3 -0
- package/dist/cjs/constants/variables.js +27 -2
- package/dist/cjs/constants/variables.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/redux/actions/asset-list.js +0 -1
- package/dist/cjs/redux/actions/asset-list.js.map +1 -1
- package/dist/cjs/redux/actions/asset-uploads.js +33 -1
- package/dist/cjs/redux/actions/asset-uploads.js.map +1 -1
- package/dist/cjs/redux/reducers/asset-uploads.js +8 -0
- package/dist/cjs/redux/reducers/asset-uploads.js.map +1 -1
- package/dist/cjs/services/API.d.ts +3 -0
- package/dist/cjs/services/API.js +9 -0
- package/dist/cjs/services/API.js.map +1 -1
- package/dist/esm/components/app-wrapper/AppWrapper.js +5 -2
- package/dist/esm/components/app-wrapper/AppWrapper.js.map +1 -1
- package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.d.ts +27 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js +194 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BACKUP_73190.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.d.ts +28 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js +208 -0
- package/dist/esm/components/app-wrapper/AppWrapper_BASE_73190.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.d.ts +27 -0
- package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js +194 -0
- package/dist/esm/components/app-wrapper/AppWrapper_LOCAL_73190.js.map +1 -0
- package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.d.ts +28 -0
- package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js +204 -0
- package/dist/esm/components/app-wrapper/AppWrapper_REMOTE_73190.js.map +1 -0
- package/dist/esm/components/assets/AssetsTableNameCell.js +2 -2
- package/dist/esm/components/assets/AssetsTableNameCell.js.map +1 -1
- package/dist/esm/components/assets/AssetsTypeIcon.js +3 -1
- package/dist/esm/components/assets/AssetsTypeIcon.js.map +1 -1
- package/dist/esm/components/card/Card.d.ts +0 -1
- package/dist/esm/components/card/Card.js +4 -16
- package/dist/esm/components/card/Card.js.map +1 -1
- package/dist/esm/components/confirm-modal/ConfirmModal.d.ts +9 -9
- package/dist/esm/components/confirm-modal/ConfirmModal.js +60 -11
- package/dist/esm/components/confirm-modal/ConfirmModal.js.map +1 -1
- package/dist/esm/components/data-table/Paginator.js +44 -74
- package/dist/esm/components/data-table/Paginator.js.map +1 -1
- package/dist/esm/components/error-message-preview/ErrorMessagePreview.d.ts +15 -0
- package/dist/esm/components/error-message-preview/ErrorMessagePreview.js +35 -0
- package/dist/esm/components/error-message-preview/ErrorMessagePreview.js.map +1 -0
- package/dist/esm/components/header/Header_BACKUP_73021.d.ts +33 -0
- package/dist/esm/components/header/Header_BACKUP_73021.js +336 -0
- package/dist/esm/components/header/Header_BACKUP_73021.js.map +1 -0
- package/dist/esm/components/header/Header_BASE_73021.d.ts +29 -0
- package/dist/esm/components/header/Header_BASE_73021.js +322 -0
- package/dist/esm/components/header/Header_BASE_73021.js.map +1 -0
- package/dist/esm/components/header/Header_LOCAL_73021.d.ts +33 -0
- package/dist/esm/components/header/Header_LOCAL_73021.js +328 -0
- package/dist/esm/components/header/Header_LOCAL_73021.js.map +1 -0
- package/dist/esm/components/header/Header_REMOTE_73021.d.ts +30 -0
- package/dist/esm/components/header/Header_REMOTE_73021.js +329 -0
- package/dist/esm/components/header/Header_REMOTE_73021.js.map +1 -0
- package/dist/esm/components/smpte-field/SMPTEField.d.ts +1 -2
- package/dist/esm/components/smpte-field/SMPTEField.js +3 -9
- package/dist/esm/components/smpte-field/SMPTEField.js.map +1 -1
- package/dist/esm/components/story-previewer/StoryPreviewer.js +12 -2
- package/dist/esm/components/story-previewer/StoryPreviewer.js.map +1 -1
- package/dist/esm/constants/copy.js +2 -2
- package/dist/esm/constants/copy.js.map +1 -1
- package/dist/esm/constants/icons.d.ts +1 -0
- package/dist/esm/constants/icons.js +2 -0
- package/dist/esm/constants/icons.js.map +1 -1
- package/dist/esm/constants/variables.d.ts +3 -0
- package/dist/esm/constants/variables.js +25 -1
- package/dist/esm/constants/variables.js.map +1 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/redux/actions/asset-list.js +0 -1
- package/dist/esm/redux/actions/asset-list.js.map +1 -1
- package/dist/esm/redux/actions/asset-uploads.js +22 -1
- package/dist/esm/redux/actions/asset-uploads.js.map +1 -1
- package/dist/esm/redux/reducers/asset-uploads.js +11 -0
- package/dist/esm/redux/reducers/asset-uploads.js.map +1 -1
- package/dist/esm/services/API.d.ts +3 -0
- package/dist/esm/services/API.js +9 -0
- package/dist/esm/services/API.js.map +1 -1
- package/dist/styles.css +0 -6
- package/dist/styles.less +0 -8
- package/less/components/data-table.less +0 -4
- package/less/components/form-field.less +0 -4
- package/package.json +1 -1
- package/src/components/app-wrapper/AppWrapper.tsx +3 -4
- package/src/components/assets/AssetsTableNameCell.tsx +2 -2
- package/src/components/assets/AssetsTypeIcon.tsx +4 -1
- package/src/components/card/Card.tsx +13 -27
- package/src/components/confirm-modal/ConfirmModal.tsx +80 -19
- package/src/components/data-table/Paginator.tsx +93 -140
- package/src/components/smpte-field/SMPTEField.tsx +3 -8
- package/src/components/story-previewer/StoryPreviewer.tsx +28 -4
- package/src/constants/copy.ts +2 -2
- package/src/constants/icons.tsx +3 -0
- package/src/constants/variables.ts +27 -1
- package/src/index.ts +3 -2
- package/src/redux/actions/asset-list.ts +0 -1
- package/src/redux/actions/asset-uploads.ts +20 -1
- package/src/redux/reducers/asset-uploads.ts +11 -0
- package/src/services/API.ts +15 -0
package/dist/styles.less
CHANGED
|
@@ -1246,10 +1246,6 @@ body{
|
|
|
1246
1246
|
border-top: 0;
|
|
1247
1247
|
background-color: darken(@background, 1%);
|
|
1248
1248
|
|
|
1249
|
-
input[type=number] {
|
|
1250
|
-
-moz-appearance: textfield;
|
|
1251
|
-
}
|
|
1252
|
-
|
|
1253
1249
|
.paginator-input {
|
|
1254
1250
|
.inputMixin;
|
|
1255
1251
|
width: 60px;
|
|
@@ -1379,10 +1375,6 @@ body{
|
|
|
1379
1375
|
padding:4px;
|
|
1380
1376
|
}
|
|
1381
1377
|
|
|
1382
|
-
input[type=number] {
|
|
1383
|
-
-moz-appearance: textfield;
|
|
1384
|
-
}
|
|
1385
|
-
|
|
1386
1378
|
textarea{
|
|
1387
1379
|
height:@inputHeight * 3;
|
|
1388
1380
|
resize:none;
|
package/package.json
CHANGED
|
@@ -8,6 +8,7 @@ import { bindActionCreators } from 'redux';
|
|
|
8
8
|
import { login, clearCachedAuth } from '../../redux/actions/auth';
|
|
9
9
|
import { validateAccessLevel } from '../../Util';
|
|
10
10
|
import { setAccessData } from '../../redux/actions/access';
|
|
11
|
+
import { ConfirmModal } from '../confirm-modal/ConfirmModal';
|
|
11
12
|
|
|
12
13
|
export interface IAppWrapperProps {
|
|
13
14
|
children: React.ReactChildren;
|
|
@@ -84,10 +85,7 @@ class AppWrapper extends React.Component<IAppWrapperProps, IAppWrapperState> {
|
|
|
84
85
|
/*
|
|
85
86
|
Check the auth0 session expiry
|
|
86
87
|
*/
|
|
87
|
-
public componentDidUpdate = (
|
|
88
|
-
prevProps: Readonly<IAppWrapperProps>,
|
|
89
|
-
prevState: Readonly<IAppWrapperState>
|
|
90
|
-
): void => {
|
|
88
|
+
public componentDidUpdate = (prevProps): void => {
|
|
91
89
|
const { auth } = this.props;
|
|
92
90
|
let validAccessLevel: boolean;
|
|
93
91
|
|
|
@@ -286,6 +284,7 @@ class AppWrapper extends React.Component<IAppWrapperProps, IAppWrapperState> {
|
|
|
286
284
|
id='app'
|
|
287
285
|
className='app'>
|
|
288
286
|
{innerContent}
|
|
287
|
+
<ConfirmModal />
|
|
289
288
|
</div>
|
|
290
289
|
);
|
|
291
290
|
};
|
|
@@ -20,7 +20,7 @@ const AssetsTableNameCell: React.FC<IAssetsTableNameCell> = (props: IAssetsTable
|
|
|
20
20
|
const {
|
|
21
21
|
cell: {
|
|
22
22
|
row: {
|
|
23
|
-
original: { name, id, percent: uploadProgress }
|
|
23
|
+
original: { name, id, percent: uploadProgress, error }
|
|
24
24
|
}
|
|
25
25
|
},
|
|
26
26
|
disabled
|
|
@@ -53,7 +53,7 @@ const AssetsTableNameCell: React.FC<IAssetsTableNameCell> = (props: IAssetsTable
|
|
|
53
53
|
text={name}
|
|
54
54
|
/>
|
|
55
55
|
) : (
|
|
56
|
-
<span>{copy.uploads.preparePhase}</span>
|
|
56
|
+
<span>{error ? error : copy.uploads.preparePhase}</span>
|
|
57
57
|
);
|
|
58
58
|
return loader;
|
|
59
59
|
} else {
|
|
@@ -15,7 +15,8 @@ import {
|
|
|
15
15
|
ICON_FILE_CODE,
|
|
16
16
|
ICON_CLAPPERBOARD_PLAY,
|
|
17
17
|
ICON_FILTERS,
|
|
18
|
-
ICON_FILE_UPLOAD
|
|
18
|
+
ICON_FILE_UPLOAD,
|
|
19
|
+
ICON_FILE_ERROR
|
|
19
20
|
} from '../../constants/icons';
|
|
20
21
|
|
|
21
22
|
interface IAssetsTypeIconProps {
|
|
@@ -112,6 +113,8 @@ const AssetsTypeIcon: React.FC<IAssetsTypeIconProps> = (p: IAssetsTypeIconProps)
|
|
|
112
113
|
);
|
|
113
114
|
case 'upload':
|
|
114
115
|
return <span>{ICON_FILE_UPLOAD}</span>;
|
|
116
|
+
case 'error':
|
|
117
|
+
return <span>{ICON_FILE_ERROR}</span>;
|
|
115
118
|
default:
|
|
116
119
|
if (filter === 'multi') {
|
|
117
120
|
return <span>{ICON_FILTERS}</span>;
|
|
@@ -11,7 +11,6 @@ interface ICardProps {
|
|
|
11
11
|
onOpen?: (e: any) => any;
|
|
12
12
|
onClose?: (e: any) => any;
|
|
13
13
|
onToggle?: (toggle: boolean) => any;
|
|
14
|
-
buttons?: any[];
|
|
15
14
|
}
|
|
16
15
|
|
|
17
16
|
interface ICardState {
|
|
@@ -98,7 +97,9 @@ class Card extends React.PureComponent<ICardProps, ICardState> {
|
|
|
98
97
|
|
|
99
98
|
return (
|
|
100
99
|
<div className={`card ${openClass} ${collapsableClass} ${styleClass}`}>
|
|
101
|
-
<div
|
|
100
|
+
<div
|
|
101
|
+
className='card-header'
|
|
102
|
+
onClick={this.evtHandlers.toggleOpen}>
|
|
102
103
|
{this.renderTitle(styleClass)}
|
|
103
104
|
{this.renderButtons()}
|
|
104
105
|
</div>
|
|
@@ -108,36 +109,21 @@ class Card extends React.PureComponent<ICardProps, ICardState> {
|
|
|
108
109
|
}
|
|
109
110
|
|
|
110
111
|
public renderButtons() {
|
|
111
|
-
const { collapsable
|
|
112
|
+
const { collapsable } = this.props;
|
|
112
113
|
const { open } = this.state;
|
|
113
114
|
const buttonIcon = open ? ICON_CARET_UP : ICON_CARET_DOWN;
|
|
114
115
|
|
|
115
|
-
let buttonArray: JSX.Element[];
|
|
116
|
-
|
|
117
|
-
const toggleBtn = (
|
|
118
|
-
<Button
|
|
119
|
-
key='toggleOpen'
|
|
120
|
-
style='subtle'
|
|
121
|
-
onClick={(e) => this.toggleOpen(e)}>
|
|
122
|
-
{buttonIcon}
|
|
123
|
-
</Button>
|
|
124
|
-
);
|
|
125
|
-
|
|
126
|
-
if (buttons && buttons.length > 0) {
|
|
127
|
-
buttonArray = buttons.map((button) => {
|
|
128
|
-
return button;
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
|
|
132
116
|
if (collapsable) {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
117
|
+
return (
|
|
118
|
+
<div className='header-buttons'>
|
|
119
|
+
<Button
|
|
120
|
+
style='subtle'
|
|
121
|
+
onClick={this.evtHandlers.toggleOpen}>
|
|
122
|
+
{buttonIcon}
|
|
123
|
+
</Button>
|
|
124
|
+
</div>
|
|
125
|
+
);
|
|
138
126
|
}
|
|
139
|
-
|
|
140
|
-
return <div className='header-buttons'>{buttonArray}</div>;
|
|
141
127
|
}
|
|
142
128
|
}
|
|
143
129
|
|
|
@@ -1,24 +1,85 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { useCallback, useEffect, useState } from 'react';
|
|
2
2
|
import ReactDOM from 'react-dom';
|
|
3
|
-
import { useHotkeys } from 'react-hotkeys-hook';
|
|
4
3
|
import Modal from '../modal/Modal';
|
|
5
4
|
import Button from '../button/Button';
|
|
6
5
|
import { confirm as copy } from '../../constants/copy';
|
|
7
6
|
import Section from '../section/Section';
|
|
8
7
|
|
|
9
|
-
export
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}) => {
|
|
18
|
-
useHotkeys('enter', onYes, { enableOnFormTags: true });
|
|
19
|
-
const { cancel } = copy;
|
|
8
|
+
export interface IConfirmModalProps {
|
|
9
|
+
onYes: () => void;
|
|
10
|
+
onNo?: () => void;
|
|
11
|
+
title: string;
|
|
12
|
+
yesLabel?: string;
|
|
13
|
+
noLabel?: string;
|
|
14
|
+
showCancel?: boolean;
|
|
15
|
+
}
|
|
20
16
|
|
|
21
|
-
|
|
17
|
+
export const ConfirmModal = () => {
|
|
18
|
+
const [props, setProps] = useState<IConfirmModalProps>(null);
|
|
19
|
+
const [isOpen, setIsOpen] = useState<boolean>(false);
|
|
20
|
+
|
|
21
|
+
const onOpen = (event) => {
|
|
22
|
+
setProps({
|
|
23
|
+
...event.detail
|
|
24
|
+
});
|
|
25
|
+
setIsOpen(true);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const onClose = () => setIsOpen(false);
|
|
29
|
+
|
|
30
|
+
const onYesHandler = () => {
|
|
31
|
+
props.onYes();
|
|
32
|
+
setIsOpen(false);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const onNoHandler = () => {
|
|
36
|
+
props.onNo();
|
|
37
|
+
setIsOpen(false);
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const onYes = useCallback(() => onYesHandler(), [isOpen]);
|
|
41
|
+
|
|
42
|
+
const onNo = useCallback(() => {
|
|
43
|
+
if (props.onNo) {
|
|
44
|
+
onNoHandler();
|
|
45
|
+
} else {
|
|
46
|
+
onClose();
|
|
47
|
+
}
|
|
48
|
+
}, [isOpen]);
|
|
49
|
+
|
|
50
|
+
const onKeyDown = useCallback(
|
|
51
|
+
(e) => {
|
|
52
|
+
if (e.key === 'Enter') {
|
|
53
|
+
e.preventDefault();
|
|
54
|
+
onYesHandler();
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
[isOpen]
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
useEffect(() => {
|
|
61
|
+
window.addEventListener('openconfirmmodal', onOpen);
|
|
62
|
+
return () => {
|
|
63
|
+
window.removeEventListener('openconfirmmodal', onOpen);
|
|
64
|
+
};
|
|
65
|
+
}, []);
|
|
66
|
+
|
|
67
|
+
useEffect(() => {
|
|
68
|
+
if (isOpen) {
|
|
69
|
+
document.addEventListener('keypress', onKeyDown);
|
|
70
|
+
} else {
|
|
71
|
+
document.removeEventListener('keypress', onKeyDown);
|
|
72
|
+
}
|
|
73
|
+
return () => {
|
|
74
|
+
document.removeEventListener('keypress', onKeyDown);
|
|
75
|
+
};
|
|
76
|
+
}, [isOpen, onKeyDown]);
|
|
77
|
+
|
|
78
|
+
const { cancel, yes, no } = copy;
|
|
79
|
+
const noLabel = props?.noLabel ? props.noLabel : no;
|
|
80
|
+
const yesLabel = props?.yesLabel ? props.yesLabel : yes;
|
|
81
|
+
|
|
82
|
+
const modal = isOpen && (
|
|
22
83
|
<Modal
|
|
23
84
|
onRequestClose={onClose}
|
|
24
85
|
wrapperStyle={{
|
|
@@ -27,16 +88,16 @@ export const ConfirmModal = ({
|
|
|
27
88
|
}}
|
|
28
89
|
style={{
|
|
29
90
|
width: '400px',
|
|
30
|
-
height: '
|
|
91
|
+
height: '14%',
|
|
31
92
|
top: 'calc(50% - 150px)',
|
|
32
93
|
left: 'calc((100% - 400px) / 2)'
|
|
33
94
|
}}
|
|
34
95
|
isOpen={true}>
|
|
35
96
|
<Section>
|
|
36
97
|
<div className='confirm-modal'>
|
|
37
|
-
<p>{title}</p>
|
|
98
|
+
<p>{props.title}</p>
|
|
38
99
|
<div className='confirm-buttons'>
|
|
39
|
-
{showCancel ? (
|
|
100
|
+
{props.showCancel ? (
|
|
40
101
|
<Button
|
|
41
102
|
onClick={onClose}
|
|
42
103
|
size='large'
|
|
@@ -48,14 +109,14 @@ export const ConfirmModal = ({
|
|
|
48
109
|
onClick={onNo}
|
|
49
110
|
size='large'
|
|
50
111
|
color='default'>
|
|
51
|
-
{
|
|
112
|
+
{noLabel}
|
|
52
113
|
</Button>
|
|
53
114
|
<Button
|
|
54
115
|
onClick={onYes}
|
|
55
116
|
size='large'
|
|
56
117
|
style='bold'
|
|
57
118
|
color='primary'>
|
|
58
|
-
{
|
|
119
|
+
{yesLabel}
|
|
59
120
|
</Button>
|
|
60
121
|
</div>
|
|
61
122
|
</div>
|
|
@@ -26,149 +26,102 @@ 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
|
+
<section className='ip-table-pagination'>
|
|
31
|
+
<span>
|
|
32
|
+
<Button
|
|
33
|
+
style='subtle'
|
|
34
|
+
size='small'
|
|
35
|
+
tooltip='Go to first page'
|
|
36
|
+
disabled={!canPreviousPage}
|
|
37
|
+
onClick={() => gotoPage(1, pageSize)}>
|
|
38
|
+
{ICON_ANGLE_DOUBLE_LEFT}
|
|
39
|
+
</Button>
|
|
40
|
+
<Button
|
|
41
|
+
style='subtle'
|
|
42
|
+
size='small'
|
|
43
|
+
tooltip='Go to previous page'
|
|
44
|
+
disabled={!canPreviousPage}
|
|
45
|
+
onClick={() => previousPage()}>
|
|
46
|
+
{ICON_ANGLE_LEFT}
|
|
47
|
+
</Button>
|
|
48
|
+
<Button
|
|
49
|
+
style='subtle'
|
|
50
|
+
size='small'
|
|
51
|
+
tooltip='Go to next page'
|
|
52
|
+
disabled={!canNextPage}
|
|
53
|
+
onClick={() => nextPage()}>
|
|
54
|
+
{ICON_ANGLE_RIGHT}
|
|
55
|
+
</Button>
|
|
56
|
+
<Button
|
|
57
|
+
style='subtle'
|
|
58
|
+
size='small'
|
|
59
|
+
tooltip='Go to last page'
|
|
60
|
+
disabled={!canNextPage}
|
|
61
|
+
onClick={() => gotoPage(pageCount, pageSize)}>
|
|
62
|
+
{ICON_ANGLE_DOUBLE_RIGHT}
|
|
63
|
+
</Button>
|
|
64
|
+
|
|
65
65
|
<span>
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
disabled={!canPreviousPage}
|
|
71
|
-
onClick={() => gotoPage(1, pageSize)}>
|
|
72
|
-
{ICON_ANGLE_DOUBLE_LEFT}
|
|
73
|
-
</Button>
|
|
74
|
-
<Button
|
|
75
|
-
style='subtle'
|
|
76
|
-
size='small'
|
|
77
|
-
tooltip='Go to previous page'
|
|
78
|
-
disabled={!canPreviousPage}
|
|
79
|
-
onClick={() => previousPage()}>
|
|
80
|
-
{ICON_ANGLE_LEFT}
|
|
81
|
-
</Button>
|
|
82
|
-
<Button
|
|
83
|
-
style='subtle'
|
|
84
|
-
size='small'
|
|
85
|
-
tooltip='Go to next page'
|
|
86
|
-
disabled={!canNextPage}
|
|
87
|
-
onClick={() => nextPage()}>
|
|
88
|
-
{ICON_ANGLE_RIGHT}
|
|
89
|
-
</Button>
|
|
90
|
-
<Button
|
|
91
|
-
style='subtle'
|
|
92
|
-
size='small'
|
|
93
|
-
tooltip='Go to last page'
|
|
94
|
-
disabled={!canNextPage}
|
|
95
|
-
onClick={() => gotoPage(pageCount, pageSize)}>
|
|
96
|
-
{ICON_ANGLE_DOUBLE_RIGHT}
|
|
97
|
-
</Button>
|
|
98
|
-
|
|
99
|
-
<span>
|
|
100
|
-
{copy.table.page}
|
|
101
|
-
<strong>
|
|
102
|
-
{getPageIndex} of {pageCount}
|
|
103
|
-
</strong>
|
|
104
|
-
|
|
105
|
-
</span>
|
|
106
|
-
<span>
|
|
107
|
-
{copy.table.goToPage}
|
|
108
|
-
<input
|
|
109
|
-
className='paginator-input'
|
|
110
|
-
type='number'
|
|
111
|
-
placeholder={getPageIndex.toString()}
|
|
112
|
-
onChange={(e) => {
|
|
113
|
-
const input = e.target.value;
|
|
114
|
-
const inputNum = Number(input);
|
|
115
|
-
let next: number;
|
|
116
|
-
|
|
117
|
-
clearTimeout(textInputTimeout);
|
|
118
|
-
|
|
119
|
-
if (!input || inputNum < 1 || inputNum > pageCount) {
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
if (inputNum >= 1 && inputNum <= pageCount) {
|
|
124
|
-
next = inputNum;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
textInputTimeout = window.setTimeout(
|
|
128
|
-
() => gotoPage(next, pageSize),
|
|
129
|
-
1000
|
|
130
|
-
);
|
|
131
|
-
}}
|
|
132
|
-
onBlur={() => onGoToPageBlur()}
|
|
133
|
-
onKeyDown={(e) => onGoToPageKeyDown(e)}
|
|
134
|
-
/>
|
|
135
|
-
</span>
|
|
66
|
+
{copy.table.page}
|
|
67
|
+
<strong>
|
|
68
|
+
{pageIndex} of {pageCount}
|
|
69
|
+
</strong>
|
|
136
70
|
|
|
137
|
-
<span>
|
|
138
|
-
{copy.table.itemsPerPage}
|
|
139
|
-
<input
|
|
140
|
-
className='paginator-input'
|
|
141
|
-
type='number'
|
|
142
|
-
placeholder={getItemsPerPage.toString()}
|
|
143
|
-
min={1}
|
|
144
|
-
onChange={(e) => {
|
|
145
|
-
const input = e.target.value;
|
|
146
|
-
const inputNum = Number(input);
|
|
147
|
-
|
|
148
|
-
clearTimeout(textInputTimeout);
|
|
149
|
-
|
|
150
|
-
if (!input || inputNum < 1) {
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
setItemsPerPage(inputNum);
|
|
155
|
-
|
|
156
|
-
textInputTimeout = window.setTimeout(
|
|
157
|
-
() => onItemsPerPage(inputNum),
|
|
158
|
-
1000
|
|
159
|
-
);
|
|
160
|
-
}}
|
|
161
|
-
onBlur={() => onItemsPerPageBlur()}
|
|
162
|
-
onKeyDown={(e) => onItemsPerPageKeyDown(e)}
|
|
163
|
-
/>
|
|
164
|
-
</span>
|
|
165
71
|
</span>
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
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
|
+
/>
|
|
169
96
|
</span>
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
};
|
|
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
|
+
|
|
121
|
+
<span className='total-assets'>
|
|
122
|
+
{copy.table.total} <strong>{totalItems || 0}</strong>
|
|
123
|
+
</span>
|
|
124
|
+
</section>
|
|
125
|
+
);
|
|
173
126
|
|
|
174
127
|
export default Paginator;
|
|
@@ -12,7 +12,6 @@ interface ISMPTEFieldProps {
|
|
|
12
12
|
width?: string | number;
|
|
13
13
|
onChange?(e): void;
|
|
14
14
|
onBlur?(e): void;
|
|
15
|
-
onError?(e): void;
|
|
16
15
|
info?: string;
|
|
17
16
|
labelPosition?: string;
|
|
18
17
|
labelWidth?: string | number;
|
|
@@ -76,7 +75,7 @@ class SMPTEField extends React.PureComponent<ISMPTEFieldProps, ISMPTEFieldState>
|
|
|
76
75
|
|
|
77
76
|
private onBlur(e?) {
|
|
78
77
|
const val = e ? e.target.value : this.inputRef.current.value;
|
|
79
|
-
const isValid = this.
|
|
78
|
+
const isValid = this.smptValidator(val);
|
|
80
79
|
|
|
81
80
|
if (e && e.key === 'Enter') {
|
|
82
81
|
this.setDuration(isValid, val);
|
|
@@ -89,12 +88,10 @@ class SMPTEField extends React.PureComponent<ISMPTEFieldProps, ISMPTEFieldState>
|
|
|
89
88
|
|
|
90
89
|
private onChange() {
|
|
91
90
|
const val = this.inputRef.current.value;
|
|
92
|
-
const isValid = this.
|
|
91
|
+
const isValid = this.smptValidator(val);
|
|
93
92
|
|
|
94
93
|
if (isValid) {
|
|
95
94
|
this.props.onChange(val);
|
|
96
|
-
} else {
|
|
97
|
-
this.props.onError(isValid);
|
|
98
95
|
}
|
|
99
96
|
}
|
|
100
97
|
|
|
@@ -104,13 +101,11 @@ class SMPTEField extends React.PureComponent<ISMPTEFieldProps, ISMPTEFieldState>
|
|
|
104
101
|
const smpte = getSMPTE(frameRate, val);
|
|
105
102
|
if (smpte && this.props.onBlur) {
|
|
106
103
|
this.props.onBlur(smpte);
|
|
107
|
-
} else {
|
|
108
|
-
this.props.onError(isValid);
|
|
109
104
|
}
|
|
110
105
|
}
|
|
111
106
|
}
|
|
112
107
|
|
|
113
|
-
private
|
|
108
|
+
private smptValidator(val) {
|
|
114
109
|
const isValidSMPTETimeCode = new RegExp(this.regex);
|
|
115
110
|
const isValid = isValidSMPTETimeCode.test(val);
|
|
116
111
|
const errorMsg = isValid ? null : TIMECODE.ERROR;
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { IImposiumAPI } from '../../services/API';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
VARIABLE_TYPES,
|
|
5
|
+
BOOLEAN_DEFAULT_OPTIONS,
|
|
6
|
+
colorPresets,
|
|
7
|
+
formatColor
|
|
8
|
+
} from '../../constants/variables';
|
|
4
9
|
import { OUTPUT_TYPES } from '../../constants/previewer';
|
|
5
10
|
import TextField from '../text-field/TextField';
|
|
6
11
|
import Button from '../button/Button';
|
|
@@ -23,6 +28,7 @@ import LogViewer from '../log-viewer/LogViewer';
|
|
|
23
28
|
import { connect } from 'react-redux';
|
|
24
29
|
import { ICON_DOWNLOAD, ICON_CLIPBOARD } from '../../constants/icons';
|
|
25
30
|
import AudioPlayer from '../players/AudioPlayer';
|
|
31
|
+
import ColorField from '../color-field/ColorField';
|
|
26
32
|
|
|
27
33
|
interface IStoryPreviewerProps {
|
|
28
34
|
api: IImposiumAPI;
|
|
@@ -137,15 +143,14 @@ class StoryPreviewer extends React.PureComponent<IStoryPreviewerProps, IStoryPre
|
|
|
137
143
|
const { variables } = this.props;
|
|
138
144
|
const inventoryOverrides = this.props.editor?.inventoryOverrides;
|
|
139
145
|
const newInv = {};
|
|
140
|
-
|
|
141
146
|
for (const i in variables) {
|
|
142
147
|
if (variables.hasOwnProperty(i)) {
|
|
143
148
|
const override = inventoryOverrides ? inventoryOverrides[i] : null;
|
|
144
149
|
const inv = variables[i];
|
|
145
|
-
newInv[inv.id] =
|
|
150
|
+
newInv[inv.id] =
|
|
151
|
+
override !== null ? override : this.getVariableValue(inv.previewItem);
|
|
146
152
|
}
|
|
147
153
|
}
|
|
148
|
-
|
|
149
154
|
return newInv;
|
|
150
155
|
}
|
|
151
156
|
|
|
@@ -230,6 +235,11 @@ class StoryPreviewer extends React.PureComponent<IStoryPreviewerProps, IStoryPre
|
|
|
230
235
|
}
|
|
231
236
|
}
|
|
232
237
|
|
|
238
|
+
private colorInputChanged(key, value) {
|
|
239
|
+
const color = formatColor(value);
|
|
240
|
+
this.variableInputChanged(key, color);
|
|
241
|
+
}
|
|
242
|
+
|
|
233
243
|
private variableInputChanged(key, value) {
|
|
234
244
|
const inventory = { ...this.state.inventory };
|
|
235
245
|
inventory[key] = value;
|
|
@@ -397,6 +407,20 @@ class StoryPreviewer extends React.PureComponent<IStoryPreviewerProps, IStoryPre
|
|
|
397
407
|
</FieldWrapper>
|
|
398
408
|
);
|
|
399
409
|
break;
|
|
410
|
+
case VARIABLE_TYPES.COLOR:
|
|
411
|
+
const value = inventory[inv.id] ? inventory[inv.id] : 'rgba(0,0,0,1)';
|
|
412
|
+
fields.push(
|
|
413
|
+
<ColorField
|
|
414
|
+
label={inv.name}
|
|
415
|
+
labelPosition='top'
|
|
416
|
+
enableAlpha={true}
|
|
417
|
+
presetColors={colorPresets}
|
|
418
|
+
value={value}
|
|
419
|
+
pickerPosition='bottom'
|
|
420
|
+
onChange={(v) => this.colorInputChanged(inv.id, v)}
|
|
421
|
+
/>
|
|
422
|
+
);
|
|
423
|
+
break;
|
|
400
424
|
}
|
|
401
425
|
}
|
|
402
426
|
}
|