feat: only show active user for chart/dashboard/datasource owner drop… (#20837)
This commit is contained in:
parent
acd9515353
commit
9be4870c7f
|
|
@ -540,10 +540,12 @@ function OwnersSelector({ datasource, onChange }) {
|
|||
return SupersetClient.get({
|
||||
endpoint: `/api/v1/dataset/related/owners?q=${query}`,
|
||||
}).then(response => ({
|
||||
data: response.json.result.map(item => ({
|
||||
value: item.value,
|
||||
label: item.text,
|
||||
})),
|
||||
data: response.json.result
|
||||
.filter(item => item.extra.active)
|
||||
.map(item => ({
|
||||
value: item.value,
|
||||
label: item.text,
|
||||
})),
|
||||
totalCount: response.json.count,
|
||||
}));
|
||||
}, []);
|
||||
|
|
|
|||
|
|
@ -132,12 +132,12 @@ const PropertiesModal = ({
|
|||
return SupersetClient.get({
|
||||
endpoint: `/api/v1/dashboard/related/${accessType}?q=${query}`,
|
||||
}).then(response => ({
|
||||
data: response.json.result.map(
|
||||
(item: { value: number; text: string }) => ({
|
||||
data: response.json.result
|
||||
.filter((item: { extra: { active: boolean } }) => item.extra.active)
|
||||
.map((item: { value: number; text: string }) => ({
|
||||
value: item.value,
|
||||
label: item.text,
|
||||
}),
|
||||
),
|
||||
})),
|
||||
totalCount: response.json.count,
|
||||
}));
|
||||
},
|
||||
|
|
|
|||
|
|
@ -107,12 +107,12 @@ function PropertiesModal({
|
|||
return SupersetClient.get({
|
||||
endpoint: `/api/v1/chart/related/owners?q=${query}`,
|
||||
}).then(response => ({
|
||||
data: response.json.result.map(
|
||||
(item: { value: number; text: string }) => ({
|
||||
data: response.json.result
|
||||
.filter((item: { extra: { active: boolean } }) => item.extra.active)
|
||||
.map((item: { value: number; text: string }) => ({
|
||||
value: item.value,
|
||||
label: item.text,
|
||||
}),
|
||||
),
|
||||
})),
|
||||
totalCount: response.json.count,
|
||||
}));
|
||||
},
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ get_related_schema = {
|
|||
class RelatedResultResponseSchema(Schema):
|
||||
value = fields.Integer(description="The related item identifier")
|
||||
text = fields.String(description="The related item string representation")
|
||||
extra = fields.Dict(description="The extra metadata for related item")
|
||||
|
||||
|
||||
class RelatedResponseSchema(Schema):
|
||||
|
|
@ -223,6 +224,15 @@ class BaseSupersetModelRestApi(ModelRestApi):
|
|||
}
|
||||
"""
|
||||
|
||||
extra_fields_rel_fields: Dict[str, List[str]] = {"owners": ["email", "active"]}
|
||||
"""
|
||||
Declare extra fields for the representation of the Model object::
|
||||
|
||||
extra_fields_rel_fields = {
|
||||
"<RELATED_FIELD>": "[<RELATED_OBJECT_FIELD_1>, <RELATED_OBJECT_FIELD_2>]"
|
||||
}
|
||||
"""
|
||||
|
||||
allowed_distinct_fields: Set[str] = set()
|
||||
|
||||
add_columns: List[str]
|
||||
|
|
@ -317,6 +327,17 @@ class BaseSupersetModelRestApi(ModelRestApi):
|
|||
return getattr(model, model_column_name)
|
||||
return str(model)
|
||||
|
||||
def _get_extra_field_for_model(
|
||||
self, model: Model, column_name: str
|
||||
) -> Dict[str, str]:
|
||||
ret = {}
|
||||
if column_name in self.extra_fields_rel_fields:
|
||||
model_column_names = self.extra_fields_rel_fields.get(column_name)
|
||||
if model_column_names:
|
||||
for key in model_column_names:
|
||||
ret[key] = getattr(model, key)
|
||||
return ret
|
||||
|
||||
def _get_result_from_rows(
|
||||
self, datamodel: SQLAInterface, rows: List[Model], column_name: str
|
||||
) -> List[Dict[str, Any]]:
|
||||
|
|
@ -324,6 +345,7 @@ class BaseSupersetModelRestApi(ModelRestApi):
|
|||
{
|
||||
"value": datamodel.get_pk_value(row),
|
||||
"text": self._get_text_for_model(row, column_name),
|
||||
"extra": self._get_extra_field_for_model(row, column_name),
|
||||
}
|
||||
for row in rows
|
||||
]
|
||||
|
|
|
|||
|
|
@ -264,10 +264,26 @@ class ApiOwnersTestCaseMixin:
|
|||
assert 4 == response["count"]
|
||||
sorted_results = sorted(response["result"], key=lambda value: value["text"])
|
||||
expected_results = [
|
||||
{"text": "gamma user", "value": 2},
|
||||
{"text": "gamma2 user", "value": 3},
|
||||
{"text": "gamma_no_csv user", "value": 6},
|
||||
{"text": "gamma_sqllab user", "value": 4},
|
||||
{
|
||||
"extra": {"active": True, "email": "gamma@fab.org"},
|
||||
"text": "gamma user",
|
||||
"value": 2,
|
||||
},
|
||||
{
|
||||
"extra": {"active": True, "email": "gamma2@fab.org"},
|
||||
"text": "gamma2 user",
|
||||
"value": 3,
|
||||
},
|
||||
{
|
||||
"extra": {"active": True, "email": "gamma_no_csv@fab.org"},
|
||||
"text": "gamma_no_csv user",
|
||||
"value": 6,
|
||||
},
|
||||
{
|
||||
"extra": {"active": True, "email": "gamma_sqllab@fab.org"},
|
||||
"text": "gamma_sqllab user",
|
||||
"value": 4,
|
||||
},
|
||||
]
|
||||
# TODO Check me
|
||||
assert expected_results == sorted_results
|
||||
|
|
@ -286,8 +302,16 @@ class ApiOwnersTestCaseMixin:
|
|||
assert 2 == response["count"]
|
||||
sorted_results = sorted(response["result"], key=lambda value: value["text"])
|
||||
expected_results = [
|
||||
{"text": "gamma user", "value": 2},
|
||||
{"text": "gamma_sqllab user", "value": 4},
|
||||
{
|
||||
"extra": {"active": True, "email": "gamma@fab.org"},
|
||||
"text": "gamma user",
|
||||
"value": 2,
|
||||
},
|
||||
{
|
||||
"extra": {"active": True, "email": "gamma_sqllab@fab.org"},
|
||||
"text": "gamma_sqllab user",
|
||||
"value": 4,
|
||||
},
|
||||
]
|
||||
assert expected_results == sorted_results
|
||||
|
||||
|
|
@ -305,8 +329,16 @@ class ApiOwnersTestCaseMixin:
|
|||
assert 2 == response["count"]
|
||||
sorted_results = sorted(response["result"], key=lambda value: value["text"])
|
||||
expected_results = [
|
||||
{"text": "gamma user", "value": 2},
|
||||
{"text": "gamma_sqllab user", "value": 4},
|
||||
{
|
||||
"extra": {"active": True, "email": "gamma@fab.org"},
|
||||
"text": "gamma user",
|
||||
"value": 2,
|
||||
},
|
||||
{
|
||||
"extra": {"active": True, "email": "gamma_sqllab@fab.org"},
|
||||
"text": "gamma_sqllab user",
|
||||
"value": 4,
|
||||
},
|
||||
]
|
||||
assert expected_results == sorted_results
|
||||
|
||||
|
|
|
|||
|
|
@ -445,7 +445,8 @@ class TestSavedQueryApi(SupersetTestCase):
|
|||
expected_result = {
|
||||
"count": len(databases),
|
||||
"result": [
|
||||
{"text": str(database), "value": database.id} for database in databases
|
||||
{"extra": {}, "text": str(database), "value": database.id}
|
||||
for database in databases
|
||||
],
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue