foreman-tasks 1.0.0 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (165) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintrc +2 -22
  3. data/.rubocop.yml +12 -12
  4. data/.rubocop_todo.yml +34 -116
  5. data/app/controllers/foreman_tasks/api/recurring_logics_controller.rb +20 -1
  6. data/app/controllers/foreman_tasks/api/tasks_controller.rb +38 -11
  7. data/app/controllers/foreman_tasks/concerns/hosts_controller_extension.rb +1 -1
  8. data/app/controllers/foreman_tasks/recurring_logics_controller.rb +19 -0
  9. data/app/helpers/foreman_tasks/foreman_tasks_helper.rb +1 -3
  10. data/app/lib/actions/helpers/humanizer.rb +1 -3
  11. data/app/lib/actions/proxy_action.rb +33 -12
  12. data/app/lib/foreman_tasks/concerns/polling_action_extensions.rb +12 -0
  13. data/app/models/foreman_tasks/concerns/action_triggering.rb +1 -1
  14. data/app/models/foreman_tasks/recurring_logic.rb +1 -0
  15. data/app/models/foreman_tasks/remote_task.rb +1 -0
  16. data/app/models/foreman_tasks/task.rb +4 -0
  17. data/app/models/foreman_tasks/task/dynflow_task.rb +1 -1
  18. data/app/models/foreman_tasks/task/search.rb +11 -1
  19. data/app/models/setting/foreman_tasks.rb +6 -1
  20. data/app/services/foreman_tasks/troubleshooting_help_generator.rb +0 -4
  21. data/app/services/ui_notifications/tasks/task_bulk_cancel.rb +36 -0
  22. data/app/services/ui_notifications/tasks/task_bulk_resume.rb +38 -0
  23. data/app/views/foreman_tasks/api/recurring_logics/base.json.rabl +2 -1
  24. data/app/views/foreman_tasks/api/tasks/details.json.rabl +1 -0
  25. data/app/views/foreman_tasks/api/tasks/show.json.rabl +1 -1
  26. data/app/views/foreman_tasks/recurring_logics/index.html.erb +30 -0
  27. data/app/views/foreman_tasks/tasks/show.html.erb +3 -0
  28. data/{.babelrc.js → babel.config.js} +0 -0
  29. data/config/routes.rb +7 -0
  30. data/db/migrate/20200611090846_add_task_lock_index_on_resource_type_and_task_id.rb +9 -0
  31. data/db/seeds.d/30-notification_blueprints.rb +14 -0
  32. data/foreman-tasks.gemspec +5 -6
  33. data/gemfile.d/foreman-tasks.rb +1 -0
  34. data/lib/foreman_tasks/dynflow/console_authorizer.rb +2 -2
  35. data/lib/foreman_tasks/engine.rb +17 -14
  36. data/lib/foreman_tasks/tasks/cleanup.rake +3 -3
  37. data/lib/foreman_tasks/tasks/dynflow.rake +6 -0
  38. data/lib/foreman_tasks/tasks/export_tasks.rake +3 -3
  39. data/lib/foreman_tasks/test_extensions.rb +1 -1
  40. data/lib/foreman_tasks/version.rb +1 -1
  41. data/locale/action_names.rb +1 -1
  42. data/package.json +18 -71
  43. data/script/rails +2 -2
  44. data/script/travis_run_js_tests.sh +2 -2
  45. data/test/controllers/api/tasks_controller_test.rb +9 -0
  46. data/test/factories/task_factory.rb +34 -2
  47. data/test/foreman_tasks_test_helper.rb +4 -0
  48. data/test/lib/concerns/polling_action_extensions_test.rb +34 -0
  49. data/test/unit/actions/action_with_sub_plans_test.rb +1 -1
  50. data/test/unit/task_test.rb +160 -74
  51. data/webpack/ForemanTasks/Components/TaskDetails/Components/Task.js +4 -0
  52. data/webpack/ForemanTasks/Components/TaskDetails/Components/TaskInfo.js +3 -12
  53. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/Errors.test.js +1 -1
  54. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/Locks.test.js +1 -1
  55. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/Raw.test.js +1 -1
  56. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/RunningSteps.test.js +1 -1
  57. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/Task.test.js +2 -1
  58. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/TaskInfo.test.js +1 -1
  59. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/__snapshots__/Task.test.js.snap +3 -1
  60. data/webpack/ForemanTasks/Components/TaskDetails/Components/__tests__/__snapshots__/TaskInfo.test.js.snap +3 -9
  61. data/webpack/ForemanTasks/Components/TaskDetails/TaskDetails.stories.js +6 -2
  62. data/webpack/ForemanTasks/Components/TaskDetails/TaskDetailsSelectors.js +4 -1
  63. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/TaskDetails.test.js +1 -1
  64. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/TaskDetailsActions.test.js +1 -1
  65. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/TaskDetailsReducer.test.js +1 -1
  66. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/__snapshots__/TaskDetails.test.js.snap +1 -0
  67. data/webpack/ForemanTasks/Components/TaskDetails/__tests__/integration.test.js +1 -1
  68. data/webpack/ForemanTasks/Components/TaskDetails/index.js +2 -0
  69. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/PausedTasksCard/PausedTasksCard.stories.js +44 -40
  70. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/PausedTasksCard/PausedTasksCard.test.js +1 -1
  71. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/RunningTasksCard/RunningTasksCard.stories.js +45 -40
  72. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/RunningTasksCard/RunningTasksCard.test.js +1 -1
  73. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/ScheduledTasksCard/ScheduledTasksCard.stories.js +27 -22
  74. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/ScheduledTasksCard/ScheduledTasksCard.test.js +1 -1
  75. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCard.stories.js +61 -56
  76. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/StoppedTasksCard/StoppedTasksCard.test.js +1 -1
  77. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutCard/TasksDonutCard.stories.js +40 -35
  78. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutCard/TasksDonutCard.test.js +1 -1
  79. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutChart/TasksDonutChart.stories.js +21 -20
  80. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/Components/TasksDonutChart/TasksDonutChart.test.js +1 -1
  81. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/TasksCardsGrid.stories.js +40 -39
  82. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksCardsGrid/TasksCardsGrid.test.js +1 -1
  83. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksLabelsRow/TasksLabelsRow.stories.js +16 -17
  84. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksLabelsRow/TasksLabelsRow.test.js +1 -2
  85. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/Components/TimeDropDown/TimeDropDown.stories.mdx +57 -0
  86. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/Components/TimeDropDown/TimeDropDown.test.js +1 -1
  87. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/TasksTimeRow.stories.js +36 -18
  88. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/TasksTimeRow.test.js +1 -1
  89. data/webpack/ForemanTasks/Components/TasksDashboard/TasksDashboardConstants.js +5 -0
  90. data/webpack/ForemanTasks/Components/TasksDashboard/TasksDashboardHelper.js +3 -2
  91. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/TasksDashboard.test.js +1 -1
  92. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/TasksDashboardActions.test.js +1 -1
  93. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/TasksDashboardReducer.test.js +1 -1
  94. data/webpack/ForemanTasks/Components/TasksDashboard/__tests__/TasksDashboardSelectors.test.js +1 -1
  95. data/webpack/ForemanTasks/Components/TasksTable/Components/CancelConfirm.js +53 -0
  96. data/webpack/ForemanTasks/Components/TasksTable/Components/ConfirmationModals.js +56 -0
  97. data/webpack/ForemanTasks/Components/TasksTable/Components/ResumeConfirm.js +52 -0
  98. data/webpack/ForemanTasks/Components/TasksTable/Components/SelectAllAlert.js +43 -0
  99. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/ActionSelectButton.test.js +1 -1
  100. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/CancelConfirm.test.js +26 -0
  101. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/ConfirmationModals.test.js +24 -0
  102. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/ResumeConfirm.test.js +26 -0
  103. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/SelectAllAlert.test.js +29 -0
  104. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/TableSelectionCell.test.js +1 -1
  105. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/TableSelectionHeaderCell.test.js +1 -1
  106. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/__snapshots__/CancelConfirm.test.js.snap +65 -0
  107. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/__snapshots__/ConfirmationModals.test.js.snap +30 -0
  108. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/__snapshots__/ResumeConfirm.test.js.snap +63 -0
  109. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/__snapshots__/SelectAllAlert.test.js.snap +75 -0
  110. data/webpack/ForemanTasks/Components/TasksTable/SubTasksPage.js +4 -1
  111. data/webpack/ForemanTasks/Components/TasksTable/TasksBulkActions.js +164 -0
  112. data/webpack/ForemanTasks/Components/TasksTable/TasksTable.js +46 -22
  113. data/webpack/ForemanTasks/Components/TasksTable/TasksTableActionHelpers.js +52 -0
  114. data/webpack/ForemanTasks/Components/TasksTable/TasksTableActions.js +88 -87
  115. data/webpack/ForemanTasks/Components/TasksTable/TasksTableConstants.js +23 -9
  116. data/webpack/ForemanTasks/Components/TasksTable/TasksTableHelpers.js +4 -3
  117. data/webpack/ForemanTasks/Components/TasksTable/TasksTablePage.js +128 -31
  118. data/webpack/ForemanTasks/Components/TasksTable/TasksTableReducer.js +26 -9
  119. data/webpack/ForemanTasks/Components/TasksTable/TasksTableSelectors.js +24 -16
  120. data/webpack/ForemanTasks/Components/TasksTable/__tests__/SubTasksPage.test.js +1 -1
  121. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksBulkActions.test.js +112 -0
  122. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksIndexPage.test.js +1 -1
  123. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTable.fixtures.js +12 -5
  124. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTable.test.js +1 -1
  125. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTableActionHelpers.test.js +46 -0
  126. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTableActions.test.js +28 -52
  127. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTableHelpers.test.js +17 -1
  128. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTablePage.test.js +10 -2
  129. data/webpack/ForemanTasks/Components/TasksTable/__tests__/TasksTableReducer.test.js +28 -8
  130. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/SubTasksPage.test.js.snap +15 -5
  131. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksBulkActions.test.js.snap +229 -0
  132. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksIndexPage.test.js.snap +14 -5
  133. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksTableActions.test.js.snap +56 -85
  134. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksTablePage.test.js.snap +158 -32
  135. data/webpack/ForemanTasks/Components/TasksTable/__tests__/__snapshots__/TasksTableReducer.test.js.snap +43 -16
  136. data/webpack/ForemanTasks/Components/TasksTable/formatters/__test__/selectionHeaderCellFormatter.test.js +1 -1
  137. data/webpack/ForemanTasks/Components/TasksTable/formatters/selectionHeaderCellFormatter.js +2 -2
  138. data/webpack/ForemanTasks/Components/TasksTable/index.js +11 -4
  139. data/webpack/ForemanTasks/Components/common/ActionButtons/ActionButton.js +4 -4
  140. data/webpack/ForemanTasks/Components/common/ActionButtons/ActionButton.test.js +1 -1
  141. data/webpack/ForemanTasks/Components/common/ActionButtons/CancelButton.test.js +1 -2
  142. data/webpack/ForemanTasks/Components/common/ActionButtons/ResumeButton.test.js +2 -2
  143. data/webpack/ForemanTasks/Components/common/ActionButtons/__snapshots__/ActionButton.test.js.snap +3 -3
  144. data/webpack/ForemanTasks/Components/common/ToastTypesConstants.js +11 -0
  145. data/webpack/ForemanTasks/ForemanTasks.test.js +1 -1
  146. data/webpack/ForemanTasks/Routes/ForemanTasksRouter.test.js +1 -1
  147. data/webpack/ForemanTasks/Routes/ForemanTasksRoutes.test.js +2 -3
  148. data/webpack/ForemanTasks/Routes/ShowTask/__tests__/ShowTask.test.js +1 -1
  149. data/webpack/__mocks__/foremanReact/components/ForemanModal/ForemanModalActions.js +2 -0
  150. data/webpack/__mocks__/foremanReact/components/ForemanModal/ForemanModalHooks.js +10 -0
  151. data/webpack/__mocks__/foremanReact/components/ForemanModal/index.js +4 -0
  152. metadata +55 -24
  153. data/.storybook/addons.js +0 -2
  154. data/.storybook/config.js +0 -7
  155. data/.storybook/webpack.config.js +0 -84
  156. data/webpack/ForemanTasks/Components/TasksDashboard/Components/TasksTimeRow/Components/TimeDropDown/TimeDropDown.stories.js +0 -23
  157. data/webpack/ForemanTasks/Components/TasksTable/Components/ActionConfirmation.js +0 -49
  158. data/webpack/ForemanTasks/Components/TasksTable/Components/CancelResumeConfirm.js +0 -51
  159. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/ActionConfirmation.test.js +0 -18
  160. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/CancelResumeConfirm.test.js +0 -28
  161. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/__snapshots__/ActionConfirmation.test.js.snap +0 -89
  162. data/webpack/ForemanTasks/Components/TasksTable/Components/__test__/__snapshots__/CancelResumeConfirm.test.js.snap +0 -37
  163. data/webpack/stories/index.js +0 -10
  164. data/webpack/stories/index.scss +0 -7
  165. data/webpack/test_setup.js +0 -7
