@@ -500,18 +502,41 @@ export class CategoryFilter {
);
}
+ private renderOperatorButton() {
+ const params: BaseButtonProps = {
+ type: 'button',
+ variant: 'secondary',
+ outline: false,
+ ghost: true,
+ iconOnly: true,
+ iconOval: false,
+ selected: false,
+ disabled: this.disabled,
+ loading: false,
+ icon: '',
+ onClick: (e: Event) => {
+ e.stopPropagation();
+ this.toggleCategoryOperator();
+ },
+ extraClasses: {
+ 'btn-icon-32': true,
+ 'btn-toggle-operator': true,
+ },
+ };
+
+ return (
+
+ {this.categoryLogicalOperator === LogicalFilterOperator.NOT_EQUAL
+ ? '='
+ : '!='}
+
+ );
+ }
+
private renderCategoryValues() {
return (
-
+ {this.renderOperatorButton()}
@@ -539,7 +564,7 @@ export class CategoryFilter {
private renderDropdownContent() {
if (this.hasCategorySelection()) {
- if (this.category) {
+ if (this.category !== undefined) {
return this.renderCategoryValues();
} else {
return this.renderCategorySelection();
@@ -559,7 +584,10 @@ export class CategoryFilter {
data-id={id}
title={this.categories[id].label}
key={id}
- onClick={() => this.selectCategory(id)}
+ onClick={(e) => {
+ e.preventDefault();
+ this.selectCategory(id);
+ }}
tabindex="0"
>
{this.categories[id]?.label}
@@ -570,8 +598,8 @@ export class CategoryFilter {
}
private getDropdownHeader() {
- if (this.categories) {
- if (this.category) {
+ if (this.categories !== undefined) {
+ if (this.category !== undefined) {
return null;
} else {
return this.labelCategories;
@@ -596,31 +624,45 @@ export class CategoryFilter {
onClick={() => this.resetFilter()}
class={{
'reset-button': true,
- 'hide-reset-button': !this.filterTokens.length && !this.category,
+ 'hide-reset-button':
+ !this.filterTokens.length && this.category === undefined,
}}
- variant="primary"
ghost
oval
icon="clear"
size="16"
- tabindex="1"
>
);
}
+ private getIconColor() {
+ if (this.disabled) {
+ return 'color-componentn-1';
+ }
+
+ if (this.readonly) {
+ return 'color-std-txt';
+ }
+
+ return 'color-primary';
+ }
+
render() {
return (
-
- {this.renderDropdownContent()}
-
+ {this.disabled || this.readonly ? (
+ ''
+ ) : (
+
+ {this.renderDropdownContent()}
+
+ )}
);
}
diff --git a/packages/core/src/components/filter-chip/filter-chip.scss b/packages/core/src/components/filter-chip/filter-chip.scss
index dc07a2fe830..707b1c45084 100644
--- a/packages/core/src/components/filter-chip/filter-chip.scss
+++ b/packages/core/src/components/filter-chip/filter-chip.scss
@@ -55,6 +55,10 @@
cursor: default;
}
+:host(.readonly) {
+ padding-right: $small-space;
+}
+
@include host-hover {
background-color: var(--theme-color-ghost-primary--hover);
border-color: var(--theme-chip-primary-outline--border-color--hover);
diff --git a/packages/core/src/components/filter-chip/filter-chip.tsx b/packages/core/src/components/filter-chip/filter-chip.tsx
index 54679cd9cbe..3fd3ae1c2be 100644
--- a/packages/core/src/components/filter-chip/filter-chip.tsx
+++ b/packages/core/src/components/filter-chip/filter-chip.tsx
@@ -30,6 +30,12 @@ export class FilterChip {
*/
@Prop() disabled = false;
+ /**
+ * If true the filter chip will be in readonly mode
+ * @since 2.0.0
+ */
+ @Prop() readonly = false;
+
/**
* Close clicked
*/
@@ -43,11 +49,14 @@ export class FilterChip {
render() {
return (
-
+
- {!this.disabled ? (
+ {!this.disabled && !this.readonly ? (
Stencil Component Starter
-
diff --git a/packages/core/src/tests/category-filter/categories/index.html b/packages/core/src/tests/category-filter/categories/index.html
index f1e4e3f5381..e5de45b4dd8 100644
--- a/packages/core/src/tests/category-filter/categories/index.html
+++ b/packages/core/src/tests/category-filter/categories/index.html
@@ -13,18 +13,16 @@
/>
Stencil Component Starter
+
+
+
diff --git a/packages/core/src/tests/category-filter/category-filter.e2e.ts b/packages/core/src/tests/category-filter/category-filter.e2e.ts
index 534d0810daa..6772f245d86 100644
--- a/packages/core/src/tests/category-filter/category-filter.e2e.ts
+++ b/packages/core/src/tests/category-filter/category-filter.e2e.ts
@@ -20,7 +20,7 @@ regressionTest.describe('category-filter', () => {
regressionTest('categories', async ({ page }) => {
await page.goto('category-filter/categories');
- await page.locator('input').click();
+ await page.locator('input').first().click();
expect(await page.screenshot({ fullPage: true })).toMatchSnapshot();
});
diff --git a/packages/core/src/tests/category-filter/category-filter.e2e.ts-snapshots/category-filter-basic-1-chromium---theme-classic-dark-linux.png b/packages/core/src/tests/category-filter/category-filter.e2e.ts-snapshots/category-filter-basic-1-chromium---theme-classic-dark-linux.png
index 4f2736f082f..6e80c9acc68 100644
Binary files a/packages/core/src/tests/category-filter/category-filter.e2e.ts-snapshots/category-filter-basic-1-chromium---theme-classic-dark-linux.png and b/packages/core/src/tests/category-filter/category-filter.e2e.ts-snapshots/category-filter-basic-1-chromium---theme-classic-dark-linux.png differ
diff --git a/packages/core/src/tests/category-filter/category-filter.e2e.ts-snapshots/category-filter-basic-1-chromium---theme-classic-light-linux.png b/packages/core/src/tests/category-filter/category-filter.e2e.ts-snapshots/category-filter-basic-1-chromium---theme-classic-light-linux.png
index 6a726b82659..731bce8863c 100644
Binary files a/packages/core/src/tests/category-filter/category-filter.e2e.ts-snapshots/category-filter-basic-1-chromium---theme-classic-light-linux.png and b/packages/core/src/tests/category-filter/category-filter.e2e.ts-snapshots/category-filter-basic-1-chromium---theme-classic-light-linux.png differ
diff --git a/packages/core/src/tests/category-filter/category-filter.e2e.ts-snapshots/category-filter-categories-1-chromium---theme-classic-dark-linux.png b/packages/core/src/tests/category-filter/category-filter.e2e.ts-snapshots/category-filter-categories-1-chromium---theme-classic-dark-linux.png
index f83b228b520..a3c00bef444 100644
Binary files a/packages/core/src/tests/category-filter/category-filter.e2e.ts-snapshots/category-filter-categories-1-chromium---theme-classic-dark-linux.png and b/packages/core/src/tests/category-filter/category-filter.e2e.ts-snapshots/category-filter-categories-1-chromium---theme-classic-dark-linux.png differ
diff --git a/packages/core/src/tests/category-filter/category-filter.e2e.ts-snapshots/category-filter-categories-1-chromium---theme-classic-light-linux.png b/packages/core/src/tests/category-filter/category-filter.e2e.ts-snapshots/category-filter-categories-1-chromium---theme-classic-light-linux.png
index 5076823eb26..0265bd9b9c5 100644
Binary files a/packages/core/src/tests/category-filter/category-filter.e2e.ts-snapshots/category-filter-categories-1-chromium---theme-classic-light-linux.png and b/packages/core/src/tests/category-filter/category-filter.e2e.ts-snapshots/category-filter-categories-1-chromium---theme-classic-light-linux.png differ
diff --git a/packages/vue/src/components.ts b/packages/vue/src/components.ts
index 7a451a593cb..a8dac6dc57d 100644
--- a/packages/vue/src/components.ts
+++ b/packages/vue/src/components.ts
@@ -110,7 +110,8 @@ export const IxCardTitle = /*@__PURE__*/ defineContainer('ix-ca
export const IxCategoryFilter = /*@__PURE__*/ defineContainer('ix-category-filter', undefined, [
- 'initialState',
+ 'disabled',
+ 'readonly',
'filterState',
'placeholder',
'categories',
@@ -122,6 +123,7 @@ export const IxCategoryFilter = /*@__PURE__*/ defineContainer('ix-filter-chip', undefined, [
'disabled',
+ 'readonly',
'closeClick'
]);