|
|
|
@ -34,12 +34,16 @@ |
|
|
|
let bookmarks = [null] |
|
|
|
let pageNumber = 0 |
|
|
|
let query = null |
|
|
|
let queryExtensions = {} |
|
|
|
|
|
|
|
// Sorting can be overridden at run time, so we can't use the prop directly |
|
|
|
let currentSortColumn = sortColumn |
|
|
|
let currentSortOrder = sortOrder |
|
|
|
$: currentSortColumn = sortColumn |
|
|
|
$: currentSortOrder = sortOrder |
|
|
|
|
|
|
|
$: query = buildLuceneQuery(filter) |
|
|
|
$: defaultQuery = buildLuceneQuery(filter) |
|
|
|
$: extendQuery(defaultQuery, queryExtensions) |
|
|
|
$: internalTable = dataSource?.type === "table" |
|
|
|
$: nestedProvider = dataSource?.type === "provider" |
|
|
|
$: hasNextPage = bookmarks[pageNumber + 1] != null |
|
|
|
@ -91,8 +95,12 @@ |
|
|
|
metadata: { dataSource }, |
|
|
|
}, |
|
|
|
{ |
|
|
|
type: ActionTypes.SetDataProviderQuery, |
|
|
|
callback: newQuery => (query = newQuery), |
|
|
|
type: ActionTypes.AddDataProviderQueryExtension, |
|
|
|
callback: addQueryExtension, |
|
|
|
}, |
|
|
|
{ |
|
|
|
type: ActionTypes.RemoveDataProviderQueryExtension, |
|
|
|
callback: removeQueryExtension, |
|
|
|
}, |
|
|
|
{ |
|
|
|
type: ActionTypes.SetDataProviderSorting, |
|
|
|
@ -164,6 +172,7 @@ |
|
|
|
const sort = schema?.[sortColumn] ? sortColumn : undefined |
|
|
|
|
|
|
|
// For internal tables we use server-side processing |
|
|
|
console.log("SEARCH!") |
|
|
|
const res = await API.searchTable({ |
|
|
|
tableId: dataSource.tableId, |
|
|
|
query, |
|
|
|
@ -264,6 +273,38 @@ |
|
|
|
pageNumber-- |
|
|
|
allRows = res.rows |
|
|
|
} |
|
|
|
|
|
|
|
const addQueryExtension = (key, operator, field, value) => { |
|
|
|
if (!key || !operator || !field) { |
|
|
|
return |
|
|
|
} |
|
|
|
const extension = { operator, field, value } |
|
|
|
queryExtensions = { ...queryExtensions, [key]: extension } |
|
|
|
} |
|
|
|
|
|
|
|
const removeQueryExtension = key => { |
|
|
|
if (!key) { |
|
|
|
return |
|
|
|
} |
|
|
|
const newQueryExtensions = { ...queryExtensions } |
|
|
|
delete newQueryExtensions[key] |
|
|
|
queryExtensions = newQueryExtensions |
|
|
|
} |
|
|
|
|
|
|
|
const extendQuery = (defaultQuery, extensions) => { |
|
|
|
const extensionValues = Object.values(extensions || {}) |
|
|
|
let extendedQuery = { ...query } |
|
|
|
extensionValues.forEach(({ operator, field, value }) => { |
|
|
|
extendedQuery[operator] = { |
|
|
|
...extendedQuery[operator], |
|
|
|
[field]: value, |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
if (JSON.stringify(query) !== JSON.stringify(extendedQuery)) { |
|
|
|
query = extendedQuery |
|
|
|
} |
|
|
|
} |
|
|
|
</script> |
|
|
|
|
|
|
|
<div use:styleable={$component.styles} class="container"> |
|
|
|
|