@finsemble/finsemble-ui 7.2.0 → 7.3.0

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.
Files changed (126) hide show
  1. package/package.json +14 -14
  2. package/react/assets/css/button.css +34 -6
  3. package/react/assets/css/contextMenu.css +118 -0
  4. package/react/assets/css/notificationsCenter.css +3 -214
  5. package/react/assets/css/userPreferences.css +2 -2
  6. package/react/components/common/Checkbox.d.ts +3 -2
  7. package/react/components/common/Checkbox.js +5 -21
  8. package/react/components/common/Checkbox.js.map +1 -1
  9. package/react/components/common/ContextMenu.d.ts +13 -0
  10. package/react/components/common/ContextMenu.js +69 -0
  11. package/react/components/common/ContextMenu.js.map +1 -0
  12. package/react/components/common/DropdownButton.d.ts +0 -4
  13. package/react/components/common/DropdownButton.js +39 -10
  14. package/react/components/common/DropdownButton.js.map +1 -1
  15. package/react/components/common/css/FinsembleToggle.css +0 -1
  16. package/react/components/common/css/application-edit-page.css +3 -4
  17. package/react/components/common/css/checkbox.css +60 -21
  18. package/react/components/common/css/icon.css +2 -2
  19. package/react/components/common/css/toggle.css +4 -1
  20. package/react/components/common/helpers.js +9 -0
  21. package/react/components/common/helpers.js.map +1 -1
  22. package/react/components/common/stories/ContextMenu.stories.d.ts +38 -0
  23. package/react/components/common/stories/ContextMenu.stories.js +70 -0
  24. package/react/components/common/stories/ContextMenu.stories.js.map +1 -0
  25. package/react/components/common/stories/DropdownButton.stories.d.ts +3 -3
  26. package/react/components/common/stories/DropdownButton.stories.js +11 -10
  27. package/react/components/common/stories/DropdownButton.stories.js.map +1 -1
  28. package/react/components/common/tests/Checkbox.spec.js +10 -12
  29. package/react/components/common/tests/Checkbox.spec.js.map +1 -1
  30. package/react/components/common/tests/ContextMenu.spec.d.ts +1 -0
  31. package/react/components/common/tests/ContextMenu.spec.js +108 -0
  32. package/react/components/common/tests/ContextMenu.spec.js.map +1 -0
  33. package/react/components/common/tests/DropdownButton.spec.d.ts +1 -0
  34. package/react/components/common/tests/DropdownButton.spec.js +32 -0
  35. package/react/components/common/tests/DropdownButton.spec.js.map +1 -0
  36. package/react/components/fdc3Resolver/ResolverDialog.js +5 -1
  37. package/react/components/fdc3Resolver/ResolverDialog.js.map +1 -1
  38. package/react/components/notifications/components/drawer/DrawerHeader.js +3 -3
  39. package/react/components/notifications/components/drawer/DrawerHeader.js.map +1 -1
  40. package/react/components/notifications/components/notificationsCenter/NotificationsCenter.js +1 -0
  41. package/react/components/notifications/components/notificationsCenter/NotificationsCenter.js.map +1 -1
  42. package/react/components/notifications/components/notificationsToasts/NotificationsToasts.js +2 -0
  43. package/react/components/notifications/components/notificationsToasts/NotificationsToasts.js.map +1 -1
  44. package/react/components/notifications/components/shared/IconButton.js +2 -1
  45. package/react/components/notifications/components/shared/IconButton.js.map +1 -1
  46. package/react/components/notifications/components/shared/NotificationCardShell.d.ts +2 -0
  47. package/react/components/notifications/components/shared/NotificationCardShell.js +55 -49
  48. package/react/components/notifications/components/shared/NotificationCardShell.js.map +1 -1
  49. package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyShell.js +2 -3
  50. package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyShell.js.map +1 -1
  51. package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderControls.d.ts +4 -0
  52. package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderControls.js +92 -13
  53. package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderControls.js.map +1 -1
  54. package/react/components/notifications/components/views/ListView.js +5 -9
  55. package/react/components/notifications/components/views/ListView.js.map +1 -1
  56. package/react/components/notifications/css/notification-card.css +165 -0
  57. package/react/components/notifications/stories/NotificationCardShell.stories.d.ts +14 -0
  58. package/react/components/notifications/stories/NotificationCardShell.stories.js +108 -0
  59. package/react/components/notifications/stories/NotificationCardShell.stories.js.map +1 -0
  60. package/react/components/notifications/tests/NotificationCardShell.spec.d.ts +1 -0
  61. package/react/components/notifications/tests/NotificationCardShell.spec.js +91 -0
  62. package/react/components/notifications/tests/NotificationCardShell.spec.js.map +1 -0
  63. package/react/components/notifications/types.d.ts +4 -2
  64. package/react/components/notifications/types.js.map +1 -1
  65. package/react/components/sdd/AddApp.d.ts +3 -3
  66. package/react/components/sdd/AddApp.js +29 -21
  67. package/react/components/sdd/AddApp.js.map +1 -1
  68. package/react/components/sdd/AppEditPage.js +1 -8
  69. package/react/components/sdd/AppEditPage.js.map +1 -1
  70. package/react/components/sdd/Appearance.css +2 -1
  71. package/react/components/sdd/Applications.js +7 -7
  72. package/react/components/sdd/Applications.js.map +1 -1
  73. package/react/components/sdd/Navigation.js +2 -4
  74. package/react/components/sdd/Navigation.js.map +1 -1
  75. package/react/components/sdd/common/views.js +1 -14
  76. package/react/components/sdd/common/views.js.map +1 -1
  77. package/react/components/sdd/css/addApp.css +64 -1
  78. package/react/components/sdd/css/nav.css +50 -29
  79. package/react/components/sdd/fixtures/views.js +1 -14
  80. package/react/components/sdd/fixtures/views.js.map +1 -1
  81. package/react/components/sdd/tests/AddApp.spec.js +2 -2
  82. package/react/components/sdd/tests/AddApp.spec.js.map +1 -1
  83. package/react/components/sdd/tests/AppEditPage.spec.js +5 -8
  84. package/react/components/sdd/tests/AppEditPage.spec.js.map +1 -1
  85. package/react/components/sdd/tests/Export.spec.js +11 -11
  86. package/react/components/sdd/tests/Export.spec.js.map +1 -1
  87. package/react/components/sdd/tests/ExportZip.spec.js +3 -3
  88. package/react/components/sdd/tests/ExportZip.spec.js.map +1 -1
  89. package/react/components/sdd/tests/Navigation.spec.js +3 -2
  90. package/react/components/sdd/tests/Navigation.spec.js.map +1 -1
  91. package/react/components/sdd/tests/SmartDesktopDesigner.spec.js +1 -2
  92. package/react/components/sdd/tests/SmartDesktopDesigner.spec.js.map +1 -1
  93. package/react/components/toolbar/dashbar/Dashbar.js +18 -14
  94. package/react/components/toolbar/dashbar/Dashbar.js.map +1 -1
  95. package/react/components/toolbar/workspaceManagementMenu/components/Workspace.d.ts +9 -1
  96. package/react/components/toolbar/workspaceManagementMenu/components/Workspace.js +35 -1
  97. package/react/components/toolbar/workspaceManagementMenu/components/Workspace.js.map +1 -1
  98. package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.js +1 -1
  99. package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.js.map +1 -1
  100. package/react/components/userPreferences/components/content/Workspaces.d.ts +3 -1
  101. package/react/components/userPreferences/components/content/Workspaces.js +20 -3
  102. package/react/components/userPreferences/components/content/Workspaces.js.map +1 -1
  103. package/react/components/userPreferences/components/workspaces/WorkspaceItem.d.ts +1 -0
  104. package/react/components/userPreferences/components/workspaces/WorkspaceItem.js +3 -2
  105. package/react/components/userPreferences/components/workspaces/WorkspaceItem.js.map +1 -1
  106. package/react/components/userPreferences/tests/NotificationsPreferencesHome.spec.js +12 -9
  107. package/react/components/userPreferences/tests/NotificationsPreferencesHome.spec.js.map +1 -1
  108. package/react/components/userPreferences/tests/UserPreferencesBase.spec.js +2 -0
  109. package/react/components/userPreferences/tests/UserPreferencesBase.spec.js.map +1 -1
  110. package/react/components/windowTitleBar/WindowTitleBarShell.d.ts +99 -26
  111. package/react/components/windowTitleBar/WindowTitleBarShell.js +206 -138
  112. package/react/components/windowTitleBar/WindowTitleBarShell.js.map +1 -1
  113. package/react/components/windowTitleBar/components/left/LinkerButton.js +30 -21
  114. package/react/components/windowTitleBar/components/left/LinkerButton.js.map +1 -1
  115. package/react/hooks/useNotifications.js +8 -7
  116. package/react/hooks/useNotifications.js.map +1 -1
  117. package/react/tsconfig.tsbuildinfo +1 -1
  118. package/react/components/notifications/components/shared/OverflowMenu.d.ts +0 -16
  119. package/react/components/notifications/components/shared/OverflowMenu.js +0 -114
  120. package/react/components/notifications/components/shared/OverflowMenu.js.map +0 -1
  121. package/react/components/sdd/GettingStarted.d.ts +0 -8
  122. package/react/components/sdd/GettingStarted.js +0 -25
  123. package/react/components/sdd/GettingStarted.js.map +0 -1
  124. package/react/components/sdd/stories/GettingStarted.stories.d.ts +0 -11
  125. package/react/components/sdd/stories/GettingStarted.stories.js +0 -18
  126. package/react/components/sdd/stories/GettingStarted.stories.js.map +0 -1
@@ -13,7 +13,7 @@ const locators = {
13
13
  projectName: "input[type='text']",
14
14
  publishButton: ".package-project button",
15
15
  exportButton: ".export-method-button button",
16
- checkbox: ".complex-menu-checkbox",
16
+ checkbox: "input[type='checkbox']",
17
17
  };
18
18
  describe("<Export /> - saving project name", () => {
19
19
  afterEach(() => {
@@ -31,7 +31,7 @@ describe("<Export /> - saving project name", () => {
31
31
  resolve({ err: null });
32
32
  });
33
33
  const wrapper = mount(React.createElement(DefaultExport, Object.assign({}, DefaultExport.args, { updateProjectSettings })));
34
- const input = wrapper.find("input");
34
+ const input = wrapper.find(locators.projectName);
35
35
  input.simulate("focus");
36
36
  input.simulate("input", { target: { value: " (Inv@l!d- Project)[] 123" } });
37
37
  input.simulate("blur");
@@ -45,7 +45,7 @@ describe("<Export /> - saving project name", () => {
45
45
  resolve({ err: null });
46
46
  });
47
47
  const wrapper = mount(React.createElement(DefaultExport, Object.assign({}, DefaultExport.args, { updateProjectSettings })));
48
- const input = wrapper.find("input");
48
+ const input = wrapper.find(locators.projectName);
49
49
  input.simulate("focus");
50
50
  input.simulate("input", { target: { value: "New Name 123" } });
51
51
  input.simulate("blur");
@@ -86,13 +86,13 @@ describe("<Export /> - enabling export button", () => {
86
86
  const wrapper = mount(React.createElement(DefaultExport, Object.assign({}, DefaultExport.args)));
87
87
  expect(wrapper.find(locators.exportButton).prop("disabled"), "Publish button should be initially disabled").to.be
88
88
  .true;
89
- expect(wrapper.find(locators.checkbox).is(".checked"), "Checkbox should be initially unchecked").to.be.false;
89
+ expect(wrapper.find(locators.checkbox).prop("checked"), "Checkbox should be initially unchecked").to.be.false;
90
90
  const input = wrapper.find(locators.projectName);
91
91
  input.simulate("focus");
92
92
  input.simulate("input", { target: { value: validName } });
93
93
  input.simulate("blur");
94
94
  const checkbox = wrapper.find(locators.checkbox);
95
- checkbox.simulate("click");
95
+ checkbox.simulate("change");
96
96
  expect(wrapper.find(locators.exportButton).prop("disabled"), "Publish button should be enabled").to.be.false;
97
97
  wrapper.unmount();
98
98
  });
@@ -102,16 +102,16 @@ describe("<Export /> - enabling export button", () => {
102
102
  input.simulate("input", { target: { value: "" } });
103
103
  input.simulate("blur");
104
104
  const checkbox = wrapper.find(locators.checkbox);
105
- if (checkbox.is(".checked")) {
106
- checkbox.simulate("click");
105
+ if (checkbox.prop("checked")) {
106
+ checkbox.simulate("change");
107
107
  }
108
108
  expect(wrapper.find(locators.exportButton).prop("disabled"), "Publish button should be initially disabled").to.be
109
109
  .true;
110
- expect(wrapper.find(locators.checkbox).is(".checked"), "Checkbox should be initially unchecked").to.be.false;
110
+ expect(wrapper.find(locators.checkbox).prop("checked"), "Checkbox should be initially unchecked").to.be.false;
111
111
  input.simulate("focus");
112
112
  input.simulate("input", { target: { value: invalidName } });
113
113
  input.simulate("blur");
114
- checkbox.simulate("click");
114
+ checkbox.simulate("change");
115
115
  expect(wrapper.find(locators.exportButton).prop("disabled"), "Publish button should be disabled").to.be.true;
116
116
  wrapper.unmount();
117
117
  });
@@ -119,7 +119,7 @@ describe("<Export /> - enabling export button", () => {
119
119
  const wrapper = mount(React.createElement(DefaultExport, Object.assign({}, DefaultExport.args)));
120
120
  expect(wrapper.find(locators.exportButton).prop("disabled"), "Publish button should be initially disabled").to.be
121
121
  .true;
122
- expect(wrapper.find(locators.checkbox).is(".checked"), "Checkbox should be initially unchecked").to.be.false;
122
+ expect(wrapper.find(locators.checkbox).prop("checked"), "Checkbox should be initially unchecked").to.be.false;
123
123
  const input = wrapper.find(locators.projectName);
124
124
  input.simulate("focus");
125
125
  input.simulate("input", { target: { value: validName } });
@@ -131,7 +131,7 @@ describe("<Export /> - enabling export button", () => {
131
131
  const wrapper = mount(React.createElement(DefaultExport, Object.assign({}, DefaultExport.args)));
132
132
  expect(wrapper.find(locators.exportButton).prop("disabled"), "Publish button should be initially disabled").to.be
133
133
  .true;
134
- expect(wrapper.find(locators.checkbox).is(".checked"), "Checkbox should be initially unchecked").to.be.false;
134
+ expect(wrapper.find(locators.checkbox).prop("checked"), "Checkbox should be initially unchecked").to.be.false;
135
135
  const input = wrapper.find(locators.projectName);
136
136
  input.simulate("focus");
137
137
  input.simulate("input", { target: { value: invalidName } });
@@ -1 +1 @@
1
- {"version":3,"file":"Export.spec.js","sourceRoot":"","sources":["../../../../src/components/sdd/tests/Export.spec.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\nimport { mount } from \"enzyme\";\nimport { describe, it } from \"mocha\";\nimport { expect } from \"chai\";\nimport { DefaultExport } from \"../stories/Export.stories\";\nimport { ExportProps } from \"../Export\";\nimport publishTests from \"../fixtures/publishProgress\";\nimport { waitTick } from \"../sdd_helpers\";\nimport sinon from \"sinon\";\nimport { accessibilityAssessor } from \"./a11y_helper\";\n\nconst validName = \"New Name 123\";\nconst invalidName = \" (Inv@l!d- Project)[] 123\";\n\nconst locators = {\n\tprojectName: \"input[type='text']\",\n\tpublishButton: \".package-project button\",\n\texportButton: \".export-method-button button\",\n\tcheckbox: \".complex-menu-checkbox\",\n};\n\ndescribe(\"<Export /> - saving project name\", () => {\n\tafterEach(() => {\n\t\tsinon.restore();\n\t});\n\tit(\"should pass accessibility scans\", async () => {\n\t\tconst wrapper = mount(<DefaultExport {...(DefaultExport.args as ExportProps)} />);\n\t\texpect(await accessibilityAssessor(wrapper)).to.be.true;\n\t\twrapper.unmount();\n\t});\n\n\tit(\"should allow not saving invalid name\", () => {\n\t\tconst spy = sinon.spy();\n\t\tconst updateProjectSettings = () =>\n\t\t\tnew Promise<{ err: null }>((resolve) => {\n\t\t\t\tspy();\n\t\t\t\tresolve({ err: null });\n\t\t\t});\n\t\tconst wrapper = mount(<DefaultExport {...(DefaultExport.args as ExportProps)} {...{ updateProjectSettings }} />);\n\n\t\tconst input = wrapper.find(\"input\");\n\n\t\tinput.simulate(\"focus\");\n\t\tinput.simulate(\"input\", { target: { value: \" (Inv@l!d- Project)[] 123\" } });\n\t\tinput.simulate(\"blur\");\n\n\t\texpect(spy.calledOnce).to.be.false;\n\t\twrapper.unmount();\n\t});\n\tit(\"should allow saving valid name\", () => {\n\t\tconst spy = sinon.spy();\n\t\tconst updateProjectSettings = () =>\n\t\t\tnew Promise<{ err: null }>((resolve) => {\n\t\t\t\tspy();\n\t\t\t\tresolve({ err: null });\n\t\t\t});\n\t\tconst wrapper = mount(<DefaultExport {...(DefaultExport.args as ExportProps)} {...{ updateProjectSettings }} />);\n\n\t\tconst input = wrapper.find(\"input\");\n\n\t\tinput.simulate(\"focus\");\n\t\tinput.simulate(\"input\", { target: { value: \"New Name 123\" } });\n\t\tinput.simulate(\"blur\");\n\n\t\texpect(spy.calledOnce).to.be.true;\n\t\twrapper.unmount();\n\t});\n});\n\ndescribe(\"<Export /> - enabling publish button\", () => {\n\tit(\"if project name is valid, publish should be enabled\", () => {\n\t\tconst wrapper = mount(<DefaultExport {...(DefaultExport.args as ExportProps)} />);\n\n\t\tconst input = wrapper.find(locators.projectName);\n\t\tinput.simulate(\"input\", { target: { value: \"\" } });\n\t\tinput.simulate(\"blur\");\n\n\t\texpect(wrapper.find(locators.publishButton).prop(\"disabled\"), \"Publish button should be initially disabled\").to.be\n\t\t\t.true;\n\n\t\tinput.simulate(\"focus\");\n\t\tinput.simulate(\"input\", { target: { value: validName } });\n\t\tinput.simulate(\"blur\");\n\n\t\texpect(wrapper.find(locators.publishButton).prop(\"disabled\"), \"Publish button should be enabled\").to.be.false;\n\n\t\twrapper.unmount();\n\t});\n\tit(\"if project name is invalid, publish should be disabled\", async () => {\n\t\tconst wrapper = mount(<DefaultExport {...(DefaultExport.args as ExportProps)} />);\n\n\t\tconst input = wrapper.find(locators.projectName);\n\t\tinput.simulate(\"input\", { target: { value: \"\" } });\n\t\tinput.simulate(\"blur\");\n\n\t\texpect(wrapper.find(locators.publishButton).prop(\"disabled\"), \"Publish button should be initially disabled\").to.be\n\t\t\t.true;\n\n\t\tinput.simulate(\"focus\");\n\t\tinput.simulate(\"input\", { target: { value: invalidName } });\n\t\tinput.simulate(\"blur\");\n\n\t\texpect(wrapper.find(locators.publishButton).prop(\"disabled\"), \"Publish button should still be disabled\").to.be.true;\n\n\t\twrapper.unmount();\n\t});\n});\n\ndescribe(\"<Export /> - enabling export button\", () => {\n\tit(\"if project name is valid and checkbox is checked, export should be enabled\", () => {\n\t\tconst wrapper = mount(<DefaultExport {...(DefaultExport.args as ExportProps)} />);\n\n\t\texpect(wrapper.find(locators.exportButton).prop(\"disabled\"), \"Publish button should be initially disabled\").to.be\n\t\t\t.true;\n\t\texpect(wrapper.find(locators.checkbox).is(\".checked\"), \"Checkbox should be initially unchecked\").to.be.false;\n\n\t\tconst input = wrapper.find(locators.projectName);\n\n\t\tinput.simulate(\"focus\");\n\t\tinput.simulate(\"input\", { target: { value: validName } });\n\t\tinput.simulate(\"blur\");\n\n\t\tconst checkbox = wrapper.find(locators.checkbox);\n\t\tcheckbox.simulate(\"click\");\n\n\t\texpect(wrapper.find(locators.exportButton).prop(\"disabled\"), \"Publish button should be enabled\").to.be.false;\n\n\t\twrapper.unmount();\n\t});\n\tit(\"if project name is invalid and checkbox is checked, export should be disabled\", () => {\n\t\tconst wrapper = mount(<DefaultExport {...(DefaultExport.args as ExportProps)} />);\n\n\t\tconst input = wrapper.find(locators.projectName);\n\t\tinput.simulate(\"input\", { target: { value: \"\" } });\n\t\tinput.simulate(\"blur\");\n\t\tconst checkbox = wrapper.find(locators.checkbox);\n\t\tif (checkbox.is(\".checked\")) {\n\t\t\tcheckbox.simulate(\"click\");\n\t\t}\n\n\t\texpect(wrapper.find(locators.exportButton).prop(\"disabled\"), \"Publish button should be initially disabled\").to.be\n\t\t\t.true;\n\t\texpect(wrapper.find(locators.checkbox).is(\".checked\"), \"Checkbox should be initially unchecked\").to.be.false;\n\n\t\tinput.simulate(\"focus\");\n\t\tinput.simulate(\"input\", { target: { value: invalidName } });\n\t\tinput.simulate(\"blur\");\n\n\t\tcheckbox.simulate(\"click\");\n\n\t\texpect(wrapper.find(locators.exportButton).prop(\"disabled\"), \"Publish button should be disabled\").to.be.true;\n\n\t\twrapper.unmount();\n\t});\n\tit(\"if project name is valid and checkbox is not checked, export should be disabled\", () => {\n\t\tconst wrapper = mount(<DefaultExport {...(DefaultExport.args as ExportProps)} />);\n\n\t\texpect(wrapper.find(locators.exportButton).prop(\"disabled\"), \"Publish button should be initially disabled\").to.be\n\t\t\t.true;\n\t\texpect(wrapper.find(locators.checkbox).is(\".checked\"), \"Checkbox should be initially unchecked\").to.be.false;\n\n\t\tconst input = wrapper.find(locators.projectName);\n\n\t\tinput.simulate(\"focus\");\n\t\tinput.simulate(\"input\", { target: { value: validName } });\n\t\tinput.simulate(\"blur\");\n\n\t\texpect(wrapper.find(locators.exportButton).prop(\"disabled\"), \"Publish button should be disabled\").to.be.true;\n\n\t\twrapper.unmount();\n\t});\n\tit(\"if project name is invalid and checkbox is not checked, export should be disabled\", () => {\n\t\tconst wrapper = mount(<DefaultExport {...(DefaultExport.args as ExportProps)} />);\n\n\t\texpect(wrapper.find(locators.exportButton).prop(\"disabled\"), \"Publish button should be initially disabled\").to.be\n\t\t\t.true;\n\t\texpect(wrapper.find(locators.checkbox).is(\".checked\"), \"Checkbox should be initially unchecked\").to.be.false;\n\n\t\tconst input = wrapper.find(locators.projectName);\n\n\t\tinput.simulate(\"focus\");\n\t\tinput.simulate(\"input\", { target: { value: invalidName } });\n\t\tinput.simulate(\"blur\");\n\n\t\texpect(wrapper.find(locators.exportButton).prop(\"disabled\"), \"Publish button should be disabled\").to.be.true;\n\n\t\twrapper.unmount();\n\t});\n});\n\ndescribe(\"<Export/>\", () => {\n\tit(\"should show publish url after successful publish action\", (done) => {\n\t\tconst publishTest = publishTests.find((test) => test.name === \"success\")!;\n\n\t\tlet stateIndex = 0;\n\t\tlet lastHTML = \"\";\n\n\t\tconst wrapper = mount(\n\t\t\t<DefaultExport\n\t\t\t\t{...{\n\t\t\t\t\t...(DefaultExport.args as ExportProps),\n\t\t\t\t\tprogressCheckInterval: 1,\n\t\t\t\t\tgetPublishProgress: () =>\n\t\t\t\t\t\tnew Promise((resolve) => {\n\t\t\t\t\t\t\tconst publishState = publishTest?.states[stateIndex++];\n\n\t\t\t\t\t\t\tif (!publishState || stateIndex >= publishTest.states.length) {\n\t\t\t\t\t\t\t\t// eslint-disable-next-line\n\t\t\t\t\t\t\t\tcheckExportFinished(); // requires definition of `const wrapper`\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tresolve(publishState);\n\n\t\t\t\t\t\t\twrapper.update();\n\n\t\t\t\t\t\t\tconst html = wrapper.html();\n\n\t\t\t\t\t\t\texpect(lastHTML).to.not.eql(html);\n\n\t\t\t\t\t\t\tlastHTML = html;\n\t\t\t\t\t\t}),\n\t\t\t\t}}\n\t\t\t/>\n\t\t);\n\n\t\tfunction checkExportFinished() {\n\t\t\twrapper.update();\n\n\t\t\texpect(wrapper.find(\".export-publish-url\").length).to.equal(1);\n\t\t\texpect(wrapper.find(\".export-publish-url input\").at(0).prop(\"value\")).to.eql(\"https://cosaic.io/\");\n\n\t\t\twrapper.unmount();\n\n\t\t\tdone();\n\t\t}\n\n\t\tconst button = wrapper.find(\".button-container-secondary button\").at(0);\n\n\t\texpect(button.text(), \"Button with Publish text\").to.contain(\"Publish\");\n\n\t\tbutton.simulate(\"click\");\n\n\t\texpect(wrapper.find(\".export-publish-container h2\").text()).to.contain(\"Publishing\");\n\n\t\tlastHTML = wrapper.html();\n\t});\n\n\tit(\"should show publish url after upload step\", async () => {\n\t\tconst publishTest = publishTests.find((test) => test.name === \"step-4-started\")!;\n\n\t\tconst wrapper = mount(\n\t\t\t<DefaultExport\n\t\t\t\t{...{\n\t\t\t\t\t...(DefaultExport.args as ExportProps),\n\t\t\t\t\tprogressCheckInterval: 1,\n\t\t\t\t\tgetPublishProgress: () =>\n\t\t\t\t\t\tnew Promise((resolve) => {\n\t\t\t\t\t\t\tresolve(publishTest.states[0]);\n\t\t\t\t\t\t}),\n\t\t\t\t}}\n\t\t\t/>\n\t\t);\n\n\t\tconst button = wrapper.find(\".button-container-secondary button\").at(0);\n\n\t\texpect(button.text(), \"Button with Publish text\").to.contain(\"Publish\");\n\n\t\tbutton.simulate(\"click\");\n\n\t\tawait waitTick();\n\t\twrapper.update();\n\n\t\texpect(wrapper.find(\".publish-progress-success\").length).to.equal(3);\n\t\texpect(wrapper.find(\".publish-progress-indicator\").length).to.equal(1);\n\t\texpect(wrapper.find(\".export-publish-url\").length).to.equal(1);\n\t\texpect(wrapper.find(\".export-publish-url input\").at(0).prop(\"value\")).to.eql(\"https://cosaic.io/\");\n\n\t\twrapper.unmount();\n\t});\n});\n"]}
1
+ {"version":3,"file":"Export.spec.js","sourceRoot":"","sources":["../../../../src/components/sdd/tests/Export.spec.tsx"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\nimport { mount } from \"enzyme\";\nimport { describe, it } from \"mocha\";\nimport { expect } from \"chai\";\nimport { DefaultExport } from \"../stories/Export.stories\";\nimport { ExportProps } from \"../Export\";\nimport publishTests from \"../fixtures/publishProgress\";\nimport { waitTick } from \"../sdd_helpers\";\nimport sinon from \"sinon\";\nimport { accessibilityAssessor } from \"./a11y_helper\";\n\nconst validName = \"New Name 123\";\nconst invalidName = \" (Inv@l!d- Project)[] 123\";\n\nconst locators = {\n\tprojectName: \"input[type='text']\",\n\tpublishButton: \".package-project button\",\n\texportButton: \".export-method-button button\",\n\tcheckbox: \"input[type='checkbox']\",\n};\n\ndescribe(\"<Export /> - saving project name\", () => {\n\tafterEach(() => {\n\t\tsinon.restore();\n\t});\n\tit(\"should pass accessibility scans\", async () => {\n\t\tconst wrapper = mount(<DefaultExport {...(DefaultExport.args as ExportProps)} />);\n\t\texpect(await accessibilityAssessor(wrapper)).to.be.true;\n\t\twrapper.unmount();\n\t});\n\n\tit(\"should allow not saving invalid name\", () => {\n\t\tconst spy = sinon.spy();\n\t\tconst updateProjectSettings = () =>\n\t\t\tnew Promise<{ err: null }>((resolve) => {\n\t\t\t\tspy();\n\t\t\t\tresolve({ err: null });\n\t\t\t});\n\t\tconst wrapper = mount(<DefaultExport {...(DefaultExport.args as ExportProps)} {...{ updateProjectSettings }} />);\n\n\t\tconst input = wrapper.find(locators.projectName);\n\n\t\tinput.simulate(\"focus\");\n\t\tinput.simulate(\"input\", { target: { value: \" (Inv@l!d- Project)[] 123\" } });\n\t\tinput.simulate(\"blur\");\n\n\t\texpect(spy.calledOnce).to.be.false;\n\t\twrapper.unmount();\n\t});\n\tit(\"should allow saving valid name\", () => {\n\t\tconst spy = sinon.spy();\n\t\tconst updateProjectSettings = () =>\n\t\t\tnew Promise<{ err: null }>((resolve) => {\n\t\t\t\tspy();\n\t\t\t\tresolve({ err: null });\n\t\t\t});\n\t\tconst wrapper = mount(<DefaultExport {...(DefaultExport.args as ExportProps)} {...{ updateProjectSettings }} />);\n\n\t\tconst input = wrapper.find(locators.projectName);\n\n\t\tinput.simulate(\"focus\");\n\t\tinput.simulate(\"input\", { target: { value: \"New Name 123\" } });\n\t\tinput.simulate(\"blur\");\n\n\t\texpect(spy.calledOnce).to.be.true;\n\t\twrapper.unmount();\n\t});\n});\n\ndescribe(\"<Export /> - enabling publish button\", () => {\n\tit(\"if project name is valid, publish should be enabled\", () => {\n\t\tconst wrapper = mount(<DefaultExport {...(DefaultExport.args as ExportProps)} />);\n\n\t\tconst input = wrapper.find(locators.projectName);\n\t\tinput.simulate(\"input\", { target: { value: \"\" } });\n\t\tinput.simulate(\"blur\");\n\n\t\texpect(wrapper.find(locators.publishButton).prop(\"disabled\"), \"Publish button should be initially disabled\").to.be\n\t\t\t.true;\n\n\t\tinput.simulate(\"focus\");\n\t\tinput.simulate(\"input\", { target: { value: validName } });\n\t\tinput.simulate(\"blur\");\n\n\t\texpect(wrapper.find(locators.publishButton).prop(\"disabled\"), \"Publish button should be enabled\").to.be.false;\n\n\t\twrapper.unmount();\n\t});\n\tit(\"if project name is invalid, publish should be disabled\", async () => {\n\t\tconst wrapper = mount(<DefaultExport {...(DefaultExport.args as ExportProps)} />);\n\n\t\tconst input = wrapper.find(locators.projectName);\n\t\tinput.simulate(\"input\", { target: { value: \"\" } });\n\t\tinput.simulate(\"blur\");\n\n\t\texpect(wrapper.find(locators.publishButton).prop(\"disabled\"), \"Publish button should be initially disabled\").to.be\n\t\t\t.true;\n\n\t\tinput.simulate(\"focus\");\n\t\tinput.simulate(\"input\", { target: { value: invalidName } });\n\t\tinput.simulate(\"blur\");\n\n\t\texpect(wrapper.find(locators.publishButton).prop(\"disabled\"), \"Publish button should still be disabled\").to.be.true;\n\n\t\twrapper.unmount();\n\t});\n});\n\ndescribe(\"<Export /> - enabling export button\", () => {\n\tit(\"if project name is valid and checkbox is checked, export should be enabled\", () => {\n\t\tconst wrapper = mount(<DefaultExport {...(DefaultExport.args as ExportProps)} />);\n\n\t\texpect(wrapper.find(locators.exportButton).prop(\"disabled\"), \"Publish button should be initially disabled\").to.be\n\t\t\t.true;\n\t\texpect(wrapper.find(locators.checkbox).prop(\"checked\"), \"Checkbox should be initially unchecked\").to.be.false;\n\n\t\tconst input = wrapper.find(locators.projectName);\n\n\t\tinput.simulate(\"focus\");\n\t\tinput.simulate(\"input\", { target: { value: validName } });\n\t\tinput.simulate(\"blur\");\n\n\t\tconst checkbox = wrapper.find(locators.checkbox);\n\t\tcheckbox.simulate(\"change\");\n\n\t\texpect(wrapper.find(locators.exportButton).prop(\"disabled\"), \"Publish button should be enabled\").to.be.false;\n\n\t\twrapper.unmount();\n\t});\n\tit(\"if project name is invalid and checkbox is checked, export should be disabled\", () => {\n\t\tconst wrapper = mount(<DefaultExport {...(DefaultExport.args as ExportProps)} />);\n\n\t\tconst input = wrapper.find(locators.projectName);\n\t\tinput.simulate(\"input\", { target: { value: \"\" } });\n\t\tinput.simulate(\"blur\");\n\t\tconst checkbox = wrapper.find(locators.checkbox);\n\t\tif (checkbox.prop(\"checked\")) {\n\t\t\tcheckbox.simulate(\"change\");\n\t\t}\n\n\t\texpect(wrapper.find(locators.exportButton).prop(\"disabled\"), \"Publish button should be initially disabled\").to.be\n\t\t\t.true;\n\t\texpect(wrapper.find(locators.checkbox).prop(\"checked\"), \"Checkbox should be initially unchecked\").to.be.false;\n\n\t\tinput.simulate(\"focus\");\n\t\tinput.simulate(\"input\", { target: { value: invalidName } });\n\t\tinput.simulate(\"blur\");\n\n\t\tcheckbox.simulate(\"change\");\n\n\t\texpect(wrapper.find(locators.exportButton).prop(\"disabled\"), \"Publish button should be disabled\").to.be.true;\n\n\t\twrapper.unmount();\n\t});\n\tit(\"if project name is valid and checkbox is not checked, export should be disabled\", () => {\n\t\tconst wrapper = mount(<DefaultExport {...(DefaultExport.args as ExportProps)} />);\n\n\t\texpect(wrapper.find(locators.exportButton).prop(\"disabled\"), \"Publish button should be initially disabled\").to.be\n\t\t\t.true;\n\t\texpect(wrapper.find(locators.checkbox).prop(\"checked\"), \"Checkbox should be initially unchecked\").to.be.false;\n\n\t\tconst input = wrapper.find(locators.projectName);\n\n\t\tinput.simulate(\"focus\");\n\t\tinput.simulate(\"input\", { target: { value: validName } });\n\t\tinput.simulate(\"blur\");\n\n\t\texpect(wrapper.find(locators.exportButton).prop(\"disabled\"), \"Publish button should be disabled\").to.be.true;\n\n\t\twrapper.unmount();\n\t});\n\tit(\"if project name is invalid and checkbox is not checked, export should be disabled\", () => {\n\t\tconst wrapper = mount(<DefaultExport {...(DefaultExport.args as ExportProps)} />);\n\n\t\texpect(wrapper.find(locators.exportButton).prop(\"disabled\"), \"Publish button should be initially disabled\").to.be\n\t\t\t.true;\n\t\texpect(wrapper.find(locators.checkbox).prop(\"checked\"), \"Checkbox should be initially unchecked\").to.be.false;\n\n\t\tconst input = wrapper.find(locators.projectName);\n\n\t\tinput.simulate(\"focus\");\n\t\tinput.simulate(\"input\", { target: { value: invalidName } });\n\t\tinput.simulate(\"blur\");\n\n\t\texpect(wrapper.find(locators.exportButton).prop(\"disabled\"), \"Publish button should be disabled\").to.be.true;\n\n\t\twrapper.unmount();\n\t});\n});\n\ndescribe(\"<Export/>\", () => {\n\tit(\"should show publish url after successful publish action\", (done) => {\n\t\tconst publishTest = publishTests.find((test) => test.name === \"success\")!;\n\n\t\tlet stateIndex = 0;\n\t\tlet lastHTML = \"\";\n\n\t\tconst wrapper = mount(\n\t\t\t<DefaultExport\n\t\t\t\t{...{\n\t\t\t\t\t...(DefaultExport.args as ExportProps),\n\t\t\t\t\tprogressCheckInterval: 1,\n\t\t\t\t\tgetPublishProgress: () =>\n\t\t\t\t\t\tnew Promise((resolve) => {\n\t\t\t\t\t\t\tconst publishState = publishTest?.states[stateIndex++];\n\n\t\t\t\t\t\t\tif (!publishState || stateIndex >= publishTest.states.length) {\n\t\t\t\t\t\t\t\t// eslint-disable-next-line\n\t\t\t\t\t\t\t\tcheckExportFinished(); // requires definition of `const wrapper`\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tresolve(publishState);\n\n\t\t\t\t\t\t\twrapper.update();\n\n\t\t\t\t\t\t\tconst html = wrapper.html();\n\n\t\t\t\t\t\t\texpect(lastHTML).to.not.eql(html);\n\n\t\t\t\t\t\t\tlastHTML = html;\n\t\t\t\t\t\t}),\n\t\t\t\t}}\n\t\t\t/>\n\t\t);\n\n\t\tfunction checkExportFinished() {\n\t\t\twrapper.update();\n\n\t\t\texpect(wrapper.find(\".export-publish-url\").length).to.equal(1);\n\t\t\texpect(wrapper.find(\".export-publish-url input\").at(0).prop(\"value\")).to.eql(\"https://cosaic.io/\");\n\n\t\t\twrapper.unmount();\n\n\t\t\tdone();\n\t\t}\n\n\t\tconst button = wrapper.find(\".button-container-secondary button\").at(0);\n\n\t\texpect(button.text(), \"Button with Publish text\").to.contain(\"Publish\");\n\n\t\tbutton.simulate(\"click\");\n\n\t\texpect(wrapper.find(\".export-publish-container h2\").text()).to.contain(\"Publishing\");\n\n\t\tlastHTML = wrapper.html();\n\t});\n\n\tit(\"should show publish url after upload step\", async () => {\n\t\tconst publishTest = publishTests.find((test) => test.name === \"step-4-started\")!;\n\n\t\tconst wrapper = mount(\n\t\t\t<DefaultExport\n\t\t\t\t{...{\n\t\t\t\t\t...(DefaultExport.args as ExportProps),\n\t\t\t\t\tprogressCheckInterval: 1,\n\t\t\t\t\tgetPublishProgress: () =>\n\t\t\t\t\t\tnew Promise((resolve) => {\n\t\t\t\t\t\t\tresolve(publishTest.states[0]);\n\t\t\t\t\t\t}),\n\t\t\t\t}}\n\t\t\t/>\n\t\t);\n\n\t\tconst button = wrapper.find(\".button-container-secondary button\").at(0);\n\n\t\texpect(button.text(), \"Button with Publish text\").to.contain(\"Publish\");\n\n\t\tbutton.simulate(\"click\");\n\n\t\tawait waitTick();\n\t\twrapper.update();\n\n\t\texpect(wrapper.find(\".publish-progress-success\").length).to.equal(3);\n\t\texpect(wrapper.find(\".publish-progress-indicator\").length).to.equal(1);\n\t\texpect(wrapper.find(\".export-publish-url\").length).to.equal(1);\n\t\texpect(wrapper.find(\".export-publish-url input\").at(0).prop(\"value\")).to.eql(\"https://cosaic.io/\");\n\n\t\twrapper.unmount();\n\t});\n});\n"]}
@@ -5,13 +5,13 @@ import { expect } from "chai";
5
5
  import { DefaultExportZip, ErrorExportZip } from "../stories/ExportZip.stories";
6
6
  import { waitTick } from "../sdd_helpers";
7
7
  const locators = {
8
- checkbox: ".complex-menu-checkbox",
8
+ checkbox: "input[type='checkbox']",
9
9
  };
10
10
  describe("<ExportZip/>", () => {
11
11
  it("should show file count after success publish", async () => {
12
12
  const wrapper = mount(React.createElement(DefaultExportZip, Object.assign({}, Object.assign({}, DefaultExportZip.args))));
13
13
  const checkbox = wrapper.find(locators.checkbox);
14
- checkbox.simulate("click");
14
+ checkbox.simulate("change");
15
15
  wrapper.find(".export-method-button button").simulate("click");
16
16
  await waitTick();
17
17
  wrapper.update();
@@ -21,7 +21,7 @@ describe("<ExportZip/>", () => {
21
21
  it("should error after failed publish", async () => {
22
22
  const wrapper = mount(React.createElement(ErrorExportZip, Object.assign({}, Object.assign({}, ErrorExportZip.args))));
23
23
  const checkbox = wrapper.find(locators.checkbox);
24
- checkbox.simulate("click");
24
+ checkbox.simulate("change");
25
25
  wrapper.find(".export-method-button button").simulate("click");
26
26
  await waitTick();
27
27
  wrapper.update();
@@ -1 +1 @@
1
- {"version":3,"file":"ExportZip.spec.js","sourceRoot":"","sources":["../../../../src/components/sdd/tests/ExportZip.spec.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEhF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,QAAQ,GAAG;IAChB,QAAQ,EAAE,wBAAwB;CAClC,CAAC;AAEF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,OAAO,GAAG,KAAK,CACpB,oBAAC,gBAAgB,sCAEX,gBAAgB,CAAC,IAAoB,GAEzC,CACF,CAAC;QAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjD,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE3B,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE/D,MAAM,QAAQ,EAAE,CAAC;QAEjB,OAAO,CAAC,MAAM,EAAE,CAAC;QAEjB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEjG,OAAO,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,OAAO,GAAG,KAAK,CACpB,oBAAC,cAAc,sCAET,cAAc,CAAC,IAAoB,GAEvC,CACF,CAAC;QAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjD,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE3B,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE/D,MAAM,QAAQ,EAAE,CAAC;QAEjB,OAAO,CAAC,MAAM,EAAE,CAAC;QAEjB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEhG,OAAO,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import * as React from \"react\";\nimport { mount } from \"enzyme\";\nimport { describe, it } from \"mocha\";\nimport { expect } from \"chai\";\nimport { DefaultExportZip, ErrorExportZip } from \"../stories/ExportZip.stories\";\nimport { ExportProps } from \"../Export\";\nimport { waitTick } from \"../sdd_helpers\";\n\nconst locators = {\n\tcheckbox: \".complex-menu-checkbox\",\n};\n\ndescribe(\"<ExportZip/>\", () => {\n\tit(\"should show file count after success publish\", async () => {\n\t\tconst wrapper = mount(\n\t\t\t<DefaultExportZip\n\t\t\t\t{...{\n\t\t\t\t\t...(DefaultExportZip.args as ExportProps),\n\t\t\t\t}}\n\t\t\t/>\n\t\t);\n\n\t\tconst checkbox = wrapper.find(locators.checkbox);\n\t\tcheckbox.simulate(\"click\");\n\n\t\twrapper.find(\".export-method-button button\").simulate(\"click\");\n\n\t\tawait waitTick();\n\n\t\twrapper.update();\n\n\t\texpect(wrapper.find(\".last-export-time\").length, \"Export success message container\").to.equal(1);\n\n\t\twrapper.unmount();\n\t});\n\tit(\"should error after failed publish\", async () => {\n\t\tconst wrapper = mount(\n\t\t\t<ErrorExportZip\n\t\t\t\t{...{\n\t\t\t\t\t...(ErrorExportZip.args as ExportProps),\n\t\t\t\t}}\n\t\t\t/>\n\t\t);\n\n\t\tconst checkbox = wrapper.find(locators.checkbox);\n\t\tcheckbox.simulate(\"click\");\n\n\t\twrapper.find(\".export-method-button button\").simulate(\"click\");\n\n\t\tawait waitTick();\n\n\t\twrapper.update();\n\n\t\texpect(wrapper.find(\".last-export-error\").length, \"Export error message container\").to.equal(1);\n\n\t\twrapper.unmount();\n\t});\n});\n"]}
1
+ {"version":3,"file":"ExportZip.spec.js","sourceRoot":"","sources":["../../../../src/components/sdd/tests/ExportZip.spec.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEhF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,QAAQ,GAAG;IAChB,QAAQ,EAAE,wBAAwB;CAClC,CAAC;AAEF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,OAAO,GAAG,KAAK,CACpB,oBAAC,gBAAgB,sCAEX,gBAAgB,CAAC,IAAoB,GAEzC,CACF,CAAC;QAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjD,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE5B,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE/D,MAAM,QAAQ,EAAE,CAAC;QAEjB,OAAO,CAAC,MAAM,EAAE,CAAC;QAEjB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,MAAM,EAAE,kCAAkC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEjG,OAAO,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QAClD,MAAM,OAAO,GAAG,KAAK,CACpB,oBAAC,cAAc,sCAET,cAAc,CAAC,IAAoB,GAEvC,CACF,CAAC;QAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjD,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE5B,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE/D,MAAM,QAAQ,EAAE,CAAC;QAEjB,OAAO,CAAC,MAAM,EAAE,CAAC;QAEjB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,MAAM,EAAE,gCAAgC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEhG,OAAO,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import * as React from \"react\";\nimport { mount } from \"enzyme\";\nimport { describe, it } from \"mocha\";\nimport { expect } from \"chai\";\nimport { DefaultExportZip, ErrorExportZip } from \"../stories/ExportZip.stories\";\nimport { ExportProps } from \"../Export\";\nimport { waitTick } from \"../sdd_helpers\";\n\nconst locators = {\n\tcheckbox: \"input[type='checkbox']\",\n};\n\ndescribe(\"<ExportZip/>\", () => {\n\tit(\"should show file count after success publish\", async () => {\n\t\tconst wrapper = mount(\n\t\t\t<DefaultExportZip\n\t\t\t\t{...{\n\t\t\t\t\t...(DefaultExportZip.args as ExportProps),\n\t\t\t\t}}\n\t\t\t/>\n\t\t);\n\n\t\tconst checkbox = wrapper.find(locators.checkbox);\n\t\tcheckbox.simulate(\"change\");\n\n\t\twrapper.find(\".export-method-button button\").simulate(\"click\");\n\n\t\tawait waitTick();\n\n\t\twrapper.update();\n\n\t\texpect(wrapper.find(\".last-export-time\").length, \"Export success message container\").to.equal(1);\n\n\t\twrapper.unmount();\n\t});\n\tit(\"should error after failed publish\", async () => {\n\t\tconst wrapper = mount(\n\t\t\t<ErrorExportZip\n\t\t\t\t{...{\n\t\t\t\t\t...(ErrorExportZip.args as ExportProps),\n\t\t\t\t}}\n\t\t\t/>\n\t\t);\n\n\t\tconst checkbox = wrapper.find(locators.checkbox);\n\t\tcheckbox.simulate(\"change\");\n\n\t\twrapper.find(\".export-method-button button\").simulate(\"click\");\n\n\t\tawait waitTick();\n\n\t\twrapper.update();\n\n\t\texpect(wrapper.find(\".last-export-error\").length, \"Export error message container\").to.equal(1);\n\n\t\twrapper.unmount();\n\t});\n});\n"]}
@@ -3,11 +3,12 @@ import { mount } from "enzyme";
3
3
  import { describe, it } from "mocha";
4
4
  import { expect } from "chai";
5
5
  import { DefaultNavigation } from "../stories/Navigation.stories";
6
- const NAV_ITEM = ".nav-item";
6
+ const NAV_ITEM = ".nav-item [role='tab']";
7
7
  describe("<Navigation/>", () => {
8
8
  it("should have first tab selected by default", async () => {
9
9
  const wrapper = mount(React.createElement(DefaultNavigation, Object.assign({}, Object.assign({}, DefaultNavigation.args))));
10
- wrapper.find(NAV_ITEM).forEach((item, index) => {
10
+ wrapper.find(`${NAV_ITEM}`).forEach((item, index) => {
11
+ console.log(item.html());
11
12
  expect(item.prop("aria-selected"), "is selected").to.equal(index === 0);
12
13
  });
13
14
  });
@@ -1 +1 @@
1
- {"version":3,"file":"Navigation.spec.js","sourceRoot":"","sources":["../../../../src/components/sdd/tests/Navigation.spec.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,QAAQ,GAAG,WAAW,CAAC;AAE7B,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,oBAAC,iBAAiB,sCAAW,iBAAiB,CAAC,IAAwB,GAAM,CAAC,CAAC;QAErG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC9C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,oBAAC,iBAAiB,sCAAW,iBAAiB,CAAC,IAAwB,GAAM,CAAC,CAAC;QAErG,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAExC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE;YAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAE1B,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC/B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC;YACpF,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import * as React from \"react\";\nimport { mount } from \"enzyme\";\nimport { describe, it } from \"mocha\";\nimport { expect } from \"chai\";\nimport { NavigationProps } from \"../Navigation\";\nimport { DefaultNavigation } from \"../stories/Navigation.stories\";\n\nconst NAV_ITEM = \".nav-item\";\n\ndescribe(\"<Navigation/>\", () => {\n\tit(\"should have first tab selected by default\", async () => {\n\t\tconst wrapper = mount(<DefaultNavigation {...{ ...(DefaultNavigation.args as NavigationProps) }} />);\n\n\t\twrapper.find(NAV_ITEM).forEach((item, index) => {\n\t\t\texpect(item.prop(\"aria-selected\"), \"is selected\").to.equal(index === 0);\n\t\t});\n\t});\n\n\tit(\"should change to selected tab\", async () => {\n\t\tconst wrapper = mount(<DefaultNavigation {...{ ...(DefaultNavigation.args as NavigationProps) }} />);\n\n\t\tconst navItems = wrapper.find(NAV_ITEM);\n\n\t\tnavItems.forEach((navItem, clickedIndex) => {\n\t\t\tnavItem.simulate(\"click\");\n\n\t\t\tnavItem.forEach((item, index) => {\n\t\t\t\texpect(item.prop(\"aria-selected\"), \"is selected\").to.equal(index === clickedIndex);\n\t\t\t});\n\t\t});\n\t});\n});\n"]}
1
+ {"version":3,"file":"Navigation.spec.js","sourceRoot":"","sources":["../../../../src/components/sdd/tests/Navigation.spec.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,QAAQ,GAAG,wBAAwB,CAAC;AAE1C,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,OAAO,GAAG,KAAK,CAAC,oBAAC,iBAAiB,sCAAW,iBAAiB,CAAC,IAAwB,GAAM,CAAC,CAAC;QAErG,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YACnD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACzB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,oBAAC,iBAAiB,sCAAW,iBAAiB,CAAC,IAAwB,GAAM,CAAC,CAAC;QAErG,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAExC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE;YAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAE1B,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC/B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC;YACpF,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import * as React from \"react\";\nimport { mount } from \"enzyme\";\nimport { describe, it } from \"mocha\";\nimport { expect } from \"chai\";\nimport { NavigationProps } from \"../Navigation\";\nimport { DefaultNavigation } from \"../stories/Navigation.stories\";\n\nconst NAV_ITEM = \".nav-item [role='tab']\";\n\ndescribe(\"<Navigation/>\", () => {\n\tit(\"should have first tab selected by default\", async () => {\n\t\tconst wrapper = mount(<DefaultNavigation {...{ ...(DefaultNavigation.args as NavigationProps) }} />);\n\n\t\twrapper.find(`${NAV_ITEM}`).forEach((item, index) => {\n\t\t\tconsole.log(item.html());\n\t\t\texpect(item.prop(\"aria-selected\"), \"is selected\").to.equal(index === 0);\n\t\t});\n\t});\n\n\tit(\"should change to selected tab\", async () => {\n\t\tconst wrapper = mount(<DefaultNavigation {...{ ...(DefaultNavigation.args as NavigationProps) }} />);\n\n\t\tconst navItems = wrapper.find(NAV_ITEM);\n\n\t\tnavItems.forEach((navItem, clickedIndex) => {\n\t\t\tnavItem.simulate(\"click\");\n\n\t\t\tnavItem.forEach((item, index) => {\n\t\t\t\texpect(item.prop(\"aria-selected\"), \"is selected\").to.equal(index === clickedIndex);\n\t\t\t});\n\t\t});\n\t});\n});\n"]}
@@ -46,11 +46,10 @@ describe("<SmartDesktopDesigner/>", () => {
46
46
  const wrapper = mount(React.createElement(DefaultSDD, Object.assign({}, DefaultSDD.args)));
47
47
  await waitTick();
48
48
  wrapper.update();
49
- expect(wrapper.find(".nav-item[aria-selected=true] #getting-started-nav-link").length, "Currently on Getting Started").to.equal(1);
50
49
  wrapper.find(`.nav-item #${target.nav.id}`).at(0).simulate("click");
51
50
  await waitTick();
52
51
  wrapper.update();
53
- expect(wrapper.find(`.nav-item[aria-selected=true] #${target.nav.id}`).length, `${target.nav.id} is active`).to.equal(1);
52
+ expect(wrapper.find(`#${target.nav.id}`).prop("aria-selected"), `${target.nav.id} is active`).to.be.true;
54
53
  expect(wrapper.find(".view-title .leftSide").at(0).text(), `page title is "${target.nav.title}"`).contains(target.nav.title);
55
54
  });
56
55
  });
@@ -1 +1 @@
1
- {"version":3,"file":"SmartDesktopDesigner.spec.js","sourceRoot":"","sources":["../../../../src/components/sdd/tests/SmartDesktopDesigner.spec.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,OAAO,GAAG,KAAK,CAAC,oBAAC,UAAU,oBAAM,UAAU,CAAC,IAAkC,EAAI,CAAC,CAAC;QAE1F,MAAM,CAAC,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH;QACC;YACC,GAAG,EAAE;gBACJ,EAAE,EAAE,uBAAuB;gBAC3B,KAAK,EAAE,aAAa;aACpB;SACD;QACD;YACC,GAAG,EAAE;gBACJ,EAAE,EAAE,gCAAgC;gBACpC,KAAK,EAAE,YAAY;aACnB;SACD;QACD;YACC,GAAG,EAAE;gBACJ,EAAE,EAAE,iBAAiB;gBACrB,KAAK,EAAE,OAAO;aACd;SACD;QACD;YACC,GAAG,EAAE;gBACJ,EAAE,EAAE,yBAAyB;gBAC7B,KAAK,EAAE,gBAAgB;aACvB;SACD;QACD;YACC,GAAG,EAAE;gBACJ,EAAE,EAAE,iBAAiB;gBACrB,KAAK,EAAE,SAAS;aAChB;SACD;KACD,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACpB,EAAE,CAAC,sBAAsB,MAAM,CAAC,GAAG,CAAC,KAAK,uBAAuB,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,OAAO,GAAG,KAAK,CAAC,oBAAC,UAAU,oBAAM,UAAU,CAAC,IAAkC,EAAI,CAAC,CAAC;YAE1F,MAAM,QAAQ,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,EAAE,CAAC;YAEjB,MAAM,CACL,OAAO,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC,MAAM,EAC9E,8BAA8B,CAC9B,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEd,OAAO,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAEpE,MAAM,QAAQ,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,EAAE,CAAC;YAEjB,MAAM,CACL,OAAO,CAAC,IAAI,CAAC,kCAAkC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,EACtE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,YAAY,CAC5B,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,kBAAkB,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,CACzG,MAAM,CAAC,GAAG,CAAC,KAAK,CAChB,CAAC;QACH,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import * as React from \"react\";\nimport { mount } from \"enzyme\";\nimport { describe, it } from \"mocha\";\nimport { expect } from \"chai\";\nimport { DefaultSDD } from \"../stories/SmartDesktopDesigner.stories\";\nimport { waitTick } from \"../sdd_helpers\";\nimport { SmartDesktopDesignerProps } from \"../SmartDesktopDesigner\";\nimport { accessibilityAssessor } from \"./a11y_helper\";\n\ndescribe(\"<SmartDesktopDesigner/>\", () => {\n\tit(\"should pass accessibility scans (Page)\", async () => {\n\t\tconst wrapper = mount(<DefaultSDD {...(DefaultSDD.args as SmartDesktopDesignerProps)} />);\n\n\t\texpect(await accessibilityAssessor(wrapper)).to.be.true;\n\t});\n\n\t[\n\t\t{\n\t\t\tnav: {\n\t\t\t\tid: \"applications-nav-link\",\n\t\t\t\ttitle: \"Manage apps\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tnav: {\n\t\t\t\tid: \"applications-optional-nav-link\",\n\t\t\t\ttitle: \"Extensions\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tnav: {\n\t\t\t\tid: \"themes-nav-link\",\n\t\t\t\ttitle: \"Theme\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tnav: {\n\t\t\t\tid: \"authentication-nav-link\",\n\t\t\t\ttitle: \"Authentication\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tnav: {\n\t\t\t\tid: \"export-nav-link\",\n\t\t\t\ttitle: \"Publish\",\n\t\t\t},\n\t\t},\n\t].forEach((target) => {\n\t\tit(`should navigate to ${target.nav.title} from left navigation`, async () => {\n\t\t\tconst wrapper = mount(<DefaultSDD {...(DefaultSDD.args as SmartDesktopDesignerProps)} />);\n\n\t\t\tawait waitTick();\n\t\t\twrapper.update();\n\n\t\t\texpect(\n\t\t\t\twrapper.find(\".nav-item[aria-selected=true] #getting-started-nav-link\").length,\n\t\t\t\t\"Currently on Getting Started\"\n\t\t\t).to.equal(1);\n\n\t\t\twrapper.find(`.nav-item #${target.nav.id}`).at(0).simulate(\"click\");\n\n\t\t\tawait waitTick();\n\t\t\twrapper.update();\n\n\t\t\texpect(\n\t\t\t\twrapper.find(`.nav-item[aria-selected=true] #${target.nav.id}`).length,\n\t\t\t\t`${target.nav.id} is active`\n\t\t\t).to.equal(1);\n\t\t\texpect(wrapper.find(\".view-title .leftSide\").at(0).text(), `page title is \"${target.nav.title}\"`).contains(\n\t\t\t\ttarget.nav.title\n\t\t\t);\n\t\t});\n\t});\n});\n"]}
1
+ {"version":3,"file":"SmartDesktopDesigner.spec.js","sourceRoot":"","sources":["../../../../src/components/sdd/tests/SmartDesktopDesigner.spec.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEtD,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACxC,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,OAAO,GAAG,KAAK,CAAC,oBAAC,UAAU,oBAAM,UAAU,CAAC,IAAkC,EAAI,CAAC,CAAC;QAE1F,MAAM,CAAC,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH;QACC;YACC,GAAG,EAAE;gBACJ,EAAE,EAAE,uBAAuB;gBAC3B,KAAK,EAAE,aAAa;aACpB;SACD;QACD;YACC,GAAG,EAAE;gBACJ,EAAE,EAAE,gCAAgC;gBACpC,KAAK,EAAE,YAAY;aACnB;SACD;QACD;YACC,GAAG,EAAE;gBACJ,EAAE,EAAE,iBAAiB;gBACrB,KAAK,EAAE,OAAO;aACd;SACD;QACD;YACC,GAAG,EAAE;gBACJ,EAAE,EAAE,yBAAyB;gBAC7B,KAAK,EAAE,gBAAgB;aACvB;SACD;QACD;YACC,GAAG,EAAE;gBACJ,EAAE,EAAE,iBAAiB;gBACrB,KAAK,EAAE,SAAS;aAChB;SACD;KACD,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACpB,EAAE,CAAC,sBAAsB,MAAM,CAAC,GAAG,CAAC,KAAK,uBAAuB,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,OAAO,GAAG,KAAK,CAAC,oBAAC,UAAU,oBAAM,UAAU,CAAC,IAAkC,EAAI,CAAC,CAAC;YAE1F,MAAM,QAAQ,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,EAAE,CAAC;YAEjB,OAAO,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAEpE,MAAM,QAAQ,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,EAAE,CAAC;YAEjB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,kBAAkB,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,CACzG,MAAM,CAAC,GAAG,CAAC,KAAK,CAChB,CAAC;QACH,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import * as React from \"react\";\nimport { mount } from \"enzyme\";\nimport { describe, it } from \"mocha\";\nimport { expect } from \"chai\";\nimport { DefaultSDD } from \"../stories/SmartDesktopDesigner.stories\";\nimport { waitTick } from \"../sdd_helpers\";\nimport { SmartDesktopDesignerProps } from \"../SmartDesktopDesigner\";\nimport { accessibilityAssessor } from \"./a11y_helper\";\n\ndescribe(\"<SmartDesktopDesigner/>\", () => {\n\tit(\"should pass accessibility scans (Page)\", async () => {\n\t\tconst wrapper = mount(<DefaultSDD {...(DefaultSDD.args as SmartDesktopDesignerProps)} />);\n\n\t\texpect(await accessibilityAssessor(wrapper)).to.be.true;\n\t});\n\n\t[\n\t\t{\n\t\t\tnav: {\n\t\t\t\tid: \"applications-nav-link\",\n\t\t\t\ttitle: \"Manage apps\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tnav: {\n\t\t\t\tid: \"applications-optional-nav-link\",\n\t\t\t\ttitle: \"Extensions\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tnav: {\n\t\t\t\tid: \"themes-nav-link\",\n\t\t\t\ttitle: \"Theme\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tnav: {\n\t\t\t\tid: \"authentication-nav-link\",\n\t\t\t\ttitle: \"Authentication\",\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tnav: {\n\t\t\t\tid: \"export-nav-link\",\n\t\t\t\ttitle: \"Publish\",\n\t\t\t},\n\t\t},\n\t].forEach((target) => {\n\t\tit(`should navigate to ${target.nav.title} from left navigation`, async () => {\n\t\t\tconst wrapper = mount(<DefaultSDD {...(DefaultSDD.args as SmartDesktopDesignerProps)} />);\n\n\t\t\tawait waitTick();\n\t\t\twrapper.update();\n\n\t\t\twrapper.find(`.nav-item #${target.nav.id}`).at(0).simulate(\"click\");\n\n\t\t\tawait waitTick();\n\t\t\twrapper.update();\n\n\t\t\texpect(wrapper.find(`#${target.nav.id}`).prop(\"aria-selected\"), `${target.nav.id} is active`).to.be.true;\n\t\t\texpect(wrapper.find(\".view-title .leftSide\").at(0).text(), `page title is \"${target.nav.title}\"`).contains(\n\t\t\t\ttarget.nav.title\n\t\t\t);\n\t\t});\n\t});\n});\n"]}
@@ -16,6 +16,7 @@ export const Dashbar = ({ className, children, widgetTitleGenerator }) => {
16
16
  const [totalWidgetsWidth, setTotalWidgetsWidth] = useState(0);
17
17
  const [isUpdatingState, setIsUpdatingState] = useState(false);
18
18
  const [secondUpdateRequired, setSecondUpdateRequired] = useState(false);
19
+ const [allowHorizontalScroll, setAllowHorizontalScroll] = useState(true);
19
20
  let movingIndex = null; // The dashbarItem index being dragged, null if none
20
21
  let titleGrabPosition = null; // The mouse of event when a widget title is dragged
21
22
  let offsetX = null; // The original grab location of a given view titlebar
@@ -70,17 +71,24 @@ export const Dashbar = ({ className, children, widgetTitleGenerator }) => {
70
71
  // For calculation widgets position that function uses the HTML elements.
71
72
  // If something will be changed in HTML hierarchy for widgets, that function should be refactored.
72
73
  const setWidgetsPositions = async () => {
73
- var _a;
74
+ var _a, _b;
74
75
  const { data: bounds } = await finsembleWindow.getBounds();
75
- const scrollButtonsEnabled = document.querySelectorAll("#dashbar-container > .chevron-container").length > 0;
76
+ const widgetsWidth = getTotalWidth();
77
+ const scrollButtonsEnabled = widgetsWidth >= ((_a = bounds === null || bounds === void 0 ? void 0 : bounds.width) !== null && _a !== void 0 ? _a : 0);
78
+ // show or hide scroll buttons based on widgets size and window width
79
+ if (allowHorizontalScroll != scrollButtonsEnabled) {
80
+ setAllowHorizontalScroll(scrollButtonsEnabled);
81
+ }
76
82
  const elements = document.getElementsByClassName("finsemble-dashbar-item");
77
- let toolbarWidth = (_a = bounds === null || bounds === void 0 ? void 0 : bounds.width) !== null && _a !== void 0 ? _a : 0;
83
+ let toolbarWidth = (_b = bounds === null || bounds === void 0 ? void 0 : bounds.width) !== null && _b !== void 0 ? _b : 0;
78
84
  let SCROLL_BUTTON_WIDTH = SCROLL_BUTTON_DEFAULT_WIDTH;
79
85
  if (scrollButtonsEnabled) {
80
86
  // Get actual width in case of client styling
81
- SCROLL_BUTTON_WIDTH = document.querySelectorAll("#dashbar-container > .chevron-container")[0]
82
- .offsetWidth;
83
- toolbarWidth = toolbarWidth - 2 * SCROLL_BUTTON_WIDTH;
87
+ const chevrons = document.querySelectorAll("#dashbar-container > .chevron-container");
88
+ if (chevrons.length > 0) {
89
+ SCROLL_BUTTON_WIDTH = chevrons[0].offsetWidth;
90
+ toolbarWidth = toolbarWidth - 2 * SCROLL_BUTTON_WIDTH;
91
+ }
84
92
  }
85
93
  let tempLeft = 0;
86
94
  let leftButtonSize = 0;
@@ -111,14 +119,9 @@ export const Dashbar = ({ className, children, widgetTitleGenerator }) => {
111
119
  }
112
120
  let offsetRight = rect.left + rect.width - widgetDividerWidth - leftButtonSize - toolbarWidth;
113
121
  if (offsetRight > 0) {
114
- // hide title for invisible items
115
- dashbarItemFrame.firstChild.style.visibility = "hidden";
116
122
  widget.bounds.width = 0;
117
123
  rightItemsCount++;
118
124
  }
119
- else {
120
- dashbarItemFrame.firstChild.style.visibility = "visible";
121
- }
122
125
  widget.view.setBounds(widget.bounds);
123
126
  }
124
127
  setLeftButtonTooltip(`${leftItemsCount} more`);
@@ -228,15 +231,16 @@ export const Dashbar = ({ className, children, widgetTitleGenerator }) => {
228
231
  };
229
232
  const updateItems = () => {
230
233
  const doUpdate = async () => {
234
+ const totalWidth = getTotalWidth();
231
235
  if (dashbarItems.length > WIDGET_COUNT) {
232
236
  //Items have been added
233
237
  await addWidgets();
234
- setTotalWidgetsWidth(getTotalWidth());
238
+ setTotalWidgetsWidth(totalWidth);
235
239
  }
236
240
  else if (dashbarItems.length < WIDGET_COUNT) {
237
241
  //Items have been removed
238
242
  await removeWidgets();
239
- setTotalWidgetsWidth(getTotalWidth());
243
+ setTotalWidgetsWidth(totalWidth);
240
244
  }
241
245
  else if (wasReorganized) {
242
246
  if (movingIndex)
@@ -357,7 +361,7 @@ export const Dashbar = ({ className, children, widgetTitleGenerator }) => {
357
361
  .sort()
358
362
  .join("-");
359
363
  return (React.createElement("div", { className: wrapperClasses, style: { height: dashbarHeight } },
360
- WIDGET_COUNT > 0 && (React.createElement(FinsembleDnDContext, { key: elementKey, onDragEnd: reorderItems, onDragStart: startMove, onDragMove: moveItem, onLayoutUpdate: setWidgetsPositions, className: "finsemble-dashbar-section rearrange-region", id: "dashbar-container", axis: AllowableDnDAxis.x, lockAxis: AllowableDnDAxis.x, allowHorizontalScroll: true, showScrollButtonsTooltip: true, leftButtonTooltip: leftButtonTooltip, rightButtonTooltip: rightButtonTooltip, metadata: { dashbar } }, Object.values(widgets).map((widget, i) => (React.createElement(DashbarItem, { key: i, id: Object.keys(widgets)[i], index: i, widgetTitleGenerator: titleGenerator, widget: widget, dashbarHeight: dashbar.height, widgetDividerWidth: widgetDividerWidth, setTitleHeight: setTitleHeight, setGrabLocation: setGrabLocation }))))),
364
+ WIDGET_COUNT > 0 && (React.createElement(FinsembleDnDContext, { key: elementKey, onDragEnd: reorderItems, onDragStart: startMove, onDragMove: moveItem, onLayoutUpdate: setWidgetsPositions, className: "finsemble-dashbar-section rearrange-region", id: "dashbar-container", axis: AllowableDnDAxis.x, lockAxis: AllowableDnDAxis.x, allowHorizontalScroll: allowHorizontalScroll, showScrollButtonsTooltip: true, leftButtonTooltip: leftButtonTooltip, rightButtonTooltip: rightButtonTooltip, metadata: { dashbar } }, Object.values(widgets).map((widget, i) => (React.createElement(DashbarItem, { key: i, id: Object.keys(widgets)[i], index: i, widgetTitleGenerator: titleGenerator, widget: widget, dashbarHeight: dashbar.height, widgetDividerWidth: widgetDividerWidth, setTitleHeight: setTitleHeight, setGrabLocation: setGrabLocation }))))),
361
365
  WIDGET_COUNT === 0 && (React.createElement("div", { className: "add-dashbar-item-button", onClick: launchDashbar },
362
366
  React.createElement("span", null,
363
367
  React.createElement("i", { className: "ff-plus" })))),
@@ -1 +1 @@
1
- {"version":3,"file":"Dashbar.js","sourceRoot":"","sources":["../../../../src/components/toolbar/dashbar/Dashbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AACjG,OAAO,KAAK,MAAM,kBAAkB,CAAC;AAErC,OAAO,iCAAiC,CAAC;AAMzC,IAAI,eAAuB,CAAC;AAC5B,IAAI,kBAA0B,CAAC;AAE/B,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,oBAAoB,EAAe,EAAE,EAAE;IACrF,MAAM,EAAE,YAAY,EAAE,mBAAmB,EAAE,GAAG,UAAU,EAAE,CAAC;IAC3D,MAAM,EAAE,iBAAiB,EAAE,GAAG,UAAU,EAAE,CAAC;IAE3C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzD,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9D,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExE,IAAI,WAAW,GAAkB,IAAI,CAAC,CAAC,oDAAoD;IAC3F,IAAI,iBAAiB,GAAkB,IAAI,CAAC,CAAC,oDAAoD;IACjG,IAAI,OAAO,GAAkB,IAAI,CAAC,CAAC,sDAAsD;IAEzF,MAAM,YAAY,GAAW,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;IACzD,MAAM,2BAA2B,GAAG,EAAE,CAAC;IAEvC,MAAM,2BAA2B,GAAG,CAAC,MAAmB,EAAE,QAAsC,EAAE,EAAE;QACnG,MAAM,sBAAsB,GAAG,GAAG,EAAE;YACnC,IAAI,MAAM,CAAC,kBAAkB,EAAE;gBAC9B,IAAI,CAAC,WAAW,CACf,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAChC,MAAM,CAAC,kBAAkB,CAAC,OAAO,EACjC,MAAM,CAAC,kBAAkB,CAAC,SAAS,CACnC,CAAC;aACF;QACF,CAAC,CAAC;QAEF,OAAO,CACN,6BAAK,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,sBAAsB,EAAE;YAC1D,8BAAM,uBAAuB,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,GAAS,CAC3D,CACN,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,oBAAoB,aAApB,oBAAoB,cAApB,oBAAoB,GAAI,2BAA2B,CAAC;IAE3E;;;;;OAKG;IACH,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAA0C,EAAE,EAAE;QACvF,WAAW,GAAG,IAAI,CAAC;QACnB,iBAAiB,GAAG,IAAI,CAAC;QACzB,OAAO,GAAG,IAAI,CAAC;QACf,cAAc,CAAC,IAAI,CAAC,CAAC;QACrB,yBAAyB;QACzB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE;QAC1B,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;IAE7D,gFAAgF;IAChF,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;QAChC,OAAO,IAAI,CAAC;KACZ;IACD,MAAM,aAAa,GAAG,eAAe,CAAC,aAAa,CAAC,MAAM,CAAC;IAC3D,MAAM,aAAa,GAAG,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;IAC5C,MAAM,cAAc,GAAG,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IACtD,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,CAAC,CAAC;IAE3D,MAAM,cAAc,GAAG,qBAAqB,SAAS,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IAErE,MAAM,aAAa,GAAG,GAAG,EAAE;QAC1B,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,YAAY,CAAC,OAAO,CAAC,CAAC,IAAqB,EAAE,EAAE;YAC9C,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,OAAO,UAAU,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEjE,yEAAyE;IACzE,kGAAkG;IAClG,MAAM,mBAAmB,GAAG,KAAK,IAAI,EAAE;;QACtC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,SAAS,EAAE,CAAC;QAC3D,MAAM,oBAAoB,GAAG,QAAQ,CAAC,gBAAgB,CAAC,yCAAyC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7G,MAAM,QAAQ,GAAG,QAAQ,CAAC,sBAAsB,CAAC,wBAAwB,CAAC,CAAC;QAC3E,IAAI,YAAY,GAAG,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,mCAAI,CAAC,CAAC;QACtC,IAAI,mBAAmB,GAAG,2BAA2B,CAAC;QACtD,IAAI,oBAAoB,EAAE;YACzB,6CAA6C;YAC7C,mBAAmB,GAAI,QAAQ,CAAC,gBAAgB,CAAC,yCAAyC,CAAC,CAAC,CAAC,CAAiB;iBAC5G,WAAW,CAAC;YACd,YAAY,GAAG,YAAY,GAAG,CAAC,GAAG,mBAAmB,CAAC;SACtD;QAED,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,oBAAoB,EAAE;YACzB,QAAQ,GAAG,mBAAmB,CAAC;YAC/B,cAAc,GAAG,mBAAmB,CAAC;SACrC;QAED,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,eAAe,GAAG,CAAC,CAAC;QAExB,KAAK,MAAM,WAAW,IAAI,QAAQ,EAAE;YACnC,gDAAgD;YAChD,MAAM,IAAI,GAAG,WAAW,CAAC,qBAAqB,EAAE,CAAC;YACjD,MAAM,gBAAgB,GAAG,WAAW,CAAC,UAAqB,CAAC;YAC3D,MAAM,QAAQ,GAAG,gBAAgB,CAAC,EAAE,CAAC;YACrC,MAAM,MAAM,GAAI,OAAwB,CAAC,QAAQ,CAAC,CAAC;YACnD,oFAAoF;YACpF,IAAI,CAAC,MAAM;gBAAE,SAAS;YAEtB,IAAI,IAAI,CAAC,IAAI,GAAG,mBAAmB,IAAI,oBAAoB,EAAE;gBAC5D,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;gBACxB,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;gBAC9B,cAAc,EAAE,CAAC;aACjB;iBAAM;gBACN,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,kBAAkB,CAAC;gBACtD,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;gBAC9B,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;aACjC;YAED,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,kBAAkB,GAAG,cAAc,GAAG,YAAY,CAAC;YAC9F,IAAI,WAAW,GAAG,CAAC,EAAE;gBACpB,iCAAiC;gBAChC,gBAAgB,CAAC,UAA0B,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;gBACzE,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;gBACxB,eAAe,EAAE,CAAC;aAClB;iBAAM;gBACL,gBAAgB,CAAC,UAA0B,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;aAC1E;YACD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SACrC;QAED,oBAAoB,CAAC,GAAG,cAAc,OAAO,CAAC,CAAC;QAC/C,qBAAqB,CAAC,GAAG,eAAe,OAAO,CAAC,CAAC;IAClD,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;QAC7B,MAAM,QAAQ,GAAiB,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,oBAAoB,GAAG,gBAAgB,CAAC;QAE5C,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE;YAChC,MAAM,YAAY,GAAG;gBACpB,GAAG,EAAE,cAAc;gBACnB,IAAI,EAAE,oBAAoB;gBAC1B,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,kBAAkB;gBACtC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM;aACrC,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBACtC,MAAM,eAAe,GAAG,aAAa,IAAI,CAAC,EAAE,EAAE,CAAC;gBAC/C,MAAM,GAAG,GAAQ,MAAM,eAAe,CAAC,cAAc,CAAC;oBACrD,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,eAAe;oBACf,MAAM,EAAE,YAAY;oBACpB,eAAe,EAAE,KAAK;iBACtB,CAAC,CAAC;gBAEH,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG;oBACnB,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,MAAM,EAAE,YAAY;oBACpB,IAAI,EAAE,GAAG;oBACT,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;iBAC3C,CAAC;gBAEF,oBAAoB,GAAG,oBAAoB,GAAG,IAAI,CAAC,KAAK,CAAC;aACzD;SACD;QACD,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrB,mBAAmB,CAAC,oBAAoB,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;QAChC,MAAM,QAAQ,GAAiB,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9C,mFAAmF;QACnF,2FAA2F;QAC3F,0DAA0D;QAC1D,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC1C,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBACjC,IAAI,QAAQ,CAAC,EAAE,KAAK,QAAQ,EAAE;oBAC7B,KAAK,GAAG,IAAI,CAAC;oBACb,MAAM;iBACN;aACD;YACD,IAAI,CAAC,KAAK,EAAE;gBACX,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aACxB;QACF,CAAC,CAAC,CAAC;QAEH,IAAI,uBAAuB,GAAG,CAAC,CAAC;QAChC,+EAA+E;QAC/E,kFAAkF;QAClF,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE;YAC1B,IAAI,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;gBAChC,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;oBACnC,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACpB,0DAA0D;oBAC1D,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;wBAC1C,MAAM,CAAC,MAAM,GAAG;4BACf,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;4BAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM;4BAC5B,IAAI,EAAE,uBAAuB;4BAC7B,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG;yBACtB,CAAC;wBACF,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;wBACrC,uBAAuB,GAAG,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;oBACzE,CAAC,CAAC,CAAC;gBACJ,CAAC,CAAC,CAAC;aACH;iBAAM;gBACN,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE,eAAe,CAAC,CAAC;aAC9E;SACD;QACD,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrB,mBAAmB,CAAC,uBAAuB,CAAC,CAAC;IAC9C,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC9B,MAAM,QAAQ,GAAiB,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9C,qDAAqD;QACrD,yDAAyD;QACzD,4DAA4D;QAC5D,+BAA+B;QAC/B,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC7B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEjC,MAAM,CAAC,MAAM,GAAG;gBACf,MAAM,EAAE,kBAAkB,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM;gBAClD,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;gBAC1B,GAAG,EAAE,eAAe,IAAI,cAAc;gBACtC,IAAI,EAAE,UAAU;aAChB,CAAC;YAEF,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAErC,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;YAE3B,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,cAAc,CAAC,KAAK,CAAC,CAAC;QACtB,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrB,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,GAAG,EAAE;QACxB,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;YAC3B,IAAI,YAAY,CAAC,MAAM,GAAG,YAAY,EAAE;gBACvC,uBAAuB;gBACvB,MAAM,UAAU,EAAE,CAAC;gBACnB,oBAAoB,CAAC,aAAa,EAAE,CAAC,CAAC;aACtC;iBAAM,IAAI,YAAY,CAAC,MAAM,GAAG,YAAY,EAAE;gBAC9C,yBAAyB;gBACzB,MAAM,aAAa,EAAE,CAAC;gBACtB,oBAAoB,CAAC,aAAa,EAAE,CAAC,CAAC;aACtC;iBAAM,IAAI,cAAc,EAAE;gBAC1B,IAAI,WAAW;oBAAE,OAAO;gBACxB,wCAAwC;gBACxC,iBAAiB,EAAE,CAAC;aACpB;YAED,MAAM,mBAAmB,EAAE,CAAC;YAC5B,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,IAAI,eAAe,KAAK,KAAK,EAAE;YAC9B,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACzB,QAAQ,EAAE,CAAC;SACX;aAAM,IAAI,CAAC,oBAAoB,EAAE;YACjC,uBAAuB,CAAC,IAAI,CAAC,CAAC;SAC9B;IACF,CAAC,CAAC;IAEF;;;;OAIG;IACH,SAAS,CAAC,GAAG,EAAE;QACd,WAAW,EAAE,CAAC;IACf,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB;;;OAGG;IACH,SAAS,CAAC,GAAG,EAAE;QACd,IAAI,oBAAoB,IAAI,CAAC,eAAe,EAAE;YAC7C,WAAW,EAAE,CAAC;YACd,uBAAuB,CAAC,KAAK,CAAC,CAAC;SAC/B;IACF,CAAC,EAAE,CAAC,eAAe,EAAE,oBAAoB,CAAC,CAAC,CAAC;IAE5C;;;;;;;;;OASG;IACH,MAAM,cAAc,GAAG,CAAC,WAAmB,EAAE,EAAU,EAAE,EAAE;QAC1D,MAAM,QAAQ,GAAiB,OAAO,CAAC;QACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,eAAe,EAAE;YACpB,WAAW,GAAG,CAAC,CAAC;SAChB;QAED,MAAM,SAAS,GAAG;YACjB,GAAG,EAAE,eAAe,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,WAAW;YACvD,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;YACxB,MAAM,EAAE,kBAAkB,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,WAAW;YAChE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK;SAC1B,CAAC;QACF,eAAe,GAAG,SAAS,CAAC,GAAG,CAAC;QAChC,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAC;QAEtC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACjC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;IAC3B,CAAC,CAAC;IAEF;;;;OAIG;IACH,MAAM,SAAS,GAAG,CAAC,IAAS,EAAE,KAAU,EAAE,EAAE;QAC3C,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,OAAO,KAAK,IAAI,IAAI,iBAAiB,KAAK,IAAI,EAAE;YACnD,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,iBAAiB,CAAC;SAC5C;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAgB,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;IAC5B,CAAC,CAAC;IAEF;;;;OAIG;IACH,MAAM,QAAQ,GAAG,CAAC,KAAU,EAAE,EAAE;QAC/B,IAAI,WAAW,KAAK,IAAI,EAAE;YACzB,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,CAAgB,CAAC;YAExE,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC3B,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG;gBAC5B,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM;gBAClC,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,KAAK;gBAChC,IAAI,EAAE,KAAK,CAAC,OAAO,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;aACpC,CAAC,CAAC;YAEH,sGAAsG;YACtG,MAAM,QAAQ,GAAG,QAAQ,CAAC,sBAAsB,CAAC,oBAAoB,CAAC,CAAC;YACvE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;gBAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;gBAC7C,MAAM,MAAM,GAAI,OAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAC5C,IAAI,MAAM,KAAK,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;oBAChE,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;oBAC/B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;iBACrC;aACD;SACD;IACF,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAE,EAAE;QAC5C,iBAAiB,GAAG,QAAQ,CAAC;IAC9B,CAAC,CAAC;IAEF;;;;;;;;;OASG;IACH,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;SACxC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACxB,IAAI,EAAE;SACN,IAAI,CAAC,GAAG,CAAC,CAAC;IAEZ,OAAO,CACN,6BAAK,SAAS,EAAE,cAAc,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE;QAC9D,YAAY,GAAG,CAAC,IAAI,CACpB,oBAAC,mBAAmB,IACnB,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,YAAY,EACvB,WAAW,EAAE,SAAS,EACtB,UAAU,EAAE,QAAQ,EACpB,cAAc,EAAE,mBAAmB,EACnC,SAAS,EAAC,4CAA4C,EACtD,EAAE,EAAC,mBAAmB,EACtB,IAAI,EAAE,gBAAgB,CAAC,CAAC,EACxB,QAAQ,EAAE,gBAAgB,CAAC,CAAC,EAC5B,qBAAqB,EAAE,IAAI,EAC3B,wBAAwB,EAAE,IAAI,EAC9B,iBAAiB,EAAE,iBAAiB,EACpC,kBAAkB,EAAE,kBAAkB,EACtC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAEpB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAC1C,oBAAC,WAAW,IACX,GAAG,EAAE,CAAC,EACN,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAC3B,KAAK,EAAE,CAAC,EACR,oBAAoB,EAAE,cAAc,EACpC,MAAM,EAAE,MAAqB,EAC7B,aAAa,EAAE,OAAO,CAAC,MAAM,EAC7B,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,eAAe,GAC/B,CACF,CAAC,CACmB,CACtB;QACA,YAAY,KAAK,CAAC,IAAI,CACtB,6BAAK,SAAS,EAAC,yBAAyB,EAAC,OAAO,EAAE,aAAa;YAC9D;gBACC,2BAAG,SAAS,EAAC,SAAS,GAAK,CACrB,CACF,CACN;QACA,QAAQ,CACJ,CACN,CAAC;AACH,CAAC,CAAC","sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { DashbarItem } from \"./DashbarItem\";\nimport { Dashbar as DashbarType, DashbarItem as DashbarItemType, DashbarView } from \"../../../types/dashbarTypes\";\nimport { useDashbar } from \"../../../hooks/useDashbar\";\nimport { useToolbar } from \"../../../hooks/useToolbar\";\nimport { FinsembleDnDContext, AllowableDnDAxis } from \"../../legacyControls/FinsembleDnDContext\";\nimport clone from \"lodash/cloneDeep\";\n\nimport \"../../../assets/css/dashbar.css\";\n\ntype DashbarViews = {\n\t[key: string]: DashbarView;\n} & {};\n\nlet cachedWidgetTop: number;\nlet cachedWidgetHeight: number;\n\nexport const Dashbar = ({ className, children, widgetTitleGenerator }: DashbarType) => {\n\tconst { dashbarItems, reorderDashbarItems } = useDashbar();\n\tconst { launchPreferences } = useToolbar();\n\n\tconst [widgets, setWidgets] = useState({});\n\tconst [horizontalBounds, setHorizontalBounds] = useState(0);\n\tconst [wasReorganized, setReorganized] = useState(false);\n\tconst [totalWidgetsWidth, setTotalWidgetsWidth] = useState(0);\n\tconst [isUpdatingState, setIsUpdatingState] = useState(false);\n\tconst [secondUpdateRequired, setSecondUpdateRequired] = useState(false);\n\n\tlet movingIndex: number | null = null; // The dashbarItem index being dragged, null if none\n\tlet titleGrabPosition: number | null = null; // The mouse of event when a widget title is dragged\n\tlet offsetX: number | null = null; // The original grab location of a given view titlebar\n\n\tconst WIDGET_COUNT: number = Object.keys(widgets).length;\n\tconst SCROLL_BUTTON_DEFAULT_WIDTH = 30;\n\n\tconst defaultWidgetTitleGenerator = (widget: DashbarView, titleRef: React.MutableRefObject<null>) => {\n\t\tconst handleWidgetTitleClick = () => {\n\t\t\tif (widget.raiseIntentOptions) {\n\t\t\t\tfdc3.raiseIntent(\n\t\t\t\t\twidget.raiseIntentOptions.intent,\n\t\t\t\t\twidget.raiseIntentOptions.context,\n\t\t\t\t\twidget.raiseIntentOptions.targetApp\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<div ref={titleRef} onClick={() => handleWidgetTitleClick()}>\n\t\t\t\t<span dangerouslySetInnerHTML={{ __html: widget.title }}></span>\n\t\t\t</div>\n\t\t);\n\t};\n\n\tconst titleGenerator = widgetTitleGenerator ?? defaultWidgetTitleGenerator;\n\n\t/**\n\t *\n\t * @param {object} params\n\t * @param {number} oldIndex The index of the item being moved\n\t * @param {number} newIndex The index to move the item to\n\t */\n\tconst reorderItems = ({ oldIndex, newIndex }: { oldIndex: number; newIndex: number }) => {\n\t\tmovingIndex = null;\n\t\ttitleGrabPosition = null;\n\t\toffsetX = null;\n\t\tsetReorganized(true);\n\t\t// Update the redux store\n\t\treorderDashbarItems({ oldIndex, newIndex });\n\t};\n\n\tconst launchDashbar = () => {\n\t\tlaunchPreferences(\"Dashbar\");\n\t};\n\n\tconst { dashbar } = FSBL.Clients.WindowClient.getSpawnData();\n\n\t// Dashbar is disabled (no config in toolbar) or dashbar height is not specified\n\tif (!dashbar || !dashbar.height) {\n\t\treturn null;\n\t}\n\tconst toolbarHeight = finsembleWindow.windowOptions.height;\n\tconst dashbarHeight = `${dashbar.height}px`;\n\tconst verticalBounds = toolbarHeight - dashbar.height;\n\tconst widgetDividerWidth = dashbar.widgetDividerWidth || 0;\n\n\tconst wrapperClasses = `finsemble-dashbar ${className || \"\"}`.trim();\n\n\tconst getTotalWidth = () => {\n\t\tlet totalWidth = 0;\n\t\tdashbarItems.forEach((item: DashbarItemType) => {\n\t\t\ttotalWidth = totalWidth + item.width;\n\t\t});\n\t\treturn totalWidth;\n\t};\n\n\tconst [leftButtonTooltip, setLeftButtonTooltip] = useState(\"\");\n\tconst [rightButtonTooltip, setRightButtonTooltip] = useState(\"\");\n\n\t// For calculation widgets position that function uses the HTML elements.\n\t// If something will be changed in HTML hierarchy for widgets, that function should be refactored.\n\tconst setWidgetsPositions = async () => {\n\t\tconst { data: bounds } = await finsembleWindow.getBounds();\n\t\tconst scrollButtonsEnabled = document.querySelectorAll(\"#dashbar-container > .chevron-container\").length > 0;\n\t\tconst elements = document.getElementsByClassName(\"finsemble-dashbar-item\");\n\t\tlet toolbarWidth = bounds?.width ?? 0;\n\t\tlet SCROLL_BUTTON_WIDTH = SCROLL_BUTTON_DEFAULT_WIDTH;\n\t\tif (scrollButtonsEnabled) {\n\t\t\t// Get actual width in case of client styling\n\t\t\tSCROLL_BUTTON_WIDTH = (document.querySelectorAll(\"#dashbar-container > .chevron-container\")[0] as HTMLElement)\n\t\t\t\t.offsetWidth;\n\t\t\ttoolbarWidth = toolbarWidth - 2 * SCROLL_BUTTON_WIDTH;\n\t\t}\n\n\t\tlet tempLeft = 0;\n\t\tlet leftButtonSize = 0;\n\t\tif (scrollButtonsEnabled) {\n\t\t\ttempLeft = SCROLL_BUTTON_WIDTH;\n\t\t\tleftButtonSize = SCROLL_BUTTON_WIDTH;\n\t\t}\n\n\t\tlet leftItemsCount = 0;\n\t\tlet rightItemsCount = 0;\n\n\t\tfor (const dashbarItem of elements) {\n\t\t\t// rect.width already contains the divider width\n\t\t\tconst rect = dashbarItem.getBoundingClientRect();\n\t\t\tconst dashbarItemFrame = dashbarItem.firstChild as Element;\n\t\t\tconst widgetId = dashbarItemFrame.id;\n\t\t\tconst widget = (widgets as DashbarViews)[widgetId];\n\t\t\t// Happens when widgets were removed, but dom-elements still exists. So just ignore.\n\t\t\tif (!widget) continue;\n\n\t\t\tif (rect.left < SCROLL_BUTTON_WIDTH && scrollButtonsEnabled) {\n\t\t\t\twidget.bounds.width = 0;\n\t\t\t\twidget.bounds.left = tempLeft;\n\t\t\t\tleftItemsCount++;\n\t\t\t} else {\n\t\t\t\twidget.bounds.width = rect.width - widgetDividerWidth;\n\t\t\t\twidget.bounds.left = tempLeft;\n\t\t\t\ttempLeft = tempLeft + rect.width;\n\t\t\t}\n\n\t\t\tlet offsetRight = rect.left + rect.width - widgetDividerWidth - leftButtonSize - toolbarWidth;\n\t\t\tif (offsetRight > 0) {\n\t\t\t\t// hide title for invisible items\n\t\t\t\t(dashbarItemFrame.firstChild as HTMLElement).style.visibility = \"hidden\";\n\t\t\t\twidget.bounds.width = 0;\n\t\t\t\trightItemsCount++;\n\t\t\t} else {\n\t\t\t\t(dashbarItemFrame.firstChild as HTMLElement).style.visibility = \"visible\";\n\t\t\t}\n\t\t\twidget.view.setBounds(widget.bounds);\n\t\t}\n\n\t\tsetLeftButtonTooltip(`${leftItemsCount} more`);\n\t\tsetRightButtonTooltip(`${rightItemsCount} more`);\n\t};\n\n\tconst addWidgets = async () => {\n\t\tconst _widgets: DashbarViews = clone(widgets);\n\t\tlet tempHorizontalBounds = horizontalBounds;\n\n\t\tfor (const item of dashbarItems) {\n\t\t\tconst widgetBounds = {\n\t\t\t\ttop: verticalBounds,\n\t\t\t\tleft: tempHorizontalBounds,\n\t\t\t\twidth: item.width - widgetDividerWidth,\n\t\t\t\theight: item.height || dashbar.height,\n\t\t\t};\n\n\t\t\tif (!_widgets.hasOwnProperty(item.id)) {\n\t\t\t\tconst webContentsName = `(Dashbar) ${item.id}`;\n\t\t\t\tconst res: any = await finsembleWindow.addBrowserView({\n\t\t\t\t\turl: item.url,\n\t\t\t\t\twebContentsName,\n\t\t\t\t\tbounds: widgetBounds,\n\t\t\t\t\tallowAutoResize: false,\n\t\t\t\t});\n\n\t\t\t\t_widgets[item.id] = {\n\t\t\t\t\turl: item.url,\n\t\t\t\t\ttitle: item.title,\n\t\t\t\t\tbounds: widgetBounds,\n\t\t\t\t\tview: res,\n\t\t\t\t\twidth: item.width,\n\t\t\t\t\traiseIntentOptions: item.raiseIntentOptions,\n\t\t\t\t};\n\n\t\t\t\ttempHorizontalBounds = tempHorizontalBounds + item.width;\n\t\t\t}\n\t\t}\n\t\tsetWidgets(_widgets);\n\t\tsetHorizontalBounds(tempHorizontalBounds);\n\t};\n\n\tconst removeWidgets = async () => {\n\t\tconst _widgets: DashbarViews = clone(widgets);\n\t\t// Widgets is an object, with each key being a reference to an item in dashbarItems\n\t\t// but dashbarItems is an array of objects. Its necessary to loop through them to determine\n\t\t// the differences to figure out which items were removed.\n\t\tconst toRemove: string[] = [];\n\t\tObject.keys(_widgets).forEach((widgetId) => {\n\t\t\tlet found = false;\n\t\t\tfor (let i = 0; i < dashbarItems.length; i++) {\n\t\t\t\tconst dashItem = dashbarItems[i];\n\t\t\t\tif (dashItem.id === widgetId) {\n\t\t\t\t\tfound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!found) {\n\t\t\t\ttoRemove.push(widgetId);\n\t\t\t}\n\t\t});\n\n\t\tlet tempNewHorizontalBounds = 0;\n\t\t// toRemove is an array of widgetIds which were no longer found in dashbarItems\n\t\t// As items are removed, the remaining items have to be shuffled to fill the space\n\t\tfor (const id of toRemove) {\n\t\t\tif (_widgets.hasOwnProperty(id)) {\n\t\t\t\tawait _widgets[id].view.remove(() => {\n\t\t\t\t\tdelete _widgets[id];\n\t\t\t\t\t// Shuffle remaining views to fill any gaps that were left\n\t\t\t\t\tObject.values(_widgets).forEach((widget) => {\n\t\t\t\t\t\twidget.bounds = {\n\t\t\t\t\t\t\twidth: widget.bounds.width,\n\t\t\t\t\t\t\theight: widget.bounds.height,\n\t\t\t\t\t\t\tleft: tempNewHorizontalBounds,\n\t\t\t\t\t\t\ttop: widget.bounds.top,\n\t\t\t\t\t\t};\n\t\t\t\t\t\twidget.view.setBounds(widget.bounds);\n\t\t\t\t\t\ttempNewHorizontalBounds = tempNewHorizontalBounds + widget.bounds.width;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tFSBL.Clients.Logger.system.error(`Error removing widget: ${id} from dashbar`);\n\t\t\t}\n\t\t}\n\t\tsetWidgets(_widgets);\n\t\tsetHorizontalBounds(tempNewHorizontalBounds);\n\t};\n\n\tconst reorganizeWidgets = () => {\n\t\tconst _widgets: DashbarViews = clone(widgets);\n\t\t// Each view needs to be resituated to fill any holes\n\t\t// left by views that have been removed. Use a tempBounds\n\t\t// int to keep track of new widths and set the overall width\n\t\t// once everything is re-seated\n\t\tlet tempBounds = 0;\n\t\tdashbarItems.forEach((item) => {\n\t\t\tconst widget = _widgets[item.id];\n\n\t\t\twidget.bounds = {\n\t\t\t\theight: cachedWidgetHeight || widget.bounds.height,\n\t\t\t\twidth: widget.bounds.width,\n\t\t\t\ttop: cachedWidgetTop || verticalBounds,\n\t\t\t\tleft: tempBounds,\n\t\t\t};\n\n\t\t\twidget.view.setBounds(widget.bounds);\n\n\t\t\tdelete _widgets[item.id];\n\t\t\t_widgets[item.id] = widget;\n\n\t\t\ttempBounds = tempBounds + item.width;\n\t\t});\n\n\t\tsetReorganized(false);\n\t\tsetWidgets(_widgets);\n\t\tsetHorizontalBounds(tempBounds);\n\t};\n\n\tconst updateItems = () => {\n\t\tconst doUpdate = async () => {\n\t\t\tif (dashbarItems.length > WIDGET_COUNT) {\n\t\t\t\t//Items have been added\n\t\t\t\tawait addWidgets();\n\t\t\t\tsetTotalWidgetsWidth(getTotalWidth());\n\t\t\t} else if (dashbarItems.length < WIDGET_COUNT) {\n\t\t\t\t//Items have been removed\n\t\t\t\tawait removeWidgets();\n\t\t\t\tsetTotalWidgetsWidth(getTotalWidth());\n\t\t\t} else if (wasReorganized) {\n\t\t\t\tif (movingIndex) return;\n\t\t\t\t// Length is the same, order has changed\n\t\t\t\treorganizeWidgets();\n\t\t\t}\n\n\t\t\tawait setWidgetsPositions();\n\t\t\tsetIsUpdatingState(false);\n\t\t};\n\n\t\tif (isUpdatingState === false) {\n\t\t\tsetIsUpdatingState(true);\n\t\t\tdoUpdate();\n\t\t} else if (!secondUpdateRequired) {\n\t\t\tsetSecondUpdateRequired(true);\n\t\t}\n\t};\n\n\t/**\n\t * When the distributed store's 'dashbaritems' is updated it will cause this hook to\n\t * execute. The local representation of widgets will be mutated, then a call to\n\t * setWidgets will re-render the component\n\t */\n\tuseEffect(() => {\n\t\tupdateItems();\n\t}, [dashbarItems]);\n\n\t/**\n\t * DashbarItems can be changed very quickly before all widgets will be initialized.\n\t * Double-calling updateItems() fixes a bug.\n\t */\n\tuseEffect(() => {\n\t\tif (secondUpdateRequired && !isUpdatingState) {\n\t\t\tupdateItems();\n\t\t\tsetSecondUpdateRequired(false);\n\t\t}\n\t}, [isUpdatingState, secondUpdateRequired]);\n\n\t/**\n\t * Sets the title height as determined by the DashbarItem\n\t * component, since the CSS can be changed by the user\n\t * the component will render the title and pass back\n\t * computed height of that title, then the Dashbar will\n\t * make room for item\n\t *\n\t * @param {number} titleHeight The height of the span containing the title\n\t * @param {string} id The key'ed id of the view\n\t */\n\tconst setTitleHeight = (titleHeight: number, id: string) => {\n\t\tconst _widgets: DashbarViews = widgets;\n\t\tconst widget = _widgets[id];\n\t\tif (cachedWidgetTop) {\n\t\t\ttitleHeight = 0;\n\t\t}\n\n\t\tconst newBounds = {\n\t\t\ttop: cachedWidgetTop || widget.bounds.top + titleHeight,\n\t\t\tleft: widget.bounds.left,\n\t\t\theight: cachedWidgetHeight || widget.bounds.height - titleHeight,\n\t\t\twidth: widget.bounds.width,\n\t\t};\n\t\tcachedWidgetTop = newBounds.top;\n\t\tcachedWidgetHeight = newBounds.height;\n\n\t\twidget.view.setBounds(newBounds);\n\t\twidget.bounds = newBounds;\n\t};\n\n\t/**\n\t * When a view starts moving, bring it to the front\n\t *\n\t * @param {MouseEvent} event The event passed by react-sortable-hoc\n\t */\n\tconst startMove = (node: any, event: any) => {\n\t\tmovingIndex = node.index;\n\t\tif (offsetX === null && titleGrabPosition !== null) {\n\t\t\toffsetX = event.clientX - titleGrabPosition;\n\t\t}\n\t\tconst widget = Object.values(widgets)[node.index] as DashbarView;\n\t\twidget.view.bringToFront();\n\t};\n\n\t/**\n\t * Event triggered by view movement\n\t *\n\t * @param {MouseEvent} event\n\t */\n\tconst moveItem = (event: any) => {\n\t\tif (movingIndex !== null) {\n\t\t\tconst movingWidget = Object.values(widgets)[movingIndex] as DashbarView;\n\n\t\t\tmovingWidget.view.setBounds({\n\t\t\t\ttop: movingWidget.bounds.top,\n\t\t\t\theight: movingWidget.bounds.height,\n\t\t\t\twidth: movingWidget.bounds.width,\n\t\t\t\tleft: event.clientX - (offsetX || 0),\n\t\t\t});\n\n\t\t\t// Some completely not react very hacky stuff to make browserviews move in conjunction with the titles\n\t\t\tconst elements = document.getElementsByClassName(\"dashbar-item-frame\");\n\t\t\tfor (const element of elements) {\n\t\t\t\tconst rect = element.getBoundingClientRect();\n\t\t\t\tconst widget = (widgets as any)[element.id];\n\t\t\t\tif (widget !== movingWidget && widget.bounds.left !== rect.left) {\n\t\t\t\t\twidget.bounds.left = rect.left;\n\t\t\t\t\twidget.view.setBounds(widget.bounds);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tconst setGrabLocation = (location: number) => {\n\t\ttitleGrabPosition = location;\n\t};\n\n\t/**\n\t * Every time a widget is added or removed, modify the key on the FinsembleDnDContext element forcing a rerender.\n\t *\n\t * This is a workaround for certain cases where removing a dashbar item would align the panels incorrectly in\n\t * FinsembleDnDContext. The scrolling works by the FinsembleDnDContext setting scrollLeft value. All calculations\n\t * in FinsembleDnDContext are correct but due to a browser bug, when removing component under certain conditions,\n\t * it somehow sets false maximum value for this scrollLeft value. Any value higher than the maximum is capped\n\t * causing it to half scroll an element.\n\t *\n\t */\n\tconst elementKey = Object.entries(widgets)\n\t\t.map((entry) => entry[0])\n\t\t.sort()\n\t\t.join(\"-\");\n\n\treturn (\n\t\t<div className={wrapperClasses} style={{ height: dashbarHeight }}>\n\t\t\t{WIDGET_COUNT > 0 && (\n\t\t\t\t<FinsembleDnDContext\n\t\t\t\t\tkey={elementKey}\n\t\t\t\t\tonDragEnd={reorderItems}\n\t\t\t\t\tonDragStart={startMove}\n\t\t\t\t\tonDragMove={moveItem}\n\t\t\t\t\tonLayoutUpdate={setWidgetsPositions}\n\t\t\t\t\tclassName=\"finsemble-dashbar-section rearrange-region\"\n\t\t\t\t\tid=\"dashbar-container\"\n\t\t\t\t\taxis={AllowableDnDAxis.x}\n\t\t\t\t\tlockAxis={AllowableDnDAxis.x}\n\t\t\t\t\tallowHorizontalScroll={true}\n\t\t\t\t\tshowScrollButtonsTooltip={true}\n\t\t\t\t\tleftButtonTooltip={leftButtonTooltip}\n\t\t\t\t\trightButtonTooltip={rightButtonTooltip}\n\t\t\t\t\tmetadata={{ dashbar }}\n\t\t\t\t>\n\t\t\t\t\t{Object.values(widgets).map((widget, i) => (\n\t\t\t\t\t\t<DashbarItem\n\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\tid={Object.keys(widgets)[i]}\n\t\t\t\t\t\t\tindex={i}\n\t\t\t\t\t\t\twidgetTitleGenerator={titleGenerator}\n\t\t\t\t\t\t\twidget={widget as DashbarView}\n\t\t\t\t\t\t\tdashbarHeight={dashbar.height}\n\t\t\t\t\t\t\twidgetDividerWidth={widgetDividerWidth}\n\t\t\t\t\t\t\tsetTitleHeight={setTitleHeight}\n\t\t\t\t\t\t\tsetGrabLocation={setGrabLocation}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</FinsembleDnDContext>\n\t\t\t)}\n\t\t\t{WIDGET_COUNT === 0 && (\n\t\t\t\t<div className=\"add-dashbar-item-button\" onClick={launchDashbar}>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t<i className=\"ff-plus\"></i>\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{children}\n\t\t</div>\n\t);\n};\n"]}
1
+ {"version":3,"file":"Dashbar.js","sourceRoot":"","sources":["../../../../src/components/toolbar/dashbar/Dashbar.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { DashbarItem } from \"./DashbarItem\";\nimport { Dashbar as DashbarType, DashbarItem as DashbarItemType, DashbarView } from \"../../../types/dashbarTypes\";\nimport { useDashbar } from \"../../../hooks/useDashbar\";\nimport { useToolbar } from \"../../../hooks/useToolbar\";\nimport { FinsembleDnDContext, AllowableDnDAxis } from \"../../legacyControls/FinsembleDnDContext\";\nimport clone from \"lodash/cloneDeep\";\n\nimport \"../../../assets/css/dashbar.css\";\n\ntype DashbarViews = {\n\t[key: string]: DashbarView;\n} & {};\n\nlet cachedWidgetTop: number;\nlet cachedWidgetHeight: number;\n\nexport const Dashbar = ({ className, children, widgetTitleGenerator }: DashbarType) => {\n\tconst { dashbarItems, reorderDashbarItems } = useDashbar();\n\tconst { launchPreferences } = useToolbar();\n\n\tconst [widgets, setWidgets] = useState({});\n\tconst [horizontalBounds, setHorizontalBounds] = useState(0);\n\tconst [wasReorganized, setReorganized] = useState(false);\n\tconst [totalWidgetsWidth, setTotalWidgetsWidth] = useState(0);\n\tconst [isUpdatingState, setIsUpdatingState] = useState(false);\n\tconst [secondUpdateRequired, setSecondUpdateRequired] = useState(false);\n\tconst [allowHorizontalScroll, setAllowHorizontalScroll] = useState(true);\n\n\tlet movingIndex: number | null = null; // The dashbarItem index being dragged, null if none\n\tlet titleGrabPosition: number | null = null; // The mouse of event when a widget title is dragged\n\tlet offsetX: number | null = null; // The original grab location of a given view titlebar\n\n\tconst WIDGET_COUNT: number = Object.keys(widgets).length;\n\tconst SCROLL_BUTTON_DEFAULT_WIDTH = 30;\n\n\tconst defaultWidgetTitleGenerator = (widget: DashbarView, titleRef: React.MutableRefObject<null>) => {\n\t\tconst handleWidgetTitleClick = () => {\n\t\t\tif (widget.raiseIntentOptions) {\n\t\t\t\tfdc3.raiseIntent(\n\t\t\t\t\twidget.raiseIntentOptions.intent,\n\t\t\t\t\twidget.raiseIntentOptions.context,\n\t\t\t\t\twidget.raiseIntentOptions.targetApp\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<div ref={titleRef} onClick={() => handleWidgetTitleClick()}>\n\t\t\t\t<span dangerouslySetInnerHTML={{ __html: widget.title }}></span>\n\t\t\t</div>\n\t\t);\n\t};\n\n\tconst titleGenerator = widgetTitleGenerator ?? defaultWidgetTitleGenerator;\n\n\t/**\n\t *\n\t * @param {object} params\n\t * @param {number} oldIndex The index of the item being moved\n\t * @param {number} newIndex The index to move the item to\n\t */\n\tconst reorderItems = ({ oldIndex, newIndex }: { oldIndex: number; newIndex: number }) => {\n\t\tmovingIndex = null;\n\t\ttitleGrabPosition = null;\n\t\toffsetX = null;\n\t\tsetReorganized(true);\n\t\t// Update the redux store\n\t\treorderDashbarItems({ oldIndex, newIndex });\n\t};\n\n\tconst launchDashbar = () => {\n\t\tlaunchPreferences(\"Dashbar\");\n\t};\n\n\tconst { dashbar } = FSBL.Clients.WindowClient.getSpawnData();\n\n\t// Dashbar is disabled (no config in toolbar) or dashbar height is not specified\n\tif (!dashbar || !dashbar.height) {\n\t\treturn null;\n\t}\n\tconst toolbarHeight = finsembleWindow.windowOptions.height;\n\tconst dashbarHeight = `${dashbar.height}px`;\n\tconst verticalBounds = toolbarHeight - dashbar.height;\n\tconst widgetDividerWidth = dashbar.widgetDividerWidth || 0;\n\n\tconst wrapperClasses = `finsemble-dashbar ${className || \"\"}`.trim();\n\n\tconst getTotalWidth = () => {\n\t\tlet totalWidth = 0;\n\t\tdashbarItems.forEach((item: DashbarItemType) => {\n\t\t\ttotalWidth = totalWidth + item.width;\n\t\t});\n\t\treturn totalWidth;\n\t};\n\n\tconst [leftButtonTooltip, setLeftButtonTooltip] = useState(\"\");\n\tconst [rightButtonTooltip, setRightButtonTooltip] = useState(\"\");\n\n\t// For calculation widgets position that function uses the HTML elements.\n\t// If something will be changed in HTML hierarchy for widgets, that function should be refactored.\n\tconst setWidgetsPositions = async () => {\n\t\tconst { data: bounds } = await finsembleWindow.getBounds();\n\t\tconst widgetsWidth = getTotalWidth();\n\t\tconst scrollButtonsEnabled = widgetsWidth >= (bounds?.width ?? 0);\n\t\t// show or hide scroll buttons based on widgets size and window width\n\t\tif (allowHorizontalScroll != scrollButtonsEnabled) {\n\t\t\tsetAllowHorizontalScroll(scrollButtonsEnabled);\n\t\t}\n\n\t\tconst elements = document.getElementsByClassName(\"finsemble-dashbar-item\");\n\t\tlet toolbarWidth = bounds?.width ?? 0;\n\t\tlet SCROLL_BUTTON_WIDTH = SCROLL_BUTTON_DEFAULT_WIDTH;\n\t\tif (scrollButtonsEnabled) {\n\t\t\t// Get actual width in case of client styling\n\t\t\tconst chevrons = document.querySelectorAll(\"#dashbar-container > .chevron-container\");\n\t\t\tif (chevrons.length > 0) {\n\t\t\t\tSCROLL_BUTTON_WIDTH = (chevrons[0] as HTMLElement).offsetWidth;\n\t\t\t\ttoolbarWidth = toolbarWidth - 2 * SCROLL_BUTTON_WIDTH;\n\t\t\t}\n\t\t}\n\n\t\tlet tempLeft = 0;\n\t\tlet leftButtonSize = 0;\n\t\tif (scrollButtonsEnabled) {\n\t\t\ttempLeft = SCROLL_BUTTON_WIDTH;\n\t\t\tleftButtonSize = SCROLL_BUTTON_WIDTH;\n\t\t}\n\n\t\tlet leftItemsCount = 0;\n\t\tlet rightItemsCount = 0;\n\n\t\tfor (const dashbarItem of elements) {\n\t\t\t// rect.width already contains the divider width\n\t\t\tconst rect = dashbarItem.getBoundingClientRect();\n\t\t\tconst dashbarItemFrame = dashbarItem.firstChild as Element;\n\t\t\tconst widgetId = dashbarItemFrame.id;\n\t\t\tconst widget = (widgets as DashbarViews)[widgetId];\n\t\t\t// Happens when widgets were removed, but dom-elements still exists. So just ignore.\n\t\t\tif (!widget) continue;\n\n\t\t\tif (rect.left < SCROLL_BUTTON_WIDTH && scrollButtonsEnabled) {\n\t\t\t\twidget.bounds.width = 0;\n\t\t\t\twidget.bounds.left = tempLeft;\n\t\t\t\tleftItemsCount++;\n\t\t\t} else {\n\t\t\t\twidget.bounds.width = rect.width - widgetDividerWidth;\n\t\t\t\twidget.bounds.left = tempLeft;\n\t\t\t\ttempLeft = tempLeft + rect.width;\n\t\t\t}\n\n\t\t\tlet offsetRight = rect.left + rect.width - widgetDividerWidth - leftButtonSize - toolbarWidth;\n\t\t\tif (offsetRight > 0) {\n\t\t\t\twidget.bounds.width = 0;\n\t\t\t\trightItemsCount++;\n\t\t\t}\n\t\t\twidget.view.setBounds(widget.bounds);\n\t\t}\n\n\t\tsetLeftButtonTooltip(`${leftItemsCount} more`);\n\t\tsetRightButtonTooltip(`${rightItemsCount} more`);\n\t};\n\n\tconst addWidgets = async () => {\n\t\tconst _widgets: DashbarViews = clone(widgets);\n\t\tlet tempHorizontalBounds = horizontalBounds;\n\n\t\tfor (const item of dashbarItems) {\n\t\t\tconst widgetBounds = {\n\t\t\t\ttop: verticalBounds,\n\t\t\t\tleft: tempHorizontalBounds,\n\t\t\t\twidth: item.width - widgetDividerWidth,\n\t\t\t\theight: item.height || dashbar.height,\n\t\t\t};\n\n\t\t\tif (!_widgets.hasOwnProperty(item.id)) {\n\t\t\t\tconst webContentsName = `(Dashbar) ${item.id}`;\n\t\t\t\tconst res: any = await finsembleWindow.addBrowserView({\n\t\t\t\t\turl: item.url,\n\t\t\t\t\twebContentsName,\n\t\t\t\t\tbounds: widgetBounds,\n\t\t\t\t\tallowAutoResize: false,\n\t\t\t\t});\n\n\t\t\t\t_widgets[item.id] = {\n\t\t\t\t\turl: item.url,\n\t\t\t\t\ttitle: item.title,\n\t\t\t\t\tbounds: widgetBounds,\n\t\t\t\t\tview: res,\n\t\t\t\t\twidth: item.width,\n\t\t\t\t\traiseIntentOptions: item.raiseIntentOptions,\n\t\t\t\t};\n\n\t\t\t\ttempHorizontalBounds = tempHorizontalBounds + item.width;\n\t\t\t}\n\t\t}\n\t\tsetWidgets(_widgets);\n\t\tsetHorizontalBounds(tempHorizontalBounds);\n\t};\n\n\tconst removeWidgets = async () => {\n\t\tconst _widgets: DashbarViews = clone(widgets);\n\t\t// Widgets is an object, with each key being a reference to an item in dashbarItems\n\t\t// but dashbarItems is an array of objects. Its necessary to loop through them to determine\n\t\t// the differences to figure out which items were removed.\n\t\tconst toRemove: string[] = [];\n\t\tObject.keys(_widgets).forEach((widgetId) => {\n\t\t\tlet found = false;\n\t\t\tfor (let i = 0; i < dashbarItems.length; i++) {\n\t\t\t\tconst dashItem = dashbarItems[i];\n\t\t\t\tif (dashItem.id === widgetId) {\n\t\t\t\t\tfound = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!found) {\n\t\t\t\ttoRemove.push(widgetId);\n\t\t\t}\n\t\t});\n\n\t\tlet tempNewHorizontalBounds = 0;\n\t\t// toRemove is an array of widgetIds which were no longer found in dashbarItems\n\t\t// As items are removed, the remaining items have to be shuffled to fill the space\n\t\tfor (const id of toRemove) {\n\t\t\tif (_widgets.hasOwnProperty(id)) {\n\t\t\t\tawait _widgets[id].view.remove(() => {\n\t\t\t\t\tdelete _widgets[id];\n\t\t\t\t\t// Shuffle remaining views to fill any gaps that were left\n\t\t\t\t\tObject.values(_widgets).forEach((widget) => {\n\t\t\t\t\t\twidget.bounds = {\n\t\t\t\t\t\t\twidth: widget.bounds.width,\n\t\t\t\t\t\t\theight: widget.bounds.height,\n\t\t\t\t\t\t\tleft: tempNewHorizontalBounds,\n\t\t\t\t\t\t\ttop: widget.bounds.top,\n\t\t\t\t\t\t};\n\t\t\t\t\t\twidget.view.setBounds(widget.bounds);\n\t\t\t\t\t\ttempNewHorizontalBounds = tempNewHorizontalBounds + widget.bounds.width;\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tFSBL.Clients.Logger.system.error(`Error removing widget: ${id} from dashbar`);\n\t\t\t}\n\t\t}\n\t\tsetWidgets(_widgets);\n\t\tsetHorizontalBounds(tempNewHorizontalBounds);\n\t};\n\n\tconst reorganizeWidgets = () => {\n\t\tconst _widgets: DashbarViews = clone(widgets);\n\t\t// Each view needs to be resituated to fill any holes\n\t\t// left by views that have been removed. Use a tempBounds\n\t\t// int to keep track of new widths and set the overall width\n\t\t// once everything is re-seated\n\t\tlet tempBounds = 0;\n\t\tdashbarItems.forEach((item) => {\n\t\t\tconst widget = _widgets[item.id];\n\n\t\t\twidget.bounds = {\n\t\t\t\theight: cachedWidgetHeight || widget.bounds.height,\n\t\t\t\twidth: widget.bounds.width,\n\t\t\t\ttop: cachedWidgetTop || verticalBounds,\n\t\t\t\tleft: tempBounds,\n\t\t\t};\n\n\t\t\twidget.view.setBounds(widget.bounds);\n\n\t\t\tdelete _widgets[item.id];\n\t\t\t_widgets[item.id] = widget;\n\n\t\t\ttempBounds = tempBounds + item.width;\n\t\t});\n\n\t\tsetReorganized(false);\n\t\tsetWidgets(_widgets);\n\t\tsetHorizontalBounds(tempBounds);\n\t};\n\n\tconst updateItems = () => {\n\t\tconst doUpdate = async () => {\n\t\t\tconst totalWidth = getTotalWidth();\n\t\t\tif (dashbarItems.length > WIDGET_COUNT) {\n\t\t\t\t//Items have been added\n\t\t\t\tawait addWidgets();\n\t\t\t\tsetTotalWidgetsWidth(totalWidth);\n\t\t\t} else if (dashbarItems.length < WIDGET_COUNT) {\n\t\t\t\t//Items have been removed\n\t\t\t\tawait removeWidgets();\n\t\t\t\tsetTotalWidgetsWidth(totalWidth);\n\t\t\t} else if (wasReorganized) {\n\t\t\t\tif (movingIndex) return;\n\t\t\t\t// Length is the same, order has changed\n\t\t\t\treorganizeWidgets();\n\t\t\t}\n\n\t\t\tawait setWidgetsPositions();\n\t\t\tsetIsUpdatingState(false);\n\t\t};\n\n\t\tif (isUpdatingState === false) {\n\t\t\tsetIsUpdatingState(true);\n\t\t\tdoUpdate();\n\t\t} else if (!secondUpdateRequired) {\n\t\t\tsetSecondUpdateRequired(true);\n\t\t}\n\t};\n\n\t/**\n\t * When the distributed store's 'dashbaritems' is updated it will cause this hook to\n\t * execute. The local representation of widgets will be mutated, then a call to\n\t * setWidgets will re-render the component\n\t */\n\tuseEffect(() => {\n\t\tupdateItems();\n\t}, [dashbarItems]);\n\n\t/**\n\t * DashbarItems can be changed very quickly before all widgets will be initialized.\n\t * Double-calling updateItems() fixes a bug.\n\t */\n\tuseEffect(() => {\n\t\tif (secondUpdateRequired && !isUpdatingState) {\n\t\t\tupdateItems();\n\t\t\tsetSecondUpdateRequired(false);\n\t\t}\n\t}, [isUpdatingState, secondUpdateRequired]);\n\n\t/**\n\t * Sets the title height as determined by the DashbarItem\n\t * component, since the CSS can be changed by the user\n\t * the component will render the title and pass back\n\t * computed height of that title, then the Dashbar will\n\t * make room for item\n\t *\n\t * @param {number} titleHeight The height of the span containing the title\n\t * @param {string} id The key'ed id of the view\n\t */\n\tconst setTitleHeight = (titleHeight: number, id: string) => {\n\t\tconst _widgets: DashbarViews = widgets;\n\t\tconst widget = _widgets[id];\n\t\tif (cachedWidgetTop) {\n\t\t\ttitleHeight = 0;\n\t\t}\n\n\t\tconst newBounds = {\n\t\t\ttop: cachedWidgetTop || widget.bounds.top + titleHeight,\n\t\t\tleft: widget.bounds.left,\n\t\t\theight: cachedWidgetHeight || widget.bounds.height - titleHeight,\n\t\t\twidth: widget.bounds.width,\n\t\t};\n\t\tcachedWidgetTop = newBounds.top;\n\t\tcachedWidgetHeight = newBounds.height;\n\n\t\twidget.view.setBounds(newBounds);\n\t\twidget.bounds = newBounds;\n\t};\n\n\t/**\n\t * When a view starts moving, bring it to the front\n\t *\n\t * @param {MouseEvent} event The event passed by react-sortable-hoc\n\t */\n\tconst startMove = (node: any, event: any) => {\n\t\tmovingIndex = node.index;\n\t\tif (offsetX === null && titleGrabPosition !== null) {\n\t\t\toffsetX = event.clientX - titleGrabPosition;\n\t\t}\n\t\tconst widget = Object.values(widgets)[node.index] as DashbarView;\n\t\twidget.view.bringToFront();\n\t};\n\n\t/**\n\t * Event triggered by view movement\n\t *\n\t * @param {MouseEvent} event\n\t */\n\tconst moveItem = (event: any) => {\n\t\tif (movingIndex !== null) {\n\t\t\tconst movingWidget = Object.values(widgets)[movingIndex] as DashbarView;\n\n\t\t\tmovingWidget.view.setBounds({\n\t\t\t\ttop: movingWidget.bounds.top,\n\t\t\t\theight: movingWidget.bounds.height,\n\t\t\t\twidth: movingWidget.bounds.width,\n\t\t\t\tleft: event.clientX - (offsetX || 0),\n\t\t\t});\n\n\t\t\t// Some completely not react very hacky stuff to make browserviews move in conjunction with the titles\n\t\t\tconst elements = document.getElementsByClassName(\"dashbar-item-frame\");\n\t\t\tfor (const element of elements) {\n\t\t\t\tconst rect = element.getBoundingClientRect();\n\t\t\t\tconst widget = (widgets as any)[element.id];\n\t\t\t\tif (widget !== movingWidget && widget.bounds.left !== rect.left) {\n\t\t\t\t\twidget.bounds.left = rect.left;\n\t\t\t\t\twidget.view.setBounds(widget.bounds);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tconst setGrabLocation = (location: number) => {\n\t\ttitleGrabPosition = location;\n\t};\n\n\t/**\n\t * Every time a widget is added or removed, modify the key on the FinsembleDnDContext element forcing a rerender.\n\t *\n\t * This is a workaround for certain cases where removing a dashbar item would align the panels incorrectly in\n\t * FinsembleDnDContext. The scrolling works by the FinsembleDnDContext setting scrollLeft value. All calculations\n\t * in FinsembleDnDContext are correct but due to a browser bug, when removing component under certain conditions,\n\t * it somehow sets false maximum value for this scrollLeft value. Any value higher than the maximum is capped\n\t * causing it to half scroll an element.\n\t *\n\t */\n\tconst elementKey = Object.entries(widgets)\n\t\t.map((entry) => entry[0])\n\t\t.sort()\n\t\t.join(\"-\");\n\n\treturn (\n\t\t<div className={wrapperClasses} style={{ height: dashbarHeight }}>\n\t\t\t{WIDGET_COUNT > 0 && (\n\t\t\t\t<FinsembleDnDContext\n\t\t\t\t\tkey={elementKey}\n\t\t\t\t\tonDragEnd={reorderItems}\n\t\t\t\t\tonDragStart={startMove}\n\t\t\t\t\tonDragMove={moveItem}\n\t\t\t\t\tonLayoutUpdate={setWidgetsPositions}\n\t\t\t\t\tclassName=\"finsemble-dashbar-section rearrange-region\"\n\t\t\t\t\tid=\"dashbar-container\"\n\t\t\t\t\taxis={AllowableDnDAxis.x}\n\t\t\t\t\tlockAxis={AllowableDnDAxis.x}\n\t\t\t\t\tallowHorizontalScroll={allowHorizontalScroll}\n\t\t\t\t\tshowScrollButtonsTooltip={true}\n\t\t\t\t\tleftButtonTooltip={leftButtonTooltip}\n\t\t\t\t\trightButtonTooltip={rightButtonTooltip}\n\t\t\t\t\tmetadata={{ dashbar }}\n\t\t\t\t>\n\t\t\t\t\t{Object.values(widgets).map((widget, i) => (\n\t\t\t\t\t\t<DashbarItem\n\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\tid={Object.keys(widgets)[i]}\n\t\t\t\t\t\t\tindex={i}\n\t\t\t\t\t\t\twidgetTitleGenerator={titleGenerator}\n\t\t\t\t\t\t\twidget={widget as DashbarView}\n\t\t\t\t\t\t\tdashbarHeight={dashbar.height}\n\t\t\t\t\t\t\twidgetDividerWidth={widgetDividerWidth}\n\t\t\t\t\t\t\tsetTitleHeight={setTitleHeight}\n\t\t\t\t\t\t\tsetGrabLocation={setGrabLocation}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</FinsembleDnDContext>\n\t\t\t)}\n\t\t\t{WIDGET_COUNT === 0 && (\n\t\t\t\t<div className=\"add-dashbar-item-button\" onClick={launchDashbar}>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t<i className=\"ff-plus\"></i>\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{children}\n\t\t</div>\n\t);\n};\n"]}
@@ -5,9 +5,13 @@
5
5
  */
6
6
  import React from "react";
7
7
  import { Workspace as WorkspaceType } from "@finsemble/finsemble-api/types/services/workspace/types";
8
+ import { StandardError } from "@finsemble/finsemble-api";
8
9
  declare type WorkspaceActionType = WorkspaceType & {
9
10
  permanent?: boolean;
10
11
  };
12
+ interface IState {
13
+ permanentWorkspaces: string[];
14
+ }
11
15
  interface IProps {
12
16
  isSwitchingWorkspaces: boolean;
13
17
  isActiveWorkspace: boolean;
@@ -19,7 +23,7 @@ interface IProps {
19
23
  name: string;
20
24
  }) => void;
21
25
  }
22
- export default class Workspace extends React.Component<IProps> {
26
+ export default class Workspace extends React.Component<IProps, IState> {
23
27
  constructor(props: IProps);
24
28
  /**
25
29
  * This is necessary to make sure that the `this` inside of the callback is correct.
@@ -33,6 +37,10 @@ export default class Workspace extends React.Component<IProps> {
33
37
  * @memberof Workspace
34
38
  */
35
39
  onClick(): void;
40
+ setPermanentWorkspaces(err: StandardError, config: any): void;
41
+ addListeners(): void;
42
+ componentDidMount(): void;
43
+ componentWillUnmount(): void;
36
44
  /**
37
45
  * Render method.
38
46
  *