Skip to content

Commit ed83bf1

Browse files
committed
fix: fix FSortFilterDataset clear button alignment (fixes SFKUI-7538)
1 parent 69bfd45 commit ed83bf1

File tree

5 files changed

+30
-103
lines changed

5 files changed

+30
-103
lines changed

packages/design/src/components/sort-filter-dataset/_sort-filter-dataset.scss

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -29,41 +29,5 @@ $sortfilter-header-padding-top: size.$padding-025 !default;
2929
width: 160px;
3030
}
3131
}
32-
33-
&__magnify-icon {
34-
position: absolute;
35-
left: size.$margin-175;
36-
height: var(--f-height-large);
37-
38-
/* same as textfield */
39-
z-index: 1;
40-
41-
/* In front of input field */
42-
width: 1.2rem;
43-
color: $sort-filter-dateset-color-icon-search;
44-
45-
@include core.breakpoint-down(sm) {
46-
top: size.$margin-150;
47-
left: size.$margin-075;
48-
}
49-
}
50-
51-
&__close-icon.button--discrete {
52-
position: absolute;
53-
top: calc(-1 * size.$margin-075);
54-
right: 0;
55-
color: $sort-filter-dateset-color-icon-clear;
56-
cursor: pointer;
57-
padding: 1rem;
58-
59-
@include core.breakpoint-down(sm) {
60-
top: size.$margin-100;
61-
}
62-
}
63-
64-
&__close-icon.button--discrete:hover {
65-
box-shadow: none;
66-
background-color: transparent;
67-
}
6832
}
6933
}

packages/vue/src/components/FSortFilterDataset/FSortFilterDataset.cy.ts

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -265,16 +265,6 @@ describe("filter", () => {
265265
sortFilterDataset.textField.input().type("20");
266266
assertTable([], COLUMN_TEXT);
267267
});
268-
269-
it("when clear button is clicked, should focus search field", () => {
270-
cy.mount(TestComponent, { props: { filterAttributes: [] } });
271-
sortFilterDataset.textField.input().type("foo");
272-
sortFilterDataset
273-
.el()
274-
.get(".sort-filter-dataset__search__close-icon")
275-
.click();
276-
sortFilterDataset.textField.input().should("have.focus");
277-
});
278268
});
279269

280270
describe("sort & filter in combination", () => {

packages/vue/src/components/FSortFilterDataset/FSortFilterDataset.vue

Lines changed: 14 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
<script setup lang="ts" generic="T">
2-
import { type Ref, nextTick, onMounted, provide, useTemplateRef, watch } from "vue";
2+
import { type Ref, computed, nextTick, onMounted, provide, watch } from "vue";
33
import { TranslationService, alertScreenReader, debounce } from "@fkui/logic";
44
import { IFlex, IFlexItem } from "../../internal-components/IFlex";
55
import { useTranslate } from "../../plugins";
6-
import { getHTMLElementFromVueRef } from "../../utils";
7-
import { FIcon } from "../FIcon";
86
import { FSelectField } from "../FSelectField";
9-
import { FTextField } from "../FTextField";
7+
import { FSearchTextField } from "../FTextField";
108
import {
119
type FSortFilterDatasetMountCallback,
1210
type FSortFilterDatasetSortCallback,
@@ -37,7 +35,10 @@ export interface FSortFilterDatasetProps<T> {
3735
*/
3836
showFilter?: boolean;
3937
/**
40-
* Set placeholder text in filter input field.
38+
* Set text in filter input field label.
39+
*
40+
* Previously set placeholder text in filter input field, but this is deprecated.
41+
*
4142
* Default is textkey "fkui.sort-filter-dataset.placeholder.filter"
4243
*/
4344
placeholderFilter?: string;
@@ -83,12 +84,10 @@ const emit = defineEmits<{
8384
}>();
8485
8586
const $t = useTranslate();
86-
const searchField = useTemplateRef("search-field");
8787
const {
8888
searchString,
8989
sortAttribute,
9090
sortFilterResult,
91-
showClearButton,
9291
defaultSortValue,
9392
sortableKeys,
9493
sortOrders,
@@ -103,8 +102,6 @@ const {
103102
);
104103
105104
function filterResultset(): void {
106-
searchString.value = searchField.value?.$el.querySelector("input").value;
107-
108105
if (searchString.value === "") {
109106
alertScreenReader($t("fkui.sort-filter-dataset.aria-live.empty", "Sök redigera Sök tom"));
110107
} else {
@@ -151,15 +148,6 @@ function onSearchInput(): void {
151148
debouncedFilterResultset();
152149
}
153150
154-
function onClickClearSearch(): void {
155-
searchString.value = "";
156-
157-
const input = getHTMLElementFromVueRef(searchField.value).querySelector("input");
158-
if (input) {
159-
input.focus();
160-
}
161-
}
162-
163151
watch(sortAttribute, () => {
164152
emit("usedSortAttributes", sortAttribute.value);
165153
});
@@ -180,6 +168,9 @@ watch(
180168
},
181169
{ immediate: true },
182170
);
171+
172+
const clearableScreenReaderText = computed(() => $t("fkui.sort-filter-dataset.clear.filter", "Rensa sökfält"));
173+
const filterLabel = computed(() => placeholderFilter);
183174
</script>
184175

185176
<template>
@@ -197,32 +188,15 @@ watch(
197188
<i-flex collapse float="right">
198189
<i-flex-item v-if="showFilter" shrink align="center">
199190
<div class="sort-filter-dataset__search">
200-
<f-icon name="search" class="sort-filter-dataset__search__magnify-icon" />
201-
202-
<f-text-field
203-
ref="search-field"
191+
<f-search-text-field
204192
v-model="searchString"
205-
inline
206-
:placeholder="placeholderFilter"
207193
maxlength="64"
194+
:clearable-screen-reader-text
195+
inline
208196
@input="onSearchInput"
209197
>
210-
<span class="sr-only">{{ placeholderFilter }}</span>
211-
</f-text-field>
212-
213-
<!-- [html-validate-disable-next fkui/class-deprecated -- technical debt] -->
214-
<button
215-
v-if="showClearButton"
216-
type="button"
217-
class="button button--discrete sort-filter-dataset__search__close-icon"
218-
:title="$t('fkui.sort-filter-dataset.clear.filter', 'Rensa sökfält')"
219-
@click="onClickClearSearch"
220-
>
221-
<f-icon name="close" />
222-
<span class="sr-only">{{
223-
$t("fkui.sort-filter-dataset.clear.filter", "Rensa sökfält")
224-
}}</span>
225-
</button>
198+
{{ filterLabel }}
199+
</f-search-text-field>
226200
</div>
227201
</i-flex-item>
228202

packages/vue/src/components/FSortFilterDataset/__snapshots__/FSortFilterDataset.spec.ts.snap

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -29,23 +29,22 @@ exports[`snapshots should match snapshot with a dropdown with attributes 1`] = `
2929
<div
3030
class="sort-filter-dataset__search"
3131
>
32-
<f-icon-stub
33-
class="sort-filter-dataset__search__magnify-icon"
34-
library="f"
35-
name="search"
36-
/>
37-
<f-text-field-stub
38-
disabled="false"
39-
id="fkui-vue-element-0001"
40-
inline="true"
41-
inputwidth="sm-12"
42-
labelwidth="sm-12"
32+
<div
33+
inline=""
4334
maxlength="64"
44-
modelvalue=""
45-
placeholder="Sök"
46-
type="text"
47-
/>
48-
<!--v-if-->
35+
>
36+
<f-text-field-stub
37+
class="text-field--search"
38+
disabled="false"
39+
id="fkui-vue-element-0001"
40+
inline="true"
41+
inputwidth="sm-12"
42+
labelwidth="sm-12"
43+
maxlength="64"
44+
modelvalue=""
45+
type="search"
46+
/>
47+
</div>
4948
</div>
5049
5150
</div>

packages/vue/src/components/FTextField/extendedTextFields/FSearchTextField/FSearchTextField.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export default defineComponent({
4949
],
5050
data() {
5151
return {
52-
defaultText: this.$t("fkui.search-text-field.label", "Sök"),
52+
defaultText: TranslationService.provider.translate("fkui.search-text-field.label", "Sök"),
5353
};
5454
},
5555
computed: {

0 commit comments

Comments
 (0)