apply eslint and prettier rules

This commit is contained in:
Sebastian Sdorra
2019-10-21 10:57:56 +02:00
parent 85773186db
commit 4bb8e6153b
227 changed files with 1147 additions and 4076 deletions

View File

@@ -39,12 +39,7 @@ class ExecutePendingAction extends React.Component<Props, State> {
const { showModal } = this.state;
const { pendingPlugins } = this.props;
if (showModal) {
return (
<ExecutePendingModal
pendingPlugins={pendingPlugins}
onClose={this.closeModal}
/>
);
return <ExecutePendingModal pendingPlugins={pendingPlugins} onClose={this.closeModal} />;
}
return null;
};
@@ -54,11 +49,7 @@ class ExecutePendingAction extends React.Component<Props, State> {
return (
<>
{this.renderModal()}
<Button
color="primary"
label={t("plugins.executePending")}
action={this.openModal}
/>
<Button color="primary" label={t("plugins.executePending")} action={this.openModal} />
</>
);
}

View File

@@ -25,18 +25,14 @@ class ExecutePendingActionModal extends React.Component<Props> {
pendingPlugins={pendingPlugins}
execute={this.executeAndRestart}
>
<Notification type="warning">
{t("plugins.modal.restartNotification")}
</Notification>
<Notification type="warning">{t("plugins.modal.restartNotification")}</Notification>
</PluginActionModal>
);
}
executeAndRestart = () => {
const { pendingPlugins } = this.props;
return apiClient
.post(pendingPlugins._links.execute.href)
.then(waitForRestart);
return apiClient.post(pendingPlugins._links.execute.href).then(waitForRestart);
};
}

View File

@@ -1,12 +1,5 @@
import React from "react";
import {
apiClient,
Button,
ButtonGroup,
ErrorNotification,
Modal,
Notification
} from "@scm-manager/ui-components";
import { apiClient, Button, ButtonGroup, ErrorNotification, Modal, Notification } from "@scm-manager/ui-components";
import { PendingPlugins } from "@scm-manager/ui-types";
import { translate } from "react-i18next";
import waitForRestart from "./waitForRestart";
@@ -43,11 +36,7 @@ class ExecutePendingModal extends React.Component<Props, State> {
} else if (success) {
return <SuccessNotification />;
} else {
return (
<Notification type="warning">
{t("plugins.modal.restartNotification")}
</Notification>
);
return <Notification type="warning">{t("plugins.modal.restartNotification")}</Notification>;
}
};
@@ -98,17 +87,16 @@ class ExecutePendingModal extends React.Component<Props, State> {
const { pendingPlugins, t } = this.props;
return (
<>
{pendingPlugins._embedded &&
pendingPlugins._embedded.update.length > 0 && (
<>
<strong>{t("plugins.modal.updateQueue")}</strong>
<ul>
{pendingPlugins._embedded.update.map(plugin => (
<li key={plugin.name}>{plugin.name}</li>
))}
</ul>
</>
)}
{pendingPlugins._embedded && pendingPlugins._embedded.update.length > 0 && (
<>
<strong>{t("plugins.modal.updateQueue")}</strong>
<ul>
{pendingPlugins._embedded.update.map(plugin => (
<li key={plugin.name}>{plugin.name}</li>
))}
</ul>
</>
)}
</>
);
};
@@ -117,17 +105,16 @@ class ExecutePendingModal extends React.Component<Props, State> {
const { pendingPlugins, t } = this.props;
return (
<>
{pendingPlugins._embedded &&
pendingPlugins._embedded.uninstall.length > 0 && (
<>
<strong>{t("plugins.modal.uninstallQueue")}</strong>
<ul>
{pendingPlugins._embedded.uninstall.map(plugin => (
<li key={plugin.name}>{plugin.name}</li>
))}
</ul>
</>
)}
{pendingPlugins._embedded && pendingPlugins._embedded.uninstall.length > 0 && (
<>
<strong>{t("plugins.modal.uninstallQueue")}</strong>
<ul>
{pendingPlugins._embedded.uninstall.map(plugin => (
<li key={plugin.name}>{plugin.name}</li>
))}
</ul>
</>
)}
</>
);
};

View File

@@ -1,10 +1,5 @@
import * as React from "react";
import {
Button,
ButtonGroup,
ErrorNotification,
Modal
} from "@scm-manager/ui-components";
import { Button, ButtonGroup, ErrorNotification, Modal } from "@scm-manager/ui-components";
import { PendingPlugins, PluginCollection } from "@scm-manager/ui-types";
import { translate } from "react-i18next";
import SuccessNotification from "./SuccessNotification";
@@ -89,20 +84,18 @@ class PluginActionModal extends React.Component<Props, State> {
const { installedPlugins, t } = this.props;
return (
<>
{installedPlugins &&
installedPlugins._embedded &&
installedPlugins._embedded.plugins && (
<>
<strong>{t("plugins.modal.updateQueue")}</strong>
<ul>
{installedPlugins._embedded.plugins
.filter(plugin => plugin._links && plugin._links.update)
.map(plugin => (
<li key={plugin.name}>{plugin.name}</li>
))}
</ul>
</>
)}
{installedPlugins && installedPlugins._embedded && installedPlugins._embedded.plugins && (
<>
<strong>{t("plugins.modal.updateQueue")}</strong>
<ul>
{installedPlugins._embedded.plugins
.filter(plugin => plugin._links && plugin._links.update)
.map(plugin => (
<li key={plugin.name}>{plugin.name}</li>
))}
</ul>
</>
)}
</>
);
};
@@ -111,18 +104,16 @@ class PluginActionModal extends React.Component<Props, State> {
const { pendingPlugins, t } = this.props;
return (
<>
{pendingPlugins &&
pendingPlugins._embedded &&
pendingPlugins._embedded.new.length > 0 && (
<>
<strong>{t("plugins.modal.installQueue")}</strong>
<ul>
{pendingPlugins._embedded.new.map(plugin => (
<li key={plugin.name}>{plugin.name}</li>
))}
</ul>
</>
)}
{pendingPlugins && pendingPlugins._embedded && pendingPlugins._embedded.new.length > 0 && (
<>
<strong>{t("plugins.modal.installQueue")}</strong>
<ul>
{pendingPlugins._embedded.new.map(plugin => (
<li key={plugin.name}>{plugin.name}</li>
))}
</ul>
</>
)}
</>
);
};
@@ -131,18 +122,16 @@ class PluginActionModal extends React.Component<Props, State> {
const { pendingPlugins, t } = this.props;
return (
<>
{pendingPlugins &&
pendingPlugins._embedded &&
pendingPlugins._embedded.update.length > 0 && (
<>
<strong>{t("plugins.modal.updateQueue")}</strong>
<ul>
{pendingPlugins._embedded.update.map(plugin => (
<li key={plugin.name}>{plugin.name}</li>
))}
</ul>
</>
)}
{pendingPlugins && pendingPlugins._embedded && pendingPlugins._embedded.update.length > 0 && (
<>
<strong>{t("plugins.modal.updateQueue")}</strong>
<ul>
{pendingPlugins._embedded.update.map(plugin => (
<li key={plugin.name}>{plugin.name}</li>
))}
</ul>
</>
)}
</>
);
};
@@ -151,18 +140,16 @@ class PluginActionModal extends React.Component<Props, State> {
const { pendingPlugins, t } = this.props;
return (
<>
{pendingPlugins &&
pendingPlugins._embedded &&
pendingPlugins._embedded.uninstall.length > 0 && (
<>
<strong>{t("plugins.modal.uninstallQueue")}</strong>
<ul>
{pendingPlugins._embedded.uninstall.map(plugin => (
<li key={plugin.name}>{plugin.name}</li>
))}
</ul>
</>
)}
{pendingPlugins && pendingPlugins._embedded && pendingPlugins._embedded.uninstall.length > 0 && (
<>
<strong>{t("plugins.modal.uninstallQueue")}</strong>
<ul>
{pendingPlugins._embedded.uninstall.map(plugin => (
<li key={plugin.name}>{plugin.name}</li>
))}
</ul>
</>
)}
</>
);
};

View File

@@ -18,10 +18,7 @@ export default class PluginAvatar extends React.Component<Props> {
plugin
}}
>
<Image
src={plugin.avatarUrl ? plugin.avatarUrl : "/images/blib.jpg"}
alt="Logo"
/>
<Image src={plugin.avatarUrl ? plugin.avatarUrl : "/images/blib.jpg"} alt="Logo" />
</ExtensionPoint>
</p>
);

View File

@@ -84,9 +84,7 @@ class PluginEntry extends React.Component<Props, State> {
isUninstallable = () => {
const { plugin } = this.props;
return (
plugin._links && plugin._links.uninstall && plugin._links.uninstall.href
);
return plugin._links && plugin._links.uninstall && plugin._links.uninstall.href;
};
createActionbar = () => {
@@ -94,39 +92,18 @@ class PluginEntry extends React.Component<Props, State> {
return (
<ActionbarWrapper className="is-flex">
{this.isInstallable() && (
<IconWrapper
className="level-item"
onClick={() => this.toggleModal("showInstallModal")}
>
<Icon
title={t("plugins.modal.install")}
name="download"
color="info"
/>
<IconWrapper className="level-item" onClick={() => this.toggleModal("showInstallModal")}>
<Icon title={t("plugins.modal.install")} name="download" color="info" />
</IconWrapper>
)}
{this.isUninstallable() && (
<IconWrapper
className="level-item"
onClick={() => this.toggleModal("showUninstallModal")}
>
<Icon
title={t("plugins.modal.uninstall")}
name="trash"
color="info"
/>
<IconWrapper className="level-item" onClick={() => this.toggleModal("showUninstallModal")}>
<Icon title={t("plugins.modal.uninstall")} name="trash" color="info" />
</IconWrapper>
)}
{this.isUpdatable() && (
<IconWrapper
className="level-item"
onClick={() => this.toggleModal("showUpdateModal")}
>
<Icon
title={t("plugins.modal.update")}
name="sync-alt"
color="info"
/>
<IconWrapper className="level-item" onClick={() => this.toggleModal("showUpdateModal")}>
<Icon title={t("plugins.modal.update")} name="sync-alt" color="info" />
</IconWrapper>
)}
</ActionbarWrapper>
@@ -169,13 +146,7 @@ class PluginEntry extends React.Component<Props, State> {
createPendingSpinner = () => {
const { plugin } = this.props;
return (
<Icon
className="fa-spin fa-lg"
name="spinner"
color={plugin.markedForUninstall ? "danger" : "info"}
/>
);
return <Icon className="fa-spin fa-lg" name="spinner" color={plugin.markedForUninstall ? "danger" : "info"} />;
};
render() {
@@ -189,19 +160,11 @@ class PluginEntry extends React.Component<Props, State> {
return (
<>
<CardColumn
action={
this.isInstallable()
? () => this.toggleModal("showInstallModal")
: null
}
action={this.isInstallable() ? () => this.toggleModal("showInstallModal") : null}
avatar={avatar}
title={plugin.displayName ? plugin.displayName : plugin.name}
description={plugin.description}
contentRight={
plugin.pending || plugin.markedForUninstall
? this.createPendingSpinner()
: actionbar
}
contentRight={plugin.pending || plugin.markedForUninstall ? this.createPendingSpinner() : actionbar}
footerRight={footerRight}
/>
{modal}

View File

@@ -12,9 +12,7 @@ class PluginGroupEntry extends React.Component<Props> {
render() {
const { group, refresh } = this.props;
const entries = group.plugins.map(plugin => {
return (
<PluginEntry plugin={plugin} key={plugin.name} refresh={refresh} />
);
return <PluginEntry plugin={plugin} key={plugin.name} refresh={refresh} />;
});
return <CardColumnGroup name={group.name} elements={entries} />;
}

View File

@@ -16,13 +16,7 @@ class PluginList extends React.Component<Props> {
return (
<div className="content is-plugin-page">
{groups.map(group => {
return (
<PluginGroupEntry
group={group}
key={group.name}
refresh={refresh}
/>
);
return <PluginGroupEntry group={group} key={group.name} refresh={refresh} />;
})}
</div>
);

View File

@@ -35,8 +35,7 @@ type State = {
const ListParent = styled.div`
margin-right: 0;
min-width: ${props =>
props.pluginAction === PluginAction.INSTALL ? "5.5em" : "10em"};
min-width: ${props => (props.pluginAction === PluginAction.INSTALL ? "5.5em" : "10em")};
text-align: left;
`;
@@ -182,9 +181,7 @@ class PluginModal extends React.Component<Props, State> {
} else if (restart) {
return (
<div className="media">
<Notification type="warning">
{t("plugins.modal.restartNotification")}
</Notification>
<Notification type="warning">{t("plugins.modal.restartNotification")}</Notification>
</div>
);
}
@@ -211,58 +208,33 @@ class PluginModal extends React.Component<Props, State> {
<div className="media">
<div className="media-content">
<div className="field is-horizontal">
<ListParent
className={classNames("field-label", "is-inline-flex")}
pluginAction={pluginAction}
>
<ListParent className={classNames("field-label", "is-inline-flex")} pluginAction={pluginAction}>
{t("plugins.modal.author")}:
</ListParent>
<ListChild className={classNames("field-body", "is-inline-flex")}>
{plugin.author}
</ListChild>
<ListChild className={classNames("field-body", "is-inline-flex")}>{plugin.author}</ListChild>
</div>
{pluginAction === PluginAction.INSTALL && (
<div className="field is-horizontal">
<ListParent
className={classNames("field-label", "is-inline-flex")}
pluginAction={pluginAction}
>
<ListParent className={classNames("field-label", "is-inline-flex")} pluginAction={pluginAction}>
{t("plugins.modal.version")}:
</ListParent>
<ListChild
className={classNames("field-body", "is-inline-flex")}
>
{plugin.version}
</ListChild>
<ListChild className={classNames("field-body", "is-inline-flex")}>{plugin.version}</ListChild>
</div>
)}
{(pluginAction === PluginAction.UPDATE ||
pluginAction === PluginAction.UNINSTALL) && (
{(pluginAction === PluginAction.UPDATE || pluginAction === PluginAction.UNINSTALL) && (
<div className="field is-horizontal">
<ListParent
className={classNames("field-label", "is-inline-flex")}
>
<ListParent className={classNames("field-label", "is-inline-flex")}>
{t("plugins.modal.currentVersion")}:
</ListParent>
<ListChild
className={classNames("field-body", "is-inline-flex")}
>
{plugin.version}
</ListChild>
<ListChild className={classNames("field-body", "is-inline-flex")}>{plugin.version}</ListChild>
</div>
)}
{pluginAction === PluginAction.UPDATE && (
<div className="field is-horizontal">
<ListParent
className={classNames("field-label", "is-inline-flex")}
>
<ListParent className={classNames("field-label", "is-inline-flex")}>
{t("plugins.modal.newVersion")}:
</ListParent>
<ListChild
className={classNames("field-body", "is-inline-flex")}
>
{plugin.newVersion}
</ListChild>
<ListChild className={classNames("field-body", "is-inline-flex")}>{plugin.newVersion}</ListChild>
</div>
)}
{this.renderDependencies()}

View File

@@ -15,14 +15,7 @@ export default class PluginTopActions extends React.Component<Props> {
render() {
const { children } = this.props;
return (
<ChildWrapper
className={classNames(
"column",
"is-flex",
"is-one-fifths",
"is-mobile-action-spacing"
)}
>
<ChildWrapper className={classNames("column", "is-flex", "is-one-fifths", "is-mobile-action-spacing")}>
{children}
</ChildWrapper>
);

View File

@@ -13,9 +13,7 @@ class InstallSuccessNotification extends React.Component<Props> {
return (
<Notification type="success">
{t("plugins.modal.successNotification")}{" "}
<a onClick={e => window.location.reload(true)}>
{t("plugins.modal.reload")}
</a>
<a onClick={e => window.location.reload(true)}>{t("plugins.modal.reload")}</a>
</Notification>
);
}

View File

@@ -1,8 +1,8 @@
import { Plugin, PluginGroup } from "@scm-manager/ui-types";
export default function groupByCategory(plugins: Plugin[]): PluginGroup[] {
let groups = {};
for (let plugin of plugins) {
const groups = {};
for (const plugin of plugins) {
const groupName = plugin.category;
let group = groups[groupName];
@@ -16,8 +16,8 @@ export default function groupByCategory(plugins: Plugin[]): PluginGroup[] {
group.plugins.push(plugin);
}
let groupArray = [];
for (let groupName in groups) {
const groupArray = [];
for (const groupName in groups) {
const group = groups[groupName];
group.plugins.sort(sortByName);
groupArray.push(groups[groupName]);

View File

@@ -99,13 +99,7 @@ class PluginsOverview extends React.Component<Props, State> {
<div className="columns">
<div className="column">
<Title title={t("plugins.title")} />
<Subtitle
subtitle={
installed
? t("plugins.installedSubtitle")
: t("plugins.availableSubtitle")
}
/>
<Subtitle subtitle={installed ? t("plugins.installedSubtitle") : t("plugins.availableSubtitle")} />
</div>
<PluginTopActions>{actions}</PluginTopActions>
</div>
@@ -123,11 +117,7 @@ class PluginsOverview extends React.Component<Props, State> {
const { pendingPlugins, collection, t } = this.props;
const buttons = [];
if (
pendingPlugins &&
pendingPlugins._links &&
pendingPlugins._links.execute
) {
if (pendingPlugins && pendingPlugins._links && pendingPlugins._links.execute) {
buttons.push(
<Button
color="primary"
@@ -144,11 +134,7 @@ class PluginsOverview extends React.Component<Props, State> {
);
}
if (
pendingPlugins &&
pendingPlugins._links &&
pendingPlugins._links.cancel
) {
if (pendingPlugins && pendingPlugins._links && pendingPlugins._links.cancel) {
buttons.push(
<Button
color="primary"
@@ -190,9 +176,7 @@ class PluginsOverview extends React.Component<Props, State> {
computeUpdateAllSize = () => {
const { collection, t } = this.props;
const outdatedPlugins = collection._embedded.plugins.filter(
p => p._links.update
).length;
const outdatedPlugins = collection._embedded.plugins.filter(p => p._links.update).length;
return t("plugins.outdatedPlugins", {
count: outdatedPlugins
});
@@ -223,11 +207,7 @@ class PluginsOverview extends React.Component<Props, State> {
renderModals = () => {
const { collection, pendingPlugins } = this.props;
const {
showPendingModal,
showCancelModal,
showUpdateAllModal
} = this.state;
const { showPendingModal, showCancelModal, showUpdateAllModal } = this.state;
if (showPendingModal) {
return (
@@ -273,12 +253,7 @@ class PluginsOverview extends React.Component<Props, State> {
const { collection, t } = this.props;
if (collection._embedded && collection._embedded.plugins.length > 0) {
return (
<PluginsList
plugins={collection._embedded.plugins}
refresh={this.fetchPlugins}
/>
);
return <PluginsList plugins={collection._embedded.plugins} refresh={this.fetchPlugins} />;
}
return <Notification type="info">{t("plugins.noPlugins")}</Notification>;
}

View File

@@ -132,10 +132,7 @@ describe("plugins fetch", () => {
});
it("should successfully fetch scm-groupmanager-plugin by name", () => {
fetchMock.getOnce(
PLUGINS_URL + "/scm-groupmanager-plugin",
groupManagerPlugin
);
fetchMock.getOnce(PLUGINS_URL + "/scm-groupmanager-plugin", groupManagerPlugin);
const expectedActions = [
{
@@ -153,11 +150,9 @@ describe("plugins fetch", () => {
];
const store = mockStore({});
return store
.dispatch(fetchPluginByName(URL, "scm-groupmanager-plugin"))
.then(() => {
expect(store.getActions()).toEqual(expectedActions);
});
return store.dispatch(fetchPluginByName(URL, "scm-groupmanager-plugin")).then(() => {
expect(store.getActions()).toEqual(expectedActions);
});
});
it("should dispatch FETCH_PLUGIN_FAILURE, if the request for scm-groupmanager-plugin by name fails", () => {
@@ -166,23 +161,18 @@ describe("plugins fetch", () => {
});
const store = mockStore({});
return store
.dispatch(fetchPluginByName(URL, "scm-groupmanager-plugin"))
.then(() => {
const actions = store.getActions();
expect(actions[0].type).toEqual(FETCH_PLUGIN_PENDING);
expect(actions[1].type).toEqual(FETCH_PLUGIN_FAILURE);
expect(actions[1].payload.name).toBe("scm-groupmanager-plugin");
expect(actions[1].payload.error).toBeDefined();
expect(actions[1].itemId).toBe("scm-groupmanager-plugin");
});
return store.dispatch(fetchPluginByName(URL, "scm-groupmanager-plugin")).then(() => {
const actions = store.getActions();
expect(actions[0].type).toEqual(FETCH_PLUGIN_PENDING);
expect(actions[1].type).toEqual(FETCH_PLUGIN_FAILURE);
expect(actions[1].payload.name).toBe("scm-groupmanager-plugin");
expect(actions[1].payload.error).toBeDefined();
expect(actions[1].itemId).toBe("scm-groupmanager-plugin");
});
});
it("should successfully fetch scm-groupmanager-plugin", () => {
fetchMock.getOnce(
"http://localhost:8081/api/v2/ui/plugins/scm-groupmanager-plugin",
groupManagerPlugin
);
fetchMock.getOnce("http://localhost:8081/api/v2/ui/plugins/scm-groupmanager-plugin", groupManagerPlugin);
const expectedActions = [
{
@@ -206,12 +196,9 @@ describe("plugins fetch", () => {
});
it("should dispatch FETCH_PLUGIN_FAILURE, it the request for scm-groupmanager-plugin fails", () => {
fetchMock.getOnce(
"http://localhost:8081/api/v2/ui/plugins/scm-groupmanager-plugin",
{
status: 500
}
);
fetchMock.getOnce("http://localhost:8081/api/v2/ui/plugins/scm-groupmanager-plugin", {
status: 500
});
const store = mockStore({});
return store.dispatch(fetchPluginByLink(groupManagerPlugin)).then(() => {
@@ -255,18 +242,14 @@ describe("plugins reducer", () => {
"scm-script-plugin",
"scm-branchwp-plugin"
]);
expect(newState.byNames["scm-groupmanager-plugin"]).toBe(
groupManagerPlugin
);
expect(newState.byNames["scm-groupmanager-plugin"]).toBe(groupManagerPlugin);
expect(newState.byNames["scm-script-plugin"]).toBe(scriptPlugin);
expect(newState.byNames["scm-branchwp-plugin"]).toBe(branchwpPlugin);
});
it("should store the plugin at byNames", () => {
const newState = reducer({}, fetchPluginSuccess(groupManagerPlugin));
expect(newState.byNames["scm-groupmanager-plugin"]).toBe(
groupManagerPlugin
);
expect(newState.byNames["scm-groupmanager-plugin"]).toBe(groupManagerPlugin);
});
});
@@ -334,9 +317,7 @@ describe("plugins selectors", () => {
[FETCH_PLUGIN + "/scm-groupmanager-plugin"]: true
}
};
expect(isFetchPluginPending(state, "scm-groupmanager-plugin")).toEqual(
true
);
expect(isFetchPluginPending(state, "scm-groupmanager-plugin")).toEqual(true);
});
it("should return false, when fetch plugin is not pending", () => {
@@ -349,14 +330,10 @@ describe("plugins selectors", () => {
[FETCH_PLUGIN + "/scm-groupmanager-plugin"]: error
}
};
expect(getFetchPluginFailure(state, "scm-groupmanager-plugin")).toEqual(
error
);
expect(getFetchPluginFailure(state, "scm-groupmanager-plugin")).toEqual(error);
});
it("should return undefined when fetch plugin did not fail", () => {
expect(getFetchPluginFailure({}, "scm-groupmanager-plugin")).toBe(
undefined
);
expect(getFetchPluginFailure({}, "scm-groupmanager-plugin")).toBe(undefined);
});
});

View File

@@ -204,7 +204,7 @@ export default function reducer(
export function getPluginCollection(state: object) {
if (state.plugins && state.plugins.list && state.plugins.byNames) {
const plugins = [];
for (let pluginName of state.plugins.list._embedded.plugins) {
for (const pluginName of state.plugins.list._embedded.plugins) {
plugins.push(state.plugins.byNames[pluginName]);
}
return {