Skip to content

Commit

Permalink
Sync dataset name with datasource in add remote view (#8245)
Browse files Browse the repository at this point in the history
* sync dataset name with datasource in add remote view

* add changelog entry

* make syncing simple to advanced tab more robust

* add comment explaining when syncing datasetNames is needed and when not

* use TS nullish coalescing operator instead of if

* make missing occurences of syncDataSourceFields also sync dataset name

---------

Co-authored-by: Michael Büßemeyer <[email protected]>
  • Loading branch information
MichaelBuessemeyer and Michael Büßemeyer authored Nov 29, 2024
1 parent 0a4ff64 commit ec72322
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 5 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.unreleased.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ For upgrade instructions, please check the [migration guide](MIGRATIONS.released
- Fix performance bottleneck when deleting a lot of trees at once. [#8176](https://github.com/scalableminds/webknossos/pull/8176)
- Fix that listing datasets with the `api/datasets` route without compression failed due to missing permissions regarding public datasets. [#8249](https://github.com/scalableminds/webknossos/pull/8249)
- Fix a bug where changing the color of a segment via the menu in the segments tab would update the segment color of the previous segment, on which the context menu was opened. [#8225](https://github.com/scalableminds/webknossos/pull/8225)
- Fix a bug where in the add remote dataset view the dataset name setting was not in sync with the datasource setting of the advanced tab making the form not submittable. [#8245](https://github.com/scalableminds/webknossos/pull/8245)
- Fix a bug when importing an NML with groups when only groups but no trees exist in an annotation. [#8176](https://github.com/scalableminds/webknossos/pull/8176)
- Fix a bug where trying to delete a non-existing node (via the API, for example) would delete the whole active tree. [#8176](https://github.com/scalableminds/webknossos/pull/8176)
- Fix a bug where dataset uploads would fail if the organization directory on disk is missing. [#8230](https://github.com/scalableminds/webknossos/pull/8230)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -252,13 +252,13 @@ function DatasetAddRemoteView(props: Props) {
form.setFieldsValue({ dataSourceJson });
// Since this function sets the JSON string, we have to update the
// data which is rendered by the "simple" page.
syncDataSourceFields(form, "simple");
syncDataSourceFields(form, "simple", true);
form.validateFields();
};

async function handleStoreDataset() {
// Sync simple with advanced and get newest datasourceJson
syncDataSourceFields(form, dataSourceEditMode === "simple" ? "advanced" : "simple");
syncDataSourceFields(form, dataSourceEditMode === "simple" ? "advanced" : "simple", true);
try {
await form.validateFields();
} catch (_e) {
Expand Down Expand Up @@ -376,7 +376,7 @@ function DatasetAddRemoteView(props: Props) {
form={form}
activeDataSourceEditMode={dataSourceEditMode}
onChange={(activeEditMode) => {
syncDataSourceFields(form, activeEditMode);
syncDataSourceFields(form, activeEditMode, true);
form.validateFields();
setDataSourceEditMode(activeEditMode);
}}
Expand Down Expand Up @@ -515,7 +515,7 @@ function AddRemoteLayer({
}

// Sync simple with advanced and get newest datasourceJson
syncDataSourceFields(form, dataSourceEditMode === "simple" ? "advanced" : "simple");
syncDataSourceFields(form, dataSourceEditMode === "simple" ? "advanced" : "simple", true);
const datasourceConfigStr = form.getFieldValue("dataSourceJson");
const datastoreToUse = uploadableDatastores.find(
(datastore) => form.getFieldValue("datastoreUrl") === datastore.url,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,16 @@ import { type APIDataLayer, type APIDataset, APIJobType } from "types/api_flow_t
import { useStartAndPollJob } from "admin/job/job_hooks";
import { AllUnits, LongUnitToShortUnitMap, type Vector3 } from "oxalis/constants";
import Toast from "libs/toast";
import type { ArbitraryObject } from "types/globals";

const FormItem = Form.Item;

export const syncDataSourceFields = (
form: FormInstance,
syncTargetTabKey: "simple" | "advanced",
// Syncing the dataset name is optional as this is needed for the add remote view, but not for the edit view.
// In the edit view, the datasource.id fields should never be changed and the backend will automatically ignore all changes to the id field.
syncDatasetName = false,
): void => {
if (!form) {
return;
Expand All @@ -47,12 +51,25 @@ export const syncDataSourceFields = (
if (syncTargetTabKey === "advanced") {
// Copy from simple to advanced: update json
const dataSourceFromSimpleTab = form.getFieldValue("dataSource");
if (syncDatasetName && dataSourceFromSimpleTab) {
dataSourceFromSimpleTab.id ??= {};
dataSourceFromSimpleTab.id.name = form.getFieldValue(["dataset", "name"]);
}
form.setFieldsValue({
dataSourceJson: jsonStringify(dataSourceFromSimpleTab),
});
} else {
const dataSourceFromAdvancedTab = parseMaybe(form.getFieldValue("dataSourceJson"));
const dataSourceFromAdvancedTab = parseMaybe(
form.getFieldValue("dataSourceJson"),
) as ArbitraryObject | null;
// Copy from advanced to simple: update form values
if (syncDatasetName && dataSourceFromAdvancedTab?.id?.name) {
form.setFieldsValue({
dataset: {
name: dataSourceFromAdvancedTab.id.name,
},
});
}
form.setFieldsValue({
dataSource: dataSourceFromAdvancedTab,
});
Expand Down

0 comments on commit ec72322

Please sign in to comment.