Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion webpack/JobInvocationDetail/JobInvocationActions.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
const fetchData = withInterval(
get({
key: JOB_INVOCATION_KEY,
params: { include_permissions: true, include_hosts: false },
params: { include_hosts: false },
url,
handleError: () => {
dispatch(stopInterval(JOB_INVOCATION_KEY));
Expand All @@ -32,7 +32,7 @@
response?.data?.error?.message ||
'Error',
}),
1000

Check failure on line 35 in webpack/JobInvocationDetail/JobInvocationActions.js

View workflow job for this annotation

GitHub Actions / JavaScript / Foreman develop Ruby 3.0 and Node 22

No magic number: 1000
);

dispatch(fetchData);
Expand Down
6 changes: 2 additions & 4 deletions webpack/JobInvocationDetail/JobInvocationOverview.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
DescriptionListDescription,
} from '@patternfly/react-core';
import { translate as __ } from 'foremanReact/common/I18n';
import { usePermissions } from 'foremanReact/common/hooks/Permissions/permissionHooks';
import DefaultLoaderEmptyState from 'foremanReact/components/HostDetails/DetailsCard/DefaultLoaderEmptyState';

const JobInvocationOverview = ({
Expand All @@ -20,11 +21,8 @@ const JobInvocationOverview = ({
template_id: templateId,
template_name: templateName,
effective_user: effectiveUser,
permissions,
} = data;
const canEditJobTemplates = permissions
? permissions.edit_job_templates
: false;
const canEditJobTemplates = usePermissions(['edit_job_templates']);

return (
<DescriptionList
Expand Down
10 changes: 3 additions & 7 deletions webpack/JobInvocationDetail/JobInvocationToolbarButtons.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,11 @@ import {
import { selectTaskCancelable } from './JobInvocationSelectors';

const JobInvocationToolbarButtons = ({ jobId, data }) => {
const { succeeded, failed, task, recurrence, permissions } = data;
const { succeeded, failed, task, recurrence } = data;
const recurringEnabled = recurrence?.state === 'active';
const canViewForemanTasks = permissions
? permissions.view_foreman_tasks
: false;
const canEditRecurringLogic = permissions
? permissions.edit_recurring_logics
: false;
const isTaskCancelable = useSelector(selectTaskCancelable);
const canViewForemanTasks = usePermissions(['view_foreman_tasks']);
const canEditRecurringLogic = usePermissions(['edit_recurring_logics']);
const canCreateJobInvocations = usePermissions(['create_job_invocations']);
const canCancelJobInvocations = usePermissions(['cancel_job_invocations']);
const canGenerateReportTemplates = usePermissions([
Expand Down
9 changes: 1 addition & 8 deletions webpack/JobInvocationDetail/TemplateInvocation.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
textId="code-content"
aria-label="Copy to clipboard"
onClick={e => onClick(e, fullOutput)}
exitDelay={copied ? 1500 : 600}

Check failure on line 44 in webpack/JobInvocationDetail/TemplateInvocation.js

View workflow job for this annotation

GitHub Actions / JavaScript / Foreman develop Ruby 3.0 and Node 22

No magic number: 600

Check failure on line 44 in webpack/JobInvocationDetail/TemplateInvocation.js

View workflow job for this annotation

GitHub Actions / JavaScript / Foreman develop Ruby 3.0 and Node 22

No magic number: 1500
maxWidth="110px"
variant="plain"
onTooltipHidden={() => setCopied(false)}
Expand Down Expand Up @@ -111,7 +111,7 @@
} else if (intervalRef.current) {
clearInterval(intervalRef.current);
}
}, 5000);

Check failure on line 114 in webpack/JobInvocationDetail/TemplateInvocation.js

View workflow job for this annotation

GitHub Actions / JavaScript / Foreman develop Ruby 3.0 and Node 22

No magic number: 5000
}

return () => {
Expand Down Expand Up @@ -144,13 +144,7 @@
);
}

const {
preview,
output,
input_values: inputValues,
task,
permissions,
} = response;
const { preview, output, input_values: inputValues, task } = response;
const { id: taskID, cancellable: taskCancellable } = task || {};

return (
Expand Down Expand Up @@ -183,7 +177,6 @@
jobID={jobID}
hostID={hostID}
taskCancellable={taskCancellable}
permissions={permissions}
/>
{!isInTableView && (
<>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ export const OutputToggleGroup = ({
jobID,
hostID,
taskCancellable,
permissions,
}) => {
const handleSTDERRClick = useCallback(
_isSelected => {
Expand Down Expand Up @@ -127,7 +126,6 @@ export const OutputToggleGroup = ({
jobID={jobID}
hostID={hostID}
taskCancellable={taskCancellable}
permissions={permissions}
/>
)}
<FlexItem>{copyToClipboard}</FlexItem>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { ActionsColumn } from '@patternfly/react-table';
import { APIActions } from 'foremanReact/redux/API';
import { addToast } from 'foremanReact/components/ToastsList';
import { translate as __ } from 'foremanReact/common/I18n';
import { usePermissions } from 'foremanReact/common/hooks/Permissions/permissionHooks';
import { selectTemplateInvocationList } from '../JobInvocationSelectors';
import './index.scss';

Expand All @@ -14,27 +15,29 @@ const actions = ({
jobID,
hostID,
taskCancellable,
permissions,
canExecuteJobs,
canViewForemanTasks,
canCancelJobInvocations,
dispatch,
}) => ({
rerun: {
name: 'template-invocation-rerun-job',
href: `/job_invocations/${jobID}/rerun?host_ids[]=${hostID}`,
component: 'a',
text: __('Rerun'),
permission: permissions.execute_jobs,
permission: canExecuteJobs,
},
details: {
name: 'template-invocation-task-details',
href: `/foreman_tasks/tasks/${taskID}`,
component: 'a',
text: __('Task Details'),
permission: permissions.view_foreman_tasks,
permission: canViewForemanTasks,
},
cancel: {
name: 'template-invocation-cancel-job',
text: __('Cancel Task'),
permission: permissions.cancel_job_invocations,
permission: canCancelJobInvocations,
onClick: () => {
dispatch(
addToast({
Expand All @@ -58,7 +61,7 @@ const actions = ({
abort: {
name: 'template-invocation-abort-job',
text: __('Abort task'),
permission: permissions.cancel_job_invocations,
permission: canCancelJobInvocations,
onClick: () => {
dispatch(
addToast({
Expand All @@ -83,16 +86,21 @@ const actions = ({

export const RowActions = ({ hostID, jobID }) => {
const dispatch = useDispatch();
const canExecuteJobs = usePermissions(['execute_jobs']);
const canViewForemanTasks = usePermissions(['view_foreman_tasks']);
const canCancelJobInvocations = usePermissions(['cancel_job_invocations']);
const response = useSelector(selectTemplateInvocationList)?.[hostID];
if (!response?.permissions) return null;
const { task, permissions } = response;
if (!response) return null;
const { task } = response;
const { id: taskID, cancellable: taskCancellable } = task || {};
const getActions = actions({
taskID,
jobID,
hostID,
taskCancellable,
permissions,
canExecuteJobs,
canViewForemanTasks,
canCancelJobInvocations,
dispatch,
});

Expand All @@ -117,15 +125,19 @@ export const TemplateActionButtons = ({
jobID,
hostID,
taskCancellable,
permissions,
}) => {
const dispatch = useDispatch();
const canExecuteJobs = usePermissions(['execute_jobs']);
const canViewForemanTasks = usePermissions(['view_foreman_tasks']);
const canCancelJobInvocations = usePermissions(['cancel_job_invocations']);
const { rerun, details, cancel, abort } = actions({
taskID,
jobID,
hostID,
taskCancellable,
permissions,
canExecuteJobs,
canViewForemanTasks,
canCancelJobInvocations,
dispatch,
});
return (
Expand Down Expand Up @@ -196,21 +208,11 @@ TemplateActionButtons.propTypes = {
jobID: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
hostID: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
taskCancellable: PropTypes.bool,
permissions: PropTypes.shape({
view_foreman_tasks: PropTypes.bool,
cancel_job_invocations: PropTypes.bool,
execute_jobs: PropTypes.bool,
}),
};

TemplateActionButtons.defaultProps = {
taskID: null,
taskCancellable: false,
permissions: {
view_foreman_tasks: false,
cancel_job_invocations: false,
execute_jobs: false,
},
};

RowActions.propTypes = {
Expand Down
Loading