@@ -1,6 +1,5 @@
1
1
  import React from 'react';
2
- import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
3
- import { shallow } from 'enzyme';
2
+ import { testComponentSnapshotsWithFixtures, shallow } from '@theforeman/test';
4
3
 
5
4
  import { getQueryKeyText, getQueryValueText } from '../../TasksDashboardHelper';
6
5
  import TasksLabelsRow from './TasksLabelsRow';
@@ -0,0 +1,57 @@
1
+ import { Meta, Story, Preview, Props, action } from '@theforeman/stories';
2
+
3
+ import { TASKS_DASHBOARD_AVAILABLE_TIMES } from '../../../../TasksDashboardConstants';
4
+ import TimeDropDown from './TimeDropDown';
5
+
6
+ <Meta
7
+ title="TasksDashboard/TasksTimeRow/TimeDropDown"
8
+ component={TimeDropDown}
9
+ />
10
+
11
+ # TimeDropDown
12
+
13
+ Render a dropdown with the available dashboard times to render.
14
+
15
+ <Props of={TimeDropDown} />
16
+
17
+ The available-times defined as a constant at `Components/TasksDashboard/TasksDashboardConstants.js`:
18
+
19
+ ```js
20
+ import { TASKS_DASHBOARD_AVAILABLE_TIMES } from './Components/TasksDashboard/TasksDashboardConstants';
21
+ ```
22
+
23
+ To set the current selected time, set the `selectedTime` prop to `TASKS_DASHBOARD_AVAILABLE_TIMES.H24`.
24
+
25
+ <Preview>
26
+ <Story name="24 hours">
27
+ <TimeDropDown
28
+ id="time-period-dropdown"
29
+ selectedTime={TASKS_DASHBOARD_AVAILABLE_TIMES.H24}
30
+ onChange={action('onChange')}
31
+ />
32
+ </Story>
33
+ </Preview>
34
+
35
+ To set the current selected time, set the `selectedTime` prop to `TASKS_DASHBOARD_AVAILABLE_TIMES.H12`.
36
+
37
+ <Preview>
38
+ <Story name="12 hours">
39
+ <TimeDropDown
40
+ id="time-period-dropdown"
41
+ selectedTime={TASKS_DASHBOARD_AVAILABLE_TIMES.H12}
42
+ onChange={action('onChange')}
43
+ />
44
+ </Story>
45
+ </Preview>
46
+
47
+ To set the current selected time, set the `selectedTime` prop to `TASKS_DASHBOARD_AVAILABLE_TIMES.WEEK`.
48
+
49
+ <Preview>
50
+ <Story name="week">
51
+ <TimeDropDown
52
+ id="time-period-dropdown"
53
+ selectedTime={TASKS_DASHBOARD_AVAILABLE_TIMES.WEEK}
54
+ onChange={action('onChange')}
55
+ />
56
+ </Story>
57
+ </Preview>
@@ -1,4 +1,4 @@
1
- import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
2
 
3
3
  import { TASKS_DASHBOARD_AVAILABLE_TIMES } from '../../../../TasksDashboardConstants';
4
4
  import TimeDropDown from './TimeDropDown';
@@ -1,22 +1,40 @@
1
- import React from 'react';
2
- import { storiesOf } from '@storybook/react';
3
- import { withKnobs, select } from '@storybook/addon-knobs';
4
- import { action } from '@storybook/addon-actions';
5
- import { withCardsDecorator } from '../../../../../stories/decorators';
1
+ /* eslint-disable react-hooks/rules-of-hooks */
2
+ import React, { useState } from 'react';
3
+ import { select, action } from '@theforeman/stories';
6
4
 
7
5
  import { TASKS_DASHBOARD_AVAILABLE_TIMES } from '../../TasksDashboardConstants';
8
6
  import TasksTimeRow from './TasksTimeRow';
9
7
 
10
- storiesOf('TasksDashboard/TasksTimeRow', module)
11
- .addDecorator(withKnobs)
12
- .addDecorator(withCardsDecorator)
13
- .add('TasksTimeRow', () => (
14
- <TasksTimeRow
15
- time={select(
16
- 'time',
17
- TASKS_DASHBOARD_AVAILABLE_TIMES,
18
- TASKS_DASHBOARD_AVAILABLE_TIMES.H24
19
- )}
20
- updateTime={action('updateTime')}
21
- />
22
- ));
8
+ export default {
9
+ title: 'TasksDashboard/TasksTimeRow',
10
+ component: TasksTimeRow,
11
+ };
12
+
13
+ export const withState = () => {
14
+ const [time, updateTime] = useState(TASKS_DASHBOARD_AVAILABLE_TIMES.H24);
15
+
16
+ return <TasksTimeRow time={time} updateTime={updateTime} />;
17
+ };
18
+
19
+ export const withKnobs = () => (
20
+ <TasksTimeRow
21
+ time={select(
22
+ 'time',
23
+ TASKS_DASHBOARD_AVAILABLE_TIMES,
24
+ TASKS_DASHBOARD_AVAILABLE_TIMES.H24
25
+ )}
26
+ updateTime={action('updateTime')}
27
+ />
28
+ );
29
+
30
+ export const with24Hours = () => (
31
+ <TasksTimeRow time={TASKS_DASHBOARD_AVAILABLE_TIMES.H24} />
32
+ );
33
+
34
+ export const with12Hours = () => (
35
+ <TasksTimeRow time={TASKS_DASHBOARD_AVAILABLE_TIMES.H12} />
36
+ );
37
+
38
+ export const withWeek = () => (
39
+ <TasksTimeRow time={TASKS_DASHBOARD_AVAILABLE_TIMES.WEEK} />
40
+ );
@@ -1,4 +1,4 @@
1
- import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
2
 
3
3
  import { TASKS_DASHBOARD_AVAILABLE_TIMES } from '../../TasksDashboardConstants';
4
4
  import TasksTimeRow from './TasksTimeRow';
@@ -18,6 +18,11 @@ export const TASKS_DASHBOARD_AVAILABLE_QUERY_MODES = {
18
18
  OLDER: 'older',
19
19
  };
20
20
 
21
+ export const TASKS_DASHBOARD_JS_QUERY_MODES = {
22
+ RECENT: 'recent',
23
+ OLDER: 'older',
24
+ };
25
+
21
26
  export const TASKS_DASHBOARD_AVAILABLE_TIMES = {
22
27
  H24: 'H24',
23
28
  H12: 'H12',
@@ -4,6 +4,7 @@ import {
4
4
  TASKS_DASHBOARD_AVAILABLE_TIMES,
5
5
  TASKS_DASHBOARD_QUERY_KEYS_TEXT,
6
6
  TASKS_DASHBOARD_QUERY_VALUES_TEXT,
7
+ TASKS_DASHBOARD_JS_QUERY_MODES,
7
8
  } from './TasksDashboardConstants';
8
9
  import { updateURlQuery } from '../TasksTable/TasksTableHelpers';
9
10
 
@@ -39,8 +40,8 @@ const queryFromUriQuery = uriQuery => {
39
40
  if (uriQuery[uriField]) query[queryField] = uriQuery[uriField];
40
41
  });
41
42
 
42
- if (query.mode === 'recent') {
43
- query.mode = 'last';
43
+ if (query.mode === TASKS_DASHBOARD_JS_QUERY_MODES.RECENT) {
44
+ query.mode = TASKS_DASHBOARD_QUERY_VALUES_TEXT.LAST;
44
45
  }
45
46
 
46
47
  return query;
@@ -1,4 +1,4 @@
1
- import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
2
 
3
3
  import TasksDashboard from '../TasksDashboard';
4
4
 
@@ -1,4 +1,4 @@
1
- import { testActionSnapshotWithFixtures } from 'react-redux-test-utils';
1
+ import { testActionSnapshotWithFixtures } from '@theforeman/test';
2
2
  import API from 'foremanReact/API';
3
3
  import { timeToHoursNumber } from '../TasksDashboardHelper';
4
4
  import {
@@ -1,4 +1,4 @@
1
- import { testReducerSnapshotWithFixtures } from 'react-redux-test-utils';
1
+ import { testReducerSnapshotWithFixtures } from '@theforeman/test';
2
2
 
3
3
  import {
4
4
  FOREMAN_TASKS_DASHBOARD_INIT,
@@ -1,4 +1,4 @@
1
- import { testSelectorsSnapshotWithFixtures } from 'react-redux-test-utils';
1
+ import { testSelectorsSnapshotWithFixtures } from '@theforeman/test';
2
2
  import {
3
3
  selectTasksDashboard,
4
4
  selectTime,
@@ -0,0 +1,53 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { sprintf, translate as __ } from 'foremanReact/common/I18n';
4
+ import { Button } from 'patternfly-react';
5
+ import ForemanModal from 'foremanReact/components/ForemanModal';
6
+ import {
7
+ CANCEL_CONFIRM_MODAL_ID,
8
+ RESUME_CONFIRM_MODAL_ID,
9
+ CANCEL_SELECTED_CONFIRM_MODAL_ID,
10
+ RESUME_SELECTED_CONFIRM_MODAL_ID,
11
+ } from '../TasksTableConstants';
12
+
13
+ export const CancelConfirm = ({ closeModal, action, selectedRowsLen, id }) => (
14
+ <ForemanModal title={__('Cancel Selected Tasks')} id={id}>
15
+ <ForemanModal.Header />
16
+ {sprintf(
17
+ __(
18
+ `This will cancel %s task(s), putting them in the stopped state. Are you sure?`
19
+ ),
20
+ selectedRowsLen
21
+ )}
22
+ <ForemanModal.Footer>
23
+ <Button onClick={closeModal}>{__('No')}</Button>
24
+ <Button
25
+ bsStyle="primary"
26
+ onClick={() => {
27
+ action();
28
+ closeModal();
29
+ }}
30
+ >
31
+ {__('Yes')}
32
+ </Button>
33
+ </ForemanModal.Footer>
34
+ </ForemanModal>
35
+ );
36
+
37
+ CancelConfirm.propTypes = {
38
+ closeModal: PropTypes.func.isRequired,
39
+ selectedRowsLen: PropTypes.number.isRequired,
40
+ action: PropTypes.func,
41
+ id: PropTypes.oneOf([
42
+ CANCEL_CONFIRM_MODAL_ID,
43
+ RESUME_CONFIRM_MODAL_ID,
44
+ CANCEL_SELECTED_CONFIRM_MODAL_ID,
45
+ RESUME_SELECTED_CONFIRM_MODAL_ID,
46
+ ]).isRequired,
47
+ };
48
+
49
+ CancelConfirm.defaultProps = {
50
+ action: () => null,
51
+ };
52
+
53
+ export default CancelConfirm;
@@ -0,0 +1,56 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import {
4
+ CANCEL_CONFIRM_MODAL_ID,
5
+ RESUME_CONFIRM_MODAL_ID,
6
+ CANCEL_SELECTED_CONFIRM_MODAL_ID,
7
+ RESUME_SELECTED_CONFIRM_MODAL_ID,
8
+ } from '../TasksTableConstants';
9
+ import { CancelConfirm } from './CancelConfirm';
10
+ import { ResumeConfirm } from './ResumeConfirm';
11
+
12
+ export const ConfirmationModals = ({
13
+ modalProps,
14
+ tasksActions,
15
+ selectedRowsLen,
16
+ }) => (
17
+ <React.Fragment>
18
+ <CancelConfirm
19
+ closeModal={modalProps.cancelModal.setModalClosed}
20
+ action={tasksActions.cancelTask}
21
+ selectedRowsLen={1}
22
+ id={CANCEL_CONFIRM_MODAL_ID}
23
+ />
24
+ <ResumeConfirm
25
+ closeModal={modalProps.resumeModal.setModalClosed}
26
+ action={tasksActions.resumeTask}
27
+ selectedRowsLen={1}
28
+ id={RESUME_CONFIRM_MODAL_ID}
29
+ />
30
+ <CancelConfirm
31
+ closeModal={modalProps.cancelSelectedModal.setModalClosed}
32
+ action={tasksActions.cancelSelectedTasks}
33
+ selectedRowsLen={selectedRowsLen}
34
+ id={CANCEL_SELECTED_CONFIRM_MODAL_ID}
35
+ />
36
+ <ResumeConfirm
37
+ closeModal={modalProps.resumeSelectedModal.setModalClosed}
38
+ action={tasksActions.resumeSelectedTasks}
39
+ selectedRowsLen={selectedRowsLen}
40
+ id={RESUME_SELECTED_CONFIRM_MODAL_ID}
41
+ />
42
+ </React.Fragment>
43
+ );
44
+
45
+ ConfirmationModals.propTypes = {
46
+ modalProps: PropTypes.object.isRequired,
47
+ selectedRowsLen: PropTypes.number.isRequired,
48
+ tasksActions: PropTypes.shape({
49
+ cancelTask: PropTypes.func,
50
+ resumeTask: PropTypes.func,
51
+ cancelSelectedTasks: PropTypes.func,
52
+ resumeSelectedTasks: PropTypes.func,
53
+ }).isRequired,
54
+ };
55
+
56
+ export default ConfirmationModals;
@@ -0,0 +1,52 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { sprintf, translate as __ } from 'foremanReact/common/I18n';
4
+ import { Button } from 'patternfly-react';
5
+ import ForemanModal from 'foremanReact/components/ForemanModal';
6
+ import {
7
+ CANCEL_CONFIRM_MODAL_ID,
8
+ RESUME_CONFIRM_MODAL_ID,
9
+ CANCEL_SELECTED_CONFIRM_MODAL_ID,
10
+ RESUME_SELECTED_CONFIRM_MODAL_ID,
11
+ } from '../TasksTableConstants';
12
+
13
+ export const ResumeConfirm = ({ closeModal, action, selectedRowsLen, id }) => (
14
+ <ForemanModal title={__('Resume Selected Tasks')} id={id}>
15
+ {sprintf(
16
+ __(
17
+ `This will resume %s task(s), putting them in the running state. Are you sure?`
18
+ ),
19
+ selectedRowsLen
20
+ )}
21
+ <ForemanModal.Footer>
22
+ <Button onClick={closeModal}>{__('No')}</Button>
23
+ <Button
24
+ bsStyle="primary"
25
+ onClick={() => {
26
+ action();
27
+ closeModal();
28
+ }}
29
+ >
30
+ {__('Yes')}
31
+ </Button>
32
+ </ForemanModal.Footer>
33
+ </ForemanModal>
34
+ );
35
+
36
+ ResumeConfirm.propTypes = {
37
+ closeModal: PropTypes.func.isRequired,
38
+ selectedRowsLen: PropTypes.number.isRequired,
39
+ action: PropTypes.func,
40
+ id: PropTypes.oneOf([
41
+ CANCEL_CONFIRM_MODAL_ID,
42
+ RESUME_CONFIRM_MODAL_ID,
43
+ CANCEL_SELECTED_CONFIRM_MODAL_ID,
44
+ RESUME_SELECTED_CONFIRM_MODAL_ID,
45
+ ]).isRequired,
46
+ };
47
+
48
+ ResumeConfirm.defaultProps = {
49
+ action: () => null,
50
+ };
51
+
52
+ export default ResumeConfirm;
@@ -0,0 +1,43 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import { Alert, Button } from 'patternfly-react';
4
+ import { sprintf, translate as __ } from 'foremanReact/common/I18n';
5
+
6
+ export const SelectAllAlert = ({
7
+ itemCount,
8
+ perPage,
9
+ selectAllRows,
10
+ unselectAllRows,
11
+ allRowsSelected,
12
+ }) => {
13
+ const selectAllText = (
14
+ <React.Fragment>
15
+ {sprintf(
16
+ 'All %s tasks on this page are selected',
17
+ Math.min(itemCount, perPage)
18
+ )}
19
+ <Button bsStyle="link" onClick={selectAllRows}>
20
+ {__('Select All')}
21
+ <b> {itemCount} </b> {__('tasks.')}
22
+ </Button>
23
+ </React.Fragment>
24
+ );
25
+ const undoSelectText = (
26
+ <React.Fragment>
27
+ {sprintf(__(`All %s tasks are selected. `), itemCount)}
28
+ <Button bsStyle="link" onClick={unselectAllRows}>
29
+ {__('Undo selection')}
30
+ </Button>
31
+ </React.Fragment>
32
+ );
33
+ const selectAlertText = allRowsSelected ? undoSelectText : selectAllText;
34
+ return <Alert type="info">{selectAlertText}</Alert>;
35
+ };
36
+
37
+ SelectAllAlert.propTypes = {
38
+ allRowsSelected: PropTypes.bool.isRequired,
39
+ itemCount: PropTypes.number.isRequired,
40
+ perPage: PropTypes.number.isRequired,
41
+ selectAllRows: PropTypes.func.isRequired,
42
+ unselectAllRows: PropTypes.func.isRequired,
43
+ };
@@ -1,4 +1,4 @@
1
- import { testComponentSnapshotsWithFixtures } from 'react-redux-test-utils';
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
2
 
3
3
  import { ActionSelectButton } from '../ActionSelectButton';
4
4
 
@@ -0,0 +1,26 @@
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
+
3
+ import { CancelConfirm } from '../CancelConfirm';
4
+ import {
5
+ CANCEL_CONFIRM_MODAL_ID,
6
+ CANCEL_SELECTED_CONFIRM_MODAL_ID,
7
+ } from '../../TasksTableConstants';
8
+
9
+ const baseProps = {
10
+ closeModal: () => null,
11
+ selectedRowsLen: 1,
12
+ action: () => null,
13
+ };
14
+ const fixtures = {
15
+ 'renders CANCEL modal': {
16
+ ...baseProps,
17
+ id: CANCEL_CONFIRM_MODAL_ID,
18
+ },
19
+ 'renders CANCEL_SELECTED modal': {
20
+ ...baseProps,
21
+ id: CANCEL_SELECTED_CONFIRM_MODAL_ID,
22
+ },
23
+ };
24
+
25
+ describe('CancelConfirm', () =>
26
+ testComponentSnapshotsWithFixtures(CancelConfirm, fixtures));
@@ -0,0 +1,24 @@
1
+ import { testComponentSnapshotsWithFixtures } from '@theforeman/test';
2
+
3
+ import { ConfirmationModals } from '../ConfirmationModals';
4
+
5
+ const fixtures = {
6
+ 'renders ConfirmationModals': {
7
+ modalProps: {
8
+ cancelSelectedModal: { setModalClosed: jest.fn() },
9
+ resumeSelectedModal: { setModalClosed: jest.fn() },
10
+ cancelModal: { setModalClosed: jest.fn() },
11
+ resumeModal: { setModalClosed: jest.fn() },
12
+ },
13
+ selectedRowsLen: 7,
14
+ tasksActions: {
15
+ cancelTask: jest.fn(),
16
+ resumeTask: jest.fn(),
17
+ cancelSelectedTasks: jest.fn(),
18
+ resumeSelectedTasks: jest.fn(),
19
+ },
20
+ },
21
+ };
22
+
23
+ describe('ConfirmationModals', () =>
24
+ testComponentSnapshotsWithFixtures(ConfirmationModals, fixtures));