box-ui-elements 23.4.0-beta.27 → 23.4.0-beta.28
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/explorer.js +1 -1
- package/dist/preview.js +1 -1
- package/dist/sidebar.js +1 -1
- package/es/elements/content-sidebar/AddTaskButton.js +18 -4
- package/es/elements/content-sidebar/AddTaskButton.js.flow +18 -1
- package/es/elements/content-sidebar/AddTaskButton.js.map +1 -1
- package/i18n/bn-IN.js +1 -1
- package/i18n/bn-IN.properties +2 -0
- package/i18n/da-DK.properties +2 -0
- package/i18n/de-DE.js +1 -1
- package/i18n/de-DE.properties +2 -0
- package/i18n/en-AU.properties +2 -0
- package/i18n/en-CA.properties +2 -0
- package/i18n/en-GB.properties +2 -0
- package/i18n/en-x-pseudo.js +1017 -1019
- package/i18n/en-x-pseudo.properties +1018 -1020
- package/i18n/es-419.js +1 -1
- package/i18n/es-419.properties +2 -0
- package/i18n/es-ES.js +1 -1
- package/i18n/es-ES.properties +2 -0
- package/i18n/fi-FI.js +1 -1
- package/i18n/fi-FI.properties +2 -0
- package/i18n/fr-CA.js +1 -1
- package/i18n/fr-CA.properties +2 -0
- package/i18n/fr-FR.js +1 -1
- package/i18n/fr-FR.properties +2 -0
- package/i18n/hi-IN.js +1 -1
- package/i18n/hi-IN.properties +2 -0
- package/i18n/it-IT.js +1 -1
- package/i18n/it-IT.properties +2 -0
- package/i18n/ja-JP.js +1 -1
- package/i18n/ja-JP.properties +2 -0
- package/i18n/ko-KR.js +1 -1
- package/i18n/ko-KR.properties +2 -0
- package/i18n/nb-NO.properties +2 -0
- package/i18n/nl-NL.properties +2 -0
- package/i18n/pl-PL.js +1 -1
- package/i18n/pl-PL.properties +2 -0
- package/i18n/pt-BR.js +1 -1
- package/i18n/pt-BR.properties +2 -0
- package/i18n/ru-RU.js +1 -1
- package/i18n/ru-RU.properties +2 -0
- package/i18n/sv-SE.properties +2 -0
- package/i18n/tr-TR.js +1 -1
- package/i18n/tr-TR.properties +2 -0
- package/i18n/zh-CN.js +1 -1
- package/i18n/zh-CN.properties +2 -0
- package/i18n/zh-TW.js +1 -1
- package/i18n/zh-TW.properties +2 -0
- package/package.json +1 -1
- package/src/elements/content-sidebar/AddTaskButton.js +18 -1
- package/src/elements/content-sidebar/__tests__/AddTaskButton.test.js +118 -35
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
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; }
|
|
2
|
+
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; }
|
|
1
3
|
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; }
|
|
2
4
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
3
5
|
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); }
|
|
@@ -20,11 +22,23 @@ class AddTaskButton extends React.Component {
|
|
|
20
22
|
2. Preventing the sidebar from closing keeps the task modal open upon edit and resize
|
|
21
23
|
*/
|
|
22
24
|
_defineProperty(this, "handleClickMenuItem", taskType => {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
+
const {
|
|
26
|
+
history,
|
|
27
|
+
internalSidebarNavigation,
|
|
28
|
+
internalSidebarNavigationHandler,
|
|
29
|
+
routerDisabled
|
|
30
|
+
} = this.props;
|
|
31
|
+
if (routerDisabled && internalSidebarNavigationHandler) {
|
|
32
|
+
internalSidebarNavigationHandler(_objectSpread(_objectSpread({}, internalSidebarNavigation), {}, {
|
|
25
33
|
open: true
|
|
26
|
-
}
|
|
27
|
-
}
|
|
34
|
+
}), true);
|
|
35
|
+
} else {
|
|
36
|
+
history.replace({
|
|
37
|
+
state: {
|
|
38
|
+
open: true
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
28
42
|
this.setState({
|
|
29
43
|
isTaskFormOpen: true,
|
|
30
44
|
taskType
|
|
@@ -8,11 +8,15 @@ import { TASK_TYPE_APPROVAL } from '../../constants';
|
|
|
8
8
|
import type { TaskFormProps } from './activity-feed/task-form/TaskForm';
|
|
9
9
|
import type { TaskType } from '../../common/types/tasks';
|
|
10
10
|
import type { ElementsXhrError } from '../../common/types/api';
|
|
11
|
+
import type { InternalSidebarNavigation, InternalSidebarNavigationHandler } from '../common/types/SidebarNavigation';
|
|
11
12
|
|
|
12
13
|
type Props = {|
|
|
13
14
|
history: RouterHistory,
|
|
15
|
+
internalSidebarNavigation?: InternalSidebarNavigation,
|
|
16
|
+
internalSidebarNavigationHandler?: InternalSidebarNavigationHandler,
|
|
14
17
|
isDisabled: boolean,
|
|
15
18
|
onTaskModalClose: () => void,
|
|
19
|
+
routerDisabled?: boolean,
|
|
16
20
|
taskFormProps: TaskFormProps,
|
|
17
21
|
|};
|
|
18
22
|
|
|
@@ -40,7 +44,20 @@ class AddTaskButton extends React.Component<Props, State> {
|
|
|
40
44
|
2. Preventing the sidebar from closing keeps the task modal open upon edit and resize
|
|
41
45
|
*/
|
|
42
46
|
handleClickMenuItem = (taskType: TaskType) => {
|
|
43
|
-
|
|
47
|
+
const { history, internalSidebarNavigation, internalSidebarNavigationHandler, routerDisabled } = this.props;
|
|
48
|
+
|
|
49
|
+
if (routerDisabled && internalSidebarNavigationHandler) {
|
|
50
|
+
internalSidebarNavigationHandler(
|
|
51
|
+
{
|
|
52
|
+
...internalSidebarNavigation,
|
|
53
|
+
open: true,
|
|
54
|
+
},
|
|
55
|
+
true,
|
|
56
|
+
);
|
|
57
|
+
} else {
|
|
58
|
+
history.replace({ state: { open: true } });
|
|
59
|
+
}
|
|
60
|
+
|
|
44
61
|
this.setState({ isTaskFormOpen: true, taskType });
|
|
45
62
|
};
|
|
46
63
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddTaskButton.js","names":["React","withRouter","AddTaskMenu","TaskModal","TASK_TYPE_APPROVAL","AddTaskButton","Component","constructor","args","_defineProperty","createRef","error","isTaskFormOpen","taskType","
|
|
1
|
+
{"version":3,"file":"AddTaskButton.js","names":["React","withRouter","AddTaskMenu","TaskModal","TASK_TYPE_APPROVAL","AddTaskButton","Component","constructor","args","_defineProperty","createRef","error","isTaskFormOpen","taskType","history","internalSidebarNavigation","internalSidebarNavigationHandler","routerDisabled","props","_objectSpread","open","replace","state","setState","onTaskModalClose","buttonRef","current","focus","e","element","render","isDisabled","taskFormProps","createElement","Fragment","onMenuItemClick","handleClickMenuItem","setAddTaskButtonRef","onSubmitError","handleSubmitError","onSubmitSuccess","handleModalClose","onModalClose","AddTaskButtonComponent"],"sources":["../../../src/elements/content-sidebar/AddTaskButton.js"],"sourcesContent":["// @flow\nimport * as React from 'react';\nimport { withRouter, type RouterHistory } from 'react-router-dom';\n\nimport AddTaskMenu from './AddTaskMenu';\nimport TaskModal from './TaskModal';\nimport { TASK_TYPE_APPROVAL } from '../../constants';\nimport type { TaskFormProps } from './activity-feed/task-form/TaskForm';\nimport type { TaskType } from '../../common/types/tasks';\nimport type { ElementsXhrError } from '../../common/types/api';\nimport type { InternalSidebarNavigation, InternalSidebarNavigationHandler } from '../common/types/SidebarNavigation';\n\ntype Props = {|\n history: RouterHistory,\n internalSidebarNavigation?: InternalSidebarNavigation,\n internalSidebarNavigationHandler?: InternalSidebarNavigationHandler,\n isDisabled: boolean,\n onTaskModalClose: () => void,\n routerDisabled?: boolean,\n taskFormProps: TaskFormProps,\n|};\n\ntype State = {\n error: ?ElementsXhrError,\n isTaskFormOpen: boolean,\n taskType: TaskType,\n};\n\nclass AddTaskButton extends React.Component<Props, State> {\n buttonRef = React.createRef<HTMLButtonElement>();\n\n state = {\n error: null,\n isTaskFormOpen: false,\n taskType: TASK_TYPE_APPROVAL,\n };\n\n static defaultProps = {\n isDisabled: false,\n };\n\n /*\n 1. Pushing the open state into history keeps the sidebar open upon resize and refresh\n 2. Preventing the sidebar from closing keeps the task modal open upon edit and resize\n */\n handleClickMenuItem = (taskType: TaskType) => {\n const { history, internalSidebarNavigation, internalSidebarNavigationHandler, routerDisabled } = this.props;\n\n if (routerDisabled && internalSidebarNavigationHandler) {\n internalSidebarNavigationHandler(\n {\n ...internalSidebarNavigation,\n open: true,\n },\n true,\n );\n } else {\n history.replace({ state: { open: true } });\n }\n\n this.setState({ isTaskFormOpen: true, taskType });\n };\n\n handleModalClose = () => {\n const { onTaskModalClose } = this.props;\n this.setState({ isTaskFormOpen: false, error: null }, () => {\n if (this.buttonRef.current) {\n this.buttonRef.current.focus();\n }\n });\n onTaskModalClose();\n };\n\n handleSubmitError = (e: ElementsXhrError) => this.setState({ error: e });\n\n setAddTaskButtonRef = (element: HTMLButtonElement) => {\n this.buttonRef.current = element;\n };\n\n render() {\n const { isDisabled, taskFormProps } = this.props;\n const { isTaskFormOpen, taskType, error } = this.state;\n\n return (\n <>\n <AddTaskMenu\n isDisabled={isDisabled}\n onMenuItemClick={this.handleClickMenuItem}\n setAddTaskButtonRef={this.setAddTaskButtonRef}\n />\n <TaskModal\n error={error}\n onSubmitError={this.handleSubmitError}\n onSubmitSuccess={this.handleModalClose}\n onModalClose={this.handleModalClose}\n isTaskFormOpen={isTaskFormOpen}\n taskFormProps={taskFormProps}\n taskType={taskType}\n />\n </>\n );\n }\n}\n\nexport { AddTaskButton as AddTaskButtonComponent };\nexport default withRouter(AddTaskButton);\n"],"mappings":"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","ignoreList":[]}
|
package/i18n/bn-IN.js
CHANGED
|
@@ -906,7 +906,7 @@ export default {
|
|
|
906
906
|
"boxui.shareMenu.shortcutOnly": "শুধুমাত্র শর্টকাট",
|
|
907
907
|
"boxui.shareMenu.viewAndDownload": "দেখুন এবং ডাউনলোড করুন",
|
|
908
908
|
"boxui.shareMenu.viewOnly": "শুধুমাত্র দেখুন",
|
|
909
|
-
"boxui.subHeader.metadata": "
|
|
909
|
+
"boxui.subHeader.metadata": "মেটাডেটা",
|
|
910
910
|
"boxui.timeInput.emptyTimeError": "প্রয়োজনীয় ক্ষেত্র। HH:MM A ফর্ম্যাটে একটি সময় লিখুন।",
|
|
911
911
|
"boxui.timeInput.invalidTimeError": "সময়ের ফর্ম্যাট অবৈধ। HH:MM A ফর্ম্যাটে একটি সময় লিখুন।",
|
|
912
912
|
"boxui.unifiedShare.collabAccess": "সহযোগী অ্যাক্সেস",
|
package/i18n/bn-IN.properties
CHANGED
|
@@ -1812,6 +1812,8 @@ boxui.shareMenu.shortcutOnly = শুধুমাত্র শর্টকাট
|
|
|
1812
1812
|
boxui.shareMenu.viewAndDownload = দেখুন এবং ডাউনলোড করুন
|
|
1813
1813
|
# Description of permissions granted to users who have access to the shared link
|
|
1814
1814
|
boxui.shareMenu.viewOnly = শুধুমাত্র দেখুন
|
|
1815
|
+
# Text for metadata button that will open the metadata side panel
|
|
1816
|
+
boxui.subHeader.metadata = মেটাডেটা
|
|
1815
1817
|
# Error message for empty time formats. "HH:MM A" should be localized.
|
|
1816
1818
|
boxui.timeInput.emptyTimeError = প্রয়োজনীয় ক্ষেত্র। HH:MM A ফর্ম্যাটে একটি সময় লিখুন।
|
|
1817
1819
|
# Error message for invalid time formats. "HH:MM A" should be localized.
|
package/i18n/da-DK.properties
CHANGED
|
@@ -1812,6 +1812,8 @@ boxui.shareMenu.shortcutOnly = Kun genvej
|
|
|
1812
1812
|
boxui.shareMenu.viewAndDownload = Se og download
|
|
1813
1813
|
# Description of permissions granted to users who have access to the shared link
|
|
1814
1814
|
boxui.shareMenu.viewOnly = Kun til visning
|
|
1815
|
+
# Text for metadata button that will open the metadata side panel
|
|
1816
|
+
boxui.subHeader.metadata = Metadata
|
|
1815
1817
|
# Error message for empty time formats. "HH:MM A" should be localized.
|
|
1816
1818
|
boxui.timeInput.emptyTimeError = Obligatorisk felt. Indtast et klokkeslæt i formatet TT:MM.
|
|
1817
1819
|
# Error message for invalid time formats. "HH:MM A" should be localized.
|
package/i18n/de-DE.js
CHANGED
|
@@ -906,7 +906,7 @@ export default {
|
|
|
906
906
|
"boxui.shareMenu.shortcutOnly": "Nur Verknüpfung",
|
|
907
907
|
"boxui.shareMenu.viewAndDownload": "Anzeigen und herunterladen",
|
|
908
908
|
"boxui.shareMenu.viewOnly": "Nur anzeigen",
|
|
909
|
-
"boxui.subHeader.metadata": "
|
|
909
|
+
"boxui.subHeader.metadata": "Metadaten",
|
|
910
910
|
"boxui.timeInput.emptyTimeError": "Pflichtfeld. Geben Sie eine Uhrzeit im Format HH:MM ein.",
|
|
911
911
|
"boxui.timeInput.invalidTimeError": "Ungültiges Uhrzeitformat. Geben Sie eine Uhrzeit im Format HH:MM ein.",
|
|
912
912
|
"boxui.unifiedShare.collabAccess": "Zugang für Mitarbeiter",
|
package/i18n/de-DE.properties
CHANGED
|
@@ -1812,6 +1812,8 @@ boxui.shareMenu.shortcutOnly = Nur Verknüpfung
|
|
|
1812
1812
|
boxui.shareMenu.viewAndDownload = Anzeigen und herunterladen
|
|
1813
1813
|
# Description of permissions granted to users who have access to the shared link
|
|
1814
1814
|
boxui.shareMenu.viewOnly = Nur anzeigen
|
|
1815
|
+
# Text for metadata button that will open the metadata side panel
|
|
1816
|
+
boxui.subHeader.metadata = Metadaten
|
|
1815
1817
|
# Error message for empty time formats. "HH:MM A" should be localized.
|
|
1816
1818
|
boxui.timeInput.emptyTimeError = Pflichtfeld. Geben Sie eine Uhrzeit im Format HH:MM ein.
|
|
1817
1819
|
# Error message for invalid time formats. "HH:MM A" should be localized.
|
package/i18n/en-AU.properties
CHANGED
|
@@ -1812,6 +1812,8 @@ boxui.shareMenu.shortcutOnly = Shortcut only
|
|
|
1812
1812
|
boxui.shareMenu.viewAndDownload = View and download
|
|
1813
1813
|
# Description of permissions granted to users who have access to the shared link
|
|
1814
1814
|
boxui.shareMenu.viewOnly = View only
|
|
1815
|
+
# Text for metadata button that will open the metadata side panel
|
|
1816
|
+
boxui.subHeader.metadata = Metadata
|
|
1815
1817
|
# Error message for empty time formats. "HH:MM A" should be localized.
|
|
1816
1818
|
boxui.timeInput.emptyTimeError = Required field. Enter a time in the format HH:MM A.
|
|
1817
1819
|
# Error message for invalid time formats. "HH:MM A" should be localized.
|
package/i18n/en-CA.properties
CHANGED
|
@@ -1812,6 +1812,8 @@ boxui.shareMenu.shortcutOnly = Shortcut Only
|
|
|
1812
1812
|
boxui.shareMenu.viewAndDownload = View and Download
|
|
1813
1813
|
# Description of permissions granted to users who have access to the shared link
|
|
1814
1814
|
boxui.shareMenu.viewOnly = View Only
|
|
1815
|
+
# Text for metadata button that will open the metadata side panel
|
|
1816
|
+
boxui.subHeader.metadata = Metadata
|
|
1815
1817
|
# Error message for empty time formats. "HH:MM A" should be localized.
|
|
1816
1818
|
boxui.timeInput.emptyTimeError = Required field. Enter a time in the format HH:MM A.
|
|
1817
1819
|
# Error message for invalid time formats. "HH:MM A" should be localized.
|
package/i18n/en-GB.properties
CHANGED
|
@@ -1812,6 +1812,8 @@ boxui.shareMenu.shortcutOnly = Shortcut only
|
|
|
1812
1812
|
boxui.shareMenu.viewAndDownload = View and download
|
|
1813
1813
|
# Description of permissions granted to users who have access to the shared link
|
|
1814
1814
|
boxui.shareMenu.viewOnly = View only
|
|
1815
|
+
# Text for metadata button that will open the metadata side panel
|
|
1816
|
+
boxui.subHeader.metadata = Metadata
|
|
1815
1817
|
# Error message for empty time formats. "HH:MM A" should be localized.
|
|
1816
1818
|
boxui.timeInput.emptyTimeError = Required field. Enter a time in the format HH:MM A.
|
|
1817
1819
|
# Error message for invalid time formats. "HH:MM A" should be localized.
|