|
|
|
@ -11,11 +11,14 @@ |
|
|
|
export let size = "M" |
|
|
|
|
|
|
|
const component = getContext("component") |
|
|
|
const { builderStore, ActionTypes, getAction } = getContext("sdk") |
|
|
|
const { builderStore, ActionTypes, getAction, fetchDatasourceSchema } = |
|
|
|
getContext("sdk") |
|
|
|
|
|
|
|
let modal |
|
|
|
let tmpFilters = [] |
|
|
|
let filters = [] |
|
|
|
let schemaLoaded = false, |
|
|
|
schema |
|
|
|
|
|
|
|
$: dataProviderId = dataProvider?.id |
|
|
|
$: addExtension = getAction( |
|
|
|
@ -26,7 +29,7 @@ |
|
|
|
dataProviderId, |
|
|
|
ActionTypes.RemoveDataProviderQueryExtension |
|
|
|
) |
|
|
|
$: schema = dataProvider?.schema |
|
|
|
$: fetchSchema(dataProvider || {}) |
|
|
|
$: schemaFields = getSchemaFields(schema, allowedFields) |
|
|
|
|
|
|
|
// Add query extension to data provider |
|
|
|
@ -39,7 +42,20 @@ |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const getSchemaFields = (schema, allowedFields) => { |
|
|
|
async function fetchSchema(dataProvider) { |
|
|
|
const datasource = dataProvider?.datasource |
|
|
|
if (datasource) { |
|
|
|
schema = await fetchDatasourceSchema(datasource, { |
|
|
|
enrichRelationships: true, |
|
|
|
}) |
|
|
|
} |
|
|
|
schemaLoaded = true |
|
|
|
} |
|
|
|
|
|
|
|
function getSchemaFields(schema, allowedFields) { |
|
|
|
if (!schemaLoaded) { |
|
|
|
return {} |
|
|
|
} |
|
|
|
let clonedSchema = {} |
|
|
|
if (!allowedFields?.length) { |
|
|
|
clonedSchema = schema |
|
|
|
@ -68,18 +84,20 @@ |
|
|
|
}) |
|
|
|
</script> |
|
|
|
|
|
|
|
<Button |
|
|
|
onClick={openEditor} |
|
|
|
icon="Properties" |
|
|
|
text="Filter" |
|
|
|
{size} |
|
|
|
type="secondary" |
|
|
|
quiet |
|
|
|
active={filters?.length > 0} |
|
|
|
/> |
|
|
|
{#if schemaLoaded} |
|
|
|
<Button |
|
|
|
onClick={openEditor} |
|
|
|
icon="Properties" |
|
|
|
text="Filter" |
|
|
|
{size} |
|
|
|
type="secondary" |
|
|
|
quiet |
|
|
|
active={filters?.length > 0} |
|
|
|
/> |
|
|
|
|
|
|
|
<Modal bind:this={modal}> |
|
|
|
<ModalContent title="Edit filters" size="XL" onConfirm={updateQuery}> |
|
|
|
<FilterModal bind:filters={tmpFilters} {schemaFields} /> |
|
|
|
</ModalContent> |
|
|
|
</Modal> |
|
|
|
<Modal bind:this={modal}> |
|
|
|
<ModalContent title="Edit filters" size="XL" onConfirm={updateQuery}> |
|
|
|
<FilterModal bind:filters={tmpFilters} {schemaFields} /> |
|
|
|
</ModalContent> |
|
|
|
</Modal> |
|
|
|
{/if} |
|
|
|
|