Skip to content

Commit

Permalink
[Search Sessions] Fixes management actions not accessible (#105940)
Browse files Browse the repository at this point in the history
  • Loading branch information
Dosant committed Jul 19, 2021
1 parent 1c4818e commit 00d8f05
Show file tree
Hide file tree
Showing 8 changed files with 130 additions and 249 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,20 +12,18 @@ import React, { useState } from 'react';
import { CoreStart } from 'kibana/public';
import { toMountPoint } from '../../../../../../../../src/plugins/kibana_react/public';
import { SearchSessionsMgmtAPI } from '../../lib/api';
import { TableText } from '../';
import { OnActionClick, OnActionComplete, OnActionDismiss } from './types';
import { IClickActionDescriptor } from '../';
import { OnActionDismiss } from './types';
import { UISession } from '../../types';

interface DeleteButtonProps {
id: string;
name: string;
api: SearchSessionsMgmtAPI;
onActionComplete: OnActionComplete;
overlays: CoreStart['overlays'];
onActionClick: OnActionClick;
searchSession: UISession;
}

const DeleteConfirm = (props: DeleteButtonProps & { onActionDismiss: OnActionDismiss }) => {
const { id, name, api, onActionComplete, onActionDismiss } = props;
const { searchSession, api, onActionDismiss } = props;
const { name, id } = searchSession;
const [isLoading, setIsLoading] = useState(false);

const title = i18n.translate('xpack.data.mgmt.searchSessions.cancelModal.title', {
Expand All @@ -51,7 +49,6 @@ const DeleteConfirm = (props: DeleteButtonProps & { onActionDismiss: OnActionDis
onConfirm={async () => {
setIsLoading(true);
await api.sendCancel(id);
onActionComplete();
onActionDismiss();
}}
confirmButtonText={confirm}
Expand All @@ -65,24 +62,21 @@ const DeleteConfirm = (props: DeleteButtonProps & { onActionDismiss: OnActionDis
);
};

export const DeleteButton = (props: DeleteButtonProps) => {
const { overlays, onActionClick } = props;

return (
<>
<TableText
onClick={() => {
onActionClick();
const ref = overlays.openModal(
toMountPoint(<DeleteConfirm onActionDismiss={() => ref?.close()} {...props} />)
);
}}
>
<FormattedMessage
id="xpack.data.mgmt.searchSessions.actionDelete"
defaultMessage="Delete"
/>
</TableText>
</>
);
};
export const createDeleteActionDescriptor = (
api: SearchSessionsMgmtAPI,
uiSession: UISession,
core: CoreStart
): IClickActionDescriptor => ({
iconType: 'crossInACircleFilled',
label: (
<FormattedMessage id="xpack.data.mgmt.searchSessions.actionDelete" defaultMessage="Delete" />
),
onClick: async () => {
const ref = core.overlays.openModal(
toMountPoint(
<DeleteConfirm onActionDismiss={() => ref?.close()} searchSession={uiSession} api={api} />
)
);
await ref.onClose;
},
});
Original file line number Diff line number Diff line change
Expand Up @@ -9,29 +9,25 @@ import { EuiConfirmModal } from '@elastic/eui';
import { i18n } from '@kbn/i18n';
import { FormattedMessage } from '@kbn/i18n/react';
import React, { useState } from 'react';
import { Duration } from 'moment';
import moment from 'moment';
import { CoreStart } from 'kibana/public';
import { toMountPoint } from '../../../../../../../../src/plugins/kibana_react/public';
import { SearchSessionsMgmtAPI } from '../../lib/api';
import { TableText } from '../';
import { OnActionClick, OnActionComplete, OnActionDismiss } from './types';
import { IClickActionDescriptor } from '../';
import { OnActionDismiss } from './types';
import { UISession } from '../../types';
import extendSessionIcon from '../../icons/extend_session.svg';

interface ExtendButtonProps {
id: string;
name: string;
expires: string | null;
extendBy: Duration;
searchSession: UISession;
api: SearchSessionsMgmtAPI;
overlays: CoreStart['overlays'];
onActionClick: OnActionClick;
onActionComplete: OnActionComplete;
}

const ExtendConfirm = ({ ...props }: ExtendButtonProps & { onActionDismiss: OnActionDismiss }) => {
const { id, name, expires, api, extendBy, onActionComplete, onActionDismiss } = props;
const { searchSession, api, onActionDismiss } = props;
const { id, name, expires } = searchSession;
const [isLoading, setIsLoading] = useState(false);
const extendByDuration = moment.duration(extendBy);
const extendByDuration = moment.duration(api.getExtendByDuration());

const newExpiration = moment(expires).add(extendByDuration);

Expand Down Expand Up @@ -61,7 +57,6 @@ const ExtendConfirm = ({ ...props }: ExtendButtonProps & { onActionDismiss: OnAc
await api.sendExtend(id, `${newExpiration.toISOString()}`);
setIsLoading(false);
onActionDismiss();
onActionComplete();
}}
confirmButtonText={confirm}
confirmButtonDisabled={isLoading}
Expand All @@ -74,24 +69,21 @@ const ExtendConfirm = ({ ...props }: ExtendButtonProps & { onActionDismiss: OnAc
);
};

export const ExtendButton = (props: ExtendButtonProps) => {
const { overlays, onActionClick } = props;

return (
<>
<TableText
onClick={() => {
onActionClick();
const ref = overlays.openModal(
toMountPoint(<ExtendConfirm onActionDismiss={() => ref?.close()} {...props} />)
);
}}
>
<FormattedMessage
id="xpack.data.mgmt.searchSessions.actionExtend"
defaultMessage="Extend"
/>
</TableText>
</>
);
};
export const createExtendActionDescriptor = (
api: SearchSessionsMgmtAPI,
uiSession: UISession,
core: CoreStart
): IClickActionDescriptor => ({
iconType: extendSessionIcon,
label: (
<FormattedMessage id="xpack.data.mgmt.searchSessions.actionExtend" defaultMessage="Extend" />
),
onClick: async () => {
const ref = core.overlays.openModal(
toMountPoint(
<ExtendConfirm onActionDismiss={() => ref?.close()} searchSession={uiSession} api={api} />
)
);
await ref.onClose;
},
});
Original file line number Diff line number Diff line change
Expand Up @@ -5,93 +5,31 @@
* 2.0.
*/

import React from 'react';
import { CoreStart } from 'kibana/public';
import { IClickActionDescriptor } from '../';
import extendSessionIcon from '../../icons/extend_session.svg';
import { SearchSessionsMgmtAPI } from '../../lib/api';
import { UISession } from '../../types';
import { DeleteButton } from './delete_button';
import { ExtendButton } from './extend_button';
import { InspectButton } from './inspect_button';
import { ACTION, OnActionClick, OnActionComplete } from './types';
import { RenameButton } from './rename_button';
import { createDeleteActionDescriptor } from './delete_button';
import { createExtendActionDescriptor } from './extend_button';
import { createInspectActionDescriptor } from './inspect_button';
import { ACTION } from './types';
import { createRenameActionDescriptor } from './rename_button';

export const getAction = (
api: SearchSessionsMgmtAPI,
actionType: string,
uiSession: UISession,
core: CoreStart,
onActionClick: OnActionClick,
onActionComplete: OnActionComplete
core: CoreStart
): IClickActionDescriptor | null => {
const { id, name, expires } = uiSession;
const { overlays, uiSettings } = core;
switch (actionType) {
case ACTION.INSPECT:
return {
iconType: 'document',
textColor: 'default',
label: (
<InspectButton
overlays={overlays}
searchSession={uiSession}
uiSettings={uiSettings}
onActionClick={onActionClick}
/>
),
};

return createInspectActionDescriptor(api, uiSession, core);
case ACTION.DELETE:
return {
iconType: 'crossInACircleFilled',
textColor: 'default',
label: (
<DeleteButton
api={api}
id={id}
name={name}
overlays={overlays}
onActionComplete={onActionComplete}
onActionClick={onActionClick}
/>
),
};

return createDeleteActionDescriptor(api, uiSession, core);
case ACTION.EXTEND:
return {
iconType: extendSessionIcon,
textColor: 'default',
label: (
<ExtendButton
api={api}
id={id}
name={name}
expires={expires}
overlays={overlays}
extendBy={api.getExtendByDuration()}
onActionComplete={onActionComplete}
onActionClick={onActionClick}
/>
),
};

return createExtendActionDescriptor(api, uiSession, core);
case ACTION.RENAME:
return {
iconType: 'pencil',
textColor: 'default',
label: (
<RenameButton
api={api}
id={id}
name={name}
overlays={overlays}
onActionComplete={onActionComplete}
onActionClick={onActionClick}
/>
),
};

return createRenameActionDescriptor(api, uiSession, core);
default:
// eslint-disable-next-line no-console
console.error(`Unknown action: ${actionType}`);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,18 @@ import { FormattedMessage } from '@kbn/i18n/react';
import React, { Fragment } from 'react';
import { CoreStart } from 'kibana/public';
import { UISession } from '../../types';
import { TableText } from '..';
import { IClickActionDescriptor } from '..';
import {
CodeEditor,
createKibanaReactContext,
toMountPoint,
} from '../../../../../../../../src/plugins/kibana_react/public';
import './inspect_button.scss';
import { OnActionClick } from './types';
import { SearchSessionsMgmtAPI } from '../../lib/api';

interface InspectFlyoutProps {
searchSession: UISession;
overlays: CoreStart['overlays'];
uiSettings: CoreStart['uiSettings'];
onActionClick: OnActionClick;
}

const InspectFlyout = ({ uiSettings, searchSession }: InspectFlyoutProps) => {
Expand Down Expand Up @@ -84,24 +82,23 @@ const InspectFlyout = ({ uiSettings, searchSession }: InspectFlyoutProps) => {
</KibanaReactContextProvider>
);
};
export const InspectButton = (props: InspectFlyoutProps) => {
const { overlays, onActionClick } = props;

return (
<Fragment>
<TableText
onClick={() => {
onActionClick();
const flyout = <InspectFlyout {...props} />;
overlays.openFlyout(toMountPoint(flyout));
}}
>
<FormattedMessage
id="xpack.data.mgmt.searchSessions.flyoutTitle"
aria-label="Inspect"
defaultMessage="Inspect"
/>
</TableText>
</Fragment>
);
};
export const createInspectActionDescriptor = (
api: SearchSessionsMgmtAPI,
uiSession: UISession,
core: CoreStart
): IClickActionDescriptor => ({
iconType: 'document',
label: (
<FormattedMessage
id="xpack.data.mgmt.searchSessions.flyoutTitle"
aria-label="Inspect"
defaultMessage="Inspect"
/>
),
onClick: async () => {
const flyout = <InspectFlyout uiSettings={core.uiSettings} searchSession={uiSession} />;
const overlay = core.overlays.openFlyout(toMountPoint(flyout));
await overlay.onClose;
},
});
Loading

0 comments on commit 00d8f05

Please sign in to comment.