@scaleflex/widget-preupload-processors 0.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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2019 scaleflex
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,155 @@
1
+ # `@scaleflex/widget-preupload-processors`
2
+
3
+ [![Plugins][plugins-image]](#plugins)
4
+ [![Website][filerobot-image]][sfx-url]
5
+ [![Version][filerobot-version]][version-url]
6
+ [![Scaleflex team][made-by-image]][sfx-url]
7
+ [![License][license-image]][license-url]
8
+ [![CodeSandbox][codeSandbox-image]][codeSandbox-url]
9
+
10
+
11
+ <div align='center'>
12
+ <img title="Scaleflex Widget logo" alt="Scaleflex Widget logo" src="https://cdn.scaleflex.com/plugins/filerobot-widget/assets/filerobot_widget_logo_with_fire.png?vh=b2ff09" width="140"/>
13
+ </div>
14
+
15
+ A processor which applies some functionalities for the images before uploading process in [Scaleflex Media Asset Widget](https://www.npmjs.com/package/@scaleflex/widget-core).
16
+
17
+ ## Usage
18
+
19
+ ### NPM
20
+
21
+ ```bash
22
+ npm install --save @scaleflex/widget-preupload-processors
23
+ ```
24
+ ### YARN
25
+
26
+ ```bash
27
+ yarn add @scaleflex/widget-preupload-processors
28
+ ```
29
+
30
+ then
31
+
32
+ ```js
33
+ import PreUploadProcessors from '@scaleflex/widget-preupload-processors'
34
+ ...
35
+ ...
36
+ ...
37
+ scaleflexWidget.use(PreUploadProcessors, propertiesObject)
38
+ ```
39
+
40
+ ### CDN
41
+
42
+ The plugin from CDN is found inside `Scaleflex` global object `Scaleflex.PreUploadProcessors`
43
+
44
+ ```js
45
+ const PreUploadProcessors = window.ScaleflexWidget.PreUploadProcessors
46
+ ...
47
+ ...
48
+ ...
49
+ scaleflexWidget.use(PreUploadProcessors, propertiesObject)
50
+ ```
51
+
52
+ ### Plugin's styles
53
+
54
+ ```js
55
+ import '@scaleflex/widget-core/dist/style.css'
56
+ import '@scaleflex/widget-preupload-processors/dist/style.css'
57
+ ```
58
+
59
+ or if you prefer the minified version
60
+
61
+ ```js
62
+ import '@scaleflex/widget-core/dist/style.min.css'
63
+ import '@scaleflex/widget-preupload-processors/dist/style.min.css'
64
+ ```
65
+
66
+ > The plugin's css file should be imported after the [Core's css file](../@scaleflex/widget-core/#modules-styles) for having the styles shown correctly.
67
+
68
+
69
+ ## Properties
70
+
71
+ ### `imageProcessorByDefault`
72
+
73
+ <u>Type:</u> `boolean`
74
+
75
+ <u>Default:</u> `false`
76
+
77
+ If `true` the processing of image before upload checkbox would be default checked in the upload settings of uploading panel if there are any images selected, otherwise the checkbox will be default un-checked.
78
+
79
+ ### `isUserAllowedToOptimize`
80
+
81
+ <u>Type:</u> `boolean`
82
+
83
+ <u>Default:</u> `true`
84
+
85
+ If `false` the processing of image before upload will be disabled if there are any images selected, otherwise the processing will be enabled.
86
+
87
+ ### `videoProcessorByDefault`
88
+
89
+ <u>Type:</u> `boolean`
90
+
91
+ <u>Default:</u> `false`
92
+
93
+ If `true` the processing of video before upload checkbox would be default checked in the upload settings of uploading panel if there are any videos selected, otherwise the checkbox will be default un-checked.
94
+
95
+ ### `imageOperations`
96
+
97
+ <u>Type:</u> `object`
98
+
99
+ <u>Default:</u> `null`
100
+
101
+ The operations to be available to the user as options to choose from which to apply on the images before uploading, till now the supported operations:
102
+ - #### `resize` - (*object* - required): Show user inputs for the user to choose the width & height of resizing, with respecting the passed values in `width, height` properties which refers to the max. width & max. height respectively, *show following example*.
103
+
104
+ example,
105
+
106
+ ```js
107
+ {
108
+ resize: {
109
+ width: 2000, // max width the user could reach
110
+ height: 2000 // max height the user could reach
111
+ }
112
+ }
113
+ ```
114
+
115
+ ### `videoTranscodingOptions`
116
+
117
+ <u>Type:</u> `object`
118
+
119
+ <u>Default:</u>
120
+
121
+ ```js
122
+ {
123
+ resolutions: ['auto', 'hq', 'desktop', 'tablet', 'mobile', 'sample'],
124
+ protocols: ['HLS', 'DASH'],
125
+ defaultResolution: 'auto',
126
+ defaultProtocol: 'HLS'
127
+ }
128
+ ```
129
+
130
+ The options available for video transcoding shown in the UI controls with its default options.
131
+
132
+ ### `locale`
133
+
134
+ <u>Type:</u> `object`
135
+
136
+ <u>Default:</u> default locales inside `lib/defaultLocale.js`.
137
+
138
+ Customizing some of the translations or the language's strings and replace the default locale.
139
+
140
+ <!-- Variables -->
141
+
142
+ [npm-url]: https://www.npmjs.com/package/@scaleflex/widget-preupload-processors
143
+ [license-url]: https://opensource.org/licenses/MIT
144
+ [sfx-url]: https://www.scaleflex.com/
145
+ [version-url]: https://www.npmjs.com/package/@scaleflex/widget-preupload-processors
146
+ [codeSandbox-url]: https://codesandbox.io/s/filerobot-widget-v3-c5l9th
147
+
148
+
149
+ [npm-image]: https://img.shields.io/npm/v/@telus/remark-config.svg?style=for-the-badge&logo=npm
150
+ [license-image]: https://img.shields.io/badge/license-MIT-blue.svg?style=for-the-badge
151
+ [made-by-image]: https://img.shields.io/badge/%3C%2F%3E%20with%20%E2%99%A5%20by-the%20Scaleflex%20team-6986fa.svg?style=for-the-badge
152
+ [plugins-image]: https://img.shields.io/static/v1?label=Scaleflex&message=Plugins&color=yellow&style=for-the-badge
153
+ [filerobot-image]: https://img.shields.io/static/v1?label=Scaleflex&message=website&color=orange&style=for-the-badge
154
+ [filerobot-version]: https://img.shields.io/npm/v/@scaleflex/widget-preupload-processors?label=Version&style=for-the-badge&logo=npm
155
+ [codeSandbox-image]: https://img.shields.io/badge/CodeSandbox-black?style=for-the-badge&logo=CodeSandbox
@@ -0,0 +1,15 @@
1
+ var VIDEO_TRANSCODING = {
2
+ resolutions: ['auto', 'hq', 'desktop', 'tablet', 'mobile', 'sample'],
3
+ protocols: [{
4
+ label: 'HLS',
5
+ value: 'hls'
6
+ }
7
+ // commented because DASH transcoding is not working, task: https://scaleflexhq.atlassian.net/browse/FRA-5131
8
+ // TODO: uncomment when issue is fixed
9
+ // { label: 'DASH', value: 'dash' },
10
+ // { label: 'HLS & DASH', value: 'hls,dash' }
11
+ ],
12
+ defaultResolution: 'auto',
13
+ defaultProtocol: 'hls'
14
+ };
15
+ export default VIDEO_TRANSCODING;
@@ -0,0 +1,30 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
6
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
+ import { PLUGINS_IDS } from '@scaleflex/widget-utils/lib/constants';
8
+ import { createSlice } from '@reduxjs/toolkit';
9
+ var initialState = {
10
+ videoTranscoding: {},
11
+ isUserAllowedToOptimize: false,
12
+ isVideoProcessActive: false,
13
+ imageOperation: {},
14
+ isImageProcessActive: false
15
+ };
16
+ var commonSlice = createSlice({
17
+ name: PLUGINS_IDS.PREUPLOAD_PROCESSORS,
18
+ initialState: initialState,
19
+ reducers: {
20
+ preUpProcessorsCommonStateUpdated: function preUpProcessorsCommonStateUpdated(state, action) {
21
+ return _objectSpread(_objectSpread({}, state), action.payload);
22
+ }
23
+ }
24
+ });
25
+ var preUpProcessorsCommonStateUpdated = commonSlice.actions.preUpProcessorsCommonStateUpdated;
26
+ export { preUpProcessorsCommonStateUpdated };
27
+ export var selectPreUpProcessorsCommonState = function selectPreUpProcessorsCommonState(state) {
28
+ return state[PLUGINS_IDS.PREUPLOAD_PROCESSORS];
29
+ };
30
+ export default commonSlice.reducer;
@@ -0,0 +1,94 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
6
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
+ import { Fragment } from 'react';
8
+ import { useDispatch, useSelector } from 'react-redux';
9
+ import Styled from './PreProcessor.styled';
10
+ import { preUpProcessorsCommonStateUpdated, selectPreUpProcessorsCommonState } from '../common.slice';
11
+ import ProcessorToggle from './ProcessorToggle';
12
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
13
+ var MIN_DIMENSION = 0;
14
+ var ImageAndPdfProcessor = function ImageAndPdfProcessor(_ref) {
15
+ var i18n = _ref.i18n,
16
+ pluginOpts = _ref.pluginOpts;
17
+ var dispatch = useDispatch();
18
+ var imageOperation = useSelector(function (state) {
19
+ return selectPreUpProcessorsCommonState(state).imageOperation;
20
+ });
21
+ var isImageProcessActive = useSelector(function (state) {
22
+ return selectPreUpProcessorsCommonState(state).isImageProcessActive;
23
+ });
24
+ var isUserAllowedToOptimize = useSelector(function (state) {
25
+ return selectPreUpProcessorsCommonState(state).isUserAllowedToOptimize || false;
26
+ });
27
+ var imageOperations = pluginOpts.imageOperations;
28
+ var imageDimension = {
29
+ width: i18n('preuploadMaxWidth'),
30
+ height: i18n('preuploadMaxHeight')
31
+ };
32
+ var toggleImageProcessor = function toggleImageProcessor(e) {
33
+ dispatch(preUpProcessorsCommonStateUpdated({
34
+ isImageProcessActive: e.target.checked
35
+ }));
36
+ };
37
+ var updateImageOperation = function updateImageOperation(newState) {
38
+ dispatch(preUpProcessorsCommonStateUpdated({
39
+ imageOperation: _objectSpread(_objectSpread({}, imageOperation), newState)
40
+ }));
41
+ };
42
+ var updateImageOperationVals = function updateImageOperationVals(newState) {
43
+ return updateImageOperation({
44
+ values: _objectSpread(_objectSpread({}, imageOperation.values), newState)
45
+ });
46
+ };
47
+ var changeWidthOrHeight = function changeWidthOrHeight(key, value) {
48
+ var nextValues = _defineProperty({}, key, value >= MIN_DIMENSION ? +value : MIN_DIMENSION);
49
+ updateImageOperationVals(nextValues);
50
+ };
51
+ var renderOperationOption = function renderOperationOption(optionName) {
52
+ var _imageOperation$value;
53
+ var _onChange = function onChange(value) {
54
+ return ['width', 'height'].includes(optionName) ? changeWidthOrHeight(optionName, value) : updateImageOperation(_defineProperty({}, optionName, value));
55
+ };
56
+ var optionValue = imageOperations[imageOperation.name][optionName];
57
+ return /*#__PURE__*/_jsx(Styled.OperationOptionWrapper, {
58
+ children: /*#__PURE__*/_jsx(Fragment, {
59
+ children: /*#__PURE__*/_jsx(Styled.InputGroup, {
60
+ disabled: !isImageProcessActive || !isUserAllowedToOptimize,
61
+ label: imageDimension[optionName],
62
+ iconEnd: "px",
63
+ inputProps: {
64
+ type: 'number',
65
+ min: 0
66
+ },
67
+ value: ((_imageOperation$value = imageOperation.values[optionName]) !== null && _imageOperation$value !== void 0 ? _imageOperation$value : optionValue).toString(),
68
+ onChange: function onChange(_ref2) {
69
+ var target = _ref2.target;
70
+ return _onChange(target.value);
71
+ }
72
+ })
73
+ }, optionName)
74
+ }, optionName);
75
+ };
76
+ return /*#__PURE__*/_jsx(_Fragment, {
77
+ children: /*#__PURE__*/_jsxs(Styled.SettingsContainer, {
78
+ children: [/*#__PURE__*/_jsx(Styled.UploadProcessorTitle, {
79
+ children: i18n('preuploadOptimizeImagesTitle')
80
+ }), /*#__PURE__*/_jsx(ProcessorToggle, {
81
+ toggleText: i18n('preuploadOptimizeImagesSubTitle'),
82
+ tooltipText: i18n('preuploadQuickUploadModeHint'),
83
+ isProcessActive: isImageProcessActive,
84
+ isProcessEnabled: isUserAllowedToOptimize,
85
+ toggleProcessor: toggleImageProcessor
86
+ }), /*#__PURE__*/_jsx(Styled.OperationsContainer, {
87
+ children: /*#__PURE__*/_jsx(Styled.Operation, {
88
+ children: Object.keys(imageOperations[imageOperation.name]).map(renderOperationOption)
89
+ })
90
+ })]
91
+ })
92
+ });
93
+ };
94
+ export default ImageAndPdfProcessor;
@@ -0,0 +1,80 @@
1
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17, _templateObject18;
2
+ function _taggedTemplateLiteral(e, t) { return t || (t = e.slice(0)), Object.freeze(Object.defineProperties(e, { raw: { value: Object.freeze(t) } })); }
3
+ import { FV, PC, PSH } from '@scaleflex/widget-common';
4
+ import styled, { css } from 'styled-components';
5
+ import { TooltipV2, RadioGroup, StatusLabel as SfxLabel, InputGroup as SfxInputGroup } from '@scaleflex/ui/core';
6
+ import { InfoOutline } from '@scaleflex/icons';
7
+ var UploadSettingsContainer = styled.div(function (_ref) {
8
+ var _ref$theme = _ref.theme,
9
+ palette = _ref$theme.palette,
10
+ breakpoints = _ref$theme.breakpoints,
11
+ shadows = _ref$theme.shadows;
12
+ return css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n color: ", ";\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n background: ", ";\n box-shadow: ", ";\n height: 100%;\n padding: 24px 24px 8px 24px;\n width: 302px;\n overflow-y: auto;\n\n ", " {\n padding: 24px 24px 8px 24px;\n }\n\n ", " {\n padding: 24px 24px 8px 24px;\n }\n "])), palette[PC.TextPrimary], palette[PC.BackgroundStateless], shadows[PSH.LeftPanelMd], breakpoints.between('lg', 'xxxl'), breakpoints.down('lg'));
13
+ });
14
+ var UploadSettingsTitle = styled.div(function (_ref2) {
15
+ var palette = _ref2.theme.palette;
16
+ return css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n display: flex;\n font-style: normal;\n font-weight: 500;\n font-size: 18px;\n line-height: 27px;\n width: 100%;\n margin-bottom: 16px;\n border-bottom: 1px solid ", ";\n padding-bottom: 16px;\n align-items: center;\n width: 100%;\n "])), palette[PC.BordersSecondary]);
17
+ });
18
+ var UploadProcessorTitle = styled.div(function (_ref3) {
19
+ var palette = _ref3.theme.palette;
20
+ return css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n color: ", ";\n font-weight: 500;\n font-size: 16px;\n line-height: 24px;\n "])), palette[PC.TextPrimary]);
21
+ });
22
+ var UploadProcessorSubTitle = styled.div(function (_ref4) {
23
+ var _ref4$theme = _ref4.theme,
24
+ palette = _ref4$theme.palette,
25
+ typography = _ref4$theme.typography,
26
+ paddingTop = _ref4.paddingTop;
27
+ return css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n ", ";\n color: ", ";\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 0;\n ", "\n width: 100%;\n > label {\n display: flex;\n align-items: center;\n }\n "])), typography.font[FV.InputLg], palette[PC.TextPrimary], paddingTop && 'padding-top: 24px;');
28
+ });
29
+ var UploadOptionLabel = styled.div(function (_ref5) {
30
+ var palette = _ref5.theme.palette,
31
+ disabled = _ref5.disabled;
32
+ return css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n color: ", ";\n font-size: 14px;\n line-height: 16px;\n "])), palette[disabled ? PC.ButtonDisabledText : PC.TextSecondary]);
33
+ });
34
+ var SettingsContainer = styled.div(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n width: 100%;\n &:nth-child(3) {\n margin-top: 40px;\n margin-bottom: 12px;\n }\n "])));
35
+ var OperationOptionWrapper = styled.div(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n &:last-child {\n margin-left: 12px;\n }\n "])));
36
+ var InputGroup = styled(SfxInputGroup)(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n width: 121px;\n padding: 11px 16px;\n max-width: 100%;\n"])));
37
+ var ProcessSelect = styled.div(function (_ref6) {
38
+ var palette = _ref6.theme.palette,
39
+ disabled = _ref6.disabled;
40
+ return css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["\n display: inline-flex;\n flex-direction: column;\n width: 100%;\n margin-bottom: 16px;\n\n > label {\n display: flex;\n align-items: center;\n margin-bottom: 4px;\n font-size: 14px;\n color: ", ";\n line-height: 16px;\n }\n "])), palette[disabled ? PC.ButtonDisabledText : PC.TextSecondary]);
41
+ });
42
+ var ProtocolsRadio = styled(RadioGroup)(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["\n padding-bottom: 12px;\n"])));
43
+ var Protocols = styled.div(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n margin-top: 12px;\n"])));
44
+ var ProtocolWrapper = styled.div(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n margin-right: 16px;\n"])));
45
+ var OperationsContainer = styled.div(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n font-size: 14px;\n"])));
46
+ var Operation = styled.div(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["\n display: flex;\n"])));
47
+ var InfoOutlined = styled(InfoOutline)(_templateObject15 || (_templateObject15 = _taggedTemplateLiteral(["\n margin-left: 4px;\n color: ", ";\n"])), function (_ref7) {
48
+ var palette = _ref7.theme.palette;
49
+ return palette[PC.IconsPrimary];
50
+ });
51
+ var ResumableUploadWrapper = styled.div(_templateObject16 || (_templateObject16 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n width: 100%;\n"])));
52
+ var Label = styled(SfxLabel)(_templateObject17 || (_templateObject17 = _taggedTemplateLiteral(["\n margin-left: 8px;\n background-color: ", ";\n border-radius: 4px;\n font-size: 12px;\n height: 18px;\n width: 32px;\n\n .SfxStatusLabel-Label {\n height: 14px;\n width: 25px;\n }\n\n &:hover {\n background: ", ";\n }\n"])), function (_ref8) {
53
+ var palette = _ref8.theme.palette;
54
+ return palette[PC.Success];
55
+ }, function (_ref9) {
56
+ var palette = _ref9.theme.palette;
57
+ return palette[PC.SuccessHover];
58
+ });
59
+ var ShowMoreTooltip = styled(TooltipV2)(_templateObject18 || (_templateObject18 = _taggedTemplateLiteral(["\n overflow-wrap: anywhere;\n"])));
60
+ var Styled = {
61
+ UploadSettingsContainer: UploadSettingsContainer,
62
+ UploadSettingsTitle: UploadSettingsTitle,
63
+ UploadProcessorTitle: UploadProcessorTitle,
64
+ UploadProcessorSubTitle: UploadProcessorSubTitle,
65
+ UploadOptionLabel: UploadOptionLabel,
66
+ SettingsContainer: SettingsContainer,
67
+ OperationOptionWrapper: OperationOptionWrapper,
68
+ InputGroup: InputGroup,
69
+ ProcessSelect: ProcessSelect,
70
+ Protocols: Protocols,
71
+ ProtocolWrapper: ProtocolWrapper,
72
+ Operation: Operation,
73
+ OperationsContainer: OperationsContainer,
74
+ ProtocolsRadio: ProtocolsRadio,
75
+ InfoOutlined: InfoOutlined,
76
+ ResumableUploadWrapper: ResumableUploadWrapper,
77
+ Label: Label,
78
+ ShowMoreTooltip: ShowMoreTooltip
79
+ };
80
+ export default Styled;
@@ -0,0 +1,33 @@
1
+ import { Select, MenuItem } from '@scaleflex/ui/core';
2
+ import capitalizeFirstLetter from '@scaleflex/widget-utils/lib/capitalizeFirstLetter';
3
+ import Styled from './PreProcessor.styled';
4
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
+ var ProcessSelect = function ProcessSelect(_ref) {
6
+ var title = _ref.title,
7
+ options = _ref.options,
8
+ value = _ref.value,
9
+ onChange = _ref.onChange,
10
+ description = _ref.description,
11
+ style = _ref.style,
12
+ disabled = _ref.disabled;
13
+ return /*#__PURE__*/_jsxs(Styled.ProcessSelect, {
14
+ disabled: disabled,
15
+ children: [/*#__PURE__*/_jsx("label", {
16
+ children: title
17
+ }), /*#__PURE__*/_jsx(Select, {
18
+ disabled: disabled,
19
+ value: value,
20
+ onChange: onChange,
21
+ children: options.map(function (option) {
22
+ var _option$value, _option$value2, _ref2, _option$label, _ref3, _option$label2;
23
+ return /*#__PURE__*/_jsx(MenuItem, {
24
+ active: disabled,
25
+ value: (_option$value2 = option.value) !== null && _option$value2 !== void 0 ? _option$value2 : option,
26
+ primary: (_ref2 = (_option$label = option.label) !== null && _option$label !== void 0 ? _option$label : option.value) !== null && _ref2 !== void 0 ? _ref2 : option,
27
+ children: capitalizeFirstLetter((_ref3 = (_option$label2 = option.label) !== null && _option$label2 !== void 0 ? _option$label2 : option.value) !== null && _ref3 !== void 0 ? _ref3 : option)
28
+ }, (_option$value = option.value) !== null && _option$value !== void 0 ? _option$value : option);
29
+ })
30
+ })]
31
+ });
32
+ };
33
+ export default ProcessSelect;
@@ -0,0 +1,37 @@
1
+ import { TooltipV2, Switcher } from '@scaleflex/ui/core';
2
+ import Styled from './PreProcessor.styled';
3
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
+ var ProcessorToggle = function ProcessorToggle(_ref) {
5
+ var _ref$paddingTop = _ref.paddingTop,
6
+ paddingTop = _ref$paddingTop === void 0 ? null : _ref$paddingTop,
7
+ toggleText = _ref.toggleText,
8
+ tooltipText = _ref.tooltipText,
9
+ isProcessActive = _ref.isProcessActive,
10
+ _ref$isProcessEnabled = _ref.isProcessEnabled,
11
+ isProcessEnabled = _ref$isProcessEnabled === void 0 ? true : _ref$isProcessEnabled,
12
+ _ref$toggleProcessor = _ref.toggleProcessor,
13
+ toggleProcessor = _ref$toggleProcessor === void 0 ? function () {} : _ref$toggleProcessor,
14
+ _ref$tooltipContent = _ref.tooltipContent,
15
+ tooltipContent = _ref$tooltipContent === void 0 ? null : _ref$tooltipContent;
16
+ return /*#__PURE__*/_jsxs(Styled.UploadProcessorSubTitle, {
17
+ paddingTop: paddingTop,
18
+ children: [/*#__PURE__*/_jsxs("label", {
19
+ children: [toggleText, /*#__PURE__*/_jsx(TooltipV2, {
20
+ arrow: true,
21
+ position: "top",
22
+ size: "sm",
23
+ title: tooltipText,
24
+ children: tooltipContent || /*#__PURE__*/_jsx(Styled.InfoOutlined, {
25
+ size: 14
26
+ })
27
+ })]
28
+ }), /*#__PURE__*/_jsx(Switcher, {
29
+ size: "md",
30
+ checked: isProcessActive,
31
+ disabled: !isProcessEnabled,
32
+ readOnly: !isProcessEnabled,
33
+ onChange: toggleProcessor
34
+ })]
35
+ });
36
+ };
37
+ export default ProcessorToggle;
@@ -0,0 +1,63 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
7
+ import { useMemo } from 'react';
8
+ import { useSelector } from 'react-redux';
9
+ import isPdf from '@scaleflex/widget-utils/lib/isPdf';
10
+ import isSvg from '@scaleflex/widget-utils/lib/isSvg';
11
+ import isSupportedVideo from '@scaleflex/widget-utils/lib/isSupportedVideo';
12
+ import isImage from '@scaleflex/widget-utils/lib/isImage';
13
+ import { useExplorer } from '@scaleflex/widget-explorer/lib/hooks';
14
+ import { selectUploadsArray } from '@scaleflex/widget-core/lib/slices/uploads.slice';
15
+ import VideoProcessor from './VideoProcessor';
16
+ import ImageAndPdfProcessor from './ImageAndPdfProcessor';
17
+ import ResumableUploaderProcessor from './ResumableUploaderProcessor';
18
+ import Styled from './PreProcessor.styled';
19
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
20
+ var ProcessorsUI = function ProcessorsUI(_ref) {
21
+ var i18n = _ref.i18n,
22
+ pluginOpts = _ref.pluginOpts;
23
+ var _useExplorer = useExplorer(),
24
+ showResumableUploadSwitcher = _useExplorer.opts.showResumableUploadSwitcher;
25
+ var uploadableFiles = useSelector(selectUploadsArray);
26
+ var _useMemo = useMemo(function () {
27
+ var result = [false, false, false];
28
+ uploadableFiles.forEach(function (file) {
29
+ if (isImage(file) && !isSvg(file)) {
30
+ result[0] = true;
31
+ } else if (isSupportedVideo(file)) {
32
+ result[1] = true;
33
+ } else if (isPdf(file)) {
34
+ result[2] = true;
35
+ }
36
+ if (result[0] && result[1] && result[2]) {
37
+ return result;
38
+ }
39
+ });
40
+ return result;
41
+ }, [uploadableFiles]),
42
+ _useMemo2 = _slicedToArray(_useMemo, 3),
43
+ hasImage = _useMemo2[0],
44
+ hasVideo = _useMemo2[1],
45
+ hasPdf = _useMemo2[2];
46
+ return /*#__PURE__*/_jsxs(Styled.UploadSettingsContainer, {
47
+ children: [/*#__PURE__*/_jsx(Styled.UploadSettingsTitle, {
48
+ children: /*#__PURE__*/_jsx("label", {
49
+ children: i18n('preuploadUploadSettingsLabel')
50
+ })
51
+ }), (hasImage || hasPdf) && /*#__PURE__*/_jsx(ImageAndPdfProcessor, {
52
+ i18n: i18n,
53
+ pluginOpts: pluginOpts
54
+ }), hasVideo && /*#__PURE__*/_jsx(VideoProcessor, {
55
+ i18n: i18n,
56
+ pluginOpts: pluginOpts
57
+ }), showResumableUploadSwitcher && /*#__PURE__*/_jsx(ResumableUploaderProcessor, {
58
+ i18n: i18n,
59
+ uploadableFiles: uploadableFiles
60
+ })]
61
+ });
62
+ };
63
+ export default ProcessorsUI;
@@ -0,0 +1,59 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
7
+ import { useEffect, useState } from 'react';
8
+ import { useSelector } from 'react-redux';
9
+ import { selectUploadCapabilities } from '@scaleflex/widget-core/lib/slices/uploads.slice';
10
+ import useCore from '@scaleflex/widget-core/lib/hooks/useCore';
11
+ import Tus from '@scaleflex/widget-tus';
12
+ import XHRUpload from '@scaleflex/widget-xhr-upload';
13
+ import { PLUGINS_IDS } from '@scaleflex/widget-utils/lib/constants';
14
+ import Styled from './PreProcessor.styled';
15
+ import ProcessorToggle from './ProcessorToggle';
16
+ import { jsx as _jsx } from "react/jsx-runtime";
17
+ var ResumableUploaderProcessor = function ResumableUploaderProcessor(_ref) {
18
+ var i18n = _ref.i18n,
19
+ uploadableFiles = _ref.uploadableFiles;
20
+ var _useSelector = useSelector(selectUploadCapabilities),
21
+ allowResumableUploads = _useSelector.allowResumableUploads;
22
+ var _useCore = useCore(),
23
+ removePlugin = _useCore.removePlugin,
24
+ getPlugin = _useCore.getPlugin,
25
+ use = _useCore.use;
26
+ var tusInstance = getPlugin(PLUGINS_IDS.TUS);
27
+ var XHRUploadInstance = getPlugin(PLUGINS_IDS.XHR_UPLOAD);
28
+ var progressPanelInstance = getPlugin(PLUGINS_IDS.PROGRESS_PANEL);
29
+ var isResumableUploadSwitcherDisabled = (progressPanelInstance === null || progressPanelInstance === void 0 ? void 0 : progressPanelInstance.getUploadingActivitiesIds().length) > 0;
30
+ var _useState = useState(allowResumableUploads),
31
+ _useState2 = _slicedToArray(_useState, 2),
32
+ isResumableUpload = _useState2[0],
33
+ setIsResumableUpload = _useState2[1];
34
+ var handleResumableSwitcher = function handleResumableSwitcher() {
35
+ setIsResumableUpload(!isResumableUpload);
36
+ };
37
+ useEffect(function () {
38
+ if (isResumableUpload) {
39
+ if (XHRUploadInstance) removePlugin(XHRUploadInstance);
40
+ if (!tusInstance) use(Tus, {});
41
+ } else {
42
+ if (tusInstance) removePlugin(tusInstance);
43
+ if (!XHRUploadInstance) use(XHRUpload, {});
44
+ }
45
+ }, [isResumableUpload]);
46
+ return /*#__PURE__*/_jsx(Styled.ResumableUploadWrapper, {
47
+ children: /*#__PURE__*/_jsx(ProcessorToggle, {
48
+ toggleText: i18n('preuploadResumableUploadTitle'),
49
+ tooltipText: i18n('preuploadResumableUploadBetaMsg'),
50
+ tooltipContent: /*#__PURE__*/_jsx(Styled.Label, {
51
+ label: i18n('preuploadResumableUploadBetaTitle')
52
+ }),
53
+ isProcessActive: isResumableUpload,
54
+ toggleProcessor: handleResumableSwitcher,
55
+ isProcessEnabled: !isResumableUploadSwitcherDisabled
56
+ })
57
+ });
58
+ };
59
+ export default ResumableUploaderProcessor;