From 1682b526ef5b13c319807b6e5410052688419901 Mon Sep 17 00:00:00 2001 From: Michael Herdt <55577866+herdt-michael@users.noreply.github.com> Date: Fri, 5 Aug 2022 11:52:52 +0200 Subject: [PATCH] Make custom target filter table expandable (#1267) * initial draft to maximize custom target filer table for better UX in case of long keys/names * Set correct maximize icon identifier and fix problem with wrong db table structure. * Remove unnecessary local variable. * Fix db migration scripts * Fix losing the target tag table when mac and minimizing target table. * fixed minor styling, removed duplication Signed-off-by: Bogdan Bondar Signed-off-by: Michael Herdt --- ...__change_target_type_name_length___DB2.sql | 1 + ...2__change_target_type_name_length___H2.sql | 1 + ...change_target_type_name_length___MYSQL.sql | 1 + ...e_target_type_name_length___POSTGRESQL.sql | 1 + ..._22__fix_target_type_name___SQL_SERVER.sql | 1 + .../hawkbit/ui/management/DeploymentView.java | 67 ++++++++++++++++--- .../filter/FilterByStatusLayout.java | 2 +- .../filter/TargetTagFilterHeader.java | 43 ++++++++++-- .../filter/TargetTagFilterLayout.java | 22 ++++-- .../filter/TargetTagFilterLayoutUiState.java | 13 +++- .../ui/utils/UIComponentIdProvider.java | 7 +- .../hawkbit/customstyles/filter-status.scss | 4 ++ 12 files changed, 137 insertions(+), 26 deletions(-) create mode 100644 hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/DB2/V1_12_22__change_target_type_name_length___DB2.sql create mode 100644 hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/H2/V1_12_22__change_target_type_name_length___H2.sql create mode 100644 hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/MYSQL/V1_12_22__change_target_type_name_length___MYSQL.sql create mode 100644 hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/POSTGRESQL/V1_12_22__change_target_type_name_length___POSTGRESQL.sql create mode 100644 hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/SQL_SERVER/V1_12_22__fix_target_type_name___SQL_SERVER.sql diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/DB2/V1_12_22__change_target_type_name_length___DB2.sql b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/DB2/V1_12_22__change_target_type_name_length___DB2.sql new file mode 100644 index 000000000..e7f6f7624 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/DB2/V1_12_22__change_target_type_name_length___DB2.sql @@ -0,0 +1 @@ +ALTER TABLE sp_target_type ALTER COLUMN name SET DATA TYPE VARCHAR(128); \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/H2/V1_12_22__change_target_type_name_length___H2.sql b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/H2/V1_12_22__change_target_type_name_length___H2.sql new file mode 100644 index 000000000..9e3559d80 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/H2/V1_12_22__change_target_type_name_length___H2.sql @@ -0,0 +1 @@ +ALTER TABLE sp_target_type ALTER COLUMN name VARCHAR (128); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/MYSQL/V1_12_22__change_target_type_name_length___MYSQL.sql b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/MYSQL/V1_12_22__change_target_type_name_length___MYSQL.sql new file mode 100644 index 000000000..39c4c5965 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/MYSQL/V1_12_22__change_target_type_name_length___MYSQL.sql @@ -0,0 +1 @@ +ALTER TABLE sp_target_type MODIFY name VARCHAR(128); \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/POSTGRESQL/V1_12_22__change_target_type_name_length___POSTGRESQL.sql b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/POSTGRESQL/V1_12_22__change_target_type_name_length___POSTGRESQL.sql new file mode 100644 index 000000000..6516a6b7a --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/POSTGRESQL/V1_12_22__change_target_type_name_length___POSTGRESQL.sql @@ -0,0 +1 @@ +ALTER TABLE sp_target_type ALTER COLUMN name VARCHAR (128); \ No newline at end of file diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/SQL_SERVER/V1_12_22__fix_target_type_name___SQL_SERVER.sql b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/SQL_SERVER/V1_12_22__fix_target_type_name___SQL_SERVER.sql new file mode 100644 index 000000000..a1842d526 --- /dev/null +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/resources/db/migration/SQL_SERVER/V1_12_22__fix_target_type_name___SQL_SERVER.sql @@ -0,0 +1 @@ +ALTER TABLE sp_target_type ALTER COLUMN name VARCHAR (128) NOT NULL; \ No newline at end of file diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentView.java index 0b60a3f94..08f9d2bd6 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/DeploymentView.java @@ -8,17 +8,11 @@ */ package org.eclipse.hawkbit.ui.management; -import com.vaadin.server.Page; -import com.vaadin.server.Page.BrowserWindowResizeEvent; -import com.vaadin.server.Page.BrowserWindowResizeListener; -import com.vaadin.spring.annotation.SpringView; -import com.vaadin.spring.annotation.UIScope; -import com.vaadin.ui.HorizontalLayout; -import com.vaadin.ui.Layout; import java.util.Arrays; import java.util.EnumMap; import java.util.Map; import java.util.concurrent.Executor; + import org.eclipse.hawkbit.repository.DeploymentManagement; import org.eclipse.hawkbit.repository.DistributionSetInvalidationManagement; import org.eclipse.hawkbit.repository.DistributionSetManagement; @@ -58,6 +52,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.vaadin.spring.events.EventBus.UIEventBus; +import com.vaadin.server.Page; +import com.vaadin.server.Page.BrowserWindowResizeEvent; +import com.vaadin.server.Page.BrowserWindowResizeListener; +import com.vaadin.spring.annotation.SpringView; +import com.vaadin.spring.annotation.UIScope; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Layout; + /** * Target status and deployment management view */ @@ -108,9 +110,9 @@ public class DeploymentView extends AbstractEventListenersAwareView implements B targetFilterQueryManagement, targetTypeManagement, targetTagManagement, targetManagement, managementUIState.getTargetTagFilterLayoutUiState(), distributionSetTypeManagement); - this.targetGridLayout = new TargetGridLayout(uiDependencies, targetManagement, targetTypeManagement, deploymentManagement, - uiProperties, targetTagManagement, distributionSetManagement, uiExecutor, configManagement, - targetManagementStateDataSupplier, systemSecurityContext, + this.targetGridLayout = new TargetGridLayout(uiDependencies, targetManagement, targetTypeManagement, + deploymentManagement, uiProperties, targetTagManagement, distributionSetManagement, uiExecutor, + configManagement, targetManagementStateDataSupplier, systemSecurityContext, managementUIState.getTargetTagFilterLayoutUiState(), managementUIState.getTargetGridLayoutUiState(), managementUIState.getTargetBulkUploadUiState(), managementUIState.getDistributionGridLayoutUiState()); @@ -153,6 +155,8 @@ public class DeploymentView extends AbstractEventListenersAwareView implements B new EventViewAware(EventView.DEPLOYMENT), layoutVisibilityHandlers); final Map layoutResizeHandlers = new EnumMap<>(EventLayout.class); + layoutResizeHandlers.put(EventLayout.TARGET_TAG_FILTER, + new ResizeHandler(this::maximizeCustomFilterLayout, this::minimizeCustomFilterLayout)); layoutResizeHandlers.put(EventLayout.TARGET_LIST, new ResizeHandler(this::maximizeTargetGridLayout, this::minimizeTargetGridLayout)); layoutResizeHandlers.put(EventLayout.DS_LIST, @@ -272,6 +276,10 @@ public class DeploymentView extends AbstractEventListenersAwareView implements B showTargetTagLayout(); } + if (managementUIState.getTargetTagFilterLayoutUiState().isMaximized()) { + maximizeCustomFilterLayout(); + } + if (managementUIState.getTargetGridLayoutUiState().isMaximized()) { maximizeTargetGridLayout(); } @@ -312,6 +320,9 @@ public class DeploymentView extends AbstractEventListenersAwareView implements B if (distributionTagLayout != null) { hideDsTagLayout(); } + if (targetTagFilterLayout != null) { + hideTargetTagLayout(); + } actionHistoryLayout.setVisible(false); clearAllWidgetsRatios(); @@ -320,17 +331,46 @@ public class DeploymentView extends AbstractEventListenersAwareView implements B targetGridLayout.maximize(); } + private void maximizeCustomFilterLayout() { + if (distributionGridLayout != null) { + distributionGridLayout.setVisible(false); + } + if (distributionTagLayout != null) { + hideDsTagLayout(); + } + actionHistoryLayout.setVisible(false); + + clearAllWidgetsRatios(); + mainLayout.setExpandRatio(targetTagFilterLayout, 1F); + mainLayout.setExpandRatio(targetGridLayout, 0.5F); + + targetTagFilterLayout.maximize(); + } + private void clearAllWidgetsRatios() { mainLayout.iterator().forEachRemaining(layout -> mainLayout.setExpandRatio(layout, 0F)); } private void minimizeTargetGridLayout() { + showNonTargetSpecificWidgetsAdaptingRatios(); + + if (targetTagFilterLayout != null && !managementUIState.getTargetTagFilterLayoutUiState().isHidden()) { + showTargetTagLayout(); + targetTagFilterLayout.minimize(); + } + + targetGridLayout.minimize(); + } + + private void showNonTargetSpecificWidgetsAdaptingRatios() { if (distributionGridLayout != null) { distributionGridLayout.setVisible(true); } + if (distributionTagLayout != null && !managementUIState.getDistributionTagLayoutUiState().isHidden()) { showDsTagLayout(); } + actionHistoryLayout.setVisible(true); if (distributionGridLayout != null && distributionTagLayout != null) { @@ -339,7 +379,12 @@ public class DeploymentView extends AbstractEventListenersAwareView implements B adaptTargetWidgetsRatios(); } - targetGridLayout.minimize(); + } + + private void minimizeCustomFilterLayout() { + showNonTargetSpecificWidgetsAdaptingRatios(); + + targetTagFilterLayout.minimize(); } private void maximizeDsGridLayout() { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/filter/FilterByStatusLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/filter/FilterByStatusLayout.java index 4d393f583..f8e9d6b74 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/filter/FilterByStatusLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/filter/FilterByStatusLayout.java @@ -168,7 +168,7 @@ public class FilterByStatusLayout extends VerticalLayout { targetFilterStatusLabel.addStyleName("target-status-filters-title"); addComponent(targetFilterStatusLabel); - setComponentAlignment(targetFilterStatusLabel, Alignment.MIDDLE_CENTER); + setComponentAlignment(targetFilterStatusLabel, Alignment.MIDDLE_LEFT); final HorizontalLayout fiterByStatusLayout = buildFilterByStatusLayout(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/filter/TargetTagFilterHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/filter/TargetTagFilterHeader.java index 63433a327..300570517 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/filter/TargetTagFilterHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/filter/TargetTagFilterHeader.java @@ -9,13 +9,18 @@ package org.eclipse.hawkbit.ui.management.targettag.filter; import org.eclipse.hawkbit.ui.common.CommonUiDependencies; +import org.eclipse.hawkbit.ui.common.event.CommandTopics; import org.eclipse.hawkbit.ui.common.event.EventLayout; import org.eclipse.hawkbit.ui.common.event.EventView; +import org.eclipse.hawkbit.ui.common.event.LayoutResizeEventPayload; +import org.eclipse.hawkbit.ui.common.event.LayoutResizeEventPayload.ResizeType; import org.eclipse.hawkbit.ui.common.grid.header.AbstractFilterHeader; +import org.eclipse.hawkbit.ui.common.grid.header.support.ResizeHeaderSupport; import org.eclipse.hawkbit.ui.management.targettag.TargetTagWindowBuilder; import org.eclipse.hawkbit.ui.management.targettag.targettype.TargetTypeWindowBuilder; import org.eclipse.hawkbit.ui.utils.UIComponentIdProvider; import org.eclipse.hawkbit.ui.utils.UIMessageIdProvider; +import org.vaadin.spring.events.EventBus.UIEventBus; import com.vaadin.ui.Window; @@ -31,25 +36,35 @@ public class TargetTagFilterHeader extends AbstractFilterHeader { private final transient TargetTypeWindowBuilder targetTypeWindowBuilder; + private final transient ResizeHeaderSupport resizeHeaderSupport; /** * Constructor for TargetTagFilterHeader - * @param uiDependencies + * + * @param uiDependencies * {@link CommonUiDependencies} * @param targetTagFilterLayoutUiState - * TargetTagFilterLayoutUiState + * {@link TargetTagFilterLayoutUiState} * @param targetTagWindowBuilder + * {@link TargetTagWindowBuilder} * @param targetTypeWindowBuilder + * {@link TargetTypeWindowBuilder} */ - public TargetTagFilterHeader(final CommonUiDependencies uiDependencies, - final TargetTagFilterLayoutUiState targetTagFilterLayoutUiState, - final TargetTagWindowBuilder targetTagWindowBuilder, TargetTypeWindowBuilder targetTypeWindowBuilder) { + public TargetTagFilterHeader( + final CommonUiDependencies uiDependencies, + final TargetTagFilterLayoutUiState targetTagFilterLayoutUiState, + final TargetTagWindowBuilder targetTagWindowBuilder, + final TargetTypeWindowBuilder targetTypeWindowBuilder) { super(uiDependencies.getI18n(), uiDependencies.getPermChecker(), uiDependencies.getEventBus()); this.targetTagFilterLayoutUiState = targetTagFilterLayoutUiState; this.targetTagWindowBuilder = targetTagWindowBuilder; this.targetTypeWindowBuilder = targetTypeWindowBuilder; + this.resizeHeaderSupport = new ResizeHeaderSupport(i18n, UIComponentIdProvider.CUSTOM_FILTER_MAX_MIN_TABLE_ICON, + this::maximizeTable, this::minimizeTable, this::onLoadIsTableMaximized); + addHeaderSupport(resizeHeaderSupport); + buildHeader(); } @@ -98,6 +113,24 @@ public class TargetTagFilterHeader extends AbstractFilterHeader { targetTagFilterLayoutUiState.setHidden(true); } + protected void maximizeTable() { + eventBus.publish(CommandTopics.RESIZE_LAYOUT, this, + new LayoutResizeEventPayload(ResizeType.MAXIMIZE, getLayout(), EventView.DEPLOYMENT)); + + targetTagFilterLayoutUiState.setMaximized(true); + } + + protected void minimizeTable() { + eventBus.publish(CommandTopics.RESIZE_LAYOUT, this, + new LayoutResizeEventPayload(ResizeType.MINIMIZE, getLayout(), EventView.DEPLOYMENT)); + + targetTagFilterLayoutUiState.setMaximized(false); + } + + protected Boolean onLoadIsTableMaximized() { + return targetTagFilterLayoutUiState.isMaximized(); + } + @Override protected EventLayout getLayout() { return EventLayout.TARGET_TAG_FILTER; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/filter/TargetTagFilterLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/filter/TargetTagFilterLayout.java index ac9d9a6bb..c97656d36 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/filter/TargetTagFilterLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/filter/TargetTagFilterLayout.java @@ -20,9 +20,10 @@ import org.eclipse.hawkbit.ui.common.filterlayout.AbstractFilterLayout; import org.eclipse.hawkbit.ui.common.layout.listener.GenericEventListener; import org.eclipse.hawkbit.ui.management.ManagementUIState; import org.eclipse.hawkbit.ui.management.targettag.TargetTagWindowBuilder; +import org.eclipse.hawkbit.ui.management.targettag.targettype.TargetTypeWindowBuilder; import com.vaadin.ui.ComponentContainer; -import org.eclipse.hawkbit.ui.management.targettag.targettype.TargetTypeWindowBuilder; +import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; /** * Target Tag filter layout. @@ -52,10 +53,10 @@ public class TargetTagFilterLayout extends AbstractFilterLayout { * TargetTagFilterLayoutUiState */ public TargetTagFilterLayout(final CommonUiDependencies uiDependencies, final ManagementUIState managementUIState, - final TargetFilterQueryManagement targetFilterQueryManagement, - final TargetTypeManagement targetTypeManagement, - final TargetTagManagement targetTagManagement, final TargetManagement targetManagement, - final TargetTagFilterLayoutUiState targetTagFilterLayoutUiState, final DistributionSetTypeManagement distributionSetTypeManagement) { + final TargetFilterQueryManagement targetFilterQueryManagement, + final TargetTypeManagement targetTypeManagement, final TargetTagManagement targetTagManagement, + final TargetManagement targetManagement, final TargetTagFilterLayoutUiState targetTagFilterLayoutUiState, + final DistributionSetTypeManagement distributionSetTypeManagement) { final TargetTagWindowBuilder targetTagWindowBuilder = new TargetTagWindowBuilder(uiDependencies, targetTagManagement); @@ -65,7 +66,8 @@ public class TargetTagFilterLayout extends AbstractFilterLayout { this.targetTagFilterHeader = new TargetTagFilterHeader(uiDependencies, targetTagFilterLayoutUiState, targetTagWindowBuilder, targetTypeWindowBuilder); this.multipleTargetFilter = new MultipleTargetFilter(uiDependencies, targetFilterQueryManagement, - targetTagManagement, targetManagement, targetTagFilterLayoutUiState, targetTagWindowBuilder, targetTypeWindowBuilder, targetTypeManagement); + targetTagManagement, targetManagement, targetTagFilterLayoutUiState, targetTagWindowBuilder, + targetTypeWindowBuilder, targetTypeManagement); this.filterTabChangedListener = new GenericEventListener<>(uiDependencies.getEventBus(), EventTopics.TARGET_FILTER_TAB_CHANGED, this::onTargetFilterTabChanged); @@ -113,4 +115,12 @@ public class TargetTagFilterLayout extends AbstractFilterLayout { filterTabChangedListener.unsubscribe(); multipleTargetFilter.unsubscribeListeners(); } + + public void maximize() { + setWidthFull(); + } + + public void minimize() { + setWidth(SPUIDefinitions.FILTER_BY_TYPE_WIDTH, Unit.PIXELS); + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/filter/TargetTagFilterLayoutUiState.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/filter/TargetTagFilterLayoutUiState.java index 4c606a694..6e44f5021 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/filter/TargetTagFilterLayoutUiState.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/targettag/filter/TargetTagFilterLayoutUiState.java @@ -26,12 +26,13 @@ public class TargetTagFilterLayoutUiState extends TagFilterLayoutUiState { private boolean isOverdueFilterClicked; private boolean isCustomFilterTabSelected; private boolean isTargetTypeFilterTabSelected; + private boolean isMaximized; public Long getClickedTargetTypeFilterId() { return clickedTargetTypeFilterId; } - public void setClickedTargetTypeFilterId(Long clickedTargetTypeFilterId) { + public void setClickedTargetTypeFilterId(final Long clickedTargetTypeFilterId) { this.clickedTargetTypeFilterId = clickedTargetTypeFilterId; } @@ -109,8 +110,16 @@ public class TargetTagFilterLayoutUiState extends TagFilterLayoutUiState { return isTargetTypeFilterTabSelected; } - public void setTargetTypeFilterTabSelected(boolean targetTypeFilterTabSelected) { + public void setTargetTypeFilterTabSelected(final boolean targetTypeFilterTabSelected) { isTargetTypeFilterTabSelected = targetTypeFilterTabSelected; } + public void setMaximized(final boolean maximized) { + isMaximized = maximized; + } + + public boolean isMaximized() { + return isMaximized; + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/UIComponentIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/UIComponentIdProvider.java index 0ca2e5e34..9aaba4439 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/UIComponentIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/UIComponentIdProvider.java @@ -780,10 +780,15 @@ public final class UIComponentIdProvider { public static final String TARGET_ATTRIBUTES_UPDATE = "target.attributes.update"; /** - * Id of maximize/minimize icon of table - Software module table. + * Id of maximize/minimize icon of table - Target table. */ public static final String TARGET_MAX_MIN_TABLE_ICON = "target.max.min.table.icon"; + /** + * Id of maximize/minimize icon of table - Custom filter table. + */ + public static final String CUSTOM_FILTER_MAX_MIN_TABLE_ICON = "custom.filter.max.min.table.icon"; + /** * Id of Assignment type in Software Module Details. */ diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-status.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-status.scss index 8cf27ab74..9ea6a9adb 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-status.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/filter-status.scss @@ -115,4 +115,8 @@ background-image: none; box-shadow: none !important; } + + .target-status-filters-title { + padding-left: 10px; + } }