Skip to content

Commit

Permalink
Merge branch 'master' into ds-extent-tooltip
Browse files Browse the repository at this point in the history
  • Loading branch information
knollengewaechs committed Nov 29, 2024
2 parents 93e0203 + 991ca91 commit dc4b3c5
Show file tree
Hide file tree
Showing 5 changed files with 36 additions and 5 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.unreleased.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,9 @@ 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)
- Added missing legacy support for `isValidNewName` route. [#8252](https://github.com/scalableminds/webknossos/pull/8252)
- 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
8 changes: 8 additions & 0 deletions app/controllers/LegacyApiController.scala
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,14 @@ class LegacyApiController @Inject()(annotationController: AnnotationController,

/* provide v8 */

def isValidNewNameV8(datasetName: String, organizationId: String): Action[AnyContent] = sil.SecuredAction.async {
implicit request =>
for {
_ <- Fox.successful(logVersioned(request))
result <- datasetController.isValidNewName(datasetName)(request)
} yield result
}

def readDatasetV8(organizationId: String, datasetName: String, sharingToken: Option[String]): Action[AnyContent] =
sil.UserAwareAction.async { implicit request =>
for {
Expand Down
4 changes: 4 additions & 0 deletions conf/webknossos.versioned.routes
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
PATCH /v8/datasets/:organizationId/:datasetName controllers.LegacyApiController.updateDatasetV8(organizationId: String, datasetName: String)
GET /v8/datasets/:organizationId/:datasetName/sharingToken controllers.LegacyApiController.getDatasetSharingTokenV8(organizationId: String, datasetName: String)
PATCH /v8/datasets/:organizationId/:datasetName/teams controllers.LegacyApiController.updateDatasetTeamsV8(organizationId: String, datasetName: String)
GET /v8/datasets/:organizationId/:datasetName/isValidNewName controllers.LegacyApiController.isValidNewNameV8(datasetName: String, organizationId: String)
GET /v8/datasets/:organizationId/:datasetName controllers.LegacyApiController.readDatasetV8(organizationId: String, datasetName: String, sharingToken: Option[String])
GET /v8/tasks/:id controllers.LegacyApiController.readTaskV8(id: String)
POST /v8/tasks controllers.LegacyApiController.createTaskV8()
Expand All @@ -33,6 +34,7 @@ GET /v8/tasks/:id/annotations co
PATCH /v7/datasets/:organizationId/:datasetName controllers.LegacyApiController.updateDatasetV8(organizationId: String, datasetName: String)
GET /v7/datasets/:organizationId/:datasetName/sharingToken controllers.LegacyApiController.getDatasetSharingTokenV8(organizationId: String, datasetName: String)
PATCH /v7/datasets/:organizationId/:datasetName/teams controllers.LegacyApiController.updateDatasetTeamsV8(organizationId: String, datasetName: String)
GET /v7/datasets/:organizationId/:datasetName/isValidNewName controllers.LegacyApiController.isValidNewNameV8(datasetName: String, organizationId: String)
GET /v7/datasets/:organizationId/:datasetName controllers.LegacyApiController.readDatasetV8(organizationId: String, datasetName: String, sharingToken: Option[String])
GET /v7/tasks/:id controllers.LegacyApiController.readTaskV8(id: String)
POST /v7/tasks controllers.LegacyApiController.createTaskV8()
Expand All @@ -50,6 +52,7 @@ GET /v7/datasets co
PATCH /v6/datasets/:organizationId/:datasetName controllers.LegacyApiController.updateDatasetV8(organizationId: String, datasetName: String)
GET /v6/datasets/:organizationId/:datasetName/sharingToken controllers.LegacyApiController.getDatasetSharingTokenV8(organizationId: String, datasetName: String)
PATCH /v6/datasets/:organizationId/:datasetName/teams controllers.LegacyApiController.updateDatasetTeamsV8(organizationId: String, datasetName: String)
GET /v6/datasets/:organizationId/:datasetName/isValidNewName controllers.LegacyApiController.isValidNewNameV8(datasetName: String, organizationId: String)
GET /v6/tasks/:id controllers.LegacyApiController.readTaskV8(id: String)
POST /v6/tasks controllers.LegacyApiController.createTaskV8()
PUT /v6/tasks/:id controllers.LegacyApiController.updateTaskV8(id: String)
Expand All @@ -69,6 +72,7 @@ GET /v6/datasets/:organizationName/:datasetName co
PATCH /v5/datasets/:organizationId/:datasetName controllers.LegacyApiController.updateDatasetV8(organizationId: String, datasetName: String)
GET /v5/datasets/:organizationId/:datasetName/sharingToken controllers.LegacyApiController.getDatasetSharingTokenV8(organizationId: String, datasetName: String)
PATCH /v5/datasets/:organizationId/:datasetName/teams controllers.LegacyApiController.updateDatasetTeamsV8(organizationId: String, datasetName: String)
GET /v5/datasets/:organizationId/:datasetName/isValidNewName controllers.LegacyApiController.isValidNewNameV8(datasetName: String, organizationId: String)
GET /v5/tasks/:id controllers.LegacyApiController.readTaskV8(id: String)
POST /v5/tasks controllers.LegacyApiController.createTaskV8()
PUT /v5/tasks/:id controllers.LegacyApiController.updateTaskV8(id: String)
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 dc4b3c5

Please sign in to comment.