#7793 - sortByWeight #763
|
@ -104,6 +104,7 @@ const noOneOpt = ref({
|
||||||
[optionValue.value]: false,
|
[optionValue.value]: false,
|
||||||
[optionLabel.value]: noOneText,
|
[optionLabel.value]: noOneText,
|
||||||
});
|
});
|
||||||
|
const sort = computed(() => [...($props.sortBy ?? []), `${$props.optionLabel} DESC`]);
|
||||||
|
|
||||||
const value = computed({
|
const value = computed({
|
||||||
get() {
|
get() {
|
||||||
|
@ -137,9 +138,8 @@ function findKeyInOptions() {
|
||||||
if (!$props.options) return;
|
if (!$props.options) return;
|
||||||
return filter($props.modelValue, $props.options)?.length;
|
return filter($props.modelValue, $props.options)?.length;
|
||||||
}
|
}
|
||||||
|
function sortOptions(data) {
|
||||||
function setOptions(data) {
|
return data.sort((a, b) => {
|
||||||
data = data.sort((a, b) => {
|
|
||||||
const search = lastVal.value?.toString()?.toLowerCase();
|
const search = lastVal.value?.toString()?.toLowerCase();
|
||||||
const aValue = String(a[$props.optionLabel]).toLowerCase();
|
const aValue = String(a[$props.optionLabel]).toLowerCase();
|
||||||
const bValue = String(b[$props.optionLabel]).toLowerCase();
|
const bValue = String(b[$props.optionLabel]).toLowerCase();
|
||||||
|
@ -156,6 +156,9 @@ function setOptions(data) {
|
||||||
|
|
||||||
return aValue.localeCompare(bValue);
|
return aValue.localeCompare(bValue);
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
function setOptions(data) {
|
||||||
|
if (lastVal.value) data = sortOptions(data);
|
||||||
myOptions.value = JSON.parse(JSON.stringify(data));
|
myOptions.value = JSON.parse(JSON.stringify(data));
|
||||||
myOptionsOriginal.value = JSON.parse(JSON.stringify(data));
|
myOptionsOriginal.value = JSON.parse(JSON.stringify(data));
|
||||||
}
|
}
|
||||||
|
@ -165,7 +168,8 @@ function filter(val, options) {
|
||||||
|
|
||||||
if (!search) return options;
|
if (!search) return options;
|
||||||
|
|
||||||
return options.filter((row) => {
|
return sortOptions(
|
||||||
|
options.filter((row) => {
|
||||||
if ($props.filterOptions.length) {
|
if ($props.filterOptions.length) {
|
||||||
return $props.filterOptions.some((prop) => {
|
return $props.filterOptions.some((prop) => {
|
||||||
const propValue = String(row[prop]).toLowerCase();
|
const propValue = String(row[prop]).toLowerCase();
|
||||||
|
@ -178,13 +182,14 @@ function filter(val, options) {
|
||||||
const optionLabel = String(row[$props.optionLabel]).toLowerCase();
|
const optionLabel = String(row[$props.optionLabel]).toLowerCase();
|
||||||
|
|
||||||
return id == search || optionLabel.includes(search);
|
return id == search || optionLabel.includes(search);
|
||||||
});
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function fetchFilter(val) {
|
async function fetchFilter(val) {
|
||||||
if (!$props.url || !dataRef.value) return;
|
if (!$props.url || !dataRef.value) return;
|
||||||
|
|
||||||
const { fields, include, sortBy, limit } = $props;
|
const { fields, include, limit } = $props;
|
||||||
const key =
|
const key =
|
||||||
optionFilterValue.value ??
|
optionFilterValue.value ??
|
||||||
(new RegExp(/\d/g).test(val)
|
(new RegExp(/\d/g).test(val)
|
||||||
|
@ -203,24 +208,10 @@ async function fetchFilter(val) {
|
||||||
$props.exprBuilder && Object.assign(where, $props.exprBuilder(key, val));
|
$props.exprBuilder && Object.assign(where, $props.exprBuilder(key, val));
|
||||||
const fetchOptions = { where, include, limit };
|
const fetchOptions = { where, include, limit };
|
||||||
if (fields) fetchOptions.fields = fields;
|
if (fields) fetchOptions.fields = fields;
|
||||||
if (sortBy) {
|
|
||||||
fetchOptions.order = [
|
|
||||||
getOrderCaseString(key, val),
|
|
||||||
typeof sortBy === 'string' ? sortBy : [...sortBy],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
return dataRef.value.fetch(fetchOptions);
|
return dataRef.value.fetch(fetchOptions);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getOrderCaseString(prop, value) {
|
|
||||||
return `CASE
|
|
||||||
WHEN ${prop} LIKE '${value}%' THEN 1
|
|
||||||
WHEN ${prop} LIKE '%${value}%' THEN 2
|
|
||||||
ELSE 3
|
|
||||||
END, ${prop} DESC`;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function filterHandler(val, update) {
|
async function filterHandler(val, update) {
|
||||||
if (!val && lastVal.value === val) {
|
if (!val && lastVal.value === val) {
|
||||||
lastVal.value = val;
|
lastVal.value = val;
|
||||||
|
@ -266,7 +257,7 @@ const getVal = (val) => ($props.useLike ? { like: `%${val}%` } : val);
|
||||||
@on-fetch="(data) => setOptions(data)"
|
@on-fetch="(data) => setOptions(data)"
|
||||||
:where="where || { [optionValue]: value }"
|
:where="where || { [optionValue]: value }"
|
||||||
:limit="limit"
|
:limit="limit"
|
||||||
:sort-by="sortBy"
|
:sort-by="sort"
|
||||||
:fields="fields"
|
:fields="fields"
|
||||||
:params="params"
|
:params="params"
|
||||||
/>
|
/>
|
||||||
|
|
Loading…
Reference in New Issue