From 33ca8a8acdc169b7f202a9256ee5ff89ceb44dc3 Mon Sep 17 00:00:00 2001 From: Benjamin Kane Date: Mon, 13 Jun 2022 15:25:54 -0400 Subject: [PATCH 1/3] reset active field only on dataset change --- app/packages/app/src/Root/Datasets/Dataset.tsx | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/app/packages/app/src/Root/Datasets/Dataset.tsx b/app/packages/app/src/Root/Datasets/Dataset.tsx index cce7f8843d..a0f86b0040 100644 --- a/app/packages/app/src/Root/Datasets/Dataset.tsx +++ b/app/packages/app/src/Root/Datasets/Dataset.tsx @@ -1,18 +1,19 @@ import { Route, RouterContext } from "@fiftyone/components"; +import { toCamelCase } from "@fiftyone/utilities"; import React, { useContext, useEffect } from "react"; import { graphql, usePreloadedQuery } from "react-relay"; +import { useRecoilValue } from "recoil"; import DatasetComponent from "../../components/Dataset"; import { useStateUpdate } from "../../utils/hooks"; import { DatasetQuery } from "./__generated__/DatasetQuery.graphql"; import { datasetName } from "../../recoil/selectors"; -import { useRecoilValue } from "recoil"; import transformDataset from "./transformDataset"; +import * as atoms from "../../recoil/atoms"; import { filters } from "../../recoil/filters"; import { _activeFields } from "../../recoil/schema"; import { State } from "../../recoil/types"; import { similarityParameters } from "../../components/Actions/Similar"; -import { toCamelCase } from "@fiftyone/utilities"; const Query = graphql` query DatasetQuery($name: String!, $view: JSONArray) { @@ -97,17 +98,24 @@ export const Dataset: Route = ({ prepared }) => { const update = useStateUpdate(); useEffect(() => { - update(({ reset }) => { + update(({ reset, get }) => { reset(filters); - reset(_activeFields({ modal: false })); reset(similarityParameters); + const newDataset = transformDataset(dataset); + + const oldDataset = get(atoms.dataset); + oldDataset && console.log(oldDataset.id, newDataset.id); + if (!oldDataset || oldDataset.id !== newDataset.id) { + reset(_activeFields({ modal: false })); + } + return { colorscale: router.state.colorscale, config: router.state.config ? (toCamelCase(router.state.config) as State.Config) : undefined, - dataset: transformDataset(dataset), + dataset: newDataset, state: router.state.state, }; }); From ebf221e13a442a8fea1cf744b2c13cd745fc153e Mon Sep 17 00:00:00 2001 From: Benjamin Kane Date: Thu, 16 Jun 2022 10:08:40 -0400 Subject: [PATCH 2/3] rm log --- app/packages/app/src/Root/Datasets/Dataset.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/packages/app/src/Root/Datasets/Dataset.tsx b/app/packages/app/src/Root/Datasets/Dataset.tsx index a0f86b0040..a4f2941ff6 100644 --- a/app/packages/app/src/Root/Datasets/Dataset.tsx +++ b/app/packages/app/src/Root/Datasets/Dataset.tsx @@ -103,9 +103,7 @@ export const Dataset: Route = ({ prepared }) => { reset(similarityParameters); const newDataset = transformDataset(dataset); - const oldDataset = get(atoms.dataset); - oldDataset && console.log(oldDataset.id, newDataset.id); if (!oldDataset || oldDataset.id !== newDataset.id) { reset(_activeFields({ modal: false })); } From 81b0953addd1b6b11854df796bb64acce028989d Mon Sep 17 00:00:00 2001 From: Benjamin Kane Date: Mon, 20 Jun 2022 09:46:46 -0400 Subject: [PATCH 3/3] address feedback, fix patches --- app/packages/app/src/Root/Datasets/Dataset.tsx | 12 ++---------- app/packages/app/src/utils/hooks.ts | 12 +++++++++--- fiftyone/server/query.py | 6 ++---- 3 files changed, 13 insertions(+), 17 deletions(-) diff --git a/app/packages/app/src/Root/Datasets/Dataset.tsx b/app/packages/app/src/Root/Datasets/Dataset.tsx index a4f2941ff6..d0085586cd 100644 --- a/app/packages/app/src/Root/Datasets/Dataset.tsx +++ b/app/packages/app/src/Root/Datasets/Dataset.tsx @@ -9,9 +9,7 @@ import { useStateUpdate } from "../../utils/hooks"; import { DatasetQuery } from "./__generated__/DatasetQuery.graphql"; import { datasetName } from "../../recoil/selectors"; import transformDataset from "./transformDataset"; -import * as atoms from "../../recoil/atoms"; import { filters } from "../../recoil/filters"; -import { _activeFields } from "../../recoil/schema"; import { State } from "../../recoil/types"; import { similarityParameters } from "../../components/Actions/Similar"; @@ -98,22 +96,16 @@ export const Dataset: Route = ({ prepared }) => { const update = useStateUpdate(); useEffect(() => { - update(({ reset, get }) => { + update(({ reset }) => { reset(filters); reset(similarityParameters); - const newDataset = transformDataset(dataset); - const oldDataset = get(atoms.dataset); - if (!oldDataset || oldDataset.id !== newDataset.id) { - reset(_activeFields({ modal: false })); - } - return { colorscale: router.state.colorscale, config: router.state.config ? (toCamelCase(router.state.config) as State.Config) : undefined, - dataset: newDataset, + dataset: transformDataset(dataset), state: router.state.state, }; }); diff --git a/app/packages/app/src/utils/hooks.ts b/app/packages/app/src/utils/hooks.ts index 13561f6c82..b6b5af6ce2 100644 --- a/app/packages/app/src/utils/hooks.ts +++ b/app/packages/app/src/utils/hooks.ts @@ -38,6 +38,7 @@ import { getDatasetName } from "./generic"; import { RouterContext } from "@fiftyone/components"; import { RGB } from "@fiftyone/looker"; import { DatasetQuery } from "../Root/Datasets/__generated__/DatasetQuery.graphql"; +import { _activeFields } from "../recoil/schema"; export const useEventHandler = ( target, @@ -310,7 +311,7 @@ export const useStateUpdate = () => { const { colorscale, config, dataset, state } = resolve instanceof Function ? resolve(t) : resolve; - const { get, set } = t; + const { get, reset, set } = t; if (state) { const view = get(viewAtoms.view); @@ -351,9 +352,9 @@ export const useStateUpdate = () => { dataset.evaluations = Object.values(dataset.evaluations || {}); const groups = resolveGroups(dataset); - const current = get(sidebarGroupsDefinition(false)); + const currentSidebar = get(sidebarGroupsDefinition(false)); - if (JSON.stringify(groups) !== JSON.stringify(current)) { + if (JSON.stringify(groups) !== JSON.stringify(currentSidebar)) { set(sidebarGroupsDefinition(false), groups); set( aggregationAtoms.aggregationsTick, @@ -361,6 +362,11 @@ export const useStateUpdate = () => { ); } + const previousDataset = get(atoms.dataset); + if (!previousDataset || previousDataset.id !== dataset.id) { + reset(_activeFields({ modal: false })); + } + set(atoms.dataset, dataset); } diff --git a/fiftyone/server/query.py b/fiftyone/server/query.py index f76e4f3952..f94bec5d62 100644 --- a/fiftyone/server/query.py +++ b/fiftyone/server/query.py @@ -175,9 +175,7 @@ async def resolver( view = fov.DatasetView._build(ds, view or []) if view._dataset != ds: d = view._dataset._serialize() - dataset.id = ( - ObjectId() - ) # if it is not the root dataset, change the id (relay requires it) + dataset.id = view._dataset._doc.id dataset.media_type = d["media_type"] dataset.sample_fields = [ from_dict(SampleField, s) @@ -285,7 +283,7 @@ def serialize_dataset(dataset: fod.Dataset, view: fov.DatasetView) -> t.Dict: if view is not None and view._dataset != dataset: d = view._dataset._serialize() data.media_type = d["media_type"] - data.id = ObjectId() + data.id = view._dataset._doc.id data.sample_fields = [ from_dict(SampleField, s) for s in _flatten_fields([], d["sample_fields"])