diff --git a/entry/api_v2/views.py b/entry/api_v2/views.py index 4518d719d..a9e88bee4 100644 --- a/entry/api_v2/views.py +++ b/entry/api_v2/views.py @@ -315,6 +315,24 @@ def _get_typed_value(type: int) -> str: ): entry["attrs"][name]["value"]["as_string"] = "" + # "asNamedObject", "as_array_named_object" converts types + if _get_typed_value(attr["type"]) == "as_named_object": + value = entry["attrs"][name]["value"]["as_named_object"] + entry["attrs"][name]["value"]["as_named_object"] = { + "name": list(value.keys())[0], + "object": list(value.values())[0], + } + + if _get_typed_value(attr["type"]) == "as_array_named_object": + values = entry["attrs"][name]["value"]["as_array_named_object"] + entry["attrs"][name]["value"]["as_array_named_object"] = [ + { + "name": list(value.keys())[0], + "object": list(value.values())[0], + } + for value in values + ] + serializer = AdvancedSearchResultSerializer( data={"count": resp["ret_count"], "values": resp["ret_values"]} ) diff --git a/entry/tests/test_api_v2.py b/entry/tests/test_api_v2.py index 0a71e1c8b..fd1d29ae4 100644 --- a/entry/tests/test_api_v2.py +++ b/entry/tests/test_api_v2.py @@ -2886,7 +2886,8 @@ def test_advanced_search(self): "type": 2049, "value": { "as_named_object": { - "hoge": {"id": self.ref_entry.id, "name": "r-0"} + "name": "hoge", + "object": {"id": self.ref_entry.id, "name": "r-0"}, } }, }, @@ -2895,8 +2896,14 @@ def test_advanced_search(self): "type": 3073, "value": { "as_array_named_object": [ - {"foo": {"id": self.ref_entry.id, "name": "r-0"}}, - {"bar": {"id": self.ref_entry.id, "name": "r-0"}}, + { + "name": "foo", + "object": {"id": self.ref_entry.id, "name": "r-0"}, + }, + { + "name": "bar", + "object": {"id": self.ref_entry.id, "name": "r-0"}, + }, ] }, }, @@ -2963,7 +2970,12 @@ def test_advanced_search(self): "name": { "is_readable": True, "type": 2049, - "value": {"as_named_object": {"": {"id": "", "name": ""}}}, + "value": { + "as_named_object": { + "name": "", + "object": {"id": "", "name": ""}, + } + }, }, "names": { "is_readable": True, diff --git a/frontend/src/pages/AdvancedSearchResultsPage.tsx b/frontend/src/pages/AdvancedSearchResultsPage.tsx index cf5267138..379b281ee 100644 --- a/frontend/src/pages/AdvancedSearchResultsPage.tsx +++ b/frontend/src/pages/AdvancedSearchResultsPage.tsx @@ -3,7 +3,7 @@ import SettingsIcon from "@mui/icons-material/Settings"; import { Box, Button, Typography } from "@mui/material"; import { useSnackbar } from "notistack"; import React, { FC, useMemo, useState } from "react"; -import { Link, useHistory, useLocation } from "react-router-dom"; +import { Link, useLocation } from "react-router-dom"; import { useAsync } from "react-use"; import { advancedSearchPath, topPath } from "Routes"; @@ -25,7 +25,6 @@ import { extractAdvancedSearchParams } from "services/entry/AdvancedSearch"; export const AdvancedSearchResultsPage: FC = () => { const location = useLocation(); - const history = useHistory(); const { enqueueSnackbar } = useSnackbar(); const [page, changePage] = usePage(); @@ -33,6 +32,7 @@ export const AdvancedSearchResultsPage: FC = () => { const [bulkOperationEntryIds, setBulkOperationEntryIds] = useState< Array >([]); + const [toggle, setToggle] = useState(false); const { entityIds, @@ -60,7 +60,7 @@ export const AdvancedSearchResultsPage: FC = () => { searchAllEntities, page ); - }, [page]); + }, [page, toggle]); const maxPage = useMemo(() => { if (results.loading) { @@ -105,11 +105,8 @@ export const AdvancedSearchResultsPage: FC = () => { enqueueSnackbar("複数エントリの削除に成功しました", { variant: "success", }); - history.replace(topPath()); - history.replace({ - pathname: location.pathname, - search: location.search, - }); + setBulkOperationEntryIds([]); + setToggle(!toggle); } catch (e) { enqueueSnackbar("複数エントリの削除に失敗しました", { variant: "error",