From 8ab7b3e5e8a0636fbe1c8dec6edb9825c9f12886 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20B=C3=BC=C3=9Femeyer?= Date: Thu, 9 Jan 2025 13:49:07 +0100 Subject: [PATCH] sort imports --- frontend/javascripts/admin/admin_rest_api.ts | 100 +++---- frontend/javascripts/admin/api/folders.ts | 2 +- frontend/javascripts/admin/api/jobs.ts | 6 +- frontend/javascripts/admin/api/tasks.ts | 18 +- frontend/javascripts/admin/api/token.ts | 2 +- .../admin/auth/accept_invite_view.tsx | 14 +- .../admin/auth/auth_token_view.tsx | 6 +- .../admin/auth/authentication_modal.tsx | 14 +- .../admin/auth/change_password_view.tsx | 6 +- .../admin/auth/finish_reset_password_view.tsx | 6 +- .../javascripts/admin/auth/login_form.tsx | 12 +- .../javascripts/admin/auth/login_view.tsx | 4 +- .../admin/auth/registration_form_generic.tsx | 18 +- .../admin/auth/registration_form_wkorg.tsx | 14 +- .../admin/auth/registration_view.tsx | 14 +- .../admin/auth/start_reset_password_view.tsx | 6 +- .../admin/auth/verify_email_view.tsx | 8 +- .../composition_wizard/02_upload_files.tsx | 8 +- .../composition_wizard/03_select_datasets.tsx | 4 +- .../04_configure_new_dataset.tsx | 10 +- .../dataset/composition_wizard/common.ts | 2 +- .../admin/dataset/dataset_add_remote_view.tsx | 48 ++-- .../admin/dataset/dataset_add_view.tsx | 22 +- .../admin/dataset/dataset_components.tsx | 10 +- .../admin/dataset/dataset_upload_view.tsx | 92 +++---- .../admin/dataset/dataset_url_import.tsx | 2 +- .../admin/datastore_health_check.ts | 4 +- frontend/javascripts/admin/job/job_hooks.ts | 4 +- .../javascripts/admin/job/job_list_view.tsx | 30 +-- frontend/javascripts/admin/onboarding.tsx | 38 +-- .../admin/organization/organization_cards.tsx | 4 +- .../organization/organization_edit_view.tsx | 22 +- .../admin/organization/upgrade_plan_modal.tsx | 18 +- .../admin/project/project_create_view.tsx | 16 +- .../admin/project/project_list_view.tsx | 50 ++-- .../project/transfer_all_tasks_modal.tsx | 14 +- .../admin/scripts/script_create_view.tsx | 20 +- .../admin/scripts/script_list_view.tsx | 16 +- .../statistic/available_tasks_report_view.tsx | 8 +- .../project_and_annotation_type_dropdown.tsx | 10 +- .../project_progress_report_view.tsx | 8 +- .../admin/statistic/team_selection_form.tsx | 4 +- .../statistic/time_tracking_detail_view.tsx | 10 +- .../statistic/time_tracking_overview.tsx | 28 +- .../admin/task/task_annotation_view.tsx | 38 +-- .../admin/task/task_create_bulk_view.tsx | 14 +- .../admin/task/task_create_form_view.tsx | 76 +++--- .../admin/task/task_create_view.tsx | 2 +- .../javascripts/admin/task/task_list_view.tsx | 34 +-- .../admin/task/task_search_form.tsx | 10 +- .../recommended_configuration_view.tsx | 12 +- .../admin/tasktype/task_type_create_view.tsx | 34 +-- .../admin/tasktype/task_type_list_view.tsx | 34 +-- .../admin/team/create_team_modal_view.tsx | 2 +- .../admin/team/edit_team_modal_view.tsx | 4 +- .../javascripts/admin/team/team_list_view.tsx | 20 +- .../admin/user/experience_modal_view.tsx | 10 +- .../user/permissions_and_teams_modal_view.tsx | 12 +- .../javascripts/admin/user/user_list_view.tsx | 48 ++-- .../admin/user/user_selection_component.tsx | 6 +- .../admin/voxelytics/ai_model_list_view.tsx | 22 +- .../voxelytics/artifacts_disk_usage_list.tsx | 8 +- .../admin/voxelytics/artifacts_view.tsx | 8 +- .../javascripts/admin/voxelytics/dag_view.tsx | 10 +- .../javascripts/admin/voxelytics/log_tab.tsx | 14 +- .../admin/voxelytics/statistics_tab.tsx | 14 +- .../admin/voxelytics/task_list_view.tsx | 72 ++--- .../admin/voxelytics/task_view.tsx | 4 +- .../admin/voxelytics/workflow_list_view.tsx | 22 +- .../admin/voxelytics/workflow_view.tsx | 16 +- frontend/javascripts/admin/welcome_ui.tsx | 8 +- frontend/javascripts/banners.tsx | 2 +- .../components/async_clickables.tsx | 2 +- .../javascripts/components/brain_spinner.tsx | 10 +- .../javascripts/components/color_picker.tsx | 6 +- .../components/disable_generic_dnd.ts | 2 +- frontend/javascripts/components/legal.tsx | 4 +- frontend/javascripts/components/loop.ts | 2 +- .../components/permission_enforcer.tsx | 2 +- .../components/pricing_enforcers.tsx | 20 +- frontend/javascripts/components/redirect.tsx | 4 +- .../javascripts/components/secured_route.tsx | 14 +- .../components/select_experience_domain.tsx | 2 +- .../components/terms_of_services_check.tsx | 12 +- .../components/text_with_description.tsx | 2 +- .../create_explorative_modal.tsx | 18 +- .../dataset_access_list_view.tsx | 6 +- .../advanced_dataset/dataset_action_view.tsx | 20 +- .../advanced_dataset/dataset_table.tsx | 60 ++--- .../dashboard/dashboard_task_list_view.tsx | 24 +- .../javascripts/dashboard/dashboard_view.tsx | 38 +-- .../color_layer_ordering_component.tsx | 8 +- .../dataset/dataset_collection_context.tsx | 24 +- .../dataset/dataset_settings_data_tab.tsx | 40 +-- .../dataset/dataset_settings_delete_tab.tsx | 8 +- .../dataset/dataset_settings_metadata_tab.tsx | 2 +- .../dataset/dataset_settings_sharing_tab.tsx | 26 +- .../dataset/dataset_settings_view.tsx | 62 ++--- .../dataset_settings_viewconfig_tab.tsx | 30 +-- .../dashboard/dataset/helper_components.tsx | 10 +- .../javascripts/dashboard/dataset/queries.tsx | 8 +- .../dataset/team_selection_component.tsx | 4 +- .../dashboard/dataset_folder_view.tsx | 12 +- .../javascripts/dashboard/dataset_view.tsx | 54 ++-- .../explorative_annotations_view.tsx | 92 +++---- .../dashboard/folders/details_sidebar.tsx | 16 +- .../dashboard/folders/folder_selection.tsx | 4 +- .../dashboard/folders/folder_tree.tsx | 10 +- .../dashboard/folders/metadata_table.tsx | 12 +- .../dashboard/publication_card.tsx | 18 +- .../dashboard/publication_details_view.tsx | 6 +- .../dashboard/publication_view.tsx | 12 +- .../dashboard/transfer_task_modal.tsx | 8 +- frontend/javascripts/libs/DRACOLoader.ts | 2 +- .../libs/async/debounced_abortable_saga.ts | 4 +- frontend/javascripts/libs/async/task_pool.ts | 2 +- .../libs/cuckoo/abstract_cuckoo_table.ts | 2 +- .../libs/cuckoo/cuckoo_table_uint32.ts | 2 +- .../libs/cuckoo/cuckoo_table_uint64.ts | 2 +- frontend/javascripts/libs/draco.ts | 2 +- frontend/javascripts/libs/error_handling.ts | 6 +- frontend/javascripts/libs/format_utils.ts | 20 +- frontend/javascripts/libs/gist.ts | 2 +- frontend/javascripts/libs/input.ts | 6 +- frontend/javascripts/libs/persistence.ts | 2 +- frontend/javascripts/libs/react_helpers.tsx | 6 +- frontend/javascripts/libs/react_hooks.ts | 2 +- .../javascripts/libs/render_independently.tsx | 4 +- frontend/javascripts/libs/request.ts | 10 +- .../javascripts/libs/shortcut_component.ts | 2 +- frontend/javascripts/libs/toast.tsx | 2 +- .../javascripts/libs/trackball_controls.ts | 2 +- frontend/javascripts/libs/utils.ts | 18 +- frontend/javascripts/libs/vector_input.tsx | 8 +- frontend/javascripts/libs/window.ts | 2 +- frontend/javascripts/main.tsx | 36 +-- frontend/javascripts/messages.tsx | 2 +- frontend/javascripts/navbar.tsx | 84 +++--- frontend/javascripts/oxalis/api/api_latest.ts | 250 +++++++++--------- frontend/javascripts/oxalis/api/api_loader.ts | 2 +- .../oxalis/api/cross_origin_api.ts | 2 +- .../javascripts/oxalis/api/internal_api.ts | 2 +- frontend/javascripts/oxalis/api/wk_dev.ts | 10 +- frontend/javascripts/oxalis/controller.tsx | 50 ++-- .../oxalis/controller/camera_controller.ts | 20 +- .../combinations/bounding_box_handlers.ts | 18 +- .../controller/combinations/move_handlers.ts | 14 +- .../combinations/segmentation_handlers.ts | 16 +- .../combinations/skeleton_handlers.ts | 54 ++-- .../controller/combinations/tool_controls.ts | 72 ++--- .../combinations/volume_handlers.ts | 14 +- .../oxalis/controller/custom_lod.ts | 4 +- .../controller/merger_mode_controller.tsx | 6 +- .../javascripts/oxalis/controller/renderer.ts | 2 +- .../oxalis/controller/scene_controller.ts | 2 +- .../controller/segment_mesh_controller.ts | 8 +- .../oxalis/controller/td_controller.tsx | 40 +-- .../oxalis/controller/url_manager.ts | 30 +-- .../viewmodes/arbitrary_controller.tsx | 58 ++-- .../controller/viewmodes/plane_controller.tsx | 102 +++---- frontend/javascripts/oxalis/default_state.ts | 8 +- .../oxalis/geometries/arbitrary_plane.ts | 8 +- .../oxalis/geometries/crosshair.ts | 2 +- .../javascripts/oxalis/geometries/cube.ts | 8 +- .../oxalis/geometries/helper_geometries.ts | 8 +- .../geometries/materials/edge_shader.ts | 12 +- .../geometries/materials/node_shader.ts | 16 +- .../materials/plane_material_factory.ts | 60 ++--- .../plane_material_factory_helpers.ts | 2 +- .../javascripts/oxalis/geometries/plane.ts | 10 +- .../javascripts/oxalis/geometries/skeleton.ts | 14 +- frontend/javascripts/oxalis/merger_mode.ts | 24 +- frontend/javascripts/oxalis/model.ts | 16 +- .../model/accessors/annotation_accessor.ts | 2 +- .../model/accessors/dataset_accessor.ts | 50 ++-- .../oxalis/model/accessors/flycam_accessor.ts | 42 +-- .../model/accessors/organization_accessors.ts | 2 +- .../oxalis/model/accessors/save_accessor.ts | 4 +- .../accessors/skeletontracing_accessor.ts | 30 +-- .../oxalis/model/accessors/tool_accessor.ts | 24 +- .../model/accessors/tracing_accessor.ts | 4 +- .../oxalis/model/accessors/user_accessor.ts | 4 +- .../model/accessors/view_mode_accessor.ts | 18 +- .../model/accessors/volumetracing_accessor.ts | 70 ++--- .../oxalis/model/actions/actions.ts | 8 +- .../model/actions/annotation_actions.ts | 20 +- .../oxalis/model/actions/flycam_actions.ts | 2 +- .../oxalis/model/actions/proofread_actions.ts | 2 +- .../oxalis/model/actions/save_actions.ts | 8 +- .../oxalis/model/actions/settings_actions.ts | 8 +- .../model/actions/skeletontracing_actions.tsx | 2 +- .../oxalis/model/actions/ui_actions.ts | 2 +- .../oxalis/model/actions/view_mode_actions.ts | 4 +- .../model/actions/volumetracing_actions.ts | 10 +- .../bucket_data_handling/bounding_box.ts | 4 +- .../model/bucket_data_handling/bucket.ts | 24 +- .../flight_bucket_picker.ts | 8 +- .../oblique_bucket_picker.ts | 10 +- .../bucket_data_handling/bucket_traversals.ts | 4 +- .../model/bucket_data_handling/data_cube.ts | 44 +-- .../data_rendering_logic.tsx | 6 +- .../layer_rendering_manager.ts | 38 +-- .../model/bucket_data_handling/mappings.ts | 20 +- .../prefetch_strategy_arbitrary.ts | 8 +- .../prefetch_strategy_plane.ts | 12 +- .../model/bucket_data_handling/pullqueue.ts | 6 +- .../model/bucket_data_handling/pushqueue.ts | 10 +- .../texture_bucket_manager.ts | 22 +- .../bucket_data_handling/wkstore_adapter.ts | 30 +-- .../oxalis/model/data_connection_info.ts | 2 +- .../javascripts/oxalis/model/data_layer.ts | 2 +- .../oxalis/model/edge_collection.ts | 4 +- .../model/helpers/action_logger_middleware.ts | 2 +- .../model/helpers/bucket_compression.ts | 2 +- .../compaction/compact_toggle_actions.ts | 4 +- .../compaction/compact_update_actions.ts | 6 +- .../oxalis/model/helpers/deep_update_test.ts | 2 +- .../oxalis/model/helpers/nml_helpers.ts | 50 ++-- .../helpers/overwrite_action_middleware.ts | 2 +- .../model/helpers/position_converter.ts | 2 +- .../oxalis/model/helpers/proto_helpers.ts | 8 +- .../oxalis/model/helpers/reduce_reducers.ts | 2 +- .../oxalis/model/helpers/shader_editor.ts | 2 +- .../model/reducers/annotation_reducer.ts | 14 +- .../model/reducers/connectome_reducer.ts | 8 +- .../oxalis/model/reducers/dataset_reducer.ts | 10 +- .../oxalis/model/reducers/flycam_reducer.ts | 12 +- .../oxalis/model/reducers/reducer_helpers.ts | 32 +-- .../oxalis/model/reducers/save_reducer.ts | 18 +- .../oxalis/model/reducers/settings_reducer.ts | 12 +- .../model/reducers/skeletontracing_reducer.ts | 56 ++-- .../skeletontracing_reducer_helpers.ts | 66 ++--- .../oxalis/model/reducers/ui_reducer.ts | 4 +- .../model/reducers/view_mode_reducer.ts | 4 +- .../model/reducers/volumetracing_reducer.ts | 74 +++--- .../reducers/volumetracing_reducer_helpers.ts | 20 +- .../oxalis/model/sagas/annotation_saga.tsx | 60 ++--- .../model/sagas/annotation_tool_saga.ts | 14 +- .../oxalis/model/sagas/clip_histogram_saga.ts | 12 +- .../oxalis/model/sagas/dataset_saga.ts | 16 +- .../oxalis/model/sagas/effect-generators.ts | 4 +- .../model/sagas/load_histogram_data_saga.ts | 12 +- .../oxalis/model/sagas/mapping_saga.ts | 104 ++++---- .../oxalis/model/sagas/mesh_saga.ts | 106 ++++---- .../oxalis/model/sagas/min_cut_saga.ts | 28 +- .../oxalis/model/sagas/prefetch_saga.ts | 26 +- .../oxalis/model/sagas/proofread_saga.ts | 112 ++++---- .../sagas/quick_select_heuristic_saga.ts | 38 +-- .../model/sagas/quick_select_ml_saga.ts | 24 +- .../oxalis/model/sagas/quick_select_saga.ts | 14 +- .../oxalis/model/sagas/root_saga.ts | 28 +- .../oxalis/model/sagas/saga_helpers.ts | 8 +- .../oxalis/model/sagas/saga_selectors.ts | 10 +- .../oxalis/model/sagas/settings_saga.ts | 14 +- .../model/sagas/skeletontracing_saga.ts | 116 ++++---- .../oxalis/model/sagas/task_saga.tsx | 30 +-- .../oxalis/model/sagas/undo_saga.ts | 8 +- .../oxalis/model/sagas/update_actions.ts | 12 +- .../oxalis/model/sagas/user_saga.ts | 2 +- .../model/sagas/volume/floodfill_saga.tsx | 6 +- .../oxalis/model/sagas/volume/helpers.ts | 16 +- .../sagas/volume/volume_interpolation_saga.ts | 2 +- .../oxalis/model/sagas/volumetracing_saga.tsx | 6 +- .../volume_annotation_sampling.ts | 8 +- .../oxalis/model/volumetracing/volumelayer.ts | 20 +- .../oxalis/model_initialization.ts | 134 +++++----- .../javascripts/oxalis/shaders/coords.glsl.ts | 2 +- .../oxalis/shaders/main_data_shaders.glsl.ts | 44 +-- .../oxalis/shaders/segmentation.glsl.ts | 14 +- .../oxalis/shaders/texture_access.glsl.ts | 2 +- frontend/javascripts/oxalis/store.ts | 98 +++---- .../javascripts/oxalis/throttled_store.ts | 6 +- .../action-bar/create_animation_modal.tsx | 36 +-- .../view/action-bar/dataset_position_view.tsx | 26 +- .../view/action-bar/download_modal_view.tsx | 84 +++--- .../view/action-bar/merge_modal_view.tsx | 34 +-- .../view/action-bar/private_links_view.tsx | 42 +-- .../view/action-bar/quick_select_settings.tsx | 20 +- .../oxalis/view/action-bar/save_button.tsx | 22 +- .../view/action-bar/share_modal_view.tsx | 68 ++--- .../share_view_dataset_modal_view.tsx | 6 +- .../view/action-bar/starting_job_modals.tsx | 82 +++--- .../oxalis/view/action-bar/toolbar_view.tsx | 114 ++++---- .../view/action-bar/tracing_actions_view.tsx | 78 +++--- .../action-bar/user_scripts_modal_view.tsx | 12 +- .../action-bar/view_dataset_actions_view.tsx | 22 +- .../view/action-bar/view_modes_view.tsx | 16 +- .../oxalis/view/action_bar_view.tsx | 56 ++-- .../javascripts/oxalis/view/arbitrary_view.ts | 28 +- .../view/components/border_toggle_button.tsx | 8 +- .../view/components/button_component.tsx | 4 +- .../view/components/categorization_label.tsx | 4 +- .../view/components/checkbox_component.tsx | 2 +- .../view/components/editable_text_label.tsx | 8 +- .../view/components/input_component.tsx | 4 +- .../oxalis/view/components/markdown_modal.tsx | 2 +- .../view/components/setting_input_views.tsx | 38 +-- .../javascripts/oxalis/view/context_menu.tsx | 200 +++++++------- .../view/distance_measurement_tooltip.tsx | 32 +-- .../javascripts/oxalis/view/help_modal.tsx | 2 +- .../javascripts/oxalis/view/input_catcher.tsx | 12 +- .../oxalis/view/jobs/train_ai_model.tsx | 60 ++--- .../oxalis/view/largest_segment_id_modal.tsx | 18 +- .../view/layouting/default_layout_configs.ts | 16 +- .../view/layouting/flex_layout_helper.ts | 2 +- .../view/layouting/flex_layout_wrapper.tsx | 46 ++-- .../view/layouting/layout_canvas_adapter.ts | 2 +- .../view/layouting/layout_persistence.ts | 10 +- .../oxalis/view/layouting/portal_utils.tsx | 2 +- .../view/layouting/tracing_layout_view.tsx | 6 +- .../controls_and_rendering_settings_tab.tsx | 46 ++-- .../view/left-border-tabs/histogram_view.tsx | 18 +- .../left-border-tabs/layer_settings_tab.tsx | 162 ++++++------ .../mapping_settings_view.tsx | 32 +-- .../modals/add_volume_layer_modal.tsx | 26 +- .../modals/downsample_volume_modal.tsx | 4 +- .../oxalis/view/merger_mode_modal_view.tsx | 2 +- .../view/new_task_description_modal.tsx | 2 +- .../oxalis/view/nml_upload_zone_container.tsx | 14 +- .../01-present-modern-controls.tsx | 8 +- .../novel_user_experiences/welcome_toast.tsx | 4 +- .../javascripts/oxalis/view/plane_view.ts | 30 +-- .../view/recommended_configuration_modal.tsx | 6 +- .../oxalis/view/recording_switch.tsx | 4 +- .../oxalis/view/remove_tree_modal.tsx | 8 +- .../oxalis/view/rendering_utils.ts | 8 +- .../abstract_tree_renderer.ts | 4 +- .../right-border-tabs/abstract_tree_tab.tsx | 10 +- .../advanced_search_popover.tsx | 8 +- .../right-border-tabs/bounding_box_tab.tsx | 30 +-- .../right-border-tabs/comment_tab/comment.tsx | 4 +- .../comment_tab/comment_tab_view.tsx | 38 +-- .../connectome_tab/connectome_filters.tsx | 8 +- .../connectome_tab/connectome_settings.tsx | 22 +- .../connectome_tab/connectome_view.tsx | 72 ++--- .../connectome_tab/synapse_tree.tsx | 12 +- .../dataset_info_tab_view.tsx | 36 +-- .../delete_group_modal_view.tsx | 2 +- .../view/right-border-tabs/metadata_table.tsx | 8 +- .../scrollable_virtualized_tree.tsx | 2 +- .../segments_tab/segment_list_item.tsx | 52 ++-- .../segments_tab/segment_statistics_modal.tsx | 24 +- .../segments_tab/segments_view.tsx | 20 +- .../segments_tab/segments_view_helper.tsx | 14 +- .../tree_hierarchy_view_helpers.ts | 2 +- .../trees_tab/skeleton_tab_view.tsx | 120 ++++----- .../trees_tab/tree_hierarchy_renderers.tsx | 12 +- .../trees_tab/tree_hierarchy_view.tsx | 26 +- frontend/javascripts/oxalis/view/scalebar.tsx | 12 +- .../javascripts/oxalis/view/statusbar.tsx | 46 ++-- .../oxalis/view/td_view_controls.tsx | 32 +-- .../javascripts/oxalis/view/tracing_view.tsx | 6 +- .../javascripts/oxalis/view/version_entry.tsx | 40 +-- .../oxalis/view/version_entry_group.tsx | 8 +- .../javascripts/oxalis/view/version_list.tsx | 34 +-- .../javascripts/oxalis/view/version_view.tsx | 8 +- .../oxalis/view/viewport_status_indicator.tsx | 8 +- .../workers/async_bucket_picker.worker.ts | 2 +- .../byte_array_lz4_compression.worker.ts | 2 +- .../slow_byte_array_lz4_compression.worker.ts | 2 +- frontend/javascripts/router.tsx | 20 +- frontend/javascripts/theme.tsx | 12 +- frontend/javascripts/types/api_flow_types.ts | 38 +-- .../dataset_view_configuration.schema.ts | 2 +- .../dataset_view_configuration_defaults.ts | 6 +- .../types/schemas/user_settings.schema.ts | 6 +- frontend/javascripts/types/validation.ts | 4 +- 367 files changed, 3883 insertions(+), 3883 deletions(-) diff --git a/frontend/javascripts/admin/admin_rest_api.ts b/frontend/javascripts/admin/admin_rest_api.ts index e499afbfb44..713fb053ca3 100644 --- a/frontend/javascripts/admin/admin_rest_api.ts +++ b/frontend/javascripts/admin/admin_rest_api.ts @@ -1,32 +1,64 @@ -import ResumableJS from "resumablejs"; -import _ from "lodash"; import dayjs from "dayjs"; +import { V3 } from "libs/mjs"; +import type { RequestOptions } from "libs/request"; +import Request from "libs/request"; +import type { Message } from "libs/toast"; +import Toast from "libs/toast"; +import * as Utils from "libs/utils"; +import window, { location } from "libs/window"; +import _ from "lodash"; +import messages from "messages"; +import type { AnnotationTypeFilterEnum, LOG_LEVELS, Vector2, Vector3 } from "oxalis/constants"; +import Constants, { ControlModeEnum, AnnotationStateFilterEnum } from "oxalis/constants"; +import type { SaveQueueType } from "oxalis/model/actions/save_actions"; +import type BoundingBox from "oxalis/model/bucket_data_handling/bounding_box"; +import { + parseProtoListOfLong, + parseProtoTracing, + serializeProtoListOfLong, +} from "oxalis/model/helpers/proto_helpers"; +import type { + DatasetConfiguration, + Mapping, + MappingType, + NumberLike, + PartialDatasetConfiguration, + TraceOrViewCommand, + Tracing, + UserConfiguration, + VolumeTracing, +} from "oxalis/store"; +import type { Versions } from "oxalis/view/version_view"; +import ResumableJS from "resumablejs"; import type { APIAnnotation, APIAnnotationInfo, APIAnnotationType, APIAnnotationVisibility, + APIAvailableTasksReport, APIBuildInfo, + APICompoundType, APIConnectomeFile, APIDataSource, + APIDataSourceId, APIDataStore, APIDataset, - APIDataSourceId, + APIDatasetCompact, APIFeatureToggles, APIHistogramData, + APIMagRestrictions, APIMapping, APIMaybeUnimportedDataset, APIMeshFile, - APIAvailableTasksReport, APIOrganization, APIOrganizationCompact, + APIPricingPlanStatus, APIProject, APIProjectCreator, APIProjectProgressReport, APIProjectUpdater, APIProjectWithStatus, APIPublication, - APIMagRestrictions, APIScript, APIScriptCreator, APIScriptUpdater, @@ -34,70 +66,38 @@ import type { APITeam, APITimeInterval, APITimeTrackingPerAnnotation, + APITimeTrackingPerUser, APITimeTrackingSpan, APITracingStore, APIUpdateActionBatch, APIUser, + APIUserCompact, APIUserLoggedTime, APIUserTheme, + AdditionalCoordinate, AnnotationLayerDescriptor, AnnotationViewConfiguration, EditableLayerProperties, ExperienceDomainList, + LayerLink, + MaintenanceInfo, + ServerEditableMapping, ServerTracing, + ShortLink, TracingType, - ServerEditableMapping, - APICompoundType, - ZarrPrivateLink, - VoxelyticsWorkflowReport, + VoxelSize, VoxelyticsChunkStatistics, - ShortLink, - VoxelyticsWorkflowListing, - APIPricingPlanStatus, VoxelyticsLogLine, - APIUserCompact, - APIDatasetCompact, - MaintenanceInfo, - AdditionalCoordinate, - LayerLink, - VoxelSize, - APITimeTrackingPerUser, + VoxelyticsWorkflowListing, + VoxelyticsWorkflowReport, + ZarrPrivateLink, } from "types/api_flow_types"; -import type { AnnotationTypeFilterEnum, LOG_LEVELS, Vector2, Vector3 } from "oxalis/constants"; -import Constants, { ControlModeEnum, AnnotationStateFilterEnum } from "oxalis/constants"; -import type { - DatasetConfiguration, - PartialDatasetConfiguration, - Tracing, - TraceOrViewCommand, - MappingType, - VolumeTracing, - UserConfiguration, - Mapping, - NumberLike, -} from "oxalis/store"; -import { V3 } from "libs/mjs"; -import type { Versions } from "oxalis/view/version_view"; +import type { ArbitraryObject } from "types/globals"; import { enforceValidatedDatasetViewConfiguration } from "types/schemas/dataset_view_configuration_defaults"; -import { - parseProtoListOfLong, - parseProtoTracing, - serializeProtoListOfLong, -} from "oxalis/model/helpers/proto_helpers"; -import type { RequestOptions } from "libs/request"; -import Request from "libs/request"; -import type { Message } from "libs/toast"; -import Toast from "libs/toast"; -import * as Utils from "libs/utils"; -import messages from "messages"; -import window, { location } from "libs/window"; -import type { SaveQueueType } from "oxalis/model/actions/save_actions"; import type { DatasourceConfiguration } from "types/schemas/datasource.types"; -import { doWithToken } from "./api/token"; -import type BoundingBox from "oxalis/model/bucket_data_handling/bounding_box"; -import type { ArbitraryObject } from "types/globals"; import { assertResponseLimit } from "./api/api_utils"; import { getDatasetIdFromNameAndOrganization } from "./api/disambiguate_legacy_routes"; +import { doWithToken } from "./api/token"; export * from "./api/token"; export * from "./api/jobs"; diff --git a/frontend/javascripts/admin/api/folders.ts b/frontend/javascripts/admin/api/folders.ts index 26fe25bbd00..f57bf4dea47 100644 --- a/frontend/javascripts/admin/api/folders.ts +++ b/frontend/javascripts/admin/api/folders.ts @@ -1,5 +1,5 @@ import Request from "libs/request"; -import type { Folder, FlatFolderTreeItem, FolderUpdater } from "types/api_flow_types"; +import type { FlatFolderTreeItem, Folder, FolderUpdater } from "types/api_flow_types"; export function getFolder(folderId: string): Promise { return Request.receiveJSON(`/api/folders/${folderId}`); diff --git a/frontend/javascripts/admin/api/jobs.ts b/frontend/javascripts/admin/api/jobs.ts index 3327d61884f..afb434a1699 100644 --- a/frontend/javascripts/admin/api/jobs.ts +++ b/frontend/javascripts/admin/api/jobs.ts @@ -3,13 +3,13 @@ import { location } from "libs/window"; import type { UnitLong, Vector3, Vector6 } from "oxalis/constants"; import type { APIAnnotationType, + APIEffectiveJobState, APIJob, - APIJobState, APIJobManualState, - APIEffectiveJobState, + APIJobState, + AdditionalCoordinate, AiModel, RenderAnimationOptions, - AdditionalCoordinate, } from "types/api_flow_types"; import { assertResponseLimit } from "./api_utils"; diff --git a/frontend/javascripts/admin/api/tasks.ts b/frontend/javascripts/admin/api/tasks.ts index cbcf87a108b..c5e5b16a253 100644 --- a/frontend/javascripts/admin/api/tasks.ts +++ b/frontend/javascripts/admin/api/tasks.ts @@ -1,21 +1,21 @@ +import { finishAnnotation } from "admin/admin_rest_api"; import type { - APIActiveUser, - APIAnnotation, - APIAnnotationWithTask, - APITask, -} from "types/api_flow_types"; -import { APIAnnotationTypeEnum } from "types/api_flow_types"; -import type { - NewTask, NewNmlTask, + NewTask, TaskCreationResponseContainer, } from "admin/task/task_create_bulk_view"; import type { QueryObject } from "admin/task/task_search_form"; import type { RequestOptions } from "libs/request"; import Request from "libs/request"; import * as Utils from "libs/utils"; +import type { + APIActiveUser, + APIAnnotation, + APIAnnotationWithTask, + APITask, +} from "types/api_flow_types"; +import { APIAnnotationTypeEnum } from "types/api_flow_types"; import { assertResponseLimit } from "./api_utils"; -import { finishAnnotation } from "admin/admin_rest_api"; export function peekNextTasks(): Promise { return Request.receiveJSON("/api/user/tasks/peek"); diff --git a/frontend/javascripts/admin/api/token.ts b/frontend/javascripts/admin/api/token.ts index 3a430d55756..43db8c33abc 100644 --- a/frontend/javascripts/admin/api/token.ts +++ b/frontend/javascripts/admin/api/token.ts @@ -1,6 +1,6 @@ -import { location } from "libs/window"; import Request from "libs/request"; import * as Utils from "libs/utils"; +import { location } from "libs/window"; const MAX_TOKEN_RETRY_ATTEMPTS = 3; diff --git a/frontend/javascripts/admin/auth/accept_invite_view.tsx b/frontend/javascripts/admin/auth/accept_invite_view.tsx index b99bd3acf45..73eff347252 100644 --- a/frontend/javascripts/admin/auth/accept_invite_view.tsx +++ b/frontend/javascripts/admin/auth/accept_invite_view.tsx @@ -1,18 +1,18 @@ -import { Button, Result, Layout, Spin } from "antd"; import { GiftTwoTone } from "@ant-design/icons"; -import { useHistory } from "react-router-dom"; -import { AsyncButton } from "components/async_clickables"; -import { useState } from "react"; -import AuthenticationModal from "admin/auth/authentication_modal"; -import { useFetch } from "libs/react_helpers"; import { getOrganizationByInvite, joinOrganization, switchToOrganization, } from "admin/admin_rest_api"; -import type { APIUser } from "types/api_flow_types"; +import AuthenticationModal from "admin/auth/authentication_modal"; +import { Button, Layout, Result, Spin } from "antd"; +import { AsyncButton } from "components/async_clickables"; +import { useFetch } from "libs/react_helpers"; import Toast from "libs/toast"; import { location } from "libs/window"; +import { useState } from "react"; +import { useHistory } from "react-router-dom"; +import type { APIUser } from "types/api_flow_types"; const { Content } = Layout; diff --git a/frontend/javascripts/admin/auth/auth_token_view.tsx b/frontend/javascripts/admin/auth/auth_token_view.tsx index 821fb40b11e..fed30de538c 100644 --- a/frontend/javascripts/admin/auth/auth_token_view.tsx +++ b/frontend/javascripts/admin/auth/auth_token_view.tsx @@ -1,9 +1,9 @@ -import { useState, useEffect } from "react"; import { CopyOutlined, SwapOutlined } from "@ant-design/icons"; -import { Input, Button, Col, Row, Spin, Form, Space } from "antd"; import { getAuthToken, revokeAuthToken } from "admin/admin_rest_api"; -import type { OxalisState } from "oxalis/store"; +import { Button, Col, Form, Input, Row, Space, Spin } from "antd"; import Toast from "libs/toast"; +import type { OxalisState } from "oxalis/store"; +import { useEffect, useState } from "react"; import { useSelector } from "react-redux"; const FormItem = Form.Item; diff --git a/frontend/javascripts/admin/auth/authentication_modal.tsx b/frontend/javascripts/admin/auth/authentication_modal.tsx index d2aecfd824b..d217ce0ffb4 100644 --- a/frontend/javascripts/admin/auth/authentication_modal.tsx +++ b/frontend/javascripts/admin/auth/authentication_modal.tsx @@ -1,13 +1,13 @@ -import { Modal, Alert } from "antd"; -import type { ComponentType } from "react"; -import React, { useState } from "react"; -import Toast from "libs/toast"; -import messages from "messages"; -import features from "features"; import RegistrationFormWKOrg from "admin/auth/registration_form_wkorg"; +import { Alert, Modal } from "antd"; import LinkButton from "components/link_button"; -import RegistrationFormGeneric from "./registration_form_generic"; +import features from "features"; +import Toast from "libs/toast"; +import messages from "messages"; +import type { ComponentType } from "react"; +import React, { useState } from "react"; import LoginForm from "./login_form"; +import RegistrationFormGeneric from "./registration_form_generic"; type Props = { onLoggedIn: (userJustRegistered: boolean) => unknown; onCancel: () => void; diff --git a/frontend/javascripts/admin/auth/change_password_view.tsx b/frontend/javascripts/admin/auth/change_password_view.tsx index 6495f45886b..e41b5d1261f 100644 --- a/frontend/javascripts/admin/auth/change_password_view.tsx +++ b/frontend/javascripts/admin/auth/change_password_view.tsx @@ -1,11 +1,11 @@ -import { type RouteComponentProps, withRouter } from "react-router-dom"; -import { Form, Input, Button, Col, Row, Alert } from "antd"; import { LockOutlined } from "@ant-design/icons"; +import { Alert, Button, Col, Form, Input, Row } from "antd"; import Request from "libs/request"; -import messages from "messages"; import Toast from "libs/toast"; +import messages from "messages"; import { logoutUserAction } from "oxalis/model/actions/user_actions"; import Store from "oxalis/store"; +import { type RouteComponentProps, withRouter } from "react-router-dom"; const FormItem = Form.Item; const { Password } = Input; diff --git a/frontend/javascripts/admin/auth/finish_reset_password_view.tsx b/frontend/javascripts/admin/auth/finish_reset_password_view.tsx index eace6fb4bfe..9b7e44d2cb9 100644 --- a/frontend/javascripts/admin/auth/finish_reset_password_view.tsx +++ b/frontend/javascripts/admin/auth/finish_reset_password_view.tsx @@ -1,9 +1,9 @@ -import { type RouteComponentProps, withRouter } from "react-router-dom"; -import { Form, Input, Button, Col, Row, Card } from "antd"; import { LockOutlined } from "@ant-design/icons"; +import { Button, Card, Col, Form, Input, Row } from "antd"; import Request from "libs/request"; -import messages from "messages"; import Toast from "libs/toast"; +import messages from "messages"; +import { type RouteComponentProps, withRouter } from "react-router-dom"; const FormItem = Form.Item; const { Password } = Input; type Props = { diff --git a/frontend/javascripts/admin/auth/login_form.tsx b/frontend/javascripts/admin/auth/login_form.tsx index 589a215f541..a1cbef92cb9 100644 --- a/frontend/javascripts/admin/auth/login_form.tsx +++ b/frontend/javascripts/admin/auth/login_form.tsx @@ -1,13 +1,13 @@ -import { Alert, Button, Form, Input } from "antd"; import { LockOutlined, MailOutlined } from "@ant-design/icons"; -import { Link } from "react-router-dom"; -import { getIsInIframe } from "libs/utils"; import { loginUser, requestSingleSignOnLogin } from "admin/admin_rest_api"; -import { setActiveUserAction } from "oxalis/model/actions/user_actions"; -import Store from "oxalis/store"; -import messages from "messages"; +import { Alert, Button, Form, Input } from "antd"; import features from "features"; +import { getIsInIframe } from "libs/utils"; +import messages from "messages"; import { setActiveOrganizationAction } from "oxalis/model/actions/organization_actions"; +import { setActiveUserAction } from "oxalis/model/actions/user_actions"; +import Store from "oxalis/store"; +import { Link } from "react-router-dom"; const FormItem = Form.Item; const { Password } = Input; diff --git a/frontend/javascripts/admin/auth/login_view.tsx b/frontend/javascripts/admin/auth/login_view.tsx index 1336a9e059a..5d69f1d4a94 100644 --- a/frontend/javascripts/admin/auth/login_view.tsx +++ b/frontend/javascripts/admin/auth/login_view.tsx @@ -1,8 +1,8 @@ import { Card, Col, Row } from "antd"; -import type { RouteComponentProps } from "react-router-dom"; -import { withRouter } from "react-router-dom"; import * as Utils from "libs/utils"; import window from "libs/window"; +import type { RouteComponentProps } from "react-router-dom"; +import { withRouter } from "react-router-dom"; import LoginForm from "./login_form"; type Props = { diff --git a/frontend/javascripts/admin/auth/registration_form_generic.tsx b/frontend/javascripts/admin/auth/registration_form_generic.tsx index dbb6c877a55..e995c6e15dd 100644 --- a/frontend/javascripts/admin/auth/registration_form_generic.tsx +++ b/frontend/javascripts/admin/auth/registration_form_generic.tsx @@ -1,16 +1,16 @@ -import { Form, Input, Button, Row, Col, Checkbox } from "antd"; -import { LockOutlined, UserOutlined, MailOutlined } from "@ant-design/icons"; -import React from "react"; -import type { APIOrganization } from "types/api_flow_types"; +import { LockOutlined, MailOutlined, UserOutlined } from "@ant-design/icons"; import { loginUser } from "admin/admin_rest_api"; -import { setActiveUserAction } from "oxalis/model/actions/user_actions"; +import { getTermsOfService } from "admin/api/terms_of_service"; +import { Button, Checkbox, Col, Form, Input, Row } from "antd"; +import { useFetch } from "libs/react_helpers"; import Request from "libs/request"; -import Store from "oxalis/throttled_store"; import messages from "messages"; -import { setHasOrganizationsAction } from "oxalis/model/actions/ui_actions"; import { setActiveOrganizationAction } from "oxalis/model/actions/organization_actions"; -import { useFetch } from "libs/react_helpers"; -import { getTermsOfService } from "admin/api/terms_of_service"; +import { setHasOrganizationsAction } from "oxalis/model/actions/ui_actions"; +import { setActiveUserAction } from "oxalis/model/actions/user_actions"; +import Store from "oxalis/throttled_store"; +import React from "react"; +import type { APIOrganization } from "types/api_flow_types"; import { TOSCheckFormItem } from "./tos_check_form_item"; const FormItem = Form.Item; diff --git a/frontend/javascripts/admin/auth/registration_form_wkorg.tsx b/frontend/javascripts/admin/auth/registration_form_wkorg.tsx index 633e7613d0d..db6b041ce91 100644 --- a/frontend/javascripts/admin/auth/registration_form_wkorg.tsx +++ b/frontend/javascripts/admin/auth/registration_form_wkorg.tsx @@ -1,14 +1,14 @@ -import { Form, Input, Button, Row, Col, Checkbox } from "antd"; -import { UserOutlined, LockOutlined, MailOutlined } from "@ant-design/icons"; -import { useRef, memo } from "react"; +import { LockOutlined, MailOutlined, UserOutlined } from "@ant-design/icons"; import { loginUser } from "admin/admin_rest_api"; -import { setActiveUserAction } from "oxalis/model/actions/user_actions"; +import { getTermsOfService } from "admin/api/terms_of_service"; +import { Button, Checkbox, Col, Form, Input, Row } from "antd"; +import { useFetch } from "libs/react_helpers"; import Request from "libs/request"; -import Store from "oxalis/throttled_store"; import messages from "messages"; import { setActiveOrganizationAction } from "oxalis/model/actions/organization_actions"; -import { useFetch } from "libs/react_helpers"; -import { getTermsOfService } from "admin/api/terms_of_service"; +import { setActiveUserAction } from "oxalis/model/actions/user_actions"; +import Store from "oxalis/throttled_store"; +import { memo, useRef } from "react"; import { TOSCheckFormItem } from "./tos_check_form_item"; const FormItem = Form.Item; diff --git a/frontend/javascripts/admin/auth/registration_view.tsx b/frontend/javascripts/admin/auth/registration_view.tsx index 25c32f23839..9a4476b0947 100644 --- a/frontend/javascripts/admin/auth/registration_view.tsx +++ b/frontend/javascripts/admin/auth/registration_view.tsx @@ -1,12 +1,12 @@ -import { useEffect, useState } from "react"; -import { Link, useHistory } from "react-router-dom"; -import { Spin, Row, Col, Card } from "antd"; -import messages from "messages"; -import Toast from "libs/toast"; import { getDefaultOrganization } from "admin/admin_rest_api"; -import features from "features"; -import RegistrationFormWKOrg from "admin/auth/registration_form_wkorg"; import RegistrationFormGeneric from "admin/auth/registration_form_generic"; +import RegistrationFormWKOrg from "admin/auth/registration_form_wkorg"; +import { Card, Col, Row, Spin } from "antd"; +import features from "features"; +import Toast from "libs/toast"; +import messages from "messages"; +import { useEffect, useState } from "react"; +import { Link, useHistory } from "react-router-dom"; import type { APIOrganization } from "types/api_flow_types"; function RegistrationViewGeneric() { diff --git a/frontend/javascripts/admin/auth/start_reset_password_view.tsx b/frontend/javascripts/admin/auth/start_reset_password_view.tsx index f9d38f07161..2dec3b70684 100644 --- a/frontend/javascripts/admin/auth/start_reset_password_view.tsx +++ b/frontend/javascripts/admin/auth/start_reset_password_view.tsx @@ -1,9 +1,9 @@ -import { Link, type RouteComponentProps, withRouter } from "react-router-dom"; -import { Form, Input, Button, Col, Row, Card } from "antd"; import { MailOutlined } from "@ant-design/icons"; +import { Button, Card, Col, Form, Input, Row } from "antd"; import Request from "libs/request"; -import messages from "messages"; import Toast from "libs/toast"; +import messages from "messages"; +import { Link, type RouteComponentProps, withRouter } from "react-router-dom"; const FormItem = Form.Item; type Props = { history: RouteComponentProps["history"]; diff --git a/frontend/javascripts/admin/auth/verify_email_view.tsx b/frontend/javascripts/admin/auth/verify_email_view.tsx index 6ea36e27bc9..c55833649c2 100644 --- a/frontend/javascripts/admin/auth/verify_email_view.tsx +++ b/frontend/javascripts/admin/auth/verify_email_view.tsx @@ -1,11 +1,11 @@ +import { requestVerificationMail, verifyEmail } from "admin/admin_rest_api"; import { Spin } from "antd"; -import { useEffect } from "react"; import { useFetch } from "libs/react_helpers"; -import { requestVerificationMail, verifyEmail } from "admin/admin_rest_api"; -import Toast from "libs/toast"; import type { ServerErrorMessage } from "libs/request"; -import { useHistory } from "react-router-dom"; +import Toast from "libs/toast"; import { Store } from "oxalis/singletons"; +import { useEffect } from "react"; +import { useHistory } from "react-router-dom"; export const VERIFICATION_ERROR_TOAST_KEY = "verificationError"; diff --git a/frontend/javascripts/admin/dataset/composition_wizard/02_upload_files.tsx b/frontend/javascripts/admin/dataset/composition_wizard/02_upload_files.tsx index 22c252d411e..c55db92e291 100644 --- a/frontend/javascripts/admin/dataset/composition_wizard/02_upload_files.tsx +++ b/frontend/javascripts/admin/dataset/composition_wizard/02_upload_files.tsx @@ -2,20 +2,20 @@ import { FileExcelOutlined } from "@ant-design/icons"; import { Button, Upload } from "antd"; import type { UploadChangeParam, UploadFile } from "antd/lib/upload"; import { AsyncButton } from "components/async_clickables"; +import ErrorHandling from "libs/error_handling"; import { readFileAsText } from "libs/read_file"; import Toast from "libs/toast"; import { SoftError } from "libs/utils"; +import * as Utils from "libs/utils"; import _ from "lodash"; import type { Vector3 } from "oxalis/constants"; import { parseNml } from "oxalis/model/helpers/nml_helpers"; import { - tryToFetchDatasetsByNameOrId, + type FileList, type WizardComponentProps, type WizardContext, - type FileList, + tryToFetchDatasetsByNameOrId, } from "./common"; -import ErrorHandling from "libs/error_handling"; -import * as Utils from "libs/utils"; const EXPECTED_VALUE_COUNT_PER_CSV_LINE = 8; diff --git a/frontend/javascripts/admin/dataset/composition_wizard/03_select_datasets.tsx b/frontend/javascripts/admin/dataset/composition_wizard/03_select_datasets.tsx index ed656a2cc33..2f3fbac698a 100644 --- a/frontend/javascripts/admin/dataset/composition_wizard/03_select_datasets.tsx +++ b/frontend/javascripts/admin/dataset/composition_wizard/03_select_datasets.tsx @@ -3,9 +3,9 @@ import { AsyncButton } from "components/async_clickables"; import DatasetSelectionComponent, { type DatasetSelectionValue, } from "dashboard/dataset/dataset_selection_component"; -import { useState } from "react"; -import { tryToFetchDatasetsByNameOrId, type WizardComponentProps } from "./common"; import { useEffectOnlyOnce } from "libs/react_hooks"; +import { useState } from "react"; +import { type WizardComponentProps, tryToFetchDatasetsByNameOrId } from "./common"; export default function SelectDatasets({ wizardContext, setWizardContext }: WizardComponentProps) { const [datasetValues, setDatasetValues] = useState([]); diff --git a/frontend/javascripts/admin/dataset/composition_wizard/04_configure_new_dataset.tsx b/frontend/javascripts/admin/dataset/composition_wizard/04_configure_new_dataset.tsx index 0263630a89d..75a75f551b8 100644 --- a/frontend/javascripts/admin/dataset/composition_wizard/04_configure_new_dataset.tsx +++ b/frontend/javascripts/admin/dataset/composition_wizard/04_configure_new_dataset.tsx @@ -20,22 +20,22 @@ import { import { FormItemWithInfo } from "dashboard/dataset/helper_components"; import FolderSelection from "dashboard/folders/folder_selection"; import { estimateAffineMatrix4x4 } from "libs/estimate_affine"; +import { formatNumber } from "libs/format_utils"; +import { useEffectOnlyOnce } from "libs/react_hooks"; import Toast, { guardedWithErrorToast } from "libs/toast"; import * as Utils from "libs/utils"; import _ from "lodash"; import messages from "messages"; +import { WkDevFlags } from "oxalis/api/wk_dev"; +import type { Vector3 } from "oxalis/constants"; import { flatToNestedMatrix, getReadableURLPart } from "oxalis/model/accessors/dataset_accessor"; +import { checkLandmarksForThinPlateSpline } from "oxalis/model/helpers/transformation_helpers"; import type { OxalisState } from "oxalis/store"; import React, { useState } from "react"; import { useSelector } from "react-redux"; import type { APIDataLayer, APIDataset, APITeam, LayerLink } from "types/api_flow_types"; import { syncValidator } from "types/validation"; import type { WizardComponentProps } from "./common"; -import { useEffectOnlyOnce } from "libs/react_hooks"; -import { formatNumber } from "libs/format_utils"; -import { checkLandmarksForThinPlateSpline } from "oxalis/model/helpers/transformation_helpers"; -import type { Vector3 } from "oxalis/constants"; -import { WkDevFlags } from "oxalis/api/wk_dev"; const FormItem = Form.Item; diff --git a/frontend/javascripts/admin/dataset/composition_wizard/common.ts b/frontend/javascripts/admin/dataset/composition_wizard/common.ts index 745757b0642..16634cceec6 100644 --- a/frontend/javascripts/admin/dataset/composition_wizard/common.ts +++ b/frontend/javascripts/admin/dataset/composition_wizard/common.ts @@ -3,7 +3,7 @@ import type { UploadFile } from "antd"; import Toast from "libs/toast"; import type { Vector3 } from "oxalis/constants"; import { Store } from "oxalis/singletons"; -import type { APIDataset, APIDataStore } from "types/api_flow_types"; +import type { APIDataStore, APIDataset } from "types/api_flow_types"; export type FileList = UploadFile[]; diff --git a/frontend/javascripts/admin/dataset/dataset_add_remote_view.tsx b/frontend/javascripts/admin/dataset/dataset_add_remote_view.tsx index 847e7202820..22ec94aa253 100644 --- a/frontend/javascripts/admin/dataset/dataset_add_remote_view.tsx +++ b/frontend/javascripts/admin/dataset/dataset_add_remote_view.tsx @@ -1,45 +1,45 @@ +import { UnlockOutlined } from "@ant-design/icons"; +import { exploreRemoteDataset, isDatasetNameValid, storeRemoteDataset } from "admin/admin_rest_api"; +import { CardContainer, DatastoreFormItem } from "admin/dataset/dataset_components"; import { - Form, - Input, Button, Col, - Radio, - Row, Collapse, - type FormInstance, - Modal, Divider, + Form, + type FormInstance, + Input, List, + Modal, + Radio, + Row, Upload, } from "antd"; -import { connect } from "react-redux"; -import React, { useEffect, useState } from "react"; -import type { APIDataStore, APIUser } from "types/api_flow_types"; -import type { OxalisState } from "oxalis/store"; -import { exploreRemoteDataset, isDatasetNameValid, storeRemoteDataset } from "admin/admin_rest_api"; -import messages from "messages"; -import { jsonStringify } from "libs/utils"; -import { CardContainer, DatastoreFormItem } from "admin/dataset/dataset_components"; +import type { RcFile, UploadChangeParam, UploadFile } from "antd/lib/upload"; import { AsyncButton } from "components/async_clickables"; -import Toast from "libs/toast"; -import _ from "lodash"; -import { Hint } from "oxalis/view/action-bar/download_modal_view"; -import { formatScale } from "libs/format_utils"; -import type { DataLayer, DatasourceConfiguration } from "types/schemas/datasource.types"; +import BrainSpinner from "components/brain_spinner"; import DatasetSettingsDataTab, { // Sync simple with advanced and get newest datasourceJson syncDataSourceFields, } from "dashboard/dataset/dataset_settings_data_tab"; import { FormItemWithInfo, Hideable } from "dashboard/dataset/helper_components"; import FolderSelection from "dashboard/folders/folder_selection"; -import type { RcFile, UploadChangeParam, UploadFile } from "antd/lib/upload"; -import { UnlockOutlined } from "@ant-design/icons"; -import { Unicode } from "oxalis/constants"; +import { formatScale } from "libs/format_utils"; import { readFileAsText } from "libs/read_file"; +import Toast from "libs/toast"; +import { jsonStringify } from "libs/utils"; import * as Utils from "libs/utils"; -import type { ArbitraryObject } from "types/globals"; -import BrainSpinner from "components/brain_spinner"; +import _ from "lodash"; +import messages from "messages"; +import { Unicode } from "oxalis/constants"; +import type { OxalisState } from "oxalis/store"; +import { Hint } from "oxalis/view/action-bar/download_modal_view"; +import React, { useEffect, useState } from "react"; +import { connect } from "react-redux"; import { useHistory } from "react-router-dom"; +import type { APIDataStore, APIUser } from "types/api_flow_types"; +import type { ArbitraryObject } from "types/globals"; +import type { DataLayer, DatasourceConfiguration } from "types/schemas/datasource.types"; const FormItem = Form.Item; const RadioGroup = Radio.Group; diff --git a/frontend/javascripts/admin/dataset/dataset_add_view.tsx b/frontend/javascripts/admin/dataset/dataset_add_view.tsx index be14179c25a..78195989173 100644 --- a/frontend/javascripts/admin/dataset/dataset_add_view.tsx +++ b/frontend/javascripts/admin/dataset/dataset_add_view.tsx @@ -1,20 +1,20 @@ -import type { RouteComponentProps } from "react-router-dom"; -import { withRouter } from "react-router-dom"; -import { Tabs, Modal, Button, Layout, type TabsProps } from "antd"; import { CopyOutlined, DatabaseOutlined, UploadOutlined } from "@ant-design/icons"; -import React, { useState } from "react"; -import { connect, useSelector } from "react-redux"; -import type { APIDataStore } from "types/api_flow_types"; -import type { OxalisState } from "oxalis/store"; -import { enforceActiveUser } from "oxalis/model/accessors/user_accessor"; +import { getDatastores } from "admin/admin_rest_api"; import DatasetAddRemoteView from "admin/dataset/dataset_add_remote_view"; import DatasetUploadView from "admin/dataset/dataset_upload_view"; +import { Button, Layout, Modal, Tabs, type TabsProps } from "antd"; import features from "features"; -import { getDatastores } from "admin/admin_rest_api"; -import { useFetch } from "libs/react_helpers"; -import DatasetAddComposeView from "./dataset_add_compose_view"; import type { History } from "history"; +import { useFetch } from "libs/react_helpers"; import { getReadableURLPart } from "oxalis/model/accessors/dataset_accessor"; +import { enforceActiveUser } from "oxalis/model/accessors/user_accessor"; +import type { OxalisState } from "oxalis/store"; +import React, { useState } from "react"; +import { connect, useSelector } from "react-redux"; +import type { RouteComponentProps } from "react-router-dom"; +import { withRouter } from "react-router-dom"; +import type { APIDataStore } from "types/api_flow_types"; +import DatasetAddComposeView from "./dataset_add_compose_view"; const { Content, Sider } = Layout; diff --git a/frontend/javascripts/admin/dataset/dataset_components.tsx b/frontend/javascripts/admin/dataset/dataset_components.tsx index d6348b46942..2ba8da0a4b1 100644 --- a/frontend/javascripts/admin/dataset/dataset_components.tsx +++ b/frontend/javascripts/admin/dataset/dataset_components.tsx @@ -1,11 +1,11 @@ -import type * as React from "react"; -import { Form, Input, Select, Card, type FormInstance } from "antd"; -import messages from "messages"; -import type { APIDataStore, APITeam, APIUser } from "types/api_flow_types"; -import { syncValidator } from "types/validation"; +import { Card, Form, type FormInstance, Input, Select } from "antd"; import { FormItemWithInfo } from "dashboard/dataset/helper_components"; import TeamSelectionComponent from "dashboard/dataset/team_selection_component"; import features from "features"; +import messages from "messages"; +import type * as React from "react"; +import type { APIDataStore, APITeam, APIUser } from "types/api_flow_types"; +import { syncValidator } from "types/validation"; const FormItem = Form.Item; export function CardContainer({ diff --git a/frontend/javascripts/admin/dataset/dataset_upload_view.tsx b/frontend/javascripts/admin/dataset/dataset_upload_view.tsx index 4339cdc7472..63f8c83c9f3 100644 --- a/frontend/javascripts/admin/dataset/dataset_upload_view.tsx +++ b/frontend/javascripts/admin/dataset/dataset_upload_view.tsx @@ -1,75 +1,75 @@ import { - Popover, + FileOutlined, + FolderOutlined, + HourglassOutlined, + InboxOutlined, + InfoCircleOutlined, + LoadingOutlined, +} from "@ant-design/icons"; +import { + Alert, Avatar, - Form, Button, Col, - Row, + Form, + List, Modal, + Popover, Progress, - Alert, - List, - Spin, + Row, Select, + Spin, Tooltip, } from "antd"; -import type { Location as HistoryLocation, Action as HistoryAction } from "history"; -import { - InfoCircleOutlined, - FileOutlined, - FolderOutlined, - InboxOutlined, - HourglassOutlined, - LoadingOutlined, -} from "@ant-design/icons"; -import { connect } from "react-redux"; -import React from "react"; import dayjs from "dayjs"; +import type { Action as HistoryAction, Location as HistoryLocation } from "history"; +import React from "react"; +import { connect } from "react-redux"; -import classnames from "classnames"; -import _ from "lodash"; -import { useDropzone, type FileWithPath } from "react-dropzone"; -import ErrorHandling from "libs/error_handling"; -import { Link, type RouteComponentProps } from "react-router-dom"; -import { withRouter } from "react-router-dom"; -import { - type APITeam, - type APIDataStore, - type APIUser, - type APIOrganization, - APIJobType, -} from "types/api_flow_types"; -import type { OxalisState } from "oxalis/store"; import { - reserveDatasetUpload, - finishDatasetUpload, + type UnfinishedUpload, cancelDatasetUpload, createResumableUpload, - startConvertToWkwJob, + finishDatasetUpload, + getUnfinishedUploads, + reserveDatasetUpload, sendAnalyticsEvent, sendFailedRequestAnalyticsEvent, - getUnfinishedUploads, - type UnfinishedUpload, + startConvertToWkwJob, } from "admin/admin_rest_api"; -import Toast from "libs/toast"; -import * as Utils from "libs/utils"; -import messages from "messages"; -import Zip from "libs/zipjs_wrapper"; import { AllowedTeamsFormItem, CardContainer, DatasetNameFormItem, DatastoreFormItem, } from "admin/dataset/dataset_components"; -import { Vector3Input } from "libs/vector_input"; -import features from "features"; -import { syncValidator } from "types/validation"; +import { hasPricingPlanExceededStorage } from "admin/organization/pricing_plan_utils"; import type { FormInstance } from "antd/lib/form"; -import { AllUnits, UnitLong, LongUnitToShortUnitMap, type Vector3 } from "oxalis/constants"; -import { FormItemWithInfo, confirmAsync } from "../../dashboard/dataset/helper_components"; +import classnames from "classnames"; import FolderSelection from "dashboard/folders/folder_selection"; -import { hasPricingPlanExceededStorage } from "admin/organization/pricing_plan_utils"; +import features from "features"; +import ErrorHandling from "libs/error_handling"; +import Toast from "libs/toast"; +import * as Utils from "libs/utils"; +import { Vector3Input } from "libs/vector_input"; +import Zip from "libs/zipjs_wrapper"; +import _ from "lodash"; +import messages from "messages"; +import { AllUnits, LongUnitToShortUnitMap, UnitLong, type Vector3 } from "oxalis/constants"; import { enforceActiveOrganization } from "oxalis/model/accessors/organization_accessors"; +import type { OxalisState } from "oxalis/store"; +import { type FileWithPath, useDropzone } from "react-dropzone"; +import { Link, type RouteComponentProps } from "react-router-dom"; +import { withRouter } from "react-router-dom"; +import { + type APIDataStore, + APIJobType, + type APIOrganization, + type APITeam, + type APIUser, +} from "types/api_flow_types"; +import { syncValidator } from "types/validation"; +import { FormItemWithInfo, confirmAsync } from "../../dashboard/dataset/helper_components"; const FormItem = Form.Item; const REPORT_THROTTLE_THRESHOLD = 1 * 60 * 1000; // 1 min diff --git a/frontend/javascripts/admin/dataset/dataset_url_import.tsx b/frontend/javascripts/admin/dataset/dataset_url_import.tsx index 1184bba6d0f..3c157fa4108 100644 --- a/frontend/javascripts/admin/dataset/dataset_url_import.tsx +++ b/frontend/javascripts/admin/dataset/dataset_url_import.tsx @@ -1,6 +1,6 @@ +import { getDatastores } from "admin/admin_rest_api"; import DatasetAddRemoteView from "admin/dataset/dataset_add_remote_view"; import { useFetch } from "libs/react_helpers"; -import { getDatastores } from "admin/admin_rest_api"; import * as Utils from "libs/utils"; import _ from "lodash"; import { useHistory } from "react-router-dom"; diff --git a/frontend/javascripts/admin/datastore_health_check.ts b/frontend/javascripts/admin/datastore_health_check.ts index 094c6146b0c..14811e0d13b 100644 --- a/frontend/javascripts/admin/datastore_health_check.ts +++ b/frontend/javascripts/admin/datastore_health_check.ts @@ -1,7 +1,7 @@ -import _ from "lodash"; -import Request from "libs/request"; import * as RestAPI from "admin/admin_rest_api"; +import Request from "libs/request"; import Toast from "libs/toast"; +import _ from "lodash"; import messages from "messages"; // Create a throttled function which depends on its arguments. diff --git a/frontend/javascripts/admin/job/job_hooks.ts b/frontend/javascripts/admin/job/job_hooks.ts index acc0fdb63ab..c1228106f9b 100644 --- a/frontend/javascripts/admin/job/job_hooks.ts +++ b/frontend/javascripts/admin/job/job_hooks.ts @@ -1,8 +1,8 @@ -import features from "features"; import { getJob, getJobs } from "admin/admin_rest_api"; +import features from "features"; +import { useEffectOnlyOnce, usePolling } from "libs/react_hooks"; import { useState } from "react"; import type { APIJob } from "types/api_flow_types"; -import { useEffectOnlyOnce, usePolling } from "libs/react_hooks"; type JobInfo = [jobKey: string, jobId: string]; diff --git a/frontend/javascripts/admin/job/job_list_view.tsx b/frontend/javascripts/admin/job/job_list_view.tsx index e5adaa4c642..5531f11fa59 100644 --- a/frontend/javascripts/admin/job/job_list_view.tsx +++ b/frontend/javascripts/admin/job/job_list_view.tsx @@ -1,30 +1,30 @@ -import _ from "lodash"; -import { PropTypes } from "@scalableminds/prop-types"; -import { confirmAsync } from "dashboard/dataset/helper_components"; -import { Link } from "react-router-dom"; -import { Table, Spin, Input, Tooltip, Typography } from "antd"; import { CheckCircleTwoTone, ClockCircleTwoTone, - CloseCircleTwoTone, CloseCircleOutlined, + CloseCircleTwoTone, DownloadOutlined, EyeOutlined, + InfoCircleOutlined, LoadingOutlined, QuestionCircleTwoTone, - InfoCircleOutlined, } from "@ant-design/icons"; -import type * as React from "react"; -import { type APIJob, APIJobType, type APIUserBase } from "types/api_flow_types"; -import { getJobs, cancelJob } from "admin/admin_rest_api"; -import Persistence from "libs/persistence"; -import * as Utils from "libs/utils"; -import FormattedDate from "components/formatted_date"; +import { PropTypes } from "@scalableminds/prop-types"; +import { cancelJob, getJobs } from "admin/admin_rest_api"; +import { Input, Spin, Table, Tooltip, Typography } from "antd"; import { AsyncLink } from "components/async_clickables"; -import { useEffect, useState } from "react"; -import { useInterval } from "libs/react_helpers"; +import FormattedDate from "components/formatted_date"; +import { confirmAsync } from "dashboard/dataset/helper_components"; import { formatWkLibsNdBBox } from "libs/format_utils"; +import Persistence from "libs/persistence"; +import { useInterval } from "libs/react_helpers"; +import * as Utils from "libs/utils"; +import _ from "lodash"; import { getReadableURLPart } from "oxalis/model/accessors/dataset_accessor"; +import type * as React from "react"; +import { useEffect, useState } from "react"; +import { Link } from "react-router-dom"; +import { type APIJob, APIJobType, type APIUserBase } from "types/api_flow_types"; // Unfortunately, the twoToneColor (nor the style) prop don't support // CSS variables. diff --git a/frontend/javascripts/admin/onboarding.tsx b/frontend/javascripts/admin/onboarding.tsx index 4724cf9d97e..e81ac051e51 100644 --- a/frontend/javascripts/admin/onboarding.tsx +++ b/frontend/javascripts/admin/onboarding.tsx @@ -1,33 +1,33 @@ -import React, { useState } from "react"; -import { Form, Modal, Input, Button, Row, Col, Steps, Card, AutoComplete, Alert } from "antd"; import { - CloudUploadOutlined, - TeamOutlined, - UserOutlined, - FileAddOutlined, - RocketOutlined, ClockCircleOutlined, - PlayCircleOutlined, - PaperClipOutlined, + CloudUploadOutlined, CodeOutlined, CustomerServiceOutlined, + FileAddOutlined, + PaperClipOutlined, + PlayCircleOutlined, PlusOutlined, + RocketOutlined, + TeamOutlined, UserAddOutlined, + UserOutlined, } from "@ant-design/icons"; -import { Link, type RouteComponentProps, withRouter } from "react-router-dom"; -import { connect } from "react-redux"; -import type { APIUser, APIDataStore } from "types/api_flow_types"; -import type { OxalisState } from "oxalis/store"; -import Store from "oxalis/store"; -import LinkButton from "components/link_button"; import { getDatastores, sendInvitesForOrganization } from "admin/admin_rest_api"; -import DatasetSettingsView from "dashboard/dataset/dataset_settings_view"; -import DatasetUploadView from "admin/dataset/dataset_upload_view"; import RegistrationFormGeneric from "admin/auth/registration_form_generic"; +import DatasetUploadView from "admin/dataset/dataset_upload_view"; +import { maxInludedUsersInBasicPlan } from "admin/organization/pricing_plan_utils"; +import { Alert, AutoComplete, Button, Card, Col, Form, Input, Modal, Row, Steps } from "antd"; import CreditsFooter from "components/credits_footer"; -import Toast from "libs/toast"; +import LinkButton from "components/link_button"; +import DatasetSettingsView from "dashboard/dataset/dataset_settings_view"; import features from "features"; -import { maxInludedUsersInBasicPlan } from "admin/organization/pricing_plan_utils"; +import Toast from "libs/toast"; +import type { OxalisState } from "oxalis/store"; +import Store from "oxalis/store"; +import React, { useState } from "react"; +import { connect } from "react-redux"; +import { Link, type RouteComponentProps, withRouter } from "react-router-dom"; +import type { APIDataStore, APIUser } from "types/api_flow_types"; const { Step } = Steps; const FormItem = Form.Item; diff --git a/frontend/javascripts/admin/organization/organization_cards.tsx b/frontend/javascripts/admin/organization/organization_cards.tsx index 4952c4ec776..c8674546f7c 100644 --- a/frontend/javascripts/admin/organization/organization_cards.tsx +++ b/frontend/javascripts/admin/organization/organization_cards.tsx @@ -7,22 +7,22 @@ import { import { Alert, Button, Card, Col, Progress, Row } from "antd"; import { formatDateInLocalTimeZone } from "components/formatted_date"; import dayjs from "dayjs"; +import { formatCountToDataAmountUnit } from "libs/format_utils"; import Constants from "oxalis/constants"; import type { OxalisState } from "oxalis/store"; import type React from "react"; import { useSelector } from "react-redux"; import type { APIOrganization } from "types/api_flow_types"; import { + PricingPlanEnum, hasPricingPlanExceededStorage, hasPricingPlanExceededUsers, hasPricingPlanExpired, isUserAllowedToRequestUpgrades, powerPlanFeatures, - PricingPlanEnum, teamPlanFeatures, } from "./pricing_plan_utils"; import UpgradePricingPlanModal from "./upgrade_plan_modal"; -import { formatCountToDataAmountUnit } from "libs/format_utils"; export function TeamAndPowerPlanUpgradeCards({ teamUpgradeCallback, diff --git a/frontend/javascripts/admin/organization/organization_edit_view.tsx b/frontend/javascripts/admin/organization/organization_edit_view.tsx index d1dac4264a1..69f197f40cf 100644 --- a/frontend/javascripts/admin/organization/organization_edit_view.tsx +++ b/frontend/javascripts/admin/organization/organization_edit_view.tsx @@ -1,22 +1,24 @@ -import { useState, useEffect } from "react"; -import { connect } from "react-redux"; -import { Form, Button, Card, Input, Row, Col, Skeleton, Typography, Space } from "antd"; import { - MailOutlined, - TagOutlined, CopyOutlined, - SaveOutlined, IdcardOutlined, + MailOutlined, + SaveOutlined, + TagOutlined, UserOutlined, } from "@ant-design/icons"; -import { confirmAsync } from "dashboard/dataset/helper_components"; import { deleteOrganization, - updateOrganization, - getUsers, getPricingPlanStatus, + getUsers, + updateOrganization, } from "admin/admin_rest_api"; +import { Button, Card, Col, Form, Input, Row, Skeleton, Space, Typography } from "antd"; +import { confirmAsync } from "dashboard/dataset/helper_components"; import Toast from "libs/toast"; +import { enforceActiveOrganization } from "oxalis/model/accessors/organization_accessors"; +import type { OxalisState } from "oxalis/store"; +import { useEffect, useState } from "react"; +import { connect } from "react-redux"; import type { APIOrganization, APIPricingPlanStatus } from "types/api_flow_types"; import { PlanAboutToExceedAlert, @@ -25,9 +27,7 @@ import { PlanExpirationCard, PlanUpgradeCard, } from "./organization_cards"; -import { enforceActiveOrganization } from "oxalis/model/accessors/organization_accessors"; import { getActiveUserCount } from "./pricing_plan_utils"; -import type { OxalisState } from "oxalis/store"; const FormItem = Form.Item; diff --git a/frontend/javascripts/admin/organization/upgrade_plan_modal.tsx b/frontend/javascripts/admin/organization/upgrade_plan_modal.tsx index 7c5a041eb9a..b8fa8f62a30 100644 --- a/frontend/javascripts/admin/organization/upgrade_plan_modal.tsx +++ b/frontend/javascripts/admin/organization/upgrade_plan_modal.tsx @@ -1,27 +1,27 @@ -import type React from "react"; -import { useRef } from "react"; -import { Button, Divider, InputNumber, Modal } from "antd"; -import dayjs from "dayjs"; import { DatabaseOutlined, FieldTimeOutlined, RocketOutlined, UserAddOutlined, } from "@ant-design/icons"; -import type { APIOrganization } from "types/api_flow_types"; -import { formatDateInLocalTimeZone } from "components/formatted_date"; import { sendExtendPricingPlanEmail, sendUpgradePricingPlanEmail, sendUpgradePricingPlanStorageEmail, sendUpgradePricingPlanUserEmail, } from "admin/admin_rest_api"; -import { powerPlanFeatures, teamPlanFeatures } from "./pricing_plan_utils"; -import { PricingPlanEnum } from "./pricing_plan_utils"; +import { Button, Divider, InputNumber, Modal } from "antd"; +import { formatDateInLocalTimeZone } from "components/formatted_date"; +import dayjs from "dayjs"; import renderIndependently from "libs/render_independently"; import Toast from "libs/toast"; -import { TeamAndPowerPlanUpgradeCards } from "./organization_cards"; import messages from "messages"; +import type React from "react"; +import { useRef } from "react"; +import type { APIOrganization } from "types/api_flow_types"; +import { TeamAndPowerPlanUpgradeCards } from "./organization_cards"; +import { powerPlanFeatures, teamPlanFeatures } from "./pricing_plan_utils"; +import { PricingPlanEnum } from "./pricing_plan_utils"; const ModalInformationFooter = ( <> diff --git a/frontend/javascripts/admin/project/project_create_view.tsx b/frontend/javascripts/admin/project/project_create_view.tsx index d740e20d27e..b3c76d40935 100644 --- a/frontend/javascripts/admin/project/project_create_view.tsx +++ b/frontend/javascripts/admin/project/project_create_view.tsx @@ -1,16 +1,16 @@ -import { Form, Input, Select, Button, Card, InputNumber, Checkbox } from "antd"; -import { useState, useEffect } from "react"; -import { useHistory } from "react-router-dom"; -import { useSelector } from "react-redux"; -import type { APIUser, APITeam } from "types/api_flow_types"; -import { enforceActiveUser } from "oxalis/model/accessors/user_accessor"; import { - getUsers, - getEditableTeams, createProject, + getEditableTeams, getProject, + getUsers, updateProject, } from "admin/admin_rest_api"; +import { Button, Card, Checkbox, Form, Input, InputNumber, Select } from "antd"; +import { enforceActiveUser } from "oxalis/model/accessors/user_accessor"; +import { useEffect, useState } from "react"; +import { useSelector } from "react-redux"; +import { useHistory } from "react-router-dom"; +import type { APITeam, APIUser } from "types/api_flow_types"; import { FormItemWithInfo } from "../../dashboard/dataset/helper_components"; const FormItem = Form.Item; diff --git a/frontend/javascripts/admin/project/project_list_view.tsx b/frontend/javascripts/admin/project/project_list_view.tsx index 61b35f655fa..793616fe416 100644 --- a/frontend/javascripts/admin/project/project_list_view.tsx +++ b/frontend/javascripts/admin/project/project_list_view.tsx @@ -1,6 +1,3 @@ -import { Link } from "react-router-dom"; -import { PropTypes } from "@scalableminds/prop-types"; -import { Table, Spin, Button, Input, Tooltip, App } from "antd"; import { DeleteOutlined, DownloadOutlined, @@ -13,38 +10,41 @@ import { ScheduleOutlined, TeamOutlined, } from "@ant-design/icons"; -import { connect } from "react-redux"; -import React, { useEffect, useState } from "react"; -import _ from "lodash"; -import { AsyncLink } from "components/async_clickables"; -import { - type APIProjectWithStatus, - type APIProject, - type APIUser, - type APIUserBase, - TracingTypeEnum, -} from "types/api_flow_types"; -import type { OxalisState } from "oxalis/store"; -import { enforceActiveUser } from "oxalis/model/accessors/user_accessor"; +import { PropTypes } from "@scalableminds/prop-types"; import { - getProjectsWithStatus, + deleteProject as deleteProjectAPI, + downloadAnnotation, getProjectsForTaskType, + getProjectsWithStatus, + getTaskType, increaseProjectTaskInstances as increaseProjectTaskInstancesAPI, - deleteProject as deleteProjectAPI, pauseProject, resumeProject, - downloadAnnotation, - getTaskType, } from "admin/admin_rest_api"; -import Toast from "libs/toast"; +import { getTasks } from "admin/api/tasks"; +import TransferAllTasksModal from "admin/project/transfer_all_tasks_modal"; +import { App, Button, Input, Spin, Table, Tooltip } from "antd"; +import { AsyncLink } from "components/async_clickables"; +import FormattedDate from "components/formatted_date"; import { handleGenericError } from "libs/error_handling"; import Persistence from "libs/persistence"; -import TransferAllTasksModal from "admin/project/transfer_all_tasks_modal"; +import { useEffectOnlyOnce } from "libs/react_hooks"; +import Toast from "libs/toast"; import * as Utils from "libs/utils"; +import _ from "lodash"; import messages from "messages"; -import FormattedDate from "components/formatted_date"; -import { useEffectOnlyOnce } from "libs/react_hooks"; -import { getTasks } from "admin/api/tasks"; +import { enforceActiveUser } from "oxalis/model/accessors/user_accessor"; +import type { OxalisState } from "oxalis/store"; +import React, { useEffect, useState } from "react"; +import { connect } from "react-redux"; +import { Link } from "react-router-dom"; +import { + type APIProject, + type APIProjectWithStatus, + type APIUser, + type APIUserBase, + TracingTypeEnum, +} from "types/api_flow_types"; const { Column } = Table; const { Search } = Input; diff --git a/frontend/javascripts/admin/project/transfer_all_tasks_modal.tsx b/frontend/javascripts/admin/project/transfer_all_tasks_modal.tsx index caea72f5f45..639e4862649 100644 --- a/frontend/javascripts/admin/project/transfer_all_tasks_modal.tsx +++ b/frontend/javascripts/admin/project/transfer_all_tasks_modal.tsx @@ -1,14 +1,14 @@ -import { Modal, Table, Spin } from "antd"; -import { useState } from "react"; -import _ from "lodash"; -import type { APIUser, APIProject, APIActiveUser } from "types/api_flow_types"; import { getUsers } from "admin/admin_rest_api"; +import { getUsersWithActiveTasks, transferActiveTasksOfProject } from "admin/api/tasks"; +import UserSelectionComponent from "admin/user/user_selection_component"; +import { Modal, Spin, Table } from "antd"; import { handleGenericError } from "libs/error_handling"; +import { useFetch } from "libs/react_helpers"; import Toast from "libs/toast"; -import UserSelectionComponent from "admin/user/user_selection_component"; +import _ from "lodash"; import messages from "messages"; -import { useFetch } from "libs/react_helpers"; -import { getUsersWithActiveTasks, transferActiveTasksOfProject } from "admin/api/tasks"; +import { useState } from "react"; +import type { APIActiveUser, APIProject, APIUser } from "types/api_flow_types"; type Props = { project: APIProject | null | undefined; diff --git a/frontend/javascripts/admin/scripts/script_create_view.tsx b/frontend/javascripts/admin/scripts/script_create_view.tsx index 698106f389a..a4641d564cc 100644 --- a/frontend/javascripts/admin/scripts/script_create_view.tsx +++ b/frontend/javascripts/admin/scripts/script_create_view.tsx @@ -1,17 +1,17 @@ -import { Form, Input, Select, Button, Card } from "antd"; -import type { RouteComponentProps } from "react-router-dom"; -import { withRouter } from "react-router-dom"; -import { connect } from "react-redux"; -import { useState, useEffect } from "react"; -import type { APIUser } from "types/api_flow_types"; -import type { OxalisState } from "oxalis/store"; -import { enforceActiveUser } from "oxalis/model/accessors/user_accessor"; import { - getTeamManagerOrAdminUsers, - updateScript, createScript, getScript, + getTeamManagerOrAdminUsers, + updateScript, } from "admin/admin_rest_api"; +import { Button, Card, Form, Input, Select } from "antd"; +import { enforceActiveUser } from "oxalis/model/accessors/user_accessor"; +import type { OxalisState } from "oxalis/store"; +import { useEffect, useState } from "react"; +import { connect } from "react-redux"; +import type { RouteComponentProps } from "react-router-dom"; +import { withRouter } from "react-router-dom"; +import type { APIUser } from "types/api_flow_types"; const FormItem = Form.Item; type OwnProps = { diff --git a/frontend/javascripts/admin/scripts/script_list_view.tsx b/frontend/javascripts/admin/scripts/script_list_view.tsx index cc09444a9c2..54c144fbc9a 100644 --- a/frontend/javascripts/admin/scripts/script_list_view.tsx +++ b/frontend/javascripts/admin/scripts/script_list_view.tsx @@ -1,17 +1,17 @@ -import { Link } from "react-router-dom"; -import { PropTypes } from "@scalableminds/prop-types"; -import { Table, Spin, Button, Input, App } from "antd"; import { DeleteOutlined, EditOutlined, PlusOutlined } from "@ant-design/icons"; -import * as React from "react"; -import _ from "lodash"; -import type { APIScript, APIUser } from "types/api_flow_types"; -import { getScripts, deleteScript as deleteScriptAPI } from "admin/admin_rest_api"; -import { handleGenericError } from "libs/error_handling"; +import { PropTypes } from "@scalableminds/prop-types"; +import { deleteScript as deleteScriptAPI, getScripts } from "admin/admin_rest_api"; +import { App, Button, Input, Spin, Table } from "antd"; import LinkButton from "components/link_button"; +import { handleGenericError } from "libs/error_handling"; import Persistence from "libs/persistence"; import * as Utils from "libs/utils"; +import _ from "lodash"; import messages from "messages"; +import * as React from "react"; import { useEffect, useState } from "react"; +import { Link } from "react-router-dom"; +import type { APIScript, APIUser } from "types/api_flow_types"; const { Column } = Table; const { Search } = Input; diff --git a/frontend/javascripts/admin/statistic/available_tasks_report_view.tsx b/frontend/javascripts/admin/statistic/available_tasks_report_view.tsx index f972d3f5a6d..6225f5c726c 100644 --- a/frontend/javascripts/admin/statistic/available_tasks_report_view.tsx +++ b/frontend/javascripts/admin/statistic/available_tasks_report_view.tsx @@ -1,11 +1,11 @@ -import { Spin, Table, Card, Typography, Tooltip, Tag } from "antd"; -import { useState } from "react"; -import type { APIAvailableTasksReport } from "types/api_flow_types"; +import { InfoCircleOutlined } from "@ant-design/icons"; import { getAvailableTasksReport } from "admin/admin_rest_api"; +import { Card, Spin, Table, Tag, Tooltip, Typography } from "antd"; import { handleGenericError } from "libs/error_handling"; import * as Utils from "libs/utils"; +import { useState } from "react"; +import type { APIAvailableTasksReport } from "types/api_flow_types"; import TeamSelectionForm from "./team_selection_form"; -import { InfoCircleOutlined } from "@ant-design/icons"; const { Column } = Table; diff --git a/frontend/javascripts/admin/statistic/project_and_annotation_type_dropdown.tsx b/frontend/javascripts/admin/statistic/project_and_annotation_type_dropdown.tsx index fc339e8ba4a..8cf8d04cc11 100644 --- a/frontend/javascripts/admin/statistic/project_and_annotation_type_dropdown.tsx +++ b/frontend/javascripts/admin/statistic/project_and_annotation_type_dropdown.tsx @@ -1,12 +1,12 @@ -import { Select } from "antd"; -import type React from "react"; -import { useEffect, useState } from "react"; import { getProjects } from "admin/admin_rest_api"; +import { Select } from "antd"; import { useFetch } from "libs/react_helpers"; import { isUserAdminOrTeamManager } from "libs/utils"; -import { useSelector } from "react-redux"; -import type { OxalisState } from "oxalis/store"; import { AnnotationStateFilterEnum, AnnotationTypeFilterEnum } from "oxalis/constants"; +import type { OxalisState } from "oxalis/store"; +import type React from "react"; +import { useEffect, useState } from "react"; +import { useSelector } from "react-redux"; type ProjectAndTypeDropdownProps = { selectedProjectIds: string[]; diff --git a/frontend/javascripts/admin/statistic/project_progress_report_view.tsx b/frontend/javascripts/admin/statistic/project_progress_report_view.tsx index e1fddaece1a..d661f8c2d83 100644 --- a/frontend/javascripts/admin/statistic/project_progress_report_view.tsx +++ b/frontend/javascripts/admin/statistic/project_progress_report_view.tsx @@ -1,16 +1,16 @@ -import { Badge, Spin, Table, Card } from "antd"; import { PauseCircleOutlined, ReloadOutlined, SettingOutlined } from "@ant-design/icons"; -import * as React from "react"; -import type { APIProjectProgressReport, APITeam } from "types/api_flow_types"; import { getProjectProgressReport } from "admin/admin_rest_api"; +import { Badge, Card, Spin, Table } from "antd"; import FormattedDate from "components/formatted_date"; import Loop from "components/loop"; import StackedBarChart, { colors } from "components/stacked_bar_chart"; import Toast from "libs/toast"; import * as Utils from "libs/utils"; import messages from "messages"; -import TeamSelectionForm from "./team_selection_form"; +import * as React from "react"; import { useState } from "react"; +import type { APIProjectProgressReport, APITeam } from "types/api_flow_types"; +import TeamSelectionForm from "./team_selection_form"; const { Column, ColumnGroup } = Table; const RELOAD_INTERVAL = 10 * 60 * 1000; // 10 min diff --git a/frontend/javascripts/admin/statistic/team_selection_form.tsx b/frontend/javascripts/admin/statistic/team_selection_form.tsx index e4cd706db51..b119604c144 100644 --- a/frontend/javascripts/admin/statistic/team_selection_form.tsx +++ b/frontend/javascripts/admin/statistic/team_selection_form.tsx @@ -1,6 +1,6 @@ -import { Row, Col, Form, Button } from "antd"; -import type { APITeam } from "types/api_flow_types"; +import { Button, Col, Form, Row } from "antd"; import TeamSelectionComponent from "dashboard/dataset/team_selection_component"; +import type { APITeam } from "types/api_flow_types"; const FormItem = Form.Item; type Props = { value?: APITeam | null | undefined; diff --git a/frontend/javascripts/admin/statistic/time_tracking_detail_view.tsx b/frontend/javascripts/admin/statistic/time_tracking_detail_view.tsx index b60bb4dbd7f..bd27fc1b6f9 100644 --- a/frontend/javascripts/admin/statistic/time_tracking_detail_view.tsx +++ b/frontend/javascripts/admin/statistic/time_tracking_detail_view.tsx @@ -1,13 +1,13 @@ -import { useFetch } from "libs/react_helpers"; import { getTimeTrackingForUserSummedPerAnnotation } from "admin/admin_rest_api"; -import dayjs from "dayjs"; import { Col, Divider, Row } from "antd"; +import dayjs from "dayjs"; import { formatMilliseconds } from "libs/format_utils"; +import { useFetch } from "libs/react_helpers"; import _ from "lodash"; -import type { APITimeTrackingPerAnnotation } from "types/api_flow_types"; -import { AnnotationStats } from "oxalis/view/right-border-tabs/dataset_info_tab_view"; +import type { AnnotationStateFilterEnum, AnnotationTypeFilterEnum } from "oxalis/constants"; import { aggregateStatsForAllLayers } from "oxalis/model/accessors/annotation_accessor"; -import type { AnnotationTypeFilterEnum, AnnotationStateFilterEnum } from "oxalis/constants"; +import { AnnotationStats } from "oxalis/view/right-border-tabs/dataset_info_tab_view"; +import type { APITimeTrackingPerAnnotation } from "types/api_flow_types"; type TimeTrackingDetailViewProps = { userId: string; diff --git a/frontend/javascripts/admin/statistic/time_tracking_overview.tsx b/frontend/javascripts/admin/statistic/time_tracking_overview.tsx index a652c1cf973..91dcca8af44 100644 --- a/frontend/javascripts/admin/statistic/time_tracking_overview.tsx +++ b/frontend/javascripts/admin/statistic/time_tracking_overview.tsx @@ -1,23 +1,23 @@ -import { getTeams, getTimeEntries, getTimeTrackingForUserSpans } from "admin/admin_rest_api"; -import { Card, Select, Spin, Button, DatePicker, type TimeRangePickerProps, Table } from "antd"; -import { useFetch } from "libs/react_helpers"; -import { useState } from "react"; import { DownloadOutlined, FilterOutlined } from "@ant-design/icons"; +import { getTeams, getTimeEntries, getTimeTrackingForUserSpans } from "admin/admin_rest_api"; +import { Button, Card, DatePicker, Select, Spin, Table, type TimeRangePickerProps } from "antd"; +import FixedExpandableTable from "components/fixed_expandable_table"; +import LinkButton from "components/link_button"; +import dayjs, { type Dayjs } from "dayjs"; import saveAs from "file-saver"; import { formatMilliseconds } from "libs/format_utils"; -import ProjectAndAnnotationTypeDropdown from "./project_and_annotation_type_dropdown"; -import { isUserAdminOrTeamManager, transformToCSVRow } from "libs/utils"; -import messages from "messages"; +import { useFetch } from "libs/react_helpers"; import Toast from "libs/toast"; -import TimeTrackingDetailView from "./time_tracking_detail_view"; -import LinkButton from "components/link_button"; -import FixedExpandableTable from "components/fixed_expandable_table"; +import { isUserAdminOrTeamManager, transformToCSVRow } from "libs/utils"; import * as Utils from "libs/utils"; -import type { APITimeTrackingPerUser } from "types/api_flow_types"; -import { useSelector } from "react-redux"; +import messages from "messages"; +import { AnnotationStateFilterEnum, AnnotationTypeFilterEnum } from "oxalis/constants"; import type { OxalisState } from "oxalis/store"; -import dayjs, { type Dayjs } from "dayjs"; -import { AnnotationTypeFilterEnum, AnnotationStateFilterEnum } from "oxalis/constants"; +import { useState } from "react"; +import { useSelector } from "react-redux"; +import type { APITimeTrackingPerUser } from "types/api_flow_types"; +import ProjectAndAnnotationTypeDropdown from "./project_and_annotation_type_dropdown"; +import TimeTrackingDetailView from "./time_tracking_detail_view"; const { RangePicker } = DatePicker; const TIMETRACKING_CSV_HEADER_PER_USER = ["userId,userFirstName,userLastName,timeTrackedInSeconds"]; diff --git a/frontend/javascripts/admin/task/task_annotation_view.tsx b/frontend/javascripts/admin/task/task_annotation_view.tsx index e856eb85527..cf20ba685de 100644 --- a/frontend/javascripts/admin/task/task_annotation_view.tsx +++ b/frontend/javascripts/admin/task/task_annotation_view.tsx @@ -1,35 +1,35 @@ -import { App, Dropdown, type MenuProps, Tooltip } from "antd"; import { - EyeOutlined, - PlayCircleOutlined, CheckCircleOutlined, - TeamOutlined, - RollbackOutlined, - DeleteOutlined, - FolderOpenOutlined, - DownloadOutlined, ClockCircleOutlined, + DeleteOutlined, DownOutlined, + DownloadOutlined, + EyeOutlined, + FolderOpenOutlined, + PlayCircleOutlined, + RollbackOutlined, + TeamOutlined, } from "@ant-design/icons"; -import { connect } from "react-redux"; -import { useEffect, useState } from "react"; -import type { APIUser, APITask, APIAnnotation } from "types/api_flow_types"; -import type { OxalisState } from "oxalis/store"; -import { formatSeconds } from "libs/format_utils"; -import { AsyncLink } from "components/async_clickables"; import { - reOpenAnnotation as reOpenAnnotationAPI, - finishAnnotation as finishAnnotationAPI, - resetAnnotation as resetAnnotationAPI, deleteAnnotation as deleteAnnotationAPI, downloadAnnotation as downloadAnnotationAPI, + finishAnnotation as finishAnnotationAPI, + reOpenAnnotation as reOpenAnnotationAPI, + resetAnnotation as resetAnnotationAPI, } from "admin/admin_rest_api"; +import { getAnnotationsForTask } from "admin/api/tasks"; +import { App, Dropdown, type MenuProps, Tooltip } from "antd"; +import { AsyncLink } from "components/async_clickables"; import FormattedDate from "components/formatted_date"; -import Toast from "libs/toast"; import TransferTaskModal from "dashboard/transfer_task_modal"; +import { formatSeconds } from "libs/format_utils"; +import Toast from "libs/toast"; import messages from "messages"; import { getVolumeDescriptors } from "oxalis/model/accessors/volumetracing_accessor"; -import { getAnnotationsForTask } from "admin/api/tasks"; +import type { OxalisState } from "oxalis/store"; +import { useEffect, useState } from "react"; +import { connect } from "react-redux"; +import type { APIAnnotation, APITask, APIUser } from "types/api_flow_types"; type OwnProps = { task: APITask; diff --git a/frontend/javascripts/admin/task/task_create_bulk_view.tsx b/frontend/javascripts/admin/task/task_create_bulk_view.tsx index 70a0e2f85de..aa16089f392 100644 --- a/frontend/javascripts/admin/task/task_create_bulk_view.tsx +++ b/frontend/javascripts/admin/task/task_create_bulk_view.tsx @@ -1,14 +1,14 @@ -import { Form, Input, Button, Card, Upload, Spin, Progress, Divider, App } from "antd"; -import { useState } from "react"; import { InboxOutlined } from "@ant-design/icons"; -import _ from "lodash"; -import type { APITask } from "types/api_flow_types"; -import type { BoundingBoxObject } from "oxalis/store"; -import type { Vector3 } from "oxalis/constants"; import { createTasks } from "admin/api/tasks"; import { handleTaskCreationResponse } from "admin/task/task_create_form_view"; -import Messages from "messages"; +import { App, Button, Card, Divider, Form, Input, Progress, Spin, Upload } from "antd"; import Toast from "libs/toast"; +import _ from "lodash"; +import Messages from "messages"; +import type { Vector3 } from "oxalis/constants"; +import type { BoundingBoxObject } from "oxalis/store"; +import { useState } from "react"; +import type { APITask } from "types/api_flow_types"; const FormItem = Form.Item; const { TextArea } = Input; diff --git a/frontend/javascripts/admin/task/task_create_form_view.tsx b/frontend/javascripts/admin/task/task_create_form_view.tsx index 3ec3298767f..a6d3fca17d8 100644 --- a/frontend/javascripts/admin/task/task_create_form_view.tsx +++ b/frontend/javascripts/admin/task/task_create_form_view.tsx @@ -1,37 +1,4 @@ -import type { RouteComponentProps } from "react-router-dom"; -import { withRouter } from "react-router-dom"; -import { - Row, - Col, - Divider, - Form, - Select, - Button, - Card, - Radio, - Upload, - InputNumber, - Input, - Spin, - type RadioChangeEvent, - Tooltip, - App, - type UploadFile, -} from "antd"; -import React, { useEffect, useState } from "react"; import { InboxOutlined, ReloadOutlined, WarningOutlined } from "@ant-design/icons"; -import _ from "lodash"; -import type { APIDataset, APITaskType, APIProject, APIScript, APITask } from "types/api_flow_types"; -import type { BoundingBoxObject } from "oxalis/store"; -import type { - NewTask, - NewNmlTask, - TaskCreationResponse, - TaskCreationResponseContainer, -} from "admin/task/task_create_bulk_view"; -import { normalizeFileEvent, NUM_TASKS_PER_BATCH } from "admin/task/task_create_bulk_view"; -import { Vector3Input, Vector6Input } from "libs/vector_input"; -import type { Vector3, Vector6 } from "oxalis/constants"; import { getActiveDatasetsOfMyOrganization, getAnnotationInformation, @@ -40,13 +7,46 @@ import { getTaskTypes, } from "admin/admin_rest_api"; import { createTaskFromNML, createTasks, getTask, updateTask } from "admin/api/tasks"; -import { coalesce, tryToAwaitPromise } from "libs/utils"; +import type { + NewNmlTask, + NewTask, + TaskCreationResponse, + TaskCreationResponseContainer, +} from "admin/task/task_create_bulk_view"; +import { NUM_TASKS_PER_BATCH, normalizeFileEvent } from "admin/task/task_create_bulk_view"; +import { + App, + Button, + Card, + Col, + Divider, + Form, + Input, + InputNumber, + Radio, + type RadioChangeEvent, + Row, + Select, + Spin, + Tooltip, + Upload, + type UploadFile, +} from "antd"; +import type { useAppProps } from "antd/es/app/context"; +import { AsyncButton } from "components/async_clickables"; +import { formatDateInLocalTimeZone } from "components/formatted_date"; import SelectExperienceDomain from "components/select_experience_domain"; -import messages from "messages"; import { saveAs } from "file-saver"; -import { formatDateInLocalTimeZone } from "components/formatted_date"; -import { AsyncButton } from "components/async_clickables"; -import type { useAppProps } from "antd/es/app/context"; +import { coalesce, tryToAwaitPromise } from "libs/utils"; +import { Vector3Input, Vector6Input } from "libs/vector_input"; +import _ from "lodash"; +import messages from "messages"; +import type { Vector3, Vector6 } from "oxalis/constants"; +import type { BoundingBoxObject } from "oxalis/store"; +import React, { useEffect, useState } from "react"; +import type { RouteComponentProps } from "react-router-dom"; +import { withRouter } from "react-router-dom"; +import type { APIDataset, APIProject, APIScript, APITask, APITaskType } from "types/api_flow_types"; const FormItem = Form.Item; const RadioGroup = Radio.Group; diff --git a/frontend/javascripts/admin/task/task_create_view.tsx b/frontend/javascripts/admin/task/task_create_view.tsx index a9f40ce6ef9..eb489cb2372 100644 --- a/frontend/javascripts/admin/task/task_create_view.tsx +++ b/frontend/javascripts/admin/task/task_create_view.tsx @@ -1,7 +1,7 @@ import { BarsOutlined, ScheduleOutlined } from "@ant-design/icons"; -import { Tabs, type TabsProps } from "antd"; import TaskCreateBulkView from "admin/task/task_create_bulk_view"; import TaskCreateFormView from "admin/task/task_create_form_view"; +import { Tabs, type TabsProps } from "antd"; const TaskCreateView = () => { const tabs: TabsProps["items"] = [ diff --git a/frontend/javascripts/admin/task/task_list_view.tsx b/frontend/javascripts/admin/task/task_list_view.tsx index 077d3a6600a..03635f7f207 100644 --- a/frontend/javascripts/admin/task/task_list_view.tsx +++ b/frontend/javascripts/admin/task/task_list_view.tsx @@ -1,6 +1,3 @@ -import { Link } from "react-router-dom"; -import { PropTypes } from "@scalableminds/prop-types"; -import { Tag, Spin, Button, Input, Modal, Card, Alert, App, type TableProps } from "antd"; import { CheckCircleOutlined, ClockCircleOutlined, @@ -13,32 +10,35 @@ import { PlusOutlined, UserAddOutlined, } from "@ant-design/icons"; -import type React from "react"; -import { useEffect, useState } from "react"; -import _ from "lodash"; -import features from "features"; -import { AsyncLink } from "components/async_clickables"; -import type { APITask, APITaskType, TaskStatus } from "types/api_flow_types"; +import { PropTypes } from "@scalableminds/prop-types"; import { downloadAnnotation as downloadAnnotationAPI } from "admin/admin_rest_api"; import { + assignTaskToUser as assignTaskToUserAPI, deleteTask as deleteTaskAPI, getTasks, - assignTaskToUser as assignTaskToUserAPI, } from "admin/api/tasks"; -import { formatTuple, formatSeconds } from "libs/format_utils"; -import { handleGenericError } from "libs/error_handling"; -import FormattedDate from "components/formatted_date"; -import Persistence from "libs/persistence"; import TaskAnnotationView from "admin/task/task_annotation_view"; -import LinkButton from "components/link_button"; import { downloadTasksAsCSV } from "admin/task/task_create_form_view"; import type { QueryObject, TaskFormFieldValues } from "admin/task/task_search_form"; import TaskSearchForm from "admin/task/task_search_form"; +import UserSelectionComponent from "admin/user/user_selection_component"; +import { Alert, App, Button, Card, Input, Modal, Spin, type TableProps, Tag } from "antd"; +import { AsyncLink } from "components/async_clickables"; +import FixedExpandableTable from "components/fixed_expandable_table"; +import FormattedDate from "components/formatted_date"; +import LinkButton from "components/link_button"; +import features from "features"; +import { handleGenericError } from "libs/error_handling"; +import { formatSeconds, formatTuple } from "libs/format_utils"; +import Persistence from "libs/persistence"; import Toast from "libs/toast"; import * as Utils from "libs/utils"; +import _ from "lodash"; import messages from "messages"; -import FixedExpandableTable from "components/fixed_expandable_table"; -import UserSelectionComponent from "admin/user/user_selection_component"; +import type React from "react"; +import { useEffect, useState } from "react"; +import { Link } from "react-router-dom"; +import type { APITask, APITaskType, TaskStatus } from "types/api_flow_types"; const { Search, TextArea } = Input; diff --git a/frontend/javascripts/admin/task/task_search_form.tsx b/frontend/javascripts/admin/task/task_search_form.tsx index e37df5bdbba..0c83722f815 100644 --- a/frontend/javascripts/admin/task/task_search_form.tsx +++ b/frontend/javascripts/admin/task/task_search_form.tsx @@ -1,12 +1,12 @@ -import { Form, Row, Dropdown, Col, Button, Input, Select } from "antd"; -import { DownloadOutlined, DownOutlined, RetweetOutlined } from "@ant-design/icons"; +import { DownOutlined, DownloadOutlined, RetweetOutlined } from "@ant-design/icons"; import { PropTypes } from "@scalableminds/prop-types"; -import { useEffect, useState } from "react"; -import _ from "lodash"; -import type { APIUser, APIProject, APITaskType } from "types/api_flow_types"; import { getEditableUsers, getProjects, getTaskTypes } from "admin/admin_rest_api"; +import { Button, Col, Dropdown, Form, Input, Row, Select } from "antd"; import Persistence from "libs/persistence"; import { useEffectOnlyOnce } from "libs/react_hooks"; +import _ from "lodash"; +import { useEffect, useState } from "react"; +import type { APIProject, APITaskType, APIUser } from "types/api_flow_types"; const FormItem = Form.Item; export type QueryObject = { diff --git a/frontend/javascripts/admin/tasktype/recommended_configuration_view.tsx b/frontend/javascripts/admin/tasktype/recommended_configuration_view.tsx index df0837315c8..8c76f9c0158 100644 --- a/frontend/javascripts/admin/tasktype/recommended_configuration_view.tsx +++ b/frontend/javascripts/admin/tasktype/recommended_configuration_view.tsx @@ -1,13 +1,13 @@ -import { Checkbox, Col, Collapse, Form, Input, Row, Table, Button, type CollapseProps } from "antd"; +import { Button, Checkbox, Col, Collapse, type CollapseProps, Form, Input, Row, Table } from "antd"; import type { FormInstance } from "antd/lib/form"; -import * as React from "react"; -import _ from "lodash"; import { jsonEditStyle } from "dashboard/dataset/helper_components"; +import features from "features"; import { jsonStringify } from "libs/utils"; -import { settings, type RecommendedConfiguration } from "messages"; -import { validateUserSettingsJSON } from "types/validation"; +import _ from "lodash"; +import { type RecommendedConfiguration, settings } from "messages"; import { TDViewDisplayModeEnum } from "oxalis/constants"; -import features from "features"; +import * as React from "react"; +import { validateUserSettingsJSON } from "types/validation"; const FormItem = Form.Item; function getRecommendedConfigByCategory() { diff --git a/frontend/javascripts/admin/tasktype/task_type_create_view.tsx b/frontend/javascripts/admin/tasktype/task_type_create_view.tsx index 974547190bf..ec87bdb8f47 100644 --- a/frontend/javascripts/admin/tasktype/task_type_create_view.tsx +++ b/frontend/javascripts/admin/tasktype/task_type_create_view.tsx @@ -1,30 +1,30 @@ -import { Button, Card, Checkbox, Form, Input, Radio, Select, InputNumber, Tooltip } from "antd"; -import { syncValidator } from "types/validation"; import { InfoCircleOutlined } from "@ant-design/icons"; -import type { RouteComponentProps } from "react-router-dom"; -import { withRouter } from "react-router-dom"; -import { useEffect, useState } from "react"; -import _ from "lodash"; -import { - type APITaskType, - type TracingType, - TracingTypeEnum, - type APIAllowedMode, - type APIMagRestrictions, - type APITeam, -} from "types/api_flow_types"; import { - getEditableTeams, createTaskType, - updateTaskType, + getEditableTeams, getTaskType, + updateTaskType, } from "admin/admin_rest_api"; import RecommendedConfigurationView, { getDefaultRecommendedConfiguration, } from "admin/tasktype/recommended_configuration_view"; -import { useFetch } from "libs/react_helpers"; +import { Button, Card, Checkbox, Form, Input, InputNumber, Radio, Select, Tooltip } from "antd"; import type { RuleObject } from "antd/es/form"; +import { useFetch } from "libs/react_helpers"; import { jsonStringify } from "libs/utils"; +import _ from "lodash"; +import { useEffect, useState } from "react"; +import type { RouteComponentProps } from "react-router-dom"; +import { withRouter } from "react-router-dom"; +import { + type APIAllowedMode, + type APIMagRestrictions, + type APITaskType, + type APITeam, + type TracingType, + TracingTypeEnum, +} from "types/api_flow_types"; +import { syncValidator } from "types/validation"; const RadioGroup = Radio.Group; const FormItem = Form.Item; diff --git a/frontend/javascripts/admin/tasktype/task_type_list_view.tsx b/frontend/javascripts/admin/tasktype/task_type_list_view.tsx index 7a101a654fd..10bef9cd984 100644 --- a/frontend/javascripts/admin/tasktype/task_type_list_view.tsx +++ b/frontend/javascripts/admin/tasktype/task_type_list_view.tsx @@ -1,30 +1,30 @@ -import { Link } from "react-router-dom"; +import { + DeleteOutlined, + DownloadOutlined, + EditOutlined, + EyeOutlined, + PlusOutlined, + ScheduleOutlined, +} from "@ant-design/icons"; import { PropTypes } from "@scalableminds/prop-types"; -import { Table, Tag, Spin, Button, Input, App } from "antd"; -import Markdown from "libs/markdown_adapter"; -import * as React from "react"; -import _ from "lodash"; -import { AsyncLink } from "components/async_clickables"; -import type { APITaskType } from "types/api_flow_types"; import { - getTaskTypes, deleteTaskType as deleteTaskTypeAPI, downloadAnnotation, + getTaskTypes, } from "admin/admin_rest_api"; -import { handleGenericError } from "libs/error_handling"; +import { App, Button, Input, Spin, Table, Tag } from "antd"; +import { AsyncLink } from "components/async_clickables"; import LinkButton from "components/link_button"; +import { handleGenericError } from "libs/error_handling"; +import Markdown from "libs/markdown_adapter"; import Persistence from "libs/persistence"; import * as Utils from "libs/utils"; +import _ from "lodash"; import messages from "messages"; -import { - DeleteOutlined, - DownloadOutlined, - EditOutlined, - EyeOutlined, - PlusOutlined, - ScheduleOutlined, -} from "@ant-design/icons"; +import * as React from "react"; import { useEffect, useState } from "react"; +import { Link } from "react-router-dom"; +import type { APITaskType } from "types/api_flow_types"; const { Column } = Table; const { Search } = Input; diff --git a/frontend/javascripts/admin/team/create_team_modal_view.tsx b/frontend/javascripts/admin/team/create_team_modal_view.tsx index 0bcdc293abc..84d122d9b9f 100644 --- a/frontend/javascripts/admin/team/create_team_modal_view.tsx +++ b/frontend/javascripts/admin/team/create_team_modal_view.tsx @@ -1,6 +1,6 @@ -import { Modal, Input, Form } from "antd"; import { TagOutlined } from "@ant-design/icons"; import { createTeam } from "admin/admin_rest_api"; +import { Form, Input, Modal } from "antd"; import Shortcut from "libs/shortcut_component"; const FormItem = Form.Item; type Props = { diff --git a/frontend/javascripts/admin/team/edit_team_modal_view.tsx b/frontend/javascripts/admin/team/edit_team_modal_view.tsx index ad7ba7a32c6..578f2d05576 100644 --- a/frontend/javascripts/admin/team/edit_team_modal_view.tsx +++ b/frontend/javascripts/admin/team/edit_team_modal_view.tsx @@ -1,11 +1,11 @@ import { MinusCircleOutlined, PlusCircleOutlined } from "@ant-design/icons"; import { getEditableUsers, updateUser } from "admin/admin_rest_api"; -import { Modal, AutoComplete, Input, Spin, Tooltip } from "antd"; +import { AutoComplete, Input, Modal, Spin, Tooltip } from "antd"; import type { DefaultOptionType } from "antd/lib/select"; +import { useEffectOnlyOnce } from "libs/react_hooks"; import { useState } from "react"; import type { APITeam, APITeamMembership, APIUser } from "types/api_flow_types"; import { filterTeamMembersOf, renderUsersForTeam } from "./team_list_view"; -import { useEffectOnlyOnce } from "libs/react_hooks"; type Props = { onCancel: (...args: Array) => any; diff --git a/frontend/javascripts/admin/team/team_list_view.tsx b/frontend/javascripts/admin/team/team_list_view.tsx index a07bb04605c..e1c3d0eb8e0 100644 --- a/frontend/javascripts/admin/team/team_list_view.tsx +++ b/frontend/javascripts/admin/team/team_list_view.tsx @@ -1,23 +1,23 @@ -import { PropTypes } from "@scalableminds/prop-types"; -import { Table, Spin, Button, Input, Alert, Tag, App } from "antd"; import { DeleteOutlined, PlusOutlined, UserOutlined } from "@ant-design/icons"; -import * as React from "react"; -import _ from "lodash"; -import type { APITeam, APITeamMembership, APIUser } from "types/api_flow_types"; +import { PropTypes } from "@scalableminds/prop-types"; import { - getEditableTeams, deleteTeam as deleteTeamAPI, + getEditableTeams, getEditableUsers, } from "admin/admin_rest_api"; -import { handleGenericError } from "libs/error_handling"; -import LinkButton from "components/link_button"; import CreateTeamModal from "admin/team/create_team_modal_view"; +import { Alert, App, Button, Input, Spin, Table, Tag } from "antd"; +import LinkButton from "components/link_button"; +import { handleGenericError } from "libs/error_handling"; +import { stringToColor } from "libs/format_utils"; import Persistence from "libs/persistence"; import * as Utils from "libs/utils"; +import _ from "lodash"; import messages from "messages"; -import { stringToColor } from "libs/format_utils"; -import EditTeamModalView from "./edit_team_modal_view"; +import * as React from "react"; import { useEffect, useState } from "react"; +import type { APITeam, APITeamMembership, APIUser } from "types/api_flow_types"; +import EditTeamModalView from "./edit_team_modal_view"; const { Column } = Table; const { Search } = Input; diff --git a/frontend/javascripts/admin/user/experience_modal_view.tsx b/frontend/javascripts/admin/user/experience_modal_view.tsx index 8667d9f8f74..77de9b8b46e 100644 --- a/frontend/javascripts/admin/user/experience_modal_view.tsx +++ b/frontend/javascripts/admin/user/experience_modal_view.tsx @@ -1,14 +1,14 @@ -import { useState } from "react"; -import { Modal, Tooltip, Table, InputNumber, Tag, Badge } from "antd"; import { CloseOutlined, DeleteOutlined, RollbackOutlined } from "@ant-design/icons"; -import _ from "lodash"; -import type { APIUser, ExperienceDomainList } from "types/api_flow_types"; -import { handleGenericError } from "libs/error_handling"; import { updateUser } from "admin/admin_rest_api"; +import { Badge, InputNumber, Modal, Table, Tag, Tooltip } from "antd"; import HighlightableRow from "components/highlightable_row"; import SelectExperienceDomain from "components/select_experience_domain"; +import { handleGenericError } from "libs/error_handling"; import Toast from "libs/toast"; import * as Utils from "libs/utils"; +import _ from "lodash"; +import { useState } from "react"; +import type { APIUser, ExperienceDomainList } from "types/api_flow_types"; const { Column } = Table; diff --git a/frontend/javascripts/admin/user/permissions_and_teams_modal_view.tsx b/frontend/javascripts/admin/user/permissions_and_teams_modal_view.tsx index 33adc70da4f..9479c66da8e 100644 --- a/frontend/javascripts/admin/user/permissions_and_teams_modal_view.tsx +++ b/frontend/javascripts/admin/user/permissions_and_teams_modal_view.tsx @@ -1,12 +1,12 @@ -import { Modal, Radio, Col, Row, Checkbox, Divider, type RadioChangeEvent, App } from "antd"; import { InfoCircleOutlined } from "@ant-design/icons"; -import React, { type Key, useEffect, useState } from "react"; +import { getEditableTeams, updateUser } from "admin/admin_rest_api"; +import { App, Checkbox, Col, Divider, Modal, Radio, type RadioChangeEvent, Row } from "antd"; +import { useFetch } from "libs/react_helpers"; +import * as Utils from "libs/utils"; import _ from "lodash"; -import type { APIUser, APITeam, APITeamMembership } from "types/api_flow_types"; -import { updateUser, getEditableTeams } from "admin/admin_rest_api"; import messages from "messages"; -import * as Utils from "libs/utils"; -import { useFetch } from "libs/react_helpers"; +import React, { type Key, useEffect, useState } from "react"; +import type { APITeam, APITeamMembership, APIUser } from "types/api_flow_types"; const RadioButton = Radio.Button; const RadioGroup = Radio.Group; diff --git a/frontend/javascripts/admin/user/user_list_view.tsx b/frontend/javascripts/admin/user/user_list_view.tsx index 70c27efe212..9cf7860aff0 100644 --- a/frontend/javascripts/admin/user/user_list_view.tsx +++ b/frontend/javascripts/admin/user/user_list_view.tsx @@ -1,7 +1,3 @@ -import type { RouteComponentProps } from "react-router-dom"; -import { Link } from "react-router-dom"; -import { PropTypes } from "@scalableminds/prop-types"; -import { Table, Tag, Spin, Button, Input, Modal, Alert, Row, Col, Tooltip, App } from "antd"; import { CheckCircleOutlined, CloseCircleOutlined, @@ -14,34 +10,38 @@ import { UserDeleteOutlined, UserOutlined, } from "@ant-design/icons"; -import { connect } from "react-redux"; -import React, { type Key, useEffect, useState } from "react"; -import _ from "lodash"; -import dayjs from "dayjs"; -import { location } from "libs/window"; -import type { - APIUser, - APITeamMembership, - ExperienceMap, - APIOrganization, -} from "types/api_flow_types"; -import { InviteUsersModal } from "admin/onboarding"; -import type { OxalisState } from "oxalis/store"; -import { enforceActiveUser } from "oxalis/model/accessors/user_accessor"; -import LinkButton from "components/link_button"; +import { PropTypes } from "@scalableminds/prop-types"; import { getEditableUsers, updateUser } from "admin/admin_rest_api"; -import EditableTextLabel from "oxalis/view/components/editable_text_label"; +import { InviteUsersModal } from "admin/onboarding"; +import { getActiveUserCount } from "admin/organization/pricing_plan_utils"; +import { renderTeamRolesAndPermissionsForUser } from "admin/team/team_list_view"; import ExperienceModalView from "admin/user/experience_modal_view"; -import Persistence from "libs/persistence"; import PermissionsAndTeamsModalView from "admin/user/permissions_and_teams_modal_view"; -import { getActiveUserCount } from "admin/organization/pricing_plan_utils"; +import { Alert, App, Button, Col, Input, Modal, Row, Spin, Table, Tag, Tooltip } from "antd"; +import LinkButton from "components/link_button"; +import dayjs from "dayjs"; +import Persistence from "libs/persistence"; import Toast from "libs/toast"; import * as Utils from "libs/utils"; +import { location } from "libs/window"; +import _ from "lodash"; import messages from "messages"; +import { enforceActiveOrganization } from "oxalis/model/accessors/organization_accessors"; +import { enforceActiveUser } from "oxalis/model/accessors/user_accessor"; +import type { OxalisState } from "oxalis/store"; +import EditableTextLabel from "oxalis/view/components/editable_text_label"; +import React, { type Key, useEffect, useState } from "react"; +import { connect } from "react-redux"; +import type { RouteComponentProps } from "react-router-dom"; +import { Link } from "react-router-dom"; +import type { + APIOrganization, + APITeamMembership, + APIUser, + ExperienceMap, +} from "types/api_flow_types"; import { logoutUserAction } from "../../oxalis/model/actions/user_actions"; import Store from "../../oxalis/store"; -import { enforceActiveOrganization } from "oxalis/model/accessors/organization_accessors"; -import { renderTeamRolesAndPermissionsForUser } from "admin/team/team_list_view"; const { Column } = Table; const { Search } = Input; diff --git a/frontend/javascripts/admin/user/user_selection_component.tsx b/frontend/javascripts/admin/user/user_selection_component.tsx index 4d9a1cecd99..ad22b0918b4 100644 --- a/frontend/javascripts/admin/user/user_selection_component.tsx +++ b/frontend/javascripts/admin/user/user_selection_component.tsx @@ -1,9 +1,9 @@ -import { Spin, Select } from "antd"; -import _ from "lodash"; import { getUsers } from "admin/admin_rest_api"; +import { Select, Spin } from "antd"; +import { handleGenericError } from "libs/error_handling"; import { useFetch } from "libs/react_helpers"; +import _ from "lodash"; import { useState } from "react"; -import { handleGenericError } from "libs/error_handling"; type Props = { handleSelection: (arg0: string) => void; diff --git a/frontend/javascripts/admin/voxelytics/ai_model_list_view.tsx b/frontend/javascripts/admin/voxelytics/ai_model_list_view.tsx index daf41d4130e..71d0d850405 100644 --- a/frontend/javascripts/admin/voxelytics/ai_model_list_view.tsx +++ b/frontend/javascripts/admin/voxelytics/ai_model_list_view.tsx @@ -1,24 +1,24 @@ -import _ from "lodash"; -import { useState } from "react"; import { PlusOutlined, SyncOutlined } from "@ant-design/icons"; -import { Table, Button, Modal, Space } from "antd"; import { getAiModels } from "admin/admin_rest_api"; -import type { AiModel, APIAnnotation } from "types/api_flow_types"; +import { JobState } from "admin/job/job_list_view"; +import { Button, Modal, Space, Table } from "antd"; import FormattedDate from "components/formatted_date"; +import { PageNotAvailableToNormalUser } from "components/permission_enforcer"; +import { useGuardedFetch } from "libs/react_helpers"; +import _ from "lodash"; +import type { Vector3 } from "oxalis/constants"; +import { getMagInfo, getSegmentationLayerByName } from "oxalis/model/accessors/dataset_accessor"; import { formatUserName } from "oxalis/model/accessors/user_accessor"; -import { useSelector } from "react-redux"; import type { OxalisState } from "oxalis/store"; -import { JobState } from "admin/job/job_list_view"; -import { Link } from "react-router-dom"; -import { useGuardedFetch } from "libs/react_helpers"; -import { PageNotAvailableToNormalUser } from "components/permission_enforcer"; import { type AnnotationInfoForAITrainingJob, TrainAiModelTab, } from "oxalis/view/jobs/train_ai_model"; -import { getMagInfo, getSegmentationLayerByName } from "oxalis/model/accessors/dataset_accessor"; -import type { Vector3 } from "oxalis/constants"; +import { useState } from "react"; import type { Key } from "react"; +import { useSelector } from "react-redux"; +import { Link } from "react-router-dom"; +import type { APIAnnotation, AiModel } from "types/api_flow_types"; export default function AiModelListView() { const activeUser = useSelector((state: OxalisState) => state.activeUser); diff --git a/frontend/javascripts/admin/voxelytics/artifacts_disk_usage_list.tsx b/frontend/javascripts/admin/voxelytics/artifacts_disk_usage_list.tsx index b8647a1cef0..3fec1e3da80 100644 --- a/frontend/javascripts/admin/voxelytics/artifacts_disk_usage_list.tsx +++ b/frontend/javascripts/admin/voxelytics/artifacts_disk_usage_list.tsx @@ -1,15 +1,15 @@ -import type React from "react"; import { Table } from "antd"; import _ from "lodash"; +import type React from "react"; +import type { ColumnsType } from "antd/lib/table"; +import { formatCountToDataAmountUnit } from "libs/format_utils"; +import { localeCompareBy } from "libs/utils"; import type { VoxelyticsArtifactConfig, VoxelyticsTaskConfigWithHierarchy, } from "types/api_flow_types"; -import { formatCountToDataAmountUnit } from "libs/format_utils"; -import type { ColumnsType } from "antd/lib/table"; import { renderArtifactPath } from "./artifacts_view"; -import { localeCompareBy } from "libs/utils"; type ArtifactTableEntry = { artifactName: string; diff --git a/frontend/javascripts/admin/voxelytics/artifacts_view.tsx b/frontend/javascripts/admin/voxelytics/artifacts_view.tsx index 3457b46ce7d..5ed2d9a5fd5 100644 --- a/frontend/javascripts/admin/voxelytics/artifacts_view.tsx +++ b/frontend/javascripts/admin/voxelytics/artifacts_view.tsx @@ -1,11 +1,11 @@ -import { JSONTree } from "react-json-tree"; -import { Button, Card, message } from "antd"; import { CopyOutlined, ExportOutlined } from "@ant-design/icons"; -import type { VoxelyticsArtifactConfig } from "types/api_flow_types"; import { getVoxelyticsArtifactChecksums } from "admin/admin_rest_api"; +import { Button, Card, message } from "antd"; import { formatCountToDataAmountUnit } from "libs/format_utils"; -import { copyToClipboad, isObjectEmpty, useTheme } from "./utils"; +import { JSONTree } from "react-json-tree"; import { Link } from "react-router-dom"; +import type { VoxelyticsArtifactConfig } from "types/api_flow_types"; +import { copyToClipboad, isObjectEmpty, useTheme } from "./utils"; export function renderArtifactPath(artifact: VoxelyticsArtifactConfig) { return ( diff --git a/frontend/javascripts/admin/voxelytics/dag_view.tsx b/frontend/javascripts/admin/voxelytics/dag_view.tsx index 8756d1e1069..8faa74faaac 100644 --- a/frontend/javascripts/admin/voxelytics/dag_view.tsx +++ b/frontend/javascripts/admin/voxelytics/dag_view.tsx @@ -1,3 +1,4 @@ +import dagre from "dagre"; import { useRef, useState } from "react"; import ReactFlow, { MiniMap, @@ -6,20 +7,19 @@ import ReactFlow, { type Edge as FlowEdge, type ReactFlowInstance, } from "react-flow-renderer"; -import dagre from "dagre"; +import { ExpandOutlined, MinusOutlined, PlusOutlined } from "@ant-design/icons"; +import { Button } from "antd"; import ColorHash from "color-hash"; import { memoize } from "lodash"; +import type { OxalisState, Theme } from "oxalis/store"; +import { useSelector } from "react-redux"; import { VoxelyticsRunState, type VoxelyticsTaskConfigWithName, type VoxelyticsWorkflowDag, type VoxelyticsWorkflowDagEdge, } from "types/api_flow_types"; -import { useSelector } from "react-redux"; -import type { OxalisState, Theme } from "oxalis/store"; -import { Button } from "antd"; -import { ExpandOutlined, MinusOutlined, PlusOutlined } from "@ant-design/icons"; export const colorHasher = new ColorHash({ lightness: [0.35, 0.5, 0.65] }); diff --git a/frontend/javascripts/admin/voxelytics/log_tab.tsx b/frontend/javascripts/admin/voxelytics/log_tab.tsx index 9789b18b715..7dd9cce5397 100644 --- a/frontend/javascripts/admin/voxelytics/log_tab.tsx +++ b/frontend/javascripts/admin/voxelytics/log_tab.tsx @@ -1,14 +1,14 @@ -import { useMemo, useState } from "react"; -import { Button, message, Select, Switch } from "antd"; -import chalk from "chalk"; +import { SyncOutlined } from "@ant-design/icons"; +import { getVoxelyticsLogs } from "admin/admin_rest_api"; import Ansi from "ansi-to-react"; +import { Button, Select, Switch, message } from "antd"; +import chalk from "chalk"; import classnames from "classnames"; import { usePolling } from "libs/react_hooks"; -import { SyncOutlined } from "@ant-design/icons"; -import { getVoxelyticsLogs } from "admin/admin_rest_api"; -import { addAfterPadding, addBeforePadding, type Result, VX_POLLING_INTERVAL } from "./utils"; -import type { VoxelyticsLogLine } from "types/api_flow_types"; import { LOG_LEVELS } from "oxalis/constants"; +import { useMemo, useState } from "react"; +import type { VoxelyticsLogLine } from "types/api_flow_types"; +import { type Result, VX_POLLING_INTERVAL, addAfterPadding, addBeforePadding } from "./utils"; type LogResult = Result>; diff --git a/frontend/javascripts/admin/voxelytics/statistics_tab.tsx b/frontend/javascripts/admin/voxelytics/statistics_tab.tsx index 44453c9666b..c2b376eb648 100644 --- a/frontend/javascripts/admin/voxelytics/statistics_tab.tsx +++ b/frontend/javascripts/admin/voxelytics/statistics_tab.tsx @@ -1,19 +1,19 @@ -import { useState } from "react"; -import { Button, Tooltip } from "antd"; import { SyncOutlined } from "@ant-design/icons"; import { getVoxelyticsChunkStatistics } from "admin/admin_rest_api"; -import { usePolling } from "libs/react_hooks"; +import { Button, Tooltip } from "antd"; +import dayjs from "dayjs"; import { - formatCountToDataAmountUnit, formatCPU, - formatTimeIntervalStrict, + formatCountToDataAmountUnit, formatDurationStrict, formatNumber, + formatTimeIntervalStrict, } from "libs/format_utils"; +import { usePolling } from "libs/react_hooks"; +import { pluralize } from "libs/utils"; +import { useState } from "react"; import type { VoxelyticsChunkStatistics } from "types/api_flow_types"; import type { Result } from "./utils"; -import dayjs from "dayjs"; -import { pluralize } from "libs/utils"; type StatisticsResult = Result>; diff --git a/frontend/javascripts/admin/voxelytics/task_list_view.tsx b/frontend/javascripts/admin/voxelytics/task_list_view.tsx index feecafa1149..0447915039a 100644 --- a/frontend/javascripts/admin/voxelytics/task_list_view.tsx +++ b/frontend/javascripts/admin/voxelytics/task_list_view.tsx @@ -1,36 +1,47 @@ -import React, { useEffect, useState, useMemo } from "react"; import { + CheckCircleOutlined, + ClockCircleOutlined, + CloseCircleOutlined, + ExclamationCircleOutlined, + ExportOutlined, + FieldTimeOutlined, + LeftOutlined, + MinusCircleOutlined, + SyncOutlined, +} from "@ant-design/icons"; +import { + App, + Button, + Col, Collapse, + type CollapseProps, + Dropdown, Input, + type MenuProps, Row, - Col, - Button, - Dropdown, - notification, - message, + Select, Tag, Tooltip, - Select, - type MenuProps, - App, - type CollapseProps, + message, + notification, } from "antd"; -import { - ClockCircleOutlined, - MinusCircleOutlined, - CloseCircleOutlined, - SyncOutlined, - CheckCircleOutlined, - ExclamationCircleOutlined, - LeftOutlined, - FieldTimeOutlined, - ExportOutlined, -} from "@ant-design/icons"; import MiniSearch from "minisearch"; +import React, { useEffect, useState, useMemo } from "react"; -import { Link, useHistory, useLocation, useParams } from "react-router-dom"; +import { deleteWorkflow, getVoxelyticsLogs } from "admin/admin_rest_api"; import dayjs from "dayjs"; +import { + formatDateMedium, + formatDurationStrict, + formatTimeInterval, + formatTimeIntervalStrict, +} from "libs/format_utils"; import { useSearchParams, useUpdateEvery } from "libs/react_hooks"; +import { notEmpty } from "libs/utils"; +import { LOG_LEVELS } from "oxalis/constants"; +import type { OxalisState } from "oxalis/store"; +import { useSelector } from "react-redux"; +import { Link, useHistory, useLocation, useParams } from "react-router-dom"; import { VoxelyticsRunState, type VoxelyticsTaskConfig, @@ -39,23 +50,12 @@ import { type VoxelyticsTaskInfo, type VoxelyticsWorkflowReport, } from "types/api_flow_types"; -import { - formatDateMedium, - formatTimeInterval, - formatTimeIntervalStrict, - formatDurationStrict, -} from "libs/format_utils"; +import type { ArrayElement } from "types/globals"; +import ArtifactsDiskUsageList from "./artifacts_disk_usage_list"; import DAGView, { colorHasher } from "./dag_view"; -import TaskView from "./task_view"; import { formatLog } from "./log_tab"; +import TaskView from "./task_view"; import { addAfterPadding, addBeforePadding } from "./utils"; -import { LOG_LEVELS } from "oxalis/constants"; -import { getVoxelyticsLogs, deleteWorkflow } from "admin/admin_rest_api"; -import ArtifactsDiskUsageList from "./artifacts_disk_usage_list"; -import { notEmpty } from "libs/utils"; -import type { ArrayElement } from "types/globals"; -import { useSelector } from "react-redux"; -import type { OxalisState } from "oxalis/store"; const { Search } = Input; diff --git a/frontend/javascripts/admin/voxelytics/task_view.tsx b/frontend/javascripts/admin/voxelytics/task_view.tsx index e9eed30e35b..56ca3d8405b 100644 --- a/frontend/javascripts/admin/voxelytics/task_view.tsx +++ b/frontend/javascripts/admin/voxelytics/task_view.tsx @@ -1,6 +1,7 @@ -import { JSONTree, type ShouldExpandNodeInitially, type LabelRenderer } from "react-json-tree"; import { Progress, Tabs, type TabsProps, Tooltip } from "antd"; +import { formatNumber } from "libs/format_utils"; import Markdown from "libs/markdown_adapter"; +import { JSONTree, type LabelRenderer, type ShouldExpandNodeInitially } from "react-json-tree"; import { type VoxelyticsArtifactConfig, VoxelyticsRunState, @@ -12,7 +13,6 @@ import ArtifactsViewer from "./artifacts_view"; import LogTab from "./log_tab"; import StatisticsTab from "./statistics_tab"; import { runStateToStatus, useTheme } from "./utils"; -import { formatNumber } from "libs/format_utils"; const labelRenderer: LabelRenderer = function (_keyPath) { const keyPath = _keyPath.slice().reverse(); diff --git a/frontend/javascripts/admin/voxelytics/workflow_list_view.tsx b/frontend/javascripts/admin/voxelytics/workflow_list_view.tsx index 0a378dccf16..55937c21ede 100644 --- a/frontend/javascripts/admin/voxelytics/workflow_list_view.tsx +++ b/frontend/javascripts/admin/voxelytics/workflow_list_view.tsx @@ -1,21 +1,21 @@ +import { SyncOutlined } from "@ant-design/icons"; +import { PropTypes } from "@scalableminds/prop-types"; +import { getVoxelyticsWorkflows } from "admin/admin_rest_api"; +import { Button, Input, Progress, Table, Tooltip } from "antd"; +import { formatCountToDataAmountUnit, formatDateMedium, formatNumber } from "libs/format_utils"; +import Persistence from "libs/persistence"; +import { usePolling } from "libs/react_hooks"; +import Toast from "libs/toast"; +import * as Utils from "libs/utils"; import type React from "react"; import { type Key, useEffect, useMemo, useState } from "react"; -import { SyncOutlined } from "@ant-design/icons"; -import { Table, Progress, Tooltip, Button, Input } from "antd"; import { Link } from "react-router-dom"; -import { getVoxelyticsWorkflows } from "admin/admin_rest_api"; import { - type VoxelyticsWorkflowListingRun, VoxelyticsRunState, type VoxelyticsWorkflowListing, + type VoxelyticsWorkflowListingRun, } from "types/api_flow_types"; -import { usePolling } from "libs/react_hooks"; -import { formatCountToDataAmountUnit, formatDateMedium, formatNumber } from "libs/format_utils"; -import Toast from "libs/toast"; -import { runStateToStatus, VX_POLLING_INTERVAL } from "./utils"; -import Persistence from "libs/persistence"; -import * as Utils from "libs/utils"; -import { PropTypes } from "@scalableminds/prop-types"; +import { VX_POLLING_INTERVAL, runStateToStatus } from "./utils"; const { Search } = Input; diff --git a/frontend/javascripts/admin/voxelytics/workflow_view.tsx b/frontend/javascripts/admin/voxelytics/workflow_view.tsx index 6c6ad07d206..6cf55655da7 100644 --- a/frontend/javascripts/admin/voxelytics/workflow_view.tsx +++ b/frontend/javascripts/admin/voxelytics/workflow_view.tsx @@ -1,7 +1,13 @@ +import { getVoxelyticsWorkflow, isWorkflowAccessibleBySwitching } from "admin/admin_rest_api"; +import BrainSpinner, { BrainSpinnerWithError } from "components/brain_spinner"; +import { usePolling, useSearchParams } from "libs/react_hooks"; +import Toast from "libs/toast"; import _ from "lodash"; -import { useEffect, useState, useMemo } from "react"; -import { useParams } from "react-router-dom"; +import type { OxalisState } from "oxalis/store"; +import TabTitle from "oxalis/view/components/tab_title_component"; +import { useEffect, useMemo, useState } from "react"; import { useSelector } from "react-redux"; +import { useParams } from "react-router-dom"; import { type APIOrganization, VoxelyticsRunState, @@ -14,12 +20,6 @@ import { type VoxelyticsWorkflowDagNode, type VoxelyticsWorkflowReport, } from "types/api_flow_types"; -import { useSearchParams, usePolling } from "libs/react_hooks"; -import Toast from "libs/toast"; -import type { OxalisState } from "oxalis/store"; -import TabTitle from "oxalis/view/components/tab_title_component"; -import { getVoxelyticsWorkflow, isWorkflowAccessibleBySwitching } from "admin/admin_rest_api"; -import BrainSpinner, { BrainSpinnerWithError } from "components/brain_spinner"; import TaskListView from "./task_list_view"; import { VX_POLLING_INTERVAL } from "./utils"; diff --git a/frontend/javascripts/admin/welcome_ui.tsx b/frontend/javascripts/admin/welcome_ui.tsx index 03df025e82e..ebef286618b 100644 --- a/frontend/javascripts/admin/welcome_ui.tsx +++ b/frontend/javascripts/admin/welcome_ui.tsx @@ -1,12 +1,12 @@ import { CloseOutlined } from "@ant-design/icons"; +import { InviteUsersModal } from "admin/onboarding"; import { Button, Tooltip } from "antd"; +import { getDemoDatasetUrl } from "features"; +import renderIndependently from "libs/render_independently"; +import { isUserAdminOrDatasetManager, isUserAdminOrTeamManager } from "libs/utils"; import * as React from "react"; import { Link } from "react-router-dom"; -import { isUserAdminOrTeamManager, isUserAdminOrDatasetManager } from "libs/utils"; import type { APIUser } from "types/api_flow_types"; -import { getDemoDatasetUrl } from "features"; -import renderIndependently from "libs/render_independently"; -import { InviteUsersModal } from "admin/onboarding"; type WhatsNextActionProps = { title: string; description: string; diff --git a/frontend/javascripts/banners.tsx b/frontend/javascripts/banners.tsx index fe02704d528..92b71ffa215 100644 --- a/frontend/javascripts/banners.tsx +++ b/frontend/javascripts/banners.tsx @@ -8,6 +8,7 @@ import FormattedDate from "components/formatted_date"; import dayjs from "dayjs"; import { useFetch, useInterval } from "libs/react_helpers"; import { parseCTimeDefaultDate } from "libs/utils"; +import * as Utils from "libs/utils"; import _ from "lodash"; import constants from "oxalis/constants"; import { setNavbarHeightAction } from "oxalis/model/actions/ui_actions"; @@ -18,7 +19,6 @@ import type React from "react"; import { useEffect, useState } from "react"; import { useSelector } from "react-redux"; import type { MaintenanceInfo } from "types/api_flow_types"; -import * as Utils from "libs/utils"; const INITIAL_DELAY = 5000; const INTERVAL_TO_FETCH_MAINTENANCES_MS = 60000; // 1min diff --git a/frontend/javascripts/components/async_clickables.tsx b/frontend/javascripts/components/async_clickables.tsx index 1b63ccb17c7..043b0f602be 100644 --- a/frontend/javascripts/components/async_clickables.tsx +++ b/frontend/javascripts/components/async_clickables.tsx @@ -1,5 +1,5 @@ -import { Button, ConfigProvider, type ButtonProps } from "antd"; import { LoadingOutlined } from "@ant-design/icons"; +import { Button, type ButtonProps, ConfigProvider } from "antd"; import * as React from "react"; import FastTooltip from "./fast_tooltip"; const { useState, useEffect, useRef } = React; diff --git a/frontend/javascripts/components/brain_spinner.tsx b/frontend/javascripts/components/brain_spinner.tsx index 8d16e026215..f47abf02602 100644 --- a/frontend/javascripts/components/brain_spinner.tsx +++ b/frontend/javascripts/components/brain_spinner.tsx @@ -1,11 +1,11 @@ -import type * as React from "react"; -import type { APIOrganization } from "types/api_flow_types"; -import { AsyncButton } from "components/async_clickables"; import { switchToOrganization } from "admin/admin_rest_api"; +import LoginForm from "admin/auth/login_form"; +import { Button, Card, Col, Row } from "antd"; +import { AsyncButton } from "components/async_clickables"; import messages from "messages"; +import type * as React from "react"; import { Link } from "react-router-dom"; -import { Button, Card, Col, Row } from "antd"; -import LoginForm from "admin/auth/login_form"; +import type { APIOrganization } from "types/api_flow_types"; type Props = { message?: React.ReactNode; diff --git a/frontend/javascripts/components/color_picker.tsx b/frontend/javascripts/components/color_picker.tsx index a896ae00a8d..6a4967d86e8 100644 --- a/frontend/javascripts/components/color_picker.tsx +++ b/frontend/javascripts/components/color_picker.tsx @@ -1,9 +1,9 @@ -import { useRef, useState } from "react"; import { Popover } from "antd"; -import * as Utils from "libs/utils"; -import { HexColorInput, HexColorPicker } from "react-colorful"; import useThrottledCallback from "beautiful-react-hooks/useThrottledCallback"; +import * as Utils from "libs/utils"; import type { Vector3 } from "oxalis/constants"; +import { useRef, useState } from "react"; +import { HexColorInput, HexColorPicker } from "react-colorful"; export const ThrottledColorPicker = ({ color, diff --git a/frontend/javascripts/components/disable_generic_dnd.ts b/frontend/javascripts/components/disable_generic_dnd.ts index 127d1ff47d5..9d3f618a4b6 100644 --- a/frontend/javascripts/components/disable_generic_dnd.ts +++ b/frontend/javascripts/components/disable_generic_dnd.ts @@ -1,5 +1,5 @@ -import React from "react"; import window from "libs/window"; +import React from "react"; import type { EmptyObject } from "types/globals"; export default class DisableGenericDnd extends React.Component { componentDidMount() { diff --git a/frontend/javascripts/components/legal.tsx b/frontend/javascripts/components/legal.tsx index c0d19833378..7d12c78fc94 100644 --- a/frontend/javascripts/components/legal.tsx +++ b/frontend/javascripts/components/legal.tsx @@ -1,8 +1,8 @@ -import { Row, Col, Card } from "antd"; +import { getDefaultOrganization, getOperatorData } from "admin/admin_rest_api"; +import { Card, Col, Row } from "antd"; import Markdown from "libs/markdown_adapter"; import React from "react"; import type { APIOrganization } from "types/api_flow_types"; -import { getOperatorData, getDefaultOrganization } from "admin/admin_rest_api"; import type { EmptyObject } from "types/globals"; type Props = EmptyObject; type State = { diff --git a/frontend/javascripts/components/loop.ts b/frontend/javascripts/components/loop.ts index 4216cc20b35..a529c21a589 100644 --- a/frontend/javascripts/components/loop.ts +++ b/frontend/javascripts/components/loop.ts @@ -1,5 +1,5 @@ -import { Component } from "react"; import window from "libs/window"; +import { Component } from "react"; import type { EmptyObject } from "types/globals"; type LoopProps = { interval: number; diff --git a/frontend/javascripts/components/permission_enforcer.tsx b/frontend/javascripts/components/permission_enforcer.tsx index 5f279aac6a9..f7a1f29c796 100644 --- a/frontend/javascripts/components/permission_enforcer.tsx +++ b/frontend/javascripts/components/permission_enforcer.tsx @@ -1,4 +1,4 @@ -import { Button, Result, Col, Row } from "antd"; +import { Button, Col, Result, Row } from "antd"; import { Link } from "react-router-dom"; export function PageNotAvailableToNormalUser() { diff --git a/frontend/javascripts/components/pricing_enforcers.tsx b/frontend/javascripts/components/pricing_enforcers.tsx index ec5fde4cbe0..cf769e790e3 100644 --- a/frontend/javascripts/components/pricing_enforcers.tsx +++ b/frontend/javascripts/components/pricing_enforcers.tsx @@ -1,22 +1,22 @@ -import React from "react"; -import { useSelector } from "react-redux"; -import { Alert, type ButtonProps, Button, Result, Popover, Col, Row } from "antd"; import { LockOutlined } from "@ant-design/icons"; import { + type PricingPlanEnum, getFeatureNotAvailableInPlanMessage, isFeatureAllowedByPricingPlan, - type PricingPlanEnum, } from "admin/organization/pricing_plan_utils"; import { isUserAllowedToRequestUpgrades } from "admin/organization/pricing_plan_utils"; -import { Link } from "react-router-dom"; -import type { OxalisState } from "oxalis/store"; -import { rgbToHex } from "libs/utils"; -import { PRIMARY_COLOR } from "oxalis/constants"; import UpgradePricingPlanModal from "admin/organization/upgrade_plan_modal"; -import type { APIOrganization, APIUser } from "types/api_flow_types"; +import { Alert, Button, type ButtonProps, Col, Popover, Result, Row } from "antd"; +import type { PopoverProps } from "antd/lib"; import type { TooltipPlacement } from "antd/lib/tooltip"; +import { rgbToHex } from "libs/utils"; +import { PRIMARY_COLOR } from "oxalis/constants"; +import type { OxalisState } from "oxalis/store"; import { SwitchSetting } from "oxalis/view/components/setting_input_views"; -import type { PopoverProps } from "antd/lib"; +import React from "react"; +import { useSelector } from "react-redux"; +import { Link } from "react-router-dom"; +import type { APIOrganization, APIUser } from "types/api_flow_types"; const PRIMARY_COLOR_HEX = rgbToHex(PRIMARY_COLOR); diff --git a/frontend/javascripts/components/redirect.tsx b/frontend/javascripts/components/redirect.tsx index 68bfb3ea29e..defacdddddb 100644 --- a/frontend/javascripts/components/redirect.tsx +++ b/frontend/javascripts/components/redirect.tsx @@ -1,7 +1,7 @@ +import { useEffectOnlyOnce } from "libs/react_hooks"; +import type React from "react"; import type { RouteComponentProps } from "react-router-dom"; import { withRouter } from "react-router-dom"; -import type React from "react"; -import { useEffectOnlyOnce } from "libs/react_hooks"; type Props = { redirectTo: () => Promise; diff --git a/frontend/javascripts/components/secured_route.tsx b/frontend/javascripts/components/secured_route.tsx index 67768a9a3cd..93c85c4f9db 100644 --- a/frontend/javascripts/components/secured_route.tsx +++ b/frontend/javascripts/components/secured_route.tsx @@ -1,17 +1,17 @@ -import React from "react"; -import { Route, withRouter } from "react-router-dom"; -import { connect } from "react-redux"; import LoginView from "admin/auth/login_view"; import { - isFeatureAllowedByPricingPlan, type PricingPlanEnum, + isFeatureAllowedByPricingPlan, } from "admin/organization/pricing_plan_utils"; -import type { APIOrganization, APIUser } from "types/api_flow_types"; import { PageUnavailableForYourPlanView } from "components/pricing_enforcers"; -import type { ComponentType } from "react"; import { isUserAdminOrManager } from "libs/utils"; -import type { RouteComponentProps } from "react-router-dom"; import type { OxalisState } from "oxalis/store"; +import React from "react"; +import type { ComponentType } from "react"; +import { connect } from "react-redux"; +import { Route, withRouter } from "react-router-dom"; +import type { RouteComponentProps } from "react-router-dom"; +import type { APIOrganization, APIUser } from "types/api_flow_types"; import { PageNotAvailableToNormalUser } from "./permission_enforcer"; type StateProps = { diff --git a/frontend/javascripts/components/select_experience_domain.tsx b/frontend/javascripts/components/select_experience_domain.tsx index 96dc348c46c..bdd55586e47 100644 --- a/frontend/javascripts/components/select_experience_domain.tsx +++ b/frontend/javascripts/components/select_experience_domain.tsx @@ -1,7 +1,7 @@ +import { getExistingExperienceDomains } from "admin/admin_rest_api"; import { Select, Tooltip } from "antd"; import * as React from "react"; import type { ExperienceDomainList } from "types/api_flow_types"; -import { getExistingExperienceDomains } from "admin/admin_rest_api"; type Props = { value?: string | Array; width: number; diff --git a/frontend/javascripts/components/terms_of_services_check.tsx b/frontend/javascripts/components/terms_of_services_check.tsx index d6b39d39a0d..57ddade4ed5 100644 --- a/frontend/javascripts/components/terms_of_services_check.tsx +++ b/frontend/javascripts/components/terms_of_services_check.tsx @@ -1,3 +1,5 @@ +import { DownOutlined } from "@ant-design/icons"; +import { getUsersOrganizations } from "admin/admin_rest_api"; import { type AcceptanceInfo, acceptTermsOfService, @@ -6,19 +8,17 @@ import { } from "admin/api/terms_of_service"; import { Dropdown, type MenuProps, Modal, Space, Spin } from "antd"; import { AsyncButton } from "components/async_clickables"; +import dayjs from "dayjs"; import { useFetch } from "libs/react_helpers"; import UserLocalStorage from "libs/user_local_storage"; -import dayjs from "dayjs"; +import _ from "lodash"; +import { switchTo } from "navbar"; import type { OxalisState } from "oxalis/store"; import type React from "react"; import { useEffect, useState } from "react"; import { useSelector } from "react-redux"; -import { formatDateInLocalTimeZone } from "./formatted_date"; -import { switchTo } from "navbar"; -import { getUsersOrganizations } from "admin/admin_rest_api"; -import { DownOutlined } from "@ant-design/icons"; -import _ from "lodash"; import type { APIUser } from "types/api_flow_types"; +import { formatDateInLocalTimeZone } from "./formatted_date"; const SNOOZE_DURATION_IN_DAYS = 3; const LAST_TERMS_OF_SERVICE_WARNING_KEY = "lastTermsOfServiceWarning"; diff --git a/frontend/javascripts/components/text_with_description.tsx b/frontend/javascripts/components/text_with_description.tsx index 6eac349da69..4fabe2e92d5 100644 --- a/frontend/javascripts/components/text_with_description.tsx +++ b/frontend/javascripts/components/text_with_description.tsx @@ -1,8 +1,8 @@ import { Popover, Tooltip } from "antd"; import Markdown from "libs/markdown_adapter"; -import * as React from "react"; import type { EditableTextLabelProp } from "oxalis/view/components/editable_text_label"; import EditableTextLabel from "oxalis/view/components/editable_text_label"; +import * as React from "react"; type EditableProps = EditableTextLabelProp & { isEditable: true; diff --git a/frontend/javascripts/dashboard/advanced_dataset/create_explorative_modal.tsx b/frontend/javascripts/dashboard/advanced_dataset/create_explorative_modal.tsx index de387d053d3..a3185522507 100644 --- a/frontend/javascripts/dashboard/advanced_dataset/create_explorative_modal.tsx +++ b/frontend/javascripts/dashboard/advanced_dataset/create_explorative_modal.tsx @@ -1,19 +1,19 @@ import { InfoCircleOutlined } from "@ant-design/icons"; -import { Link } from "react-router-dom"; -import { Modal, Radio, Button, Tooltip, Spin } from "antd"; -import React, { useEffect, useState } from "react"; -import type { APIDataset, APISegmentationLayer } from "types/api_flow_types"; +import { getDataset } from "admin/admin_rest_api"; +import { Button, Modal, Radio, Spin, Tooltip } from "antd"; +import { Slider } from "components/slider"; +import { useFetch } from "libs/react_helpers"; import { doesSupportVolumeWithFallback, - getSomeMagInfoForDataset, - getSegmentationLayers, getMagInfo, getSegmentationLayerByName, + getSegmentationLayers, + getSomeMagInfoForDataset, } from "oxalis/model/accessors/dataset_accessor"; -import { getDataset } from "admin/admin_rest_api"; -import { useFetch } from "libs/react_helpers"; import type { MagInfo } from "oxalis/model/helpers/mag_info"; -import { Slider } from "components/slider"; +import React, { useEffect, useState } from "react"; +import { Link } from "react-router-dom"; +import type { APIDataset, APISegmentationLayer } from "types/api_flow_types"; type Props = { datasetId: string; diff --git a/frontend/javascripts/dashboard/advanced_dataset/dataset_access_list_view.tsx b/frontend/javascripts/dashboard/advanced_dataset/dataset_access_list_view.tsx index 58968d349f9..4e98b4074c0 100644 --- a/frontend/javascripts/dashboard/advanced_dataset/dataset_access_list_view.tsx +++ b/frontend/javascripts/dashboard/advanced_dataset/dataset_access_list_view.tsx @@ -1,10 +1,10 @@ -import { Spin, Tag } from "antd"; -import * as React from "react"; -import type { APIDataset, APIUser } from "types/api_flow_types"; import { getDatasetAccessList } from "admin/admin_rest_api"; +import { Spin, Tag } from "antd"; import { handleGenericError } from "libs/error_handling"; import { stringToColor } from "libs/format_utils"; import { useFetch } from "libs/react_helpers"; +import * as React from "react"; +import type { APIDataset, APIUser } from "types/api_flow_types"; type Props = { dataset: APIDataset; diff --git a/frontend/javascripts/dashboard/advanced_dataset/dataset_action_view.tsx b/frontend/javascripts/dashboard/advanced_dataset/dataset_action_view.tsx index d6351bae80f..4c1d3c6767d 100644 --- a/frontend/javascripts/dashboard/advanced_dataset/dataset_action_view.tsx +++ b/frontend/javascripts/dashboard/advanced_dataset/dataset_action_view.tsx @@ -8,20 +8,20 @@ import { SettingOutlined, WarningOutlined, } from "@ant-design/icons"; -import window from "libs/window"; -import { Link, type LinkProps } from "react-router-dom"; -import type * as React from "react"; -import type { APIDataset, APIDatasetCompact } from "types/api_flow_types"; +import { useQueryClient } from "@tanstack/react-query"; import { clearCache, deleteDatasetOnDisk, getDataset } from "admin/admin_rest_api"; -import Toast from "libs/toast"; -import messages from "messages"; -import CreateExplorativeModal from "dashboard/advanced_dataset/create_explorative_modal"; import { type MenuProps, Modal, Typography } from "antd"; -import { useState } from "react"; +import CreateExplorativeModal from "dashboard/advanced_dataset/create_explorative_modal"; import { confirmAsync } from "dashboard/dataset/helper_components"; -import { useQueryClient } from "@tanstack/react-query"; -import { getNoActionsAvailableMenu } from "oxalis/view/context_menu"; +import Toast from "libs/toast"; +import window from "libs/window"; +import messages from "messages"; import { getReadableURLPart } from "oxalis/model/accessors/dataset_accessor"; +import { getNoActionsAvailableMenu } from "oxalis/view/context_menu"; +import type * as React from "react"; +import { useState } from "react"; +import { Link, type LinkProps } from "react-router-dom"; +import type { APIDataset, APIDatasetCompact } from "types/api_flow_types"; const disabledStyle: React.CSSProperties = { pointerEvents: "none", diff --git a/frontend/javascripts/dashboard/advanced_dataset/dataset_table.tsx b/frontend/javascripts/dashboard/advanced_dataset/dataset_table.tsx index 417bf0e4843..ec16ac078c7 100644 --- a/frontend/javascripts/dashboard/advanced_dataset/dataset_table.tsx +++ b/frontend/javascripts/dashboard/advanced_dataset/dataset_table.tsx @@ -1,47 +1,47 @@ import { FileOutlined, FolderOpenOutlined, PlusOutlined, WarningOutlined } from "@ant-design/icons"; -import { Link } from "react-router-dom"; +import type { DatasetUpdater } from "admin/admin_rest_api"; import { Dropdown, type MenuProps, type TableProps, Tag, Tooltip } from "antd"; import type { FilterValue, SorterResult, TablePaginationConfig } from "antd/lib/table/interface"; -import * as React from "react"; -import _ from "lodash"; -import { diceCoefficient as dice } from "dice-coefficient"; -import type { OxalisState } from "oxalis/store"; -import type { - APIDatasetCompact, - APIMaybeUnimportedDataset, - FolderItem, -} from "types/api_flow_types"; -import type { DatasetFilteringMode } from "dashboard/dataset_view"; -import { stringToColor } from "libs/format_utils"; -import CategorizationLabel from "oxalis/view/components/categorization_label"; +import classNames from "classnames"; +import FixedExpandableTable from "components/fixed_expandable_table"; +import FormattedDate from "components/formatted_date"; import DatasetActionView, { getDatasetActionContextMenu, } from "dashboard/advanced_dataset/dataset_action_view"; -import EditableTextIcon from "oxalis/view/components/editable_text_icon"; -import FormattedDate from "components/formatted_date"; +import type { DatasetCollectionContextValue } from "dashboard/dataset/dataset_collection_context"; +import { MINIMUM_SEARCH_QUERY_LENGTH } from "dashboard/dataset/queries"; +import type { DatasetFilteringMode } from "dashboard/dataset_view"; +import { + type DnDDropItemProps, + generateSettingsForFolder, + useDatasetDrop, +} from "dashboard/folders/folder_tree"; +import { diceCoefficient as dice } from "dice-coefficient"; +import { stringToColor } from "libs/format_utils"; +import Shortcut from "libs/shortcut_component"; import * as Utils from "libs/utils"; -import FixedExpandableTable from "components/fixed_expandable_table"; -import { DndProvider, DragPreviewImage, useDrag } from "react-dnd"; -import { HTML5Backend } from "react-dnd-html5-backend"; +import _ from "lodash"; +import { Unicode } from "oxalis/constants"; +import { getReadableURLPart } from "oxalis/model/accessors/dataset_accessor"; +import type { OxalisState } from "oxalis/store"; +import CategorizationLabel from "oxalis/view/components/categorization_label"; +import EditableTextIcon from "oxalis/view/components/editable_text_icon"; import { ContextMenuContext, GenericContextMenuContainer, getContextMenuPositionFromEvent, } from "oxalis/view/context_menu"; -import Shortcut from "libs/shortcut_component"; -import { MINIMUM_SEARCH_QUERY_LENGTH } from "dashboard/dataset/queries"; +import * as React from "react"; +import { DndProvider, DragPreviewImage, useDrag } from "react-dnd"; +import { HTML5Backend } from "react-dnd-html5-backend"; import { useSelector } from "react-redux"; -import type { DatasetCollectionContextValue } from "dashboard/dataset/dataset_collection_context"; -import { Unicode } from "oxalis/constants"; -import type { DatasetUpdater } from "admin/admin_rest_api"; -import { - generateSettingsForFolder, - useDatasetDrop, - type DnDDropItemProps, -} from "dashboard/folders/folder_tree"; -import classNames from "classnames"; +import { Link } from "react-router-dom"; +import type { + APIDatasetCompact, + APIMaybeUnimportedDataset, + FolderItem, +} from "types/api_flow_types"; import type { EmptyObject } from "types/globals"; -import { getReadableURLPart } from "oxalis/model/accessors/dataset_accessor"; type FolderItemWithName = FolderItem & { name: string }; export type DatasetOrFolder = APIDatasetCompact | FolderItemWithName; diff --git a/frontend/javascripts/dashboard/dashboard_task_list_view.tsx b/frontend/javascripts/dashboard/dashboard_task_list_view.tsx index 6e9124d57db..281ea8bd13a 100644 --- a/frontend/javascripts/dashboard/dashboard_task_list_view.tsx +++ b/frontend/javascripts/dashboard/dashboard_task_list_view.tsx @@ -1,4 +1,3 @@ -import { Button, Modal, Tag, Card, Row, Col, List, Tooltip } from "antd"; import { CheckCircleOutlined, DeleteOutlined, @@ -9,31 +8,32 @@ import { TeamOutlined, UserAddOutlined, } from "@ant-design/icons"; -import { Link } from "react-router-dom"; import { PropTypes } from "@scalableminds/prop-types"; -import { connect } from "react-redux"; +import { Button, Card, Col, List, Modal, Row, Tag, Tooltip } from "antd"; import Markdown from "libs/markdown_adapter"; import * as React from "react"; +import { connect } from "react-redux"; +import { Link } from "react-router-dom"; +import { deleteAnnotation, downloadAnnotation, resetAnnotation } from "admin/admin_rest_api"; +import { finishTask, peekNextTasks, requestTask } from "admin/api/tasks"; import classNames from "classnames"; -import type { APITaskWithAnnotation, APIUser, APIAnnotation } from "types/api_flow_types"; import { AsyncButton, AsyncLink } from "components/async_clickables"; -import type { OxalisState } from "oxalis/store"; -import { deleteAnnotation, resetAnnotation, downloadAnnotation } from "admin/admin_rest_api"; -import { finishTask, requestTask, peekNextTasks } from "admin/api/tasks"; -import { enforceActiveUser } from "oxalis/model/accessors/user_accessor"; -import { getSkeletonDescriptor } from "oxalis/model/accessors/skeletontracing_accessor"; -import { getVolumeDescriptors } from "oxalis/model/accessors/volumetracing_accessor"; -import { handleGenericError } from "libs/error_handling"; import FormattedDate from "components/formatted_date"; import LinkButton from "components/link_button"; +import TransferTaskModal from "dashboard/transfer_task_modal"; +import { handleGenericError } from "libs/error_handling"; import Persistence from "libs/persistence"; import Request from "libs/request"; import Toast from "libs/toast"; -import TransferTaskModal from "dashboard/transfer_task_modal"; import * as Utils from "libs/utils"; import messages from "messages"; +import { getSkeletonDescriptor } from "oxalis/model/accessors/skeletontracing_accessor"; +import { enforceActiveUser } from "oxalis/model/accessors/user_accessor"; +import { getVolumeDescriptors } from "oxalis/model/accessors/volumetracing_accessor"; +import type { OxalisState } from "oxalis/store"; import { RenderToPortal } from "oxalis/view/layouting/portal_utils"; +import type { APIAnnotation, APITaskWithAnnotation, APIUser } from "types/api_flow_types"; import { ActiveTabContext, RenderingTabContext } from "./dashboard_contexts"; const pageLength: number = 1000; diff --git a/frontend/javascripts/dashboard/dashboard_view.tsx b/frontend/javascripts/dashboard/dashboard_view.tsx index b1006e77214..4ff1abeeb8c 100644 --- a/frontend/javascripts/dashboard/dashboard_view.tsx +++ b/frontend/javascripts/dashboard/dashboard_view.tsx @@ -1,33 +1,33 @@ -import type { RouteComponentProps } from "react-router-dom"; -import { withRouter } from "react-router-dom"; -import { Spin, Tabs } from "antd"; -import { connect } from "react-redux"; -import type { Dispatch } from "redux"; -import type React from "react"; -import { PureComponent } from "react"; -import _ from "lodash"; -import { setActiveUserAction } from "oxalis/model/actions/user_actions"; -import { WhatsNextHeader } from "admin/welcome_ui"; -import type { APIOrganization, APIPricingPlanStatus, APIUser } from "types/api_flow_types"; -import type { OxalisState } from "oxalis/store"; -import { enforceActiveUser } from "oxalis/model/accessors/user_accessor"; import { cachedGetPricingPlanStatus, getUser, updateNovelUserExperienceInfos, } from "admin/admin_rest_api"; +import { PlanAboutToExceedAlert, PlanExceededAlert } from "admin/organization/organization_cards"; +import { WhatsNextHeader } from "admin/welcome_ui"; +import { Spin, Tabs } from "antd"; import DashboardTaskListView from "dashboard/dashboard_task_list_view"; -import { PublicationViewWithHeader } from "dashboard/publication_view"; import ExplorativeAnnotationsView from "dashboard/explorative_annotations_view"; -import NmlUploadZoneContainer from "oxalis/view/nml_upload_zone_container"; +import { PublicationViewWithHeader } from "dashboard/publication_view"; +import features from "features"; import Request from "libs/request"; import UserLocalStorage from "libs/user_local_storage"; -import features from "features"; -import { PlanAboutToExceedAlert, PlanExceededAlert } from "admin/organization/organization_cards"; +import _ from "lodash"; +import { enforceActiveOrganization } from "oxalis/model/accessors/organization_accessors"; +import { enforceActiveUser } from "oxalis/model/accessors/user_accessor"; +import { setActiveUserAction } from "oxalis/model/actions/user_actions"; +import type { OxalisState } from "oxalis/store"; import { PortalTarget } from "oxalis/view/layouting/portal_utils"; -import { DatasetFolderView } from "./dataset_folder_view"; +import NmlUploadZoneContainer from "oxalis/view/nml_upload_zone_container"; +import type React from "react"; +import { PureComponent } from "react"; +import { connect } from "react-redux"; +import type { RouteComponentProps } from "react-router-dom"; +import { withRouter } from "react-router-dom"; +import type { Dispatch } from "redux"; +import type { APIOrganization, APIPricingPlanStatus, APIUser } from "types/api_flow_types"; import { ActiveTabContext, RenderingTabContext } from "./dashboard_contexts"; -import { enforceActiveOrganization } from "oxalis/model/accessors/organization_accessors"; +import { DatasetFolderView } from "./dataset_folder_view"; type OwnProps = { userId: string | null | undefined; diff --git a/frontend/javascripts/dashboard/dataset/color_layer_ordering_component.tsx b/frontend/javascripts/dashboard/dataset/color_layer_ordering_component.tsx index 67a37ab5953..2f07a49d394 100644 --- a/frontend/javascripts/dashboard/dataset/color_layer_ordering_component.tsx +++ b/frontend/javascripts/dashboard/dataset/color_layer_ordering_component.tsx @@ -1,9 +1,9 @@ -import { MenuOutlined, InfoCircleOutlined } from "@ant-design/icons"; -import { List, Collapse, Tooltip, type CollapseProps } from "antd"; -import { settings, settingsTooltips } from "messages"; +import { InfoCircleOutlined, MenuOutlined } from "@ant-design/icons"; import { DndContext, type DragEndEvent } from "@dnd-kit/core"; -import { CSS } from "@dnd-kit/utilities"; import { SortableContext, useSortable, verticalListSortingStrategy } from "@dnd-kit/sortable"; +import { CSS } from "@dnd-kit/utilities"; +import { Collapse, type CollapseProps, List, Tooltip } from "antd"; +import { settings, settingsTooltips } from "messages"; // Example taken and modified from https://ant.design/components/table/#components-table-demo-drag-sorting-handler. diff --git a/frontend/javascripts/dashboard/dataset/dataset_collection_context.tsx b/frontend/javascripts/dashboard/dataset/dataset_collection_context.tsx index b73d7564a17..f419f13375d 100644 --- a/frontend/javascripts/dashboard/dataset/dataset_collection_context.tsx +++ b/frontend/javascripts/dashboard/dataset/dataset_collection_context.tsx @@ -1,27 +1,27 @@ +import { useIsMutating } from "@tanstack/react-query"; +import { type DatasetUpdater, getDatastores, triggerDatasetCheck } from "admin/admin_rest_api"; +import { useEffectOnlyOnce, usePrevious } from "libs/react_hooks"; +import UserLocalStorage from "libs/user_local_storage"; +import _ from "lodash"; import type React from "react"; import { createContext, useCallback, useContext, useEffect, useMemo, useState } from "react"; import type { + APIDataset, APIDatasetCompact, APIDatasetCompactWithoutStatusAndLayerNames, FolderItem, - APIDataset, } from "types/api_flow_types"; -import { type DatasetUpdater, getDatastores, triggerDatasetCheck } from "admin/admin_rest_api"; -import UserLocalStorage from "libs/user_local_storage"; -import _ from "lodash"; import { - useFolderHierarchyQuery, - useDatasetsInFolderQuery, - useDatasetSearchQuery, useCreateFolderMutation, - useUpdateFolderMutation, - useMoveFolderMutation, + useDatasetSearchQuery, + useDatasetsInFolderQuery, useDeleteFolderMutation, - useUpdateDatasetMutation, + useFolderHierarchyQuery, useFolderQuery, + useMoveFolderMutation, + useUpdateDatasetMutation, + useUpdateFolderMutation, } from "./queries"; -import { useIsMutating } from "@tanstack/react-query"; -import { useEffectOnlyOnce, usePrevious } from "libs/react_hooks"; export type DatasetCollectionContextValue = { datasets: Array; diff --git a/frontend/javascripts/dashboard/dataset/dataset_settings_data_tab.tsx b/frontend/javascripts/dashboard/dataset/dataset_settings_data_tab.tsx index e8bbe2aee2a..65393366e60 100644 --- a/frontend/javascripts/dashboard/dataset/dataset_settings_data_tab.tsx +++ b/frontend/javascripts/dashboard/dataset/dataset_settings_data_tab.tsx @@ -1,39 +1,39 @@ +import { DeleteOutlined } from "@ant-design/icons"; +import { startFindLargestSegmentIdJob } from "admin/admin_rest_api"; +import { getDatasetNameRules, layerNameRules } from "admin/dataset/dataset_components"; +import { useStartAndPollJob } from "admin/job/job_hooks"; import { - List, - Input, + Button, + Col, Form, + type FormInstance, + Input, InputNumber, - Col, + List, Row, - Switch, - Tooltip, - type FormInstance, Select, Space, - Button, + Switch, + Tooltip, } from "antd"; -import * as React from "react"; -import { Vector3Input, BoundingBoxInput } from "libs/vector_input"; -import { getBitDepth } from "oxalis/model/accessors/dataset_accessor"; -import { validateDatasourceJSON, isValidJSON, syncValidator } from "types/validation"; -import type { BoundingBoxObject, OxalisState } from "oxalis/store"; import { - Hideable, FormItemWithInfo, + Hideable, RetryingErrorBoundary, jsonEditStyle, } from "dashboard/dataset/helper_components"; -import { startFindLargestSegmentIdJob } from "admin/admin_rest_api"; +import Toast from "libs/toast"; import { jsonStringify, parseMaybe } from "libs/utils"; -import type { DataLayer } from "types/schemas/datasource.types"; -import { getDatasetNameRules, layerNameRules } from "admin/dataset/dataset_components"; +import { BoundingBoxInput, Vector3Input } from "libs/vector_input"; +import { AllUnits, LongUnitToShortUnitMap, type Vector3 } from "oxalis/constants"; +import { getBitDepth } from "oxalis/model/accessors/dataset_accessor"; +import type { BoundingBoxObject, OxalisState } from "oxalis/store"; +import * as React from "react"; import { useSelector } from "react-redux"; -import { DeleteOutlined } from "@ant-design/icons"; import { type APIDataLayer, type APIDataset, APIJobType } from "types/api_flow_types"; -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"; +import type { DataLayer } from "types/schemas/datasource.types"; +import { isValidJSON, syncValidator, validateDatasourceJSON } from "types/validation"; const FormItem = Form.Item; diff --git a/frontend/javascripts/dashboard/dataset/dataset_settings_delete_tab.tsx b/frontend/javascripts/dashboard/dataset/dataset_settings_delete_tab.tsx index c5bb7b73921..0263ce12dd5 100644 --- a/frontend/javascripts/dashboard/dataset/dataset_settings_delete_tab.tsx +++ b/frontend/javascripts/dashboard/dataset/dataset_settings_delete_tab.tsx @@ -1,13 +1,13 @@ +import { useQueryClient } from "@tanstack/react-query"; +import { deleteDatasetOnDisk, getDataset } from "admin/admin_rest_api"; import { Button } from "antd"; -import { useState, useEffect } from "react"; -import type { APIDataset } from "types/api_flow_types"; -import { getDataset, deleteDatasetOnDisk } from "admin/admin_rest_api"; import Toast from "libs/toast"; import messages from "messages"; +import { useEffect, useState } from "react"; import type { RouteComponentProps } from "react-router-dom"; import { withRouter } from "react-router-dom"; +import type { APIDataset } from "types/api_flow_types"; import { confirmAsync } from "./helper_components"; -import { useQueryClient } from "@tanstack/react-query"; type Props = { datasetId: string; diff --git a/frontend/javascripts/dashboard/dataset/dataset_settings_metadata_tab.tsx b/frontend/javascripts/dashboard/dataset/dataset_settings_metadata_tab.tsx index 1ef0e257afb..cf45bd216a3 100644 --- a/frontend/javascripts/dashboard/dataset/dataset_settings_metadata_tab.tsx +++ b/frontend/javascripts/dashboard/dataset/dataset_settings_metadata_tab.tsx @@ -1,4 +1,4 @@ -import { Input, Col, Row, DatePicker } from "antd"; +import { Col, DatePicker, Input, Row } from "antd"; import { FormItemWithInfo } from "./helper_components"; export default function DatasetSettingsMetadataTab() { diff --git a/frontend/javascripts/dashboard/dataset/dataset_settings_sharing_tab.tsx b/frontend/javascripts/dashboard/dataset/dataset_settings_sharing_tab.tsx index a25b7eba64d..90f3ad9dfc5 100644 --- a/frontend/javascripts/dashboard/dataset/dataset_settings_sharing_tab.tsx +++ b/frontend/javascripts/dashboard/dataset/dataset_settings_sharing_tab.tsx @@ -1,22 +1,22 @@ -import type React from "react"; -import { useState, useEffect } from "react"; -import { type RouteComponentProps, withRouter } from "react-router-dom"; -import { connect } from "react-redux"; -import { Button, Input, Checkbox, Tooltip, type FormInstance, Collapse, Space } from "antd"; import { CopyOutlined, InfoCircleOutlined, RetweetOutlined } from "@ant-design/icons"; -import type { APIDataset, APIUser } from "types/api_flow_types"; -import { AsyncButton } from "components/async_clickables"; import { getDatasetSharingToken, revokeDatasetSharingToken } from "admin/admin_rest_api"; +import { PricingPlanEnum } from "admin/organization/pricing_plan_utils"; +import { Button, Checkbox, Collapse, type FormInstance, Input, Space, Tooltip } from "antd"; +import { AsyncButton } from "components/async_clickables"; +import { PricingEnforcedBlur } from "components/pricing_enforcers"; +import DatasetAccessListView from "dashboard/advanced_dataset/dataset_access_list_view"; +import TeamSelectionComponent from "dashboard/dataset/team_selection_component"; import Toast from "libs/toast"; +import { isUserAdminOrDatasetManager, isUserAdminOrTeamManager } from "libs/utils"; import window from "libs/window"; -import TeamSelectionComponent from "dashboard/dataset/team_selection_component"; -import DatasetAccessListView from "dashboard/advanced_dataset/dataset_access_list_view"; +import { getReadableURLPart } from "oxalis/model/accessors/dataset_accessor"; import type { OxalisState } from "oxalis/store"; -import { isUserAdminOrDatasetManager, isUserAdminOrTeamManager } from "libs/utils"; +import type React from "react"; +import { useEffect, useState } from "react"; +import { connect } from "react-redux"; +import { type RouteComponentProps, withRouter } from "react-router-dom"; +import type { APIDataset, APIUser } from "types/api_flow_types"; import { FormItemWithInfo } from "./helper_components"; -import { PricingPlanEnum } from "admin/organization/pricing_plan_utils"; -import { PricingEnforcedBlur } from "components/pricing_enforcers"; -import { getReadableURLPart } from "oxalis/model/accessors/dataset_accessor"; type Props = { form: FormInstance | null; diff --git a/frontend/javascripts/dashboard/dataset/dataset_settings_view.tsx b/frontend/javascripts/dashboard/dataset/dataset_settings_view.tsx index da35dcef146..890aeae8cab 100644 --- a/frontend/javascripts/dashboard/dataset/dataset_settings_view.tsx +++ b/frontend/javascripts/dashboard/dataset/dataset_settings_view.tsx @@ -1,48 +1,48 @@ -import { Button, Spin, Alert, Form, Card, Tabs, Tooltip, type FormInstance } from "antd"; import { ExclamationCircleOutlined } from "@ant-design/icons"; -import * as React from "react"; -import _ from "lodash"; -import dayjs from "dayjs"; -import { connect } from "react-redux"; -import type { RouteComponentProps } from "react-router-dom"; -import { withRouter, Link } from "react-router-dom"; -import type { - UnregisterCallback, - Location as HistoryLocation, - Action as HistoryAction, -} from "history"; -import type { - APIDataSource, - APIDataset, - MutableAPIDataset, - APIMessage, -} from "types/api_flow_types"; -import { Unicode } from "oxalis/constants"; -import type { DatasetConfiguration, OxalisState } from "oxalis/store"; -import { diffObjects, jsonStringify } from "libs/utils"; +import { defaultContext } from "@tanstack/react-query"; import { getDataset, getDatasetDefaultConfiguration, - updateDatasetDefaultConfiguration, readDatasetDatasource, - updateDatasetDatasource, - updateDatasetTeams, sendAnalyticsEvent, + updateDatasetDatasource, + updateDatasetDefaultConfiguration, updateDatasetPartial, + updateDatasetTeams, } from "admin/admin_rest_api"; +import { Alert, Button, Card, Form, type FormInstance, Spin, Tabs, Tooltip } from "antd"; +import dayjs from "dayjs"; +import features from "features"; +import type { + Action as HistoryAction, + Location as HistoryLocation, + UnregisterCallback, +} from "history"; import { handleGenericError } from "libs/error_handling"; import Toast from "libs/toast"; +import { diffObjects, jsonStringify } from "libs/utils"; +import _ from "lodash"; import messages from "messages"; -import features from "features"; +import { Unicode } from "oxalis/constants"; +import { getReadableURLPart } from "oxalis/model/accessors/dataset_accessor"; +import type { DatasetConfiguration, OxalisState } from "oxalis/store"; +import * as React from "react"; +import { connect } from "react-redux"; +import type { RouteComponentProps } from "react-router-dom"; +import { Link, withRouter } from "react-router-dom"; +import type { + APIDataSource, + APIDataset, + APIMessage, + MutableAPIDataset, +} from "types/api_flow_types"; import { enforceValidatedDatasetViewConfiguration } from "types/schemas/dataset_view_configuration_defaults"; -import { Hideable, hasFormError } from "./helper_components"; -import DatasetSettingsViewConfigTab from "./dataset_settings_viewconfig_tab"; +import DatasetSettingsDataTab, { syncDataSourceFields } from "./dataset_settings_data_tab"; +import DatasetSettingsDeleteTab from "./dataset_settings_delete_tab"; import DatasetSettingsMetadataTab from "./dataset_settings_metadata_tab"; import DatasetSettingsSharingTab from "./dataset_settings_sharing_tab"; -import DatasetSettingsDeleteTab from "./dataset_settings_delete_tab"; -import DatasetSettingsDataTab, { syncDataSourceFields } from "./dataset_settings_data_tab"; -import { defaultContext } from "@tanstack/react-query"; -import { getReadableURLPart } from "oxalis/model/accessors/dataset_accessor"; +import DatasetSettingsViewConfigTab from "./dataset_settings_viewconfig_tab"; +import { Hideable, hasFormError } from "./helper_components"; const FormItem = Form.Item; const notImportedYetStatus = "Not imported yet."; diff --git a/frontend/javascripts/dashboard/dataset/dataset_settings_viewconfig_tab.tsx b/frontend/javascripts/dashboard/dataset/dataset_settings_viewconfig_tab.tsx index 803d4fcf188..b85ce2a998d 100644 --- a/frontend/javascripts/dashboard/dataset/dataset_settings_viewconfig_tab.tsx +++ b/frontend/javascripts/dashboard/dataset/dataset_settings_viewconfig_tab.tsx @@ -1,35 +1,35 @@ -import _ from "lodash"; import { InfoCircleOutlined } from "@ant-design/icons"; +import { getAgglomeratesForDatasetLayer, getMappingsForDatasetLayer } from "admin/admin_rest_api"; import { + Alert, + Checkbox, + Col, + Divider, Form, Input, - Checkbox, - Alert, InputNumber, - Col, Row, - Tooltip, - Table, Select, - Divider, + Table, + Tooltip, } from "antd"; -import { useMemo, useState } from "react"; +import { Slider } from "components/slider"; import { Vector3Input } from "libs/vector_input"; -import { validateLayerViewConfigurationObjectJSON, syncValidator } from "types/validation"; -import { getDefaultLayerViewConfiguration } from "types/schemas/dataset_view_configuration.schema"; +import _ from "lodash"; import messages, { type RecommendedConfiguration, layerViewConfigurations, settings, settingsTooltips, } from "messages"; -import type { DatasetConfiguration, DatasetLayerConfiguration } from "oxalis/store"; -import { FormItemWithInfo, jsonEditStyle } from "./helper_components"; import { BLEND_MODES } from "oxalis/constants"; -import ColorLayerOrderingTable from "./color_layer_ordering_component"; +import type { DatasetConfiguration, DatasetLayerConfiguration } from "oxalis/store"; +import { useMemo, useState } from "react"; import type { APIDataSourceId } from "types/api_flow_types"; -import { getAgglomeratesForDatasetLayer, getMappingsForDatasetLayer } from "admin/admin_rest_api"; -import { Slider } from "components/slider"; +import { getDefaultLayerViewConfiguration } from "types/schemas/dataset_view_configuration.schema"; +import { syncValidator, validateLayerViewConfigurationObjectJSON } from "types/validation"; +import ColorLayerOrderingTable from "./color_layer_ordering_component"; +import { FormItemWithInfo, jsonEditStyle } from "./helper_components"; const FormItem = Form.Item; diff --git a/frontend/javascripts/dashboard/dataset/helper_components.tsx b/frontend/javascripts/dashboard/dataset/helper_components.tsx index 60d57b226ca..53f4ac04462 100644 --- a/frontend/javascripts/dashboard/dataset/helper_components.tsx +++ b/frontend/javascripts/dashboard/dataset/helper_components.tsx @@ -1,10 +1,10 @@ -import { Alert, Form, Tooltip, Modal } from "antd"; -import type { FieldError } from "rc-field-form/es/interface"; import { InfoCircleOutlined } from "@ant-design/icons"; -import * as React from "react"; -import _ from "lodash"; -import type { NamePath } from "antd/lib/form/interface"; +import { Alert, Form, Modal, Tooltip } from "antd"; import type { FormItemProps, Rule } from "antd/lib/form"; +import type { NamePath } from "antd/lib/form/interface"; +import _ from "lodash"; +import type { FieldError } from "rc-field-form/es/interface"; +import * as React from "react"; const FormItem = Form.Item; diff --git a/frontend/javascripts/dashboard/dataset/queries.tsx b/frontend/javascripts/dashboard/dataset/queries.tsx index a9207f76878..e686a7469b1 100644 --- a/frontend/javascripts/dashboard/dataset/queries.tsx +++ b/frontend/javascripts/dashboard/dataset/queries.tsx @@ -1,6 +1,4 @@ -import _ from "lodash"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; -import * as Utils from "libs/utils"; import { type DatasetUpdater, getDataset, @@ -15,18 +13,20 @@ import { moveFolder, updateFolder, } from "admin/api/folders"; +import { handleGenericError } from "libs/error_handling"; import Toast from "libs/toast"; +import * as Utils from "libs/utils"; +import _ from "lodash"; import { useEffect, useRef } from "react"; import { + type APIDataset, type APIDatasetCompact, type FlatFolderTreeItem, type Folder, type FolderItem, type FolderUpdater, convertDatasetToCompact, - type APIDataset, } from "types/api_flow_types"; -import { handleGenericError } from "libs/error_handling"; export const SEARCH_RESULTS_LIMIT = 100; export const MINIMUM_SEARCH_QUERY_LENGTH = 3; diff --git a/frontend/javascripts/dashboard/dataset/team_selection_component.tsx b/frontend/javascripts/dashboard/dataset/team_selection_component.tsx index 66d30b5acc5..5bbd2ce1652 100644 --- a/frontend/javascripts/dashboard/dataset/team_selection_component.tsx +++ b/frontend/javascripts/dashboard/dataset/team_selection_component.tsx @@ -1,8 +1,8 @@ +import { getEditableTeams, getTeams } from "admin/admin_rest_api"; import { Select } from "antd"; -import * as React from "react"; import _ from "lodash"; +import * as React from "react"; import type { APITeam } from "types/api_flow_types"; -import { getEditableTeams, getTeams } from "admin/admin_rest_api"; const { Option } = Select; diff --git a/frontend/javascripts/dashboard/dataset_folder_view.tsx b/frontend/javascripts/dashboard/dataset_folder_view.tsx index 157da42d1fb..92c19160822 100644 --- a/frontend/javascripts/dashboard/dataset_folder_view.tsx +++ b/frontend/javascripts/dashboard/dataset_folder_view.tsx @@ -1,19 +1,19 @@ +import { Button, Card, Col, Row } from "antd"; +import features, { getDemoDatasetUrl } from "features"; import { filterNullValues } from "libs/utils"; +import * as Utils from "libs/utils"; +import { RenderToPortal } from "oxalis/view/layouting/portal_utils"; import React, { useEffect, useState } from "react"; +import { Link } from "react-router-dom"; import type { APIDatasetCompact, APIUser, FolderItem } from "types/api_flow_types"; import DatasetCollectionContextProvider, { useDatasetCollectionContext, } from "./dataset/dataset_collection_context"; -import { Button, Card, Col, Row } from "antd"; -import { Link } from "react-router-dom"; -import * as Utils from "libs/utils"; +import { useDatasetsInFolderQuery, useFolderHierarchyQuery } from "./dataset/queries"; import DatasetView, { DatasetAddButton, DatasetRefreshButton } from "./dataset_view"; import { DetailsSidebar } from "./folders/details_sidebar"; import { EditFolderModal } from "./folders/edit_folder_modal"; import { FolderTreeSidebar } from "./folders/folder_tree"; -import features, { getDemoDatasetUrl } from "features"; -import { RenderToPortal } from "oxalis/view/layouting/portal_utils"; -import { useFolderHierarchyQuery, useDatasetsInFolderQuery } from "./dataset/queries"; type Props = { user: APIUser; diff --git a/frontend/javascripts/dashboard/dataset_view.tsx b/frontend/javascripts/dashboard/dataset_view.tsx index 4ab03b85bc4..a75db51e3b8 100644 --- a/frontend/javascripts/dashboard/dataset_view.tsx +++ b/frontend/javascripts/dashboard/dataset_view.tsx @@ -1,51 +1,51 @@ -import React, { useState, useEffect } from "react"; -import { Link } from "react-router-dom"; import { + HourglassOutlined, + InfoCircleOutlined, + LoadingOutlined, + PlusOutlined, + ReloadOutlined, + SearchOutlined, + SettingOutlined, +} from "@ant-design/icons"; +import { PropTypes } from "@scalableminds/prop-types"; +import { getJobs } from "admin/admin_rest_api"; +import { TOOLTIP_MESSAGES_AND_ICONS } from "admin/job/job_list_view"; +import { PricingPlanEnum } from "admin/organization/pricing_plan_utils"; +import { + Alert, Badge, Button, - Radio, Col, Dropdown, Input, + Radio, Row, - Spin, - Tooltip, - Alert, Select, Space, + Spin, + Tooltip, } from "antd"; -import { - LoadingOutlined, - PlusOutlined, - ReloadOutlined, - SettingOutlined, - InfoCircleOutlined, - HourglassOutlined, - SearchOutlined, -} from "@ant-design/icons"; -import { PropTypes } from "@scalableminds/prop-types"; -import type { APIJob, APIDatasetCompact, APIUser, FolderItem } from "types/api_flow_types"; +import type { ItemType } from "antd/es/menu/interface"; +import FormattedDate from "components/formatted_date"; +import { PricingEnforcedButton } from "components/pricing_enforcers"; import DatasetTable from "dashboard/advanced_dataset/dataset_table"; -import * as Utils from "libs/utils"; -import { CategorizationSearch } from "oxalis/view/components/categorization_label"; +import dayjs from "dayjs"; import features from "features"; import Persistence from "libs/persistence"; -import { getJobs } from "admin/admin_rest_api"; -import dayjs from "dayjs"; -import FormattedDate from "components/formatted_date"; -import { TOOLTIP_MESSAGES_AND_ICONS } from "admin/job/job_list_view"; +import * as Utils from "libs/utils"; import { Unicode } from "oxalis/constants"; +import { CategorizationSearch } from "oxalis/view/components/categorization_label"; import { RenderToPortal } from "oxalis/view/layouting/portal_utils"; +import type { MenuProps } from "rc-menu"; +import React, { useState, useEffect } from "react"; +import { Link } from "react-router-dom"; +import type { APIDatasetCompact, APIJob, APIUser, FolderItem } from "types/api_flow_types"; import type { DatasetCollectionContextValue } from "./dataset/dataset_collection_context"; import { MINIMUM_SEARCH_QUERY_LENGTH, SEARCH_RESULTS_LIMIT, useFolderQuery, } from "./dataset/queries"; -import { PricingEnforcedButton } from "components/pricing_enforcers"; -import { PricingPlanEnum } from "admin/organization/pricing_plan_utils"; -import type { MenuProps } from "rc-menu"; -import type { ItemType } from "antd/es/menu/interface"; type Props = { user: APIUser; diff --git a/frontend/javascripts/dashboard/explorative_annotations_view.tsx b/frontend/javascripts/dashboard/explorative_annotations_view.tsx index 73e1b67726d..32529f15ff5 100644 --- a/frontend/javascripts/dashboard/explorative_annotations_view.tsx +++ b/frontend/javascripts/dashboard/explorative_annotations_view.tsx @@ -1,72 +1,72 @@ -import { Link } from "react-router-dom"; -import { PropTypes } from "@scalableminds/prop-types"; -import { - Spin, - Input, - Table, - Button, - Modal, - Tooltip, - Tag, - Row, - Col, - Card, - type TableProps, -} from "antd"; import { + CopyOutlined, DownloadOutlined, FolderOpenOutlined, InboxOutlined, + LockOutlined, PlayCircleOutlined, PlusOutlined, - UploadOutlined, - CopyOutlined, TeamOutlined, - UserOutlined, - LockOutlined, UnlockOutlined, + UploadOutlined, + UserOutlined, } from "@ant-design/icons"; -import * as React from "react"; -import _ from "lodash"; -import update from "immutability-helper"; -import { AsyncLink } from "components/async_clickables"; -import { - annotationToCompact, - type APIAnnotationInfo, - type APIUser, - type APIUserCompact, -} from "types/api_flow_types"; -import { AnnotationContentTypes } from "oxalis/constants"; +import { PropTypes } from "@scalableminds/prop-types"; import { - finishAllAnnotations, + downloadAnnotation, editAnnotation, + editLockedState, + finishAllAnnotations, finishAnnotation, - reOpenAnnotation, - downloadAnnotation, getCompactAnnotationsForUser, getReadableAnnotations, - editLockedState, + reOpenAnnotation, } from "admin/admin_rest_api"; -import { formatHash, stringToColor } from "libs/format_utils"; -import { handleGenericError } from "libs/error_handling"; -import { setDropzoneModalVisibilityAction } from "oxalis/model/actions/ui_actions"; -import EditableTextIcon from "oxalis/view/components/editable_text_icon"; +import { + Button, + Card, + Col, + Input, + Modal, + Row, + Spin, + Table, + type TableProps, + Tag, + Tooltip, +} from "antd"; +import type { SearchProps } from "antd/lib/input"; +import { AsyncLink } from "components/async_clickables"; import FormattedDate from "components/formatted_date"; +import TextWithDescription from "components/text_with_description"; +import update from "immutability-helper"; +import { handleGenericError } from "libs/error_handling"; +import { formatHash, stringToColor } from "libs/format_utils"; import Persistence from "libs/persistence"; -import CategorizationLabel, { - CategorizationSearch, -} from "oxalis/view/components/categorization_label"; -import Store from "oxalis/store"; import Toast from "libs/toast"; import * as Utils from "libs/utils"; +import _ from "lodash"; import messages from "messages"; -import TextWithDescription from "components/text_with_description"; +import { AnnotationContentTypes } from "oxalis/constants"; +import { getCombinedStatsFromServerAnnotation } from "oxalis/model/accessors/annotation_accessor"; import { getVolumeDescriptors } from "oxalis/model/accessors/volumetracing_accessor"; +import { setDropzoneModalVisibilityAction } from "oxalis/model/actions/ui_actions"; +import Store from "oxalis/store"; +import CategorizationLabel, { + CategorizationSearch, +} from "oxalis/view/components/categorization_label"; +import EditableTextIcon from "oxalis/view/components/editable_text_icon"; import { RenderToPortal } from "oxalis/view/layouting/portal_utils"; -import { ActiveTabContext, RenderingTabContext } from "./dashboard_contexts"; -import type { SearchProps } from "antd/lib/input"; -import { getCombinedStatsFromServerAnnotation } from "oxalis/model/accessors/annotation_accessor"; import { AnnotationStats } from "oxalis/view/right-border-tabs/dataset_info_tab_view"; +import * as React from "react"; +import { Link } from "react-router-dom"; +import { + type APIAnnotationInfo, + type APIUser, + type APIUserCompact, + annotationToCompact, +} from "types/api_flow_types"; +import { ActiveTabContext, RenderingTabContext } from "./dashboard_contexts"; const { Search } = Input; const pageLength: number = 1000; diff --git a/frontend/javascripts/dashboard/folders/details_sidebar.tsx b/frontend/javascripts/dashboard/folders/details_sidebar.tsx index f5eb3249a50..9595125dcef 100644 --- a/frontend/javascripts/dashboard/folders/details_sidebar.tsx +++ b/frontend/javascripts/dashboard/folders/details_sidebar.tsx @@ -1,30 +1,30 @@ import { + EditOutlined, FileOutlined, FolderOpenOutlined, - SearchOutlined, - EditOutlined, LoadingOutlined, + SearchOutlined, } from "@ant-design/icons"; +import { useQuery } from "@tanstack/react-query"; +import { getOrganization } from "admin/admin_rest_api"; import { Result, Spin, Tag, Tooltip } from "antd"; -import { stringToColor, formatCountToDataAmountUnit } from "libs/format_utils"; +import { formatCountToDataAmountUnit, stringToColor } from "libs/format_utils"; +import Markdown from "libs/markdown_adapter"; import { pluralize } from "libs/utils"; import _ from "lodash"; +import type { OxalisState } from "oxalis/store"; import { DatasetExtentRow, OwningOrganizationRow, VoxelSizeRow, } from "oxalis/view/right-border-tabs/dataset_info_tab_view"; import { useEffect } from "react"; +import { useSelector } from "react-redux"; import type { APIDatasetCompact, Folder } from "types/api_flow_types"; import { DatasetLayerTags, DatasetTags, TeamTags } from "../advanced_dataset/dataset_table"; import { useDatasetCollectionContext } from "../dataset/dataset_collection_context"; import { SEARCH_RESULTS_LIMIT, useDatasetQuery, useFolderQuery } from "../dataset/queries"; -import { useSelector } from "react-redux"; -import type { OxalisState } from "oxalis/store"; -import { getOrganization } from "admin/admin_rest_api"; -import { useQuery } from "@tanstack/react-query"; import MetadataTable from "./metadata_table"; -import Markdown from "libs/markdown_adapter"; export function DetailsSidebar({ selectedDatasets, diff --git a/frontend/javascripts/dashboard/folders/folder_selection.tsx b/frontend/javascripts/dashboard/folders/folder_selection.tsx index 49681796820..aa510a28c66 100644 --- a/frontend/javascripts/dashboard/folders/folder_selection.tsx +++ b/frontend/javascripts/dashboard/folders/folder_selection.tsx @@ -1,6 +1,6 @@ -import _ from "lodash"; import { TreeSelect } from "antd"; -import { useState, useEffect } from "react"; +import _ from "lodash"; +import { useEffect, useState } from "react"; import { useFolderHierarchyQuery } from "dashboard/dataset/queries"; import type { FolderItem } from "types/api_flow_types"; diff --git a/frontend/javascripts/dashboard/folders/folder_tree.tsx b/frontend/javascripts/dashboard/folders/folder_tree.tsx index 53c6d5effa4..8e1f404467d 100644 --- a/frontend/javascripts/dashboard/folders/folder_tree.tsx +++ b/frontend/javascripts/dashboard/folders/folder_tree.tsx @@ -8,14 +8,14 @@ import { } from "../dataset/dataset_collection_context"; import { DeleteOutlined, EditOutlined, PlusOutlined } from "@ant-design/icons"; -import { Dropdown, Modal, type MenuProps, Tree } from "antd"; -import Toast from "libs/toast"; +import { PricingPlanEnum } from "admin/organization/pricing_plan_utils"; +import { Dropdown, type MenuProps, Modal, Tree } from "antd"; import type { DataNode, DirectoryTreeProps } from "antd/lib/tree"; -import memoizeOne from "memoize-one"; import classNames from "classnames"; -import type { FolderItem } from "types/api_flow_types"; import { PricingEnforcedSpan } from "components/pricing_enforcers"; -import { PricingPlanEnum } from "admin/organization/pricing_plan_utils"; +import Toast from "libs/toast"; +import memoizeOne from "memoize-one"; +import type { FolderItem } from "types/api_flow_types"; import type { ArbitraryObject } from "types/globals"; const { DirectoryTree } = Tree; diff --git a/frontend/javascripts/dashboard/folders/metadata_table.tsx b/frontend/javascripts/dashboard/folders/metadata_table.tsx index 5951328e836..c8ecff00765 100644 --- a/frontend/javascripts/dashboard/folders/metadata_table.tsx +++ b/frontend/javascripts/dashboard/folders/metadata_table.tsx @@ -7,13 +7,13 @@ import { TagsOutlined, } from "@ant-design/icons"; import { - type MenuProps, - type InputNumberProps, - InputNumber, + Button, + Dropdown, Input, + InputNumber, + type InputNumberProps, + type MenuProps, Select, - Dropdown, - Button, Tag, } from "antd"; import FastTooltip from "components/fast_tooltip"; @@ -30,9 +30,9 @@ import { useEffect } from "react"; import { useState } from "react"; import { type APIDataset, - type Folder, type APIMetadataEntry, APIMetadataEnum, + type Folder, } from "types/api_flow_types"; export type APIMetadataWithError = APIMetadataEntry & { error?: string | null }; diff --git a/frontend/javascripts/dashboard/publication_card.tsx b/frontend/javascripts/dashboard/publication_card.tsx index 5855b2ddd13..fadd231c9d0 100644 --- a/frontend/javascripts/dashboard/publication_card.tsx +++ b/frontend/javascripts/dashboard/publication_card.tsx @@ -1,19 +1,19 @@ -import { Card, Button, Tooltip } from "antd"; import { LinkOutlined } from "@ant-design/icons"; -import Markdown from "libs/markdown_adapter"; -import type React from "react"; -import { useState } from "react"; +import { Button, Card, Tooltip } from "antd"; import classNames from "classnames"; -import { Link } from "react-router-dom"; -import type { APIDataset, APIPublication, APIPublicationAnnotation } from "types/api_flow_types"; import { formatScale } from "libs/format_utils"; +import Markdown from "libs/markdown_adapter"; +import { compareBy } from "libs/utils"; import { + getDatasetExtentAsString, + getSegmentationThumbnailURL, getThumbnailURL, hasSegmentation, - getSegmentationThumbnailURL, - getDatasetExtentAsString, } from "oxalis/model/accessors/dataset_accessor"; -import { compareBy } from "libs/utils"; +import type React from "react"; +import { useState } from "react"; +import { Link } from "react-router-dom"; +import type { APIDataset, APIPublication, APIPublicationAnnotation } from "types/api_flow_types"; type DatasetDetails = { species?: string; diff --git a/frontend/javascripts/dashboard/publication_details_view.tsx b/frontend/javascripts/dashboard/publication_details_view.tsx index 2c557b8afde..f13587a5437 100644 --- a/frontend/javascripts/dashboard/publication_details_view.tsx +++ b/frontend/javascripts/dashboard/publication_details_view.tsx @@ -1,11 +1,11 @@ -import { useState, useEffect } from "react"; -import { Layout, Spin, Tooltip } from "antd"; import { ArrowLeftOutlined } from "@ant-design/icons"; import { getPublication } from "admin/admin_rest_api"; -import type { APIPublication } from "types/api_flow_types"; +import { Layout, Spin, Tooltip } from "antd"; import PublicationCard from "dashboard/publication_card"; import { handleGenericError } from "libs/error_handling"; +import { useEffect, useState } from "react"; import { Link } from "react-router-dom"; +import type { APIPublication } from "types/api_flow_types"; const { Content } = Layout; function PublicationDetailView({ publicationId }: { publicationId: string }) { diff --git a/frontend/javascripts/dashboard/publication_view.tsx b/frontend/javascripts/dashboard/publication_view.tsx index 0a26178910a..b4f10763a14 100644 --- a/frontend/javascripts/dashboard/publication_view.tsx +++ b/frontend/javascripts/dashboard/publication_view.tsx @@ -1,11 +1,11 @@ -import type React from "react"; -import { memo, useState, useEffect } from "react"; -import { List, Input, Spin } from "antd"; -import type { APIPublication } from "types/api_flow_types"; -import PublicationCard from "dashboard/publication_card"; -import * as Utils from "libs/utils"; import { getPublications } from "admin/admin_rest_api"; +import { Input, List, Spin } from "antd"; +import PublicationCard from "dashboard/publication_card"; import { handleGenericError } from "libs/error_handling"; +import * as Utils from "libs/utils"; +import type React from "react"; +import { memo, useEffect, useState } from "react"; +import type { APIPublication } from "types/api_flow_types"; const { Search } = Input; export function PublicationViewWithHeader() { const [isLoading, setIsLoading] = useState(false); diff --git a/frontend/javascripts/dashboard/transfer_task_modal.tsx b/frontend/javascripts/dashboard/transfer_task_modal.tsx index f827cdf6e25..5dadc590e4b 100644 --- a/frontend/javascripts/dashboard/transfer_task_modal.tsx +++ b/frontend/javascripts/dashboard/transfer_task_modal.tsx @@ -1,9 +1,9 @@ -import { Modal, Button } from "antd"; +import { transferTask } from "admin/api/tasks"; +import UserSelectionComponent from "admin/user/user_selection_component"; +import { Button, Modal } from "antd"; +import { handleGenericError } from "libs/error_handling"; import * as React from "react"; import type { APIAnnotation } from "types/api_flow_types"; -import { handleGenericError } from "libs/error_handling"; -import UserSelectionComponent from "admin/user/user_selection_component"; -import { transferTask } from "admin/api/tasks"; type Props = { onChange: (updatedAnnotation: APIAnnotation) => void; diff --git a/frontend/javascripts/libs/DRACOLoader.ts b/frontend/javascripts/libs/DRACOLoader.ts index 7f3893656a4..9ce0e2d77b1 100644 --- a/frontend/javascripts/libs/DRACOLoader.ts +++ b/frontend/javascripts/libs/DRACOLoader.ts @@ -8,8 +8,8 @@ import { BufferGeometry, Color, FileLoader, - Loader, LinearSRGBColorSpace, + Loader, SRGBColorSpace, } from "three"; diff --git a/frontend/javascripts/libs/async/debounced_abortable_saga.ts b/frontend/javascripts/libs/async/debounced_abortable_saga.ts index 326ca5b1b25..6830c773883 100644 --- a/frontend/javascripts/libs/async/debounced_abortable_saga.ts +++ b/frontend/javascripts/libs/async/debounced_abortable_saga.ts @@ -1,5 +1,5 @@ -import { call, type Saga } from "oxalis/model/sagas/effect-generators"; -import { buffers, type Channel, channel, runSaga } from "redux-saga"; +import { type Saga, call } from "oxalis/model/sagas/effect-generators"; +import { type Channel, buffers, channel, runSaga } from "redux-saga"; import { delay, race, take } from "redux-saga/effects"; // biome-ignore lint/complexity/noBannedTypes: This is copied from redux-saga because it cannot be imported. diff --git a/frontend/javascripts/libs/async/task_pool.ts b/frontend/javascripts/libs/async/task_pool.ts index 610e4503a05..9647eda6deb 100644 --- a/frontend/javascripts/libs/async/task_pool.ts +++ b/frontend/javascripts/libs/async/task_pool.ts @@ -1,5 +1,5 @@ import type { Saga } from "oxalis/model/sagas/effect-generators"; -import { join, call, fork, type FixedTask } from "typed-redux-saga"; +import { type FixedTask, call, fork, join } from "typed-redux-saga"; /* Given an array of async tasks, processTaskWithPool diff --git a/frontend/javascripts/libs/cuckoo/abstract_cuckoo_table.ts b/frontend/javascripts/libs/cuckoo/abstract_cuckoo_table.ts index e17a6b6f6b7..e155d895616 100644 --- a/frontend/javascripts/libs/cuckoo/abstract_cuckoo_table.ts +++ b/frontend/javascripts/libs/cuckoo/abstract_cuckoo_table.ts @@ -1,7 +1,7 @@ -import * as THREE from "three"; import type UpdatableTexture from "libs/UpdatableTexture"; import { getRenderer } from "oxalis/controller/renderer"; import { createUpdatableTexture } from "oxalis/geometries/materials/plane_material_factory_helpers"; +import * as THREE from "three"; const DEFAULT_LOAD_FACTOR = 0.9; export const EMPTY_KEY_VALUE = 2 ** 32 - 1; diff --git a/frontend/javascripts/libs/cuckoo/cuckoo_table_uint32.ts b/frontend/javascripts/libs/cuckoo/cuckoo_table_uint32.ts index e72f64c73a7..60281866cd2 100644 --- a/frontend/javascripts/libs/cuckoo/cuckoo_table_uint32.ts +++ b/frontend/javascripts/libs/cuckoo/cuckoo_table_uint32.ts @@ -1,6 +1,6 @@ +import type { NumberLike } from "oxalis/store"; import * as THREE from "three"; import { AbstractCuckooTable, EMPTY_KEY_VALUE } from "./abstract_cuckoo_table"; -import type { NumberLike } from "oxalis/store"; const EMPTY_KEY = EMPTY_KEY_VALUE; const EMPTY_VALUE = EMPTY_KEY_VALUE; diff --git a/frontend/javascripts/libs/cuckoo/cuckoo_table_uint64.ts b/frontend/javascripts/libs/cuckoo/cuckoo_table_uint64.ts index 6874da986ab..2fcedb7580b 100644 --- a/frontend/javascripts/libs/cuckoo/cuckoo_table_uint64.ts +++ b/frontend/javascripts/libs/cuckoo/cuckoo_table_uint64.ts @@ -1,6 +1,6 @@ import { convertNumberTo64BitTuple } from "libs/utils"; -import { AbstractCuckooTable, EMPTY_KEY_VALUE } from "./abstract_cuckoo_table"; import type { NumberLike } from "oxalis/store"; +import { AbstractCuckooTable, EMPTY_KEY_VALUE } from "./abstract_cuckoo_table"; const EMPTY_KEY = [EMPTY_KEY_VALUE, EMPTY_KEY_VALUE] as Value; const EMPTY_VALUE = [EMPTY_KEY_VALUE, EMPTY_KEY_VALUE] as Value; diff --git a/frontend/javascripts/libs/draco.ts b/frontend/javascripts/libs/draco.ts index f162431f7c6..31c66778a12 100644 --- a/frontend/javascripts/libs/draco.ts +++ b/frontend/javascripts/libs/draco.ts @@ -1,5 +1,5 @@ -import type { BufferGeometry } from "three"; import { DRACOLoader } from "libs/DRACOLoader"; +import type { BufferGeometry } from "three"; let _dracoLoader: CustomDRACOLoader | null; diff --git a/frontend/javascripts/libs/error_handling.ts b/frontend/javascripts/libs/error_handling.ts index d435b9faabf..20de33657fb 100644 --- a/frontend/javascripts/libs/error_handling.ts +++ b/frontend/javascripts/libs/error_handling.ts @@ -1,10 +1,10 @@ import { Notifier } from "@airbrake/browser"; +import Toast from "libs/toast"; +import window, { document, location } from "libs/window"; import _ from "lodash"; +import messages from "messages"; import { getActionLog } from "oxalis/model/helpers/action_logger_middleware"; import type { APIUser } from "types/api_flow_types"; -import Toast from "libs/toast"; -import messages from "messages"; -import window, { document, location } from "libs/window"; // Note that if you set this value to true for debugging airbrake reporting, // you also need to set the values for projectID and projectKey in application.conf const LOG_LOCAL_ERRORS = false; diff --git a/frontend/javascripts/libs/format_utils.ts b/frontend/javascripts/libs/format_utils.ts index 9b29e05edba..1454b77608c 100644 --- a/frontend/javascripts/libs/format_utils.ts +++ b/frontend/javascripts/libs/format_utils.ts @@ -1,21 +1,21 @@ import { presetPalettes } from "@ant-design/colors"; -import { LongUnitToShortUnitMap, UnitShort, type Vector3, type Vector6 } from "oxalis/constants"; -import { Unicode } from "oxalis/constants"; -import * as Utils from "libs/utils"; -import _ from "lodash"; import dayjs from "dayjs"; +import calendar from "dayjs/plugin/calendar"; +import customParseFormat from "dayjs/plugin/customParseFormat"; import duration from "dayjs/plugin/duration"; -import updateLocale from "dayjs/plugin/updateLocale"; -import relativeTime from "dayjs/plugin/relativeTime"; +import localeData from "dayjs/plugin/localeData"; import localizedFormat from "dayjs/plugin/localizedFormat"; -import customParseFormat from "dayjs/plugin/customParseFormat"; -import calendar from "dayjs/plugin/calendar"; +import relativeTime from "dayjs/plugin/relativeTime"; +import updateLocale from "dayjs/plugin/updateLocale"; import utc from "dayjs/plugin/utc"; import weekday from "dayjs/plugin/weekday"; -import localeData from "dayjs/plugin/localeData"; +import * as Utils from "libs/utils"; +import _ from "lodash"; +import { LongUnitToShortUnitMap, UnitShort, type Vector3, type Vector6 } from "oxalis/constants"; +import { Unicode } from "oxalis/constants"; -import type { BoundingBoxObject } from "oxalis/store"; import type { Duration } from "dayjs/plugin/duration"; +import type { BoundingBoxObject } from "oxalis/store"; import type { VoxelSize, WkLibsNdBoundingBox } from "types/api_flow_types"; dayjs.extend(updateLocale); diff --git a/frontend/javascripts/libs/gist.ts b/frontend/javascripts/libs/gist.ts index 666db1c0ea3..53bf58ebdf5 100644 --- a/frontend/javascripts/libs/gist.ts +++ b/frontend/javascripts/libs/gist.ts @@ -1,6 +1,6 @@ -import _ from "lodash"; import Request from "libs/request"; import Toast from "libs/toast"; +import _ from "lodash"; import messages from "messages"; // https://developer.github.com/v3/gists/#get-a-single-gist type GithubGist = { diff --git a/frontend/javascripts/libs/input.ts b/frontend/javascripts/libs/input.ts index daa55d0a1d9..8517cba45d3 100644 --- a/frontend/javascripts/libs/input.ts +++ b/frontend/javascripts/libs/input.ts @@ -1,13 +1,13 @@ -import _ from "lodash"; import Date from "libs/date"; import Hammer from "libs/hammerjs_wrapper"; // @ts-expect-error ts-migrate(2306) FIXME: ... Remove this comment to see the full error message import KeyboardJS from "libs/keyboard"; import * as Utils from "libs/utils"; +import window, { document } from "libs/window"; +import _ from "lodash"; +import { type Emitter, createNanoEvents } from "nanoevents"; import type { Point2 } from "oxalis/constants"; import constants from "oxalis/constants"; -import window, { document } from "libs/window"; -import { createNanoEvents, type Emitter } from "nanoevents"; // This is the main Input implementation. // Although all keys, buttons and sensor are mapped in // the controller, this is were the magic happens. diff --git a/frontend/javascripts/libs/persistence.ts b/frontend/javascripts/libs/persistence.ts index 07fe72b2d43..c7f02a5274f 100644 --- a/frontend/javascripts/libs/persistence.ts +++ b/frontend/javascripts/libs/persistence.ts @@ -1,6 +1,6 @@ import { PropTypes } from "@scalableminds/prop-types"; -import _ from "lodash"; import ErrorHandling from "libs/error_handling"; +import _ from "lodash"; import type { EmptyObject } from "types/globals"; class Persistence> { diff --git a/frontend/javascripts/libs/react_helpers.tsx b/frontend/javascripts/libs/react_helpers.tsx index bc02006603a..f9fe89f347b 100644 --- a/frontend/javascripts/libs/react_helpers.tsx +++ b/frontend/javascripts/libs/react_helpers.tsx @@ -1,9 +1,9 @@ +import { isUserAdminOrManager } from "libs/utils"; +import type { OxalisState } from "oxalis/store"; import type React from "react"; -import { useState, useEffect, useRef } from "react"; +import { useEffect, useRef, useState } from "react"; import { useSelector, useStore } from "react-redux"; -import type { OxalisState } from "oxalis/store"; import type { ArbitraryFunction } from "types/globals"; -import { isUserAdminOrManager } from "libs/utils"; import Toast from "./toast"; // From https://overreacted.io/making-setinterval-declarative-with-react-hooks/ diff --git a/frontend/javascripts/libs/react_hooks.ts b/frontend/javascripts/libs/react_hooks.ts index d9f0d9aa462..58e8e053c21 100644 --- a/frontend/javascripts/libs/react_hooks.ts +++ b/frontend/javascripts/libs/react_hooks.ts @@ -1,5 +1,5 @@ import constants from "oxalis/constants"; -import { useState, useEffect, useRef, useCallback } from "react"; +import { useCallback, useEffect, useRef, useState } from "react"; import { useLocation } from "react-router-dom"; import { KEYBOARD_BUTTON_LOOP_INTERVAL } from "./input"; diff --git a/frontend/javascripts/libs/render_independently.tsx b/frontend/javascripts/libs/render_independently.tsx index 275cdb8d6bd..ce4eedcc0e6 100644 --- a/frontend/javascripts/libs/render_independently.tsx +++ b/frontend/javascripts/libs/render_independently.tsx @@ -1,8 +1,8 @@ -import type React from "react"; import { document } from "libs/window"; +import type React from "react"; +import { createRoot } from "react-dom/client"; import { Provider } from "react-redux"; import GlobalThemeProvider from "theme"; -import { createRoot } from "react-dom/client"; type DestroyFunction = () => void; // The returned promise gets resolved once the element is destroyed. diff --git a/frontend/javascripts/libs/request.ts b/frontend/javascripts/libs/request.ts index 25bf31657e5..e92177c4683 100644 --- a/frontend/javascripts/libs/request.ts +++ b/frontend/javascripts/libs/request.ts @@ -1,13 +1,13 @@ +import { pingMentionedDataStores } from "admin/datastore_health_check"; +import handleStatus from "libs/handle_http_status"; +import Toast from "libs/toast"; import _ from "lodash"; -import urljoin from "url-join"; import { createWorker } from "oxalis/workers/comlink_wrapper"; -import { pingMentionedDataStores } from "admin/datastore_health_check"; import CompressWorker from "oxalis/workers/compress.worker"; -import FetchBufferWithHeadersWorker from "oxalis/workers/fetch_buffer_with_headers.worker"; import FetchBufferWorker from "oxalis/workers/fetch_buffer.worker"; -import Toast from "libs/toast"; -import handleStatus from "libs/handle_http_status"; +import FetchBufferWithHeadersWorker from "oxalis/workers/fetch_buffer_with_headers.worker"; import type { ArbitraryObject } from "types/globals"; +import urljoin from "url-join"; const fetchBufferViaWorker = createWorker(FetchBufferWorker); const fetchBufferWithHeaders = createWorker(FetchBufferWithHeadersWorker); diff --git a/frontend/javascripts/libs/shortcut_component.ts b/frontend/javascripts/libs/shortcut_component.ts index ddebdd87460..6d9ff1add0f 100644 --- a/frontend/javascripts/libs/shortcut_component.ts +++ b/frontend/javascripts/libs/shortcut_component.ts @@ -1,5 +1,5 @@ -import * as React from "react"; import { InputKeyboard, InputKeyboardNoLoop } from "libs/input"; +import * as React from "react"; // This component provides a lightweight wrapper around the input library. // It leverages reacts lifecycle hooks to allow rendering-sensitive activation of shortcuts. type Props = { diff --git a/frontend/javascripts/libs/toast.tsx b/frontend/javascripts/libs/toast.tsx index e0a7084fb5e..7a9d26f1ba5 100644 --- a/frontend/javascripts/libs/toast.tsx +++ b/frontend/javascripts/libs/toast.tsx @@ -1,5 +1,5 @@ -import { notification, Collapse } from "antd"; import { CloseCircleOutlined } from "@ant-design/icons"; +import { Collapse, notification } from "antd"; import type React from "react"; import { useEffect } from "react"; import { animationFrame, sleep } from "./utils"; diff --git a/frontend/javascripts/libs/trackball_controls.ts b/frontend/javascripts/libs/trackball_controls.ts index 2208aaa0ecd..f6d00abd4b3 100644 --- a/frontend/javascripts/libs/trackball_controls.ts +++ b/frontend/javascripts/libs/trackball_controls.ts @@ -1,5 +1,5 @@ -import * as THREE from "three"; import window, { document } from "libs/window"; +import * as THREE from "three"; /** * The MIT License diff --git a/frontend/javascripts/libs/utils.ts b/frontend/javascripts/libs/utils.ts index 86f82a77b08..9f4dca49bb9 100644 --- a/frontend/javascripts/libs/utils.ts +++ b/frontend/javascripts/libs/utils.ts @@ -1,21 +1,21 @@ import Maybe from "data.maybe"; -import _ from "lodash"; +import dayjs from "dayjs"; // @ts-expect-error ts-migrate(7016) FIXME: Could not find a declaration file for module 'java... Remove this comment to see the full error message import naturalSort from "javascript-natural-sort"; -import type { APIDataset, APIUser } from "types/api_flow_types"; -import type { BoundingBoxObject, NumberLike } from "oxalis/store"; +import window, { document, location } from "libs/window"; +import _ from "lodash"; import type { - Vector3, - Vector4, - Vector6, BoundingBoxType, - Point3, ColorObject, + Point3, TypedArray, + Vector3, + Vector4, + Vector6, } from "oxalis/constants"; -import window, { document, location } from "libs/window"; +import type { BoundingBoxObject, NumberLike } from "oxalis/store"; +import type { APIDataset, APIUser } from "types/api_flow_types"; import type { ArbitraryObject, Comparator } from "types/globals"; -import dayjs from "dayjs"; type UrlParams = Record; // Fix JS modulo bug diff --git a/frontend/javascripts/libs/vector_input.tsx b/frontend/javascripts/libs/vector_input.tsx index 3382db9a711..446d1a94513 100644 --- a/frontend/javascripts/libs/vector_input.tsx +++ b/frontend/javascripts/libs/vector_input.tsx @@ -1,10 +1,10 @@ -import * as React from "react"; +import type { InputProps } from "antd"; +import * as Utils from "libs/utils"; import _ from "lodash"; -import type { ServerBoundingBoxTypeTuple } from "types/api_flow_types"; import type { Vector3, Vector6 } from "oxalis/constants"; import InputComponent from "oxalis/view/components/input_component"; -import * as Utils from "libs/utils"; -import type { InputProps } from "antd"; +import * as React from "react"; +import type { ServerBoundingBoxTypeTuple } from "types/api_flow_types"; const CHARACTER_WIDTH_PX = 8; diff --git a/frontend/javascripts/libs/window.ts b/frontend/javascripts/libs/window.ts index d629a1e9b3d..2435d4d64a6 100644 --- a/frontend/javascripts/libs/window.ts +++ b/frontend/javascripts/libs/window.ts @@ -1,7 +1,7 @@ // This module should be used to access the window object, so it can be mocked in the unit tests -import type { ArbitraryFunction, ArbitraryObject } from "types/globals"; import type TextureBucketManager from "oxalis/model/bucket_data_handling/texture_bucket_manager"; +import type { ArbitraryFunction, ArbitraryObject } from "types/globals"; // mockRequire("libs/window", myFakeWindow); const removeEventListener = ( diff --git a/frontend/javascripts/main.tsx b/frontend/javascripts/main.tsx index 31d59217e44..9a8bcb6d278 100644 --- a/frontend/javascripts/main.tsx +++ b/frontend/javascripts/main.tsx @@ -1,31 +1,31 @@ -import { Provider } from "react-redux"; -import { createRoot } from "react-dom/client"; +import { message } from "antd"; import window, { document } from "libs/window"; import rootSaga from "oxalis/model/sagas/root_saga"; import UnthrottledStore, { startSagas } from "oxalis/store"; -import { message } from "antd"; +import { createRoot } from "react-dom/client"; +import { Provider } from "react-redux"; -import { getActiveUser, checkAnyOrganizationExists, getOrganization } from "admin/admin_rest_api"; -import { load as loadFeatureToggles } from "features"; -import { setActiveUserAction } from "oxalis/model/actions/user_actions"; -import { setHasOrganizationsAction, setThemeAction } from "oxalis/model/actions/ui_actions"; -import ErrorHandling from "libs/error_handling"; -import Router from "router"; -import Store from "oxalis/throttled_store"; -import { DndProvider } from "react-dnd"; -import { HTML5Backend } from "react-dnd-html5-backend"; +import { createSyncStoragePersister } from "@tanstack/query-sync-storage-persister"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { persistQueryClient } from "@tanstack/react-query-persist-client"; -import { createSyncStoragePersister } from "@tanstack/query-sync-storage-persister"; +import { checkAnyOrganizationExists, getActiveUser, getOrganization } from "admin/admin_rest_api"; +import ErrorBoundary from "components/error_boundary"; +import { RootForFastTooltips } from "components/fast_tooltip"; +import { load as loadFeatureToggles } from "features"; +import checkBrowserFeatures from "libs/browser_feature_check"; +import ErrorHandling from "libs/error_handling"; import UserLocalStorage from "libs/user_local_storage"; import { compress, decompress } from "lz-string"; -import ErrorBoundary from "components/error_boundary"; -import { setStore, setModel } from "oxalis/singletons"; -import Model from "oxalis/model"; import { setupApi } from "oxalis/api/internal_api"; +import Model from "oxalis/model"; import { setActiveOrganizationAction } from "oxalis/model/actions/organization_actions"; -import checkBrowserFeatures from "libs/browser_feature_check"; -import { RootForFastTooltips } from "components/fast_tooltip"; +import { setHasOrganizationsAction, setThemeAction } from "oxalis/model/actions/ui_actions"; +import { setActiveUserAction } from "oxalis/model/actions/user_actions"; +import { setModel, setStore } from "oxalis/singletons"; +import Store from "oxalis/throttled_store"; +import { DndProvider } from "react-dnd"; +import { HTML5Backend } from "react-dnd-html5-backend"; +import Router from "router"; import "../stylesheets/main.less"; import GlobalThemeProvider, { getThemeFromUser } from "theme"; diff --git a/frontend/javascripts/messages.tsx b/frontend/javascripts/messages.tsx index bdfbd7dd051..071533eea7d 100644 --- a/frontend/javascripts/messages.tsx +++ b/frontend/javascripts/messages.tsx @@ -2,8 +2,8 @@ import _ from "lodash"; import type { Vector4 } from "oxalis/constants"; import type { DatasetConfiguration, - UserConfiguration, DatasetLayerConfiguration, + UserConfiguration, } from "oxalis/store"; export type RecommendedConfiguration = Partial< diff --git a/frontend/javascripts/navbar.tsx b/frontend/javascripts/navbar.tsx index c3169385ea9..0934d62e190 100644 --- a/frontend/javascripts/navbar.tsx +++ b/frontend/javascripts/navbar.tsx @@ -1,73 +1,73 @@ -import type React from "react"; -import { useState, useEffect, useRef } from "react"; +import { + BarChartOutlined, + BellOutlined, + CheckOutlined, + HomeOutlined, + QuestionCircleOutlined, + SwapOutlined, + TeamOutlined, + UserOutlined, +} from "@ant-design/icons"; import { Avatar, - Button, Badge, - Tooltip, + Button, + ConfigProvider, + Input, + type InputRef, Layout, Menu, Popover, type SubMenuProps, Tag, - Input, - type InputRef, - ConfigProvider, + Tooltip, } from "antd"; -import { - SwapOutlined, - TeamOutlined, - CheckOutlined, - BarChartOutlined, - HomeOutlined, - QuestionCircleOutlined, - UserOutlined, - BellOutlined, -} from "@ant-design/icons"; -import { useHistory, Link } from "react-router-dom"; import classnames from "classnames"; +import type React from "react"; +import { useEffect, useRef, useState } from "react"; import { connect, useSelector } from "react-redux"; +import { Link, useHistory } from "react-router-dom"; -import Toast from "libs/toast"; -import type { - APIOrganizationCompact, - APIUser, - APIUserCompact, - APIUserTheme, -} from "types/api_flow_types"; -import { PortalTarget } from "oxalis/view/layouting/portal_utils"; import { getBuildInfo, getUsersOrganizations, + sendAnalyticsEvent, switchToOrganization, - updateSelectedThemeOfUser, updateNovelUserExperienceInfos, - sendAnalyticsEvent, + updateSelectedThemeOfUser, } from "admin/admin_rest_api"; -import { logoutUserAction, setActiveUserAction } from "oxalis/model/actions/user_actions"; -import { useFetch, useInterval } from "libs/react_helpers"; import LoginForm from "admin/auth/login_form"; +import { PricingPlanEnum } from "admin/organization/pricing_plan_utils"; +import type { ItemType, MenuItemType, SubMenuType } from "antd/es/menu/interface"; +import { MaintenanceBanner, UpgradeVersionBanner } from "banners"; +import { PricingEnforcedSpan } from "components/pricing_enforcers"; +import features from "features"; +import { useFetch, useInterval } from "libs/react_helpers"; import Request from "libs/request"; -import type { OxalisState } from "oxalis/store"; -import Store from "oxalis/store"; +import Toast from "libs/toast"; import * as Utils from "libs/utils"; import window, { location } from "libs/window"; -import features from "features"; -import { setThemeAction } from "oxalis/model/actions/ui_actions"; -import { HelpModal } from "oxalis/view/help_modal"; -import { PricingPlanEnum } from "admin/organization/pricing_plan_utils"; import messages from "messages"; -import { PricingEnforcedSpan } from "components/pricing_enforcers"; -import type { ItemType, MenuItemType, SubMenuType } from "antd/es/menu/interface"; -import type { MenuClickEventHandler } from "rc-menu/lib/interface"; import constants from "oxalis/constants"; -import { MaintenanceBanner, UpgradeVersionBanner } from "banners"; -import { getAntdTheme, getSystemColorTheme } from "theme"; -import { formatUserName } from "oxalis/model/accessors/user_accessor"; import { isAnnotationFromDifferentOrganization, isAnnotationOwner as isAnnotationOwnerAccessor, } from "oxalis/model/accessors/annotation_accessor"; +import { formatUserName } from "oxalis/model/accessors/user_accessor"; +import { setThemeAction } from "oxalis/model/actions/ui_actions"; +import { logoutUserAction, setActiveUserAction } from "oxalis/model/actions/user_actions"; +import type { OxalisState } from "oxalis/store"; +import Store from "oxalis/store"; +import { HelpModal } from "oxalis/view/help_modal"; +import { PortalTarget } from "oxalis/view/layouting/portal_utils"; +import type { MenuClickEventHandler } from "rc-menu/lib/interface"; +import { getAntdTheme, getSystemColorTheme } from "theme"; +import type { + APIOrganizationCompact, + APIUser, + APIUserCompact, + APIUserTheme, +} from "types/api_flow_types"; const { Header } = Layout; diff --git a/frontend/javascripts/oxalis/api/api_latest.ts b/frontend/javascripts/oxalis/api/api_latest.ts index 924460157f8..395416b5d4c 100644 --- a/frontend/javascripts/oxalis/api/api_latest.ts +++ b/frontend/javascripts/oxalis/api/api_latest.ts @@ -1,66 +1,74 @@ -import PriorityQueue from "js-priority-queue"; -// @ts-expect-error ts-migrate(7016) FIXME: Could not find a declaration file for module 'twee... Remove this comment to see the full error message -import TWEEN from "tween.js"; -import _ from "lodash"; -import type { Bucket, DataBucket } from "oxalis/model/bucket_data_handling/bucket"; -import { getConstructorForElementClass } from "oxalis/model/bucket_data_handling/bucket"; -import { type APICompoundType, APICompoundTypeEnum, type ElementClass } from "types/api_flow_types"; -import { InputKeyboardNoLoop } from "libs/input"; -import { M4x4, type Matrix4x4, V3, type Vector16 } from "libs/mjs"; -import type { Versions } from "oxalis/view/version_view"; -import { - addTreesAndGroupsAction, - setActiveNodeAction, - createCommentAction, - deleteNodeAction, - centerActiveNodeAction, - deleteTreeAction, - resetSkeletonTracingAction, - setNodeRadiusAction, - setTreeNameAction, - setActiveTreeAction, - setActiveTreeGroupAction, - setActiveTreeByNameAction, - setTreeColorIndexAction, - setTreeVisibilityAction, - setTreeGroupAction, - setTreeGroupsAction, - setTreeEdgeVisibilityAction, - createTreeAction, -} from "oxalis/model/actions/skeletontracing_actions"; -import { - bucketPositionToGlobalAddress, - globalPositionToBucketPosition, - scaleGlobalPositionWithMagnification, - zoomedAddressToZoomedPosition, -} from "oxalis/model/helpers/position_converter"; -import { - callDeep, - createGroupToSegmentsMap, - MISSING_GROUP_ID, - moveGroupsHelper, -} from "oxalis/view/right-border-tabs/tree_hierarchy_view_helpers"; -import { centerTDViewAction } from "oxalis/model/actions/view_mode_actions"; -import { disableSavingAction, discardSaveQueuesAction } from "oxalis/model/actions/save_actions"; import { doWithToken, + downsampleSegmentation, finishAnnotation, getMappingsForDatasetLayer, - downsampleSegmentation, sendAnalyticsEvent, } from "admin/admin_rest_api"; +import { requestTask } from "admin/api/tasks"; +import PriorityQueue from "js-priority-queue"; +import { InputKeyboardNoLoop } from "libs/input"; +import { M4x4, type Matrix4x4, V3, type Vector16 } from "libs/mjs"; +import Request from "libs/request"; +import type { ToastStyle } from "libs/toast"; +import Toast from "libs/toast"; +import UserLocalStorage from "libs/user_local_storage"; +import * as Utils from "libs/utils"; +import { coalesce } from "libs/utils"; +import window, { location } from "libs/window"; +import _ from "lodash"; +import messages from "messages"; +import type { + AnnotationTool, + BoundingBoxType, + BucketAddress, + ControlMode, + OrthoView, + TypedArray, + Vector3, + Vector4, +} from "oxalis/constants"; +import Constants, { + ControlModeEnum, + OrthoViews, + AnnotationToolEnum, + TDViewDisplayModeEnum, + MappingStatusEnum, + EMPTY_OBJECT, +} from "oxalis/constants"; +import { rotate3DViewTo } from "oxalis/controller/camera_controller"; +import { loadAgglomerateSkeletonForSegmentId } from "oxalis/controller/combinations/segmentation_handlers"; +import { + createSkeletonNode, + getOptionsForCreateSkeletonNode, +} from "oxalis/controller/combinations/skeleton_handlers"; +import UrlManager from "oxalis/controller/url_manager"; +import type { OxalisModel } from "oxalis/model"; +import { + flatToNestedMatrix, + getLayerBoundingBox, + getLayerByName, + getMagInfo, + getMappingInfo, + getVisibleSegmentationLayer, +} from "oxalis/model/accessors/dataset_accessor"; +import { + getActiveMagIndexForLayer, + getPosition, + getRotation, +} from "oxalis/model/accessors/flycam_accessor"; import { findTreeByNodeId, - getNodeAndTree, - getNodeAndTreeOrNull, getActiveNode, getActiveTree, getActiveTreeGroup, - getTree, getFlatTreeGroups, + getNodeAndTree, + getNodeAndTreeOrNull, + getNodePosition, + getTree, getTreeGroupsMap, mapGroups, - getNodePosition, } from "oxalis/model/accessors/skeletontracing_accessor"; import { getActiveCellId, @@ -77,28 +85,50 @@ import { getVolumeTracings, hasVolumeTracings, } from "oxalis/model/accessors/volumetracing_accessor"; -import { getHalfViewportExtentsInUnitFromState } from "oxalis/model/sagas/saga_selectors"; +import { restartSagaAction, wkReadyAction } from "oxalis/model/actions/actions"; import { - getLayerBoundingBox, - getLayerByName, - getMagInfo, - getVisibleSegmentationLayer, - getMappingInfo, - flatToNestedMatrix, -} from "oxalis/model/accessors/dataset_accessor"; -import { - getPosition, - getActiveMagIndexForLayer, - getRotation, -} from "oxalis/model/accessors/flycam_accessor"; + dispatchMaybeFetchMeshFilesAsync, + refreshMeshesAction, + removeMeshAction, + updateCurrentMeshFileAction, + updateMeshVisibilityAction, +} from "oxalis/model/actions/annotation_actions"; +import { setLayerTransformsAction } from "oxalis/model/actions/dataset_actions"; +import { setPositionAction, setRotationAction } from "oxalis/model/actions/flycam_actions"; +import { disableSavingAction, discardSaveQueuesAction } from "oxalis/model/actions/save_actions"; import { loadAdHocMeshAction, loadPrecomputedMeshAction, } from "oxalis/model/actions/segmentation_actions"; -import { loadAgglomerateSkeletonForSegmentId } from "oxalis/controller/combinations/segmentation_handlers"; -import { overwriteAction } from "oxalis/model/helpers/overwrite_action_middleware"; -import { parseNml } from "oxalis/model/helpers/nml_helpers"; -import { rotate3DViewTo } from "oxalis/controller/camera_controller"; +import { + setMappingAction, + setMappingEnabledAction, + updateDatasetSettingAction, + updateLayerSettingAction, + updateUserSettingAction, +} from "oxalis/model/actions/settings_actions"; +import { + addTreesAndGroupsAction, + centerActiveNodeAction, + createCommentAction, + createTreeAction, + deleteNodeAction, + deleteTreeAction, + resetSkeletonTracingAction, + setActiveNodeAction, + setActiveTreeAction, + setActiveTreeByNameAction, + setActiveTreeGroupAction, + setNodeRadiusAction, + setTreeColorIndexAction, + setTreeEdgeVisibilityAction, + setTreeGroupAction, + setTreeGroupsAction, + setTreeNameAction, + setTreeVisibilityAction, +} from "oxalis/model/actions/skeletontracing_actions"; +import { setToolAction } from "oxalis/model/actions/ui_actions"; +import { centerTDViewAction } from "oxalis/model/actions/view_mode_actions"; import { type BatchableUpdateSegmentAction, batchUpdateGroupsAndSegmentsAction, @@ -108,80 +138,50 @@ import { setSegmentGroupsAction, updateSegmentAction, } from "oxalis/model/actions/volumetracing_actions"; -import { setPositionAction, setRotationAction } from "oxalis/model/actions/flycam_actions"; -import { setToolAction } from "oxalis/model/actions/ui_actions"; -import { - updateCurrentMeshFileAction, - refreshMeshesAction, - updateMeshVisibilityAction, - removeMeshAction, - dispatchMaybeFetchMeshFilesAsync, -} from "oxalis/model/actions/annotation_actions"; -import { - updateUserSettingAction, - updateDatasetSettingAction, - updateLayerSettingAction, - setMappingAction, - setMappingEnabledAction, -} from "oxalis/model/actions/settings_actions"; -import { wkReadyAction, restartSagaAction } from "oxalis/model/actions/actions"; -import type { - BoundingBoxType, - ControlMode, - OrthoView, - Vector3, - Vector4, - AnnotationTool, - TypedArray, - BucketAddress, -} from "oxalis/constants"; -import Constants, { - ControlModeEnum, - OrthoViews, - AnnotationToolEnum, - TDViewDisplayModeEnum, - MappingStatusEnum, - EMPTY_OBJECT, -} from "oxalis/constants"; +import type { Bucket, DataBucket } from "oxalis/model/bucket_data_handling/bucket"; +import { getConstructorForElementClass } from "oxalis/model/bucket_data_handling/bucket"; import type DataLayer from "oxalis/model/data_layer"; -import type { OxalisModel } from "oxalis/model"; +import dimensions from "oxalis/model/dimensions"; +import { MagInfo } from "oxalis/model/helpers/mag_info"; +import { parseNml } from "oxalis/model/helpers/nml_helpers"; +import { overwriteAction } from "oxalis/model/helpers/overwrite_action_middleware"; +import { + bucketPositionToGlobalAddress, + globalPositionToBucketPosition, + scaleGlobalPositionWithMagnification, + zoomedAddressToZoomedPosition, +} from "oxalis/model/helpers/position_converter"; +import { getMaximumGroupId } from "oxalis/model/reducers/skeletontracing_reducer_helpers"; +import { getHalfViewportExtentsInUnitFromState } from "oxalis/model/sagas/saga_selectors"; import { Model, api } from "oxalis/singletons"; -import Request from "libs/request"; import type { - MappingType, DatasetConfiguration, Mapping, + MappingType, + MutableNode, Node, + OxalisState, + Segment, + SegmentGroup, SkeletonTracing, Tracing, TreeGroupTypeFlat, TreeMap, UserConfiguration, VolumeTracing, - OxalisState, - SegmentGroup, - Segment, - MutableNode, } from "oxalis/store"; import Store from "oxalis/store"; -import type { ToastStyle } from "libs/toast"; -import Toast from "libs/toast"; -import UrlManager from "oxalis/controller/url_manager"; -import UserLocalStorage from "libs/user_local_storage"; -import * as Utils from "libs/utils"; -import dimensions from "oxalis/model/dimensions"; -import messages from "messages"; -import window, { location } from "libs/window"; -import { coalesce } from "libs/utils"; -import { setLayerTransformsAction } from "oxalis/model/actions/dataset_actions"; -import { MagInfo } from "oxalis/model/helpers/mag_info"; -import type { AdditionalCoordinate } from "types/api_flow_types"; -import { getMaximumGroupId } from "oxalis/model/reducers/skeletontracing_reducer_helpers"; import { - createSkeletonNode, - getOptionsForCreateSkeletonNode, -} from "oxalis/controller/combinations/skeleton_handlers"; -import { requestTask } from "admin/api/tasks"; + MISSING_GROUP_ID, + callDeep, + createGroupToSegmentsMap, + moveGroupsHelper, +} from "oxalis/view/right-border-tabs/tree_hierarchy_view_helpers"; +import type { Versions } from "oxalis/view/version_view"; +// @ts-expect-error ts-migrate(7016) FIXME: Could not find a declaration file for module 'twee... Remove this comment to see the full error message +import TWEEN from "tween.js"; +import { type APICompoundType, APICompoundTypeEnum, type ElementClass } from "types/api_flow_types"; +import type { AdditionalCoordinate } from "types/api_flow_types"; type TransformSpec = | { type: "scale"; args: [Vector3, Vector3] } diff --git a/frontend/javascripts/oxalis/api/api_loader.ts b/frontend/javascripts/oxalis/api/api_loader.ts index 7bb54b9d3c9..3ece3a89cb2 100644 --- a/frontend/javascripts/oxalis/api/api_loader.ts +++ b/frontend/javascripts/oxalis/api/api_loader.ts @@ -1,6 +1,6 @@ +import app from "app"; // only relative imports are followed by documentationjs import type { OxalisModel } from "oxalis/model"; -import app from "app"; import createApiLatest, { type ApiInterface } from "./api_latest"; import WkDev from "./wk_dev"; const latestVersion = 3; diff --git a/frontend/javascripts/oxalis/api/cross_origin_api.ts b/frontend/javascripts/oxalis/api/cross_origin_api.ts index 22102cd4019..0c267fe8d8d 100644 --- a/frontend/javascripts/oxalis/api/cross_origin_api.ts +++ b/frontend/javascripts/oxalis/api/cross_origin_api.ts @@ -1,6 +1,6 @@ -import { useEffect } from "react"; import _ from "lodash"; import { api } from "oxalis/singletons"; +import { useEffect } from "react"; // This component allows cross origin communication, for example, between a host page // and an embedded webKnossos iframe. diff --git a/frontend/javascripts/oxalis/api/internal_api.ts b/frontend/javascripts/oxalis/api/internal_api.ts index a53a073e995..0610808523a 100644 --- a/frontend/javascripts/oxalis/api/internal_api.ts +++ b/frontend/javascripts/oxalis/api/internal_api.ts @@ -1,7 +1,7 @@ +import createApi from "oxalis/api/api_latest"; // This module exposes the api for internal usage, so that we don't have to // deal with versioning, creation and waiting of/for the api. import { Model, setApi } from "oxalis/singletons"; -import createApi from "oxalis/api/api_latest"; export function setupApi() { const api = createApi(Model); diff --git a/frontend/javascripts/oxalis/api/wk_dev.ts b/frontend/javascripts/oxalis/api/wk_dev.ts index d3b5c4d7f16..70049d7b4d0 100644 --- a/frontend/javascripts/oxalis/api/wk_dev.ts +++ b/frontend/javascripts/oxalis/api/wk_dev.ts @@ -1,11 +1,11 @@ -import { Store } from "oxalis/singletons"; -import type { Vector3 } from "oxalis/constants"; +import showFpsMeter from "libs/fps_meter"; import { V3 } from "libs/mjs"; import { roundTo, sleep } from "libs/utils"; -import type ApiLoader from "./api_loader"; -import type { ApiInterface } from "./api_latest"; -import showFpsMeter from "libs/fps_meter"; import _ from "lodash"; +import type { Vector3 } from "oxalis/constants"; +import { Store } from "oxalis/singletons"; +import type { ApiInterface } from "./api_latest"; +import type ApiLoader from "./api_loader"; // Can be accessed via window.webknossos.DEV.flags. Only use this // for debugging or one off scripts. diff --git a/frontend/javascripts/oxalis/controller.tsx b/frontend/javascripts/oxalis/controller.tsx index 0912a7babe9..9ff0475bcef 100644 --- a/frontend/javascripts/oxalis/controller.tsx +++ b/frontend/javascripts/oxalis/controller.tsx @@ -1,34 +1,34 @@ -import type { RouteComponentProps } from "react-router-dom"; -import { withRouter } from "react-router-dom"; -import { connect } from "react-redux"; -import type { Location as HistoryLocation, Action as HistoryAction } from "history"; -import * as React from "react"; -import _ from "lodash"; -import { APIAnnotationTypeEnum, type APICompoundType } from "types/api_flow_types"; -import { HANDLED_ERROR } from "oxalis/model_initialization"; -import { InputKeyboardNoLoop } from "libs/input"; +import app from "app"; +import BrainSpinner, { BrainSpinnerWithError, CoverWithLogin } from "components/brain_spinner"; +import type { Action as HistoryAction, Location as HistoryLocation } from "history"; import { fetchGistContent } from "libs/gist"; -import { initializeSceneController } from "oxalis/controller/scene_controller"; -import { saveNowAction, undoAction, redoAction } from "oxalis/model/actions/save_actions"; -import { setIsInAnnotationViewAction } from "oxalis/model/actions/ui_actions"; -import { setViewModeAction, updateLayerSettingAction } from "oxalis/model/actions/settings_actions"; -import { wkReadyAction } from "oxalis/model/actions/actions"; +import { InputKeyboardNoLoop } from "libs/input"; +import Toast from "libs/toast"; +import * as Utils from "libs/utils"; +import window, { document, location } from "libs/window"; +import _ from "lodash"; +import messages from "messages"; import ApiLoader from "oxalis/api/api_loader"; +import type { ViewMode } from "oxalis/constants"; +import constants, { ControlModeEnum } from "oxalis/constants"; +import { initializeSceneController } from "oxalis/controller/scene_controller"; +import UrlManager from "oxalis/controller/url_manager"; import ArbitraryController from "oxalis/controller/viewmodes/arbitrary_controller"; -import BrainSpinner, { BrainSpinnerWithError, CoverWithLogin } from "components/brain_spinner"; -import { Model } from "oxalis/singletons"; import PlaneController from "oxalis/controller/viewmodes/plane_controller"; +import { wkReadyAction } from "oxalis/model/actions/actions"; +import { redoAction, saveNowAction, undoAction } from "oxalis/model/actions/save_actions"; +import { setViewModeAction, updateLayerSettingAction } from "oxalis/model/actions/settings_actions"; +import { setIsInAnnotationViewAction } from "oxalis/model/actions/ui_actions"; +import { HANDLED_ERROR } from "oxalis/model_initialization"; +import { Model } from "oxalis/singletons"; import type { OxalisState, TraceOrViewCommand } from "oxalis/store"; import Store from "oxalis/store"; -import Toast from "libs/toast"; -import UrlManager from "oxalis/controller/url_manager"; -import * as Utils from "libs/utils"; -import type { APIUser, APIOrganization } from "types/api_flow_types"; -import app from "app"; -import type { ViewMode } from "oxalis/constants"; -import constants, { ControlModeEnum } from "oxalis/constants"; -import messages from "messages"; -import window, { document, location } from "libs/window"; +import * as React from "react"; +import { connect } from "react-redux"; +import type { RouteComponentProps } from "react-router-dom"; +import { withRouter } from "react-router-dom"; +import { APIAnnotationTypeEnum, type APICompoundType } from "types/api_flow_types"; +import type { APIOrganization, APIUser } from "types/api_flow_types"; import type DataLayer from "./model/data_layer"; export type ControllerStatus = "loading" | "loaded" | "failedLoading"; diff --git a/frontend/javascripts/oxalis/controller/camera_controller.ts b/frontend/javascripts/oxalis/controller/camera_controller.ts index 122071b43aa..37f2821c766 100644 --- a/frontend/javascripts/oxalis/controller/camera_controller.ts +++ b/frontend/javascripts/oxalis/controller/camera_controller.ts @@ -1,24 +1,24 @@ -import * as React from "react"; -import * as THREE from "three"; -// @ts-expect-error ts-migrate(7016) FIXME: Could not find a declaration file for module 'twee... Remove this comment to see the full error message -import TWEEN from "tween.js"; -import _ from "lodash"; +import { V3 } from "libs/mjs"; import * as Utils from "libs/utils"; +import _ from "lodash"; import type { OrthoView, OrthoViewMap, OrthoViewRects, Vector3 } from "oxalis/constants"; import { OrthoViewValuesWithoutTDView, OrthoViews } from "oxalis/constants"; -import { V3 } from "libs/mjs"; -import { getDatasetExtentInUnit, getDatasetCenter } from "oxalis/model/accessors/dataset_accessor"; +import { getDatasetCenter, getDatasetExtentInUnit } from "oxalis/model/accessors/dataset_accessor"; +import { getPosition } from "oxalis/model/accessors/flycam_accessor"; import { getInputCatcherAspectRatio, getPlaneExtentInVoxelFromStore, } from "oxalis/model/accessors/view_mode_accessor"; -import { getPosition } from "oxalis/model/accessors/flycam_accessor"; -import { listenToStoreProperty } from "oxalis/model/helpers/listener_helpers"; import { setTDCameraWithoutTimeTrackingAction } from "oxalis/model/actions/view_mode_actions"; +import { listenToStoreProperty } from "oxalis/model/helpers/listener_helpers"; import { getBaseVoxelInUnit, voxelToUnit } from "oxalis/model/scaleinfo"; +import { api } from "oxalis/singletons"; import type { CameraData } from "oxalis/store"; import Store from "oxalis/store"; -import { api } from "oxalis/singletons"; +import * as React from "react"; +import * as THREE from "three"; +// @ts-expect-error ts-migrate(7016) FIXME: Could not find a declaration file for module 'twee... Remove this comment to see the full error message +import TWEEN from "tween.js"; type Props = { cameras: OrthoViewMap; diff --git a/frontend/javascripts/oxalis/controller/combinations/bounding_box_handlers.ts b/frontend/javascripts/oxalis/controller/combinations/bounding_box_handlers.ts index ea389aaeec3..1a5513fc447 100644 --- a/frontend/javascripts/oxalis/controller/combinations/bounding_box_handlers.ts +++ b/frontend/javascripts/oxalis/controller/combinations/bounding_box_handlers.ts @@ -1,22 +1,22 @@ +import { V3 } from "libs/mjs"; +import { document } from "libs/window"; +import _ from "lodash"; +import type { BoundingBoxType, OrthoView, Point2, Vector2, Vector3 } from "oxalis/constants"; +import getSceneController from "oxalis/controller/scene_controller_provider"; +import { getSomeTracing } from "oxalis/model/accessors/tracing_accessor"; import { calculateGlobalDelta, calculateGlobalPos, calculateMaybeGlobalPos, } from "oxalis/model/accessors/view_mode_accessor"; -import _ from "lodash"; -import type { OrthoView, Point2, Vector3, BoundingBoxType, Vector2 } from "oxalis/constants"; -import Store, { type OxalisState, type UserBoundingBox } from "oxalis/store"; -import { getSomeTracing } from "oxalis/model/accessors/tracing_accessor"; -import type { DimensionMap, DimensionIndices } from "oxalis/model/dimensions"; -import Dimension from "oxalis/model/dimensions"; import { addUserBoundingBoxAction, changeUserBoundingBoxAction, } from "oxalis/model/actions/annotation_actions"; +import type { DimensionIndices, DimensionMap } from "oxalis/model/dimensions"; +import Dimension from "oxalis/model/dimensions"; import { getBaseVoxelFactorsInUnit } from "oxalis/model/scaleinfo"; -import getSceneController from "oxalis/controller/scene_controller_provider"; -import { document } from "libs/window"; -import { V3 } from "libs/mjs"; +import Store, { type OxalisState, type UserBoundingBox } from "oxalis/store"; const BOUNDING_BOX_HOVERING_THROTTLE_TIME = 100; const getNeighbourEdgeIndexByEdgeIndex: { [key: number]: Vector2 } = { diff --git a/frontend/javascripts/oxalis/controller/combinations/move_handlers.ts b/frontend/javascripts/oxalis/controller/combinations/move_handlers.ts index 1029b08f6f1..ae0bef4ed85 100644 --- a/frontend/javascripts/oxalis/controller/combinations/move_handlers.ts +++ b/frontend/javascripts/oxalis/controller/combinations/move_handlers.ts @@ -1,17 +1,17 @@ -import Store from "oxalis/store"; -import type { Point2, Vector3, OrthoView } from "oxalis/constants"; -import { OrthoViews, OrthoViewValuesWithoutTDView } from "oxalis/constants"; -import Dimensions from "oxalis/model/dimensions"; -import { getInputCatcherRect, calculateGlobalPos } from "oxalis/model/accessors/view_mode_accessor"; +import type { OrthoView, Point2, Vector3 } from "oxalis/constants"; +import { OrthoViewValuesWithoutTDView, OrthoViews } from "oxalis/constants"; import { is2dDataset } from "oxalis/model/accessors/dataset_accessor"; +import { getActiveMagInfo } from "oxalis/model/accessors/flycam_accessor"; +import { calculateGlobalPos, getInputCatcherRect } from "oxalis/model/accessors/view_mode_accessor"; import { - movePlaneFlycamOrthoAction, moveFlycamOrthoAction, + movePlaneFlycamOrthoAction, zoomByDeltaAction, } from "oxalis/model/actions/flycam_actions"; import { setViewportAction, zoomTDViewAction } from "oxalis/model/actions/view_mode_actions"; -import { getActiveMagInfo } from "oxalis/model/accessors/flycam_accessor"; import { setMousePositionAction } from "oxalis/model/actions/volumetracing_actions"; +import Dimensions from "oxalis/model/dimensions"; +import Store from "oxalis/store"; export function setMousePosition(position: Point2 | null | undefined): void { if (position != null) { diff --git a/frontend/javascripts/oxalis/controller/combinations/segmentation_handlers.ts b/frontend/javascripts/oxalis/controller/combinations/segmentation_handlers.ts index d8e21ac7c16..9b21e6da42b 100644 --- a/frontend/javascripts/oxalis/controller/combinations/segmentation_handlers.ts +++ b/frontend/javascripts/oxalis/controller/combinations/segmentation_handlers.ts @@ -1,21 +1,21 @@ -import type { Point2, Vector3 } from "oxalis/constants"; -import { Model } from "oxalis/singletons"; -import { calculateGlobalPos } from "oxalis/model/accessors/view_mode_accessor"; -import { getMappingInfo } from "oxalis/model/accessors/dataset_accessor"; -import { loadAgglomerateSkeletonAction } from "oxalis/model/actions/skeletontracing_actions"; -import Store from "oxalis/store"; import Toast from "libs/toast"; -import { clickSegmentAction } from "oxalis/model/actions/volumetracing_actions"; +import type { Point2, Vector3 } from "oxalis/constants"; import { getSegmentIdForPosition, getSegmentIdForPositionAsync, } from "oxalis/controller/combinations/volume_handlers"; -import { setActiveConnectomeAgglomerateIdsAction } from "oxalis/model/actions/connectome_actions"; +import { getMappingInfo } from "oxalis/model/accessors/dataset_accessor"; import { getTreeNameForAgglomerateSkeleton } from "oxalis/model/accessors/skeletontracing_accessor"; +import { calculateGlobalPos } from "oxalis/model/accessors/view_mode_accessor"; import { hasAgglomerateMapping, hasConnectomeFile, } from "oxalis/model/accessors/volumetracing_accessor"; +import { setActiveConnectomeAgglomerateIdsAction } from "oxalis/model/actions/connectome_actions"; +import { loadAgglomerateSkeletonAction } from "oxalis/model/actions/skeletontracing_actions"; +import { clickSegmentAction } from "oxalis/model/actions/volumetracing_actions"; +import { Model } from "oxalis/singletons"; +import Store from "oxalis/store"; export async function handleAgglomerateSkeletonAtClick(clickPosition: Point2) { const state = Store.getState(); diff --git a/frontend/javascripts/oxalis/controller/combinations/skeleton_handlers.ts b/frontend/javascripts/oxalis/controller/combinations/skeleton_handlers.ts index f77a3af4640..c5f935cb52f 100644 --- a/frontend/javascripts/oxalis/controller/combinations/skeleton_handlers.ts +++ b/frontend/javascripts/oxalis/controller/combinations/skeleton_handlers.ts @@ -1,52 +1,52 @@ -import * as THREE from "three"; -import type { OrthoView, OrthoViewMap, Point2, Vector3, Viewport } from "oxalis/constants"; -import { OrthoViews } from "oxalis/constants"; import { V3 } from "libs/mjs"; -import _ from "lodash"; import { values } from "libs/utils"; +import _ from "lodash"; +import type { OrthoView, OrthoViewMap, Point2, Vector3, Viewport } from "oxalis/constants"; +import { OrthoViews } from "oxalis/constants"; +import { getClosestHoveredBoundingBox } from "oxalis/controller/combinations/bounding_box_handlers"; +import getSceneController from "oxalis/controller/scene_controller_provider"; +import { getEnabledColorLayers } from "oxalis/model/accessors/dataset_accessor"; +import { + getActiveMagIndicesForLayers, + getPosition, + getRotationOrtho, + isMagRestrictionViolated, +} from "oxalis/model/accessors/flycam_accessor"; import { enforceSkeletonTracing, - getSkeletonTracing, getActiveNode, getNodeAndTree, getNodeAndTreeOrNull, getNodePosition, + getSkeletonTracing, untransformNodePosition, } from "oxalis/model/accessors/skeletontracing_accessor"; import { - getInputCatcherRect, calculateGlobalPos, calculateMaybeGlobalPos, + getInputCatcherRect, } from "oxalis/model/accessors/view_mode_accessor"; +import { setDirectionAction } from "oxalis/model/actions/flycam_actions"; import { - getActiveMagIndicesForLayers, - getPosition, - getRotationOrtho, - isMagRestrictionViolated, -} from "oxalis/model/accessors/flycam_accessor"; -import { - setActiveNodeAction, - deleteEdgeAction, - createTreeAction, - createNodeAction, createBranchPointAction, + createNodeAction, + createTreeAction, + deleteEdgeAction, mergeTreesAction, + setActiveNodeAction, setNodePositionAction, updateNavigationListAction, } from "oxalis/model/actions/skeletontracing_actions"; -import { setDirectionAction } from "oxalis/model/actions/flycam_actions"; -import type PlaneView from "oxalis/view/plane_view"; -import Store from "oxalis/store"; -import type { Edge, Tree, Node } from "oxalis/store"; -import { api } from "oxalis/singletons"; -import getSceneController from "oxalis/controller/scene_controller_provider"; -import { renderToTexture } from "oxalis/view/rendering_utils"; -import { getBaseVoxelFactorsInUnit } from "oxalis/model/scaleinfo"; +import { showContextMenuAction } from "oxalis/model/actions/ui_actions"; import Dimensions from "oxalis/model/dimensions"; -import { getClosestHoveredBoundingBox } from "oxalis/controller/combinations/bounding_box_handlers"; -import { getEnabledColorLayers } from "oxalis/model/accessors/dataset_accessor"; +import { getBaseVoxelFactorsInUnit } from "oxalis/model/scaleinfo"; +import { api } from "oxalis/singletons"; +import Store from "oxalis/store"; +import type { Edge, Node, Tree } from "oxalis/store"; import type ArbitraryView from "oxalis/view/arbitrary_view"; -import { showContextMenuAction } from "oxalis/model/actions/ui_actions"; +import type PlaneView from "oxalis/view/plane_view"; +import { renderToTexture } from "oxalis/view/rendering_utils"; +import * as THREE from "three"; import type { AdditionalCoordinate } from "types/api_flow_types"; const OrthoViewToNumber: OrthoViewMap = { [OrthoViews.PLANE_XY]: 0, diff --git a/frontend/javascripts/oxalis/controller/combinations/tool_controls.ts b/frontend/javascripts/oxalis/controller/combinations/tool_controls.ts index dc9c461de42..6da4b921ca4 100644 --- a/frontend/javascripts/oxalis/controller/combinations/tool_controls.ts +++ b/frontend/javascripts/oxalis/controller/combinations/tool_controls.ts @@ -1,60 +1,60 @@ +import features from "features"; import type { ModifierKeys } from "libs/input"; -import * as THREE from "three"; -import type { OrthoView, Point2, AnnotationTool, Vector3, Viewport } from "oxalis/constants"; -import { OrthoViews, ContourModeEnum, AnnotationToolEnum } from "oxalis/constants"; -import { - enforceActiveVolumeTracing, - getActiveSegmentationTracing, - getContourTracingMode, - getSegmentColorAsHSLA, -} from "oxalis/model/accessors/volumetracing_accessor"; -import { - handleAgglomerateSkeletonAtClick, - handleClickSegment, -} from "oxalis/controller/combinations/segmentation_handlers"; -import { - computeQuickSelectForPointAction, - computeQuickSelectForRectAction, - confirmQuickSelectAction, - hideBrushAction, -} from "oxalis/model/actions/volumetracing_actions"; -import { isBrushTool } from "oxalis/model/accessors/tool_accessor"; -import getSceneController from "oxalis/controller/scene_controller_provider"; -import { finishedResizingUserBoundingBoxAction } from "oxalis/model/actions/annotation_actions"; -import * as MoveHandlers from "oxalis/controller/combinations/move_handlers"; -import type PlaneView from "oxalis/view/plane_view"; -import * as SkeletonHandlers from "oxalis/controller/combinations/skeleton_handlers"; +import { V3 } from "libs/mjs"; +import * as Utils from "libs/utils"; +import { document } from "libs/window"; +import type { AnnotationTool, OrthoView, Point2, Vector3, Viewport } from "oxalis/constants"; +import { AnnotationToolEnum, ContourModeEnum, OrthoViews } from "oxalis/constants"; import { + type SelectedEdge, createBoundingBoxAndGetEdges, handleMovingBoundingBox, - type SelectedEdge, } from "oxalis/controller/combinations/bounding_box_handlers"; import { getClosestHoveredBoundingBox, handleResizingBoundingBox, highlightAndSetCursorOnHoveredBoundingBox, } from "oxalis/controller/combinations/bounding_box_handlers"; -import Store from "oxalis/store"; -import * as Utils from "libs/utils"; +import * as MoveHandlers from "oxalis/controller/combinations/move_handlers"; +import { + handleAgglomerateSkeletonAtClick, + handleClickSegment, +} from "oxalis/controller/combinations/segmentation_handlers"; +import * as SkeletonHandlers from "oxalis/controller/combinations/skeleton_handlers"; import * as VolumeHandlers from "oxalis/controller/combinations/volume_handlers"; -import { document } from "libs/window"; -import { api } from "oxalis/singletons"; +import getSceneController from "oxalis/controller/scene_controller_provider"; +import { isBrushTool } from "oxalis/model/accessors/tool_accessor"; +import { calculateGlobalPos } from "oxalis/model/accessors/view_mode_accessor"; +import { + enforceActiveVolumeTracing, + getActiveSegmentationTracing, + getContourTracingMode, + getSegmentColorAsHSLA, +} from "oxalis/model/accessors/volumetracing_accessor"; +import { finishedResizingUserBoundingBoxAction } from "oxalis/model/actions/annotation_actions"; import { minCutAgglomerateWithPositionAction, proofreadAtPosition, proofreadMerge, } from "oxalis/model/actions/proofread_actions"; -import { calculateGlobalPos } from "oxalis/model/accessors/view_mode_accessor"; -import { V3 } from "libs/mjs"; import { hideMeasurementTooltipAction, - setQuickSelectStateAction, - setLastMeasuredPositionAction, - setIsMeasuringAction, setActiveUserBoundingBoxId, + setIsMeasuringAction, + setLastMeasuredPositionAction, + setQuickSelectStateAction, } from "oxalis/model/actions/ui_actions"; +import { + computeQuickSelectForPointAction, + computeQuickSelectForRectAction, + confirmQuickSelectAction, + hideBrushAction, +} from "oxalis/model/actions/volumetracing_actions"; +import { api } from "oxalis/singletons"; +import Store from "oxalis/store"; import type ArbitraryView from "oxalis/view/arbitrary_view"; -import features from "features"; +import type PlaneView from "oxalis/view/plane_view"; +import * as THREE from "three"; export type ActionDescriptor = { leftClick?: string; diff --git a/frontend/javascripts/oxalis/controller/combinations/volume_handlers.ts b/frontend/javascripts/oxalis/controller/combinations/volume_handlers.ts index cd8651756b9..7abd4d4aac6 100644 --- a/frontend/javascripts/oxalis/controller/combinations/volume_handlers.ts +++ b/frontend/javascripts/oxalis/controller/combinations/volume_handlers.ts @@ -1,20 +1,20 @@ +import { V3 } from "libs/mjs"; +import memoizeOne from "memoize-one"; import type { OrthoView, Point2, Vector3 } from "oxalis/constants"; import { ContourModeEnum } from "oxalis/constants"; import { calculateGlobalPos } from "oxalis/model/accessors/view_mode_accessor"; +import { updateUserSettingAction } from "oxalis/model/actions/settings_actions"; import { - startEditingAction, - floodFillAction, addToLayerAction, finishEditingAction, - setContourTracingModeAction, - setActiveCellAction, + floodFillAction, resetContourAction, + setActiveCellAction, + setContourTracingModeAction, + startEditingAction, } from "oxalis/model/actions/volumetracing_actions"; import { Model, Store, api } from "oxalis/singletons"; -import { updateUserSettingAction } from "oxalis/model/actions/settings_actions"; import type { AdditionalCoordinate } from "types/api_flow_types"; -import memoizeOne from "memoize-one"; -import { V3 } from "libs/mjs"; export function handleDrawStart(pos: Point2, plane: OrthoView) { const state = Store.getState(); diff --git a/frontend/javascripts/oxalis/controller/custom_lod.ts b/frontend/javascripts/oxalis/controller/custom_lod.ts index 209f116b0f4..5db735708cc 100644 --- a/frontend/javascripts/oxalis/controller/custom_lod.ts +++ b/frontend/javascripts/oxalis/controller/custom_lod.ts @@ -1,6 +1,6 @@ -import * as THREE from "three"; -import Store from "oxalis/store"; import { getTDViewZoom } from "oxalis/model/accessors/view_mode_accessor"; +import Store from "oxalis/store"; +import * as THREE from "three"; export default class CustomLOD extends THREE.LOD { noLODGroup: THREE.Group; diff --git a/frontend/javascripts/oxalis/controller/merger_mode_controller.tsx b/frontend/javascripts/oxalis/controller/merger_mode_controller.tsx index bbe0036df0f..6c27db76290 100644 --- a/frontend/javascripts/oxalis/controller/merger_mode_controller.tsx +++ b/frontend/javascripts/oxalis/controller/merger_mode_controller.tsx @@ -1,8 +1,8 @@ -import { connect } from "react-redux"; -import { PureComponent } from "react"; +import { disableMergerMode, enableMergerMode } from "oxalis/merger_mode"; import type { OxalisState } from "oxalis/store"; -import { enableMergerMode, disableMergerMode } from "oxalis/merger_mode"; import MergerModeModalView from "oxalis/view/merger_mode_modal_view"; +import { PureComponent } from "react"; +import { connect } from "react-redux"; type MergerModeControllerProps = { isMergerModeEnabled: boolean; }; diff --git a/frontend/javascripts/oxalis/controller/renderer.ts b/frontend/javascripts/oxalis/controller/renderer.ts index 1429dd69c39..683db3a4e49 100644 --- a/frontend/javascripts/oxalis/controller/renderer.ts +++ b/frontend/javascripts/oxalis/controller/renderer.ts @@ -1,6 +1,6 @@ -import * as THREE from "three"; import { document } from "libs/window"; import { Store } from "oxalis/singletons"; +import * as THREE from "three"; let renderer: THREE.WebGLRenderer | null = null; function getRenderer(): THREE.WebGLRenderer { diff --git a/frontend/javascripts/oxalis/controller/scene_controller.ts b/frontend/javascripts/oxalis/controller/scene_controller.ts index 382c6a5a7b3..2bbdc04bad2 100644 --- a/frontend/javascripts/oxalis/controller/scene_controller.ts +++ b/frontend/javascripts/oxalis/controller/scene_controller.ts @@ -1,4 +1,3 @@ -import * as THREE from "three"; import app from "app"; import type Maybe from "data.maybe"; import { V3 } from "libs/mjs"; @@ -46,6 +45,7 @@ import { getVoxelPerUnit } from "oxalis/model/scaleinfo"; import { Model } from "oxalis/singletons"; import type { OxalisState, SkeletonTracing, UserBoundingBox } from "oxalis/store"; import Store from "oxalis/store"; +import * as THREE from "three"; import SegmentMeshController from "./segment_mesh_controller"; const CUBE_COLOR = 0x999999; diff --git a/frontend/javascripts/oxalis/controller/segment_mesh_controller.ts b/frontend/javascripts/oxalis/controller/segment_mesh_controller.ts index fcb4b0031af..a7a86134906 100644 --- a/frontend/javascripts/oxalis/controller/segment_mesh_controller.ts +++ b/frontend/javascripts/oxalis/controller/segment_mesh_controller.ts @@ -1,19 +1,19 @@ -// @ts-expect-error ts-migrate(7016) FIXME: Could not find a declaration file for module 'twee... Remove this comment to see the full error message -import TWEEN from "tween.js"; -import * as THREE from "three"; import app from "app"; import { mergeVertices } from "libs/BufferGeometryUtils"; import _ from "lodash"; import type { Vector3 } from "oxalis/constants"; import CustomLOD from "oxalis/controller/custom_lod"; +import { getAdditionalCoordinatesAsString } from "oxalis/model/accessors/flycam_accessor"; import { getActiveSegmentationTracing, getSegmentColorAsHSLA, } from "oxalis/model/accessors/volumetracing_accessor"; import { NO_LOD_MESH_INDEX } from "oxalis/model/sagas/mesh_saga"; import Store from "oxalis/store"; +import * as THREE from "three"; +// @ts-expect-error ts-migrate(7016) FIXME: Could not find a declaration file for module 'twee... Remove this comment to see the full error message +import TWEEN from "tween.js"; import type { AdditionalCoordinate } from "types/api_flow_types"; -import { getAdditionalCoordinatesAsString } from "oxalis/model/accessors/flycam_accessor"; const ACTIVATED_COLOR = [0.7, 0.5, 0.1] as const; const HOVERED_COLOR = [0.65, 0.5, 0.1] as const; diff --git a/frontend/javascripts/oxalis/controller/td_controller.tsx b/frontend/javascripts/oxalis/controller/td_controller.tsx index 46e37444f30..aef7d9992a5 100644 --- a/frontend/javascripts/oxalis/controller/td_controller.tsx +++ b/frontend/javascripts/oxalis/controller/td_controller.tsx @@ -1,43 +1,43 @@ -import _ from "lodash"; -import { connect } from "react-redux"; -import * as React from "react"; -import * as THREE from "three"; import { InputMouse } from "libs/input"; +import { V3 } from "libs/mjs"; +import TrackballControls from "libs/trackball_controls"; +import * as Utils from "libs/utils"; +import _ from "lodash"; import { type AnnotationTool, AnnotationToolEnum, type OrthoView, - OrthoViews, type OrthoViewMap, + OrthoViews, type Point2, type Vector3, } from "oxalis/constants"; -import { V3 } from "libs/mjs"; +import CameraController from "oxalis/controller/camera_controller"; +import { handleOpenContextMenu } from "oxalis/controller/combinations/skeleton_handlers"; +import { ProofreadTool, SkeletonTool } from "oxalis/controller/combinations/tool_controls"; import { getPosition } from "oxalis/model/accessors/flycam_accessor"; -import { getViewportScale, getInputCatcherRect } from "oxalis/model/accessors/view_mode_accessor"; +import { getActiveNode, getNodePosition } from "oxalis/model/accessors/skeletontracing_accessor"; +import { getInputCatcherRect, getViewportScale } from "oxalis/model/accessors/view_mode_accessor"; +import { getActiveSegmentationTracing } from "oxalis/model/accessors/volumetracing_accessor"; import { setPositionAction } from "oxalis/model/actions/flycam_actions"; import { - setViewportAction, + moveTDViewByVectorWithoutTimeTrackingAction, + moveTDViewXAction, + moveTDViewYAction, setTDCameraAction, setTDCameraWithoutTimeTrackingAction, + setViewportAction, zoomTDViewAction, - moveTDViewXAction, - moveTDViewYAction, - moveTDViewByVectorWithoutTimeTrackingAction, } from "oxalis/model/actions/view_mode_actions"; -import { getActiveNode, getNodePosition } from "oxalis/model/accessors/skeletontracing_accessor"; +import { setActiveCellAction } from "oxalis/model/actions/volumetracing_actions"; import { voxelToUnit } from "oxalis/model/scaleinfo"; -import CameraController from "oxalis/controller/camera_controller"; -import type PlaneView from "oxalis/view/plane_view"; import type { CameraData, OxalisState, Tracing } from "oxalis/store"; import Store from "oxalis/store"; -import TrackballControls from "libs/trackball_controls"; -import * as Utils from "libs/utils"; -import { ProofreadTool, SkeletonTool } from "oxalis/controller/combinations/tool_controls"; -import { handleOpenContextMenu } from "oxalis/controller/combinations/skeleton_handlers"; +import type PlaneView from "oxalis/view/plane_view"; +import * as React from "react"; +import { connect } from "react-redux"; +import * as THREE from "three"; import type { VoxelSize } from "types/api_flow_types"; -import { setActiveCellAction } from "oxalis/model/actions/volumetracing_actions"; -import { getActiveSegmentationTracing } from "oxalis/model/accessors/volumetracing_accessor"; export function threeCameraToCameraData(camera: THREE.OrthographicCamera): CameraData { const { position, up, near, far, left, right, top, bottom } = camera; diff --git a/frontend/javascripts/oxalis/controller/url_manager.ts b/frontend/javascripts/oxalis/controller/url_manager.ts index 68a88d5708d..5274ab83c00 100644 --- a/frontend/javascripts/oxalis/controller/url_manager.ts +++ b/frontend/javascripts/oxalis/controller/url_manager.ts @@ -1,26 +1,26 @@ -import _ from "lodash"; +import ErrorHandling from "libs/error_handling"; import { V3 } from "libs/mjs"; -import { applyState } from "oxalis/model_initialization"; -import { getRotation, getPosition } from "oxalis/model/accessors/flycam_accessor"; -import { enforceSkeletonTracing } from "oxalis/model/accessors/skeletontracing_accessor"; -import type { OxalisState, MappingType, MeshInformation } from "oxalis/store"; -import Store from "oxalis/store"; +import Toast from "libs/toast"; import * as Utils from "libs/utils"; -import type { ViewMode, Vector3 } from "oxalis/constants"; -import constants, { ViewModeValues, MappingStatusEnum } from "oxalis/constants"; +import { coalesce } from "libs/utils"; import window, { location } from "libs/window"; -import ErrorHandling from "libs/error_handling"; -import Toast from "libs/toast"; +import _ from "lodash"; import messages from "messages"; -import { validateUrlStateJSON } from "types/validation"; -import { type APIAnnotationType, APICompoundTypeEnum } from "types/api_flow_types"; -import { coalesce } from "libs/utils"; -import type { AdditionalCoordinate } from "types/api_flow_types"; +import type { Vector3, ViewMode } from "oxalis/constants"; +import constants, { ViewModeValues, MappingStatusEnum } from "oxalis/constants"; +import { getPosition, getRotation } from "oxalis/model/accessors/flycam_accessor"; +import { enforceSkeletonTracing } from "oxalis/model/accessors/skeletontracing_accessor"; +import { getMeshesForCurrentAdditionalCoordinates } from "oxalis/model/accessors/volumetracing_accessor"; import { additionalCoordinateToKeyValue, parseAdditionalCoordinateKey, } from "oxalis/model/helpers/nml_helpers"; -import { getMeshesForCurrentAdditionalCoordinates } from "oxalis/model/accessors/volumetracing_accessor"; +import { applyState } from "oxalis/model_initialization"; +import type { MappingType, MeshInformation, OxalisState } from "oxalis/store"; +import Store from "oxalis/store"; +import { type APIAnnotationType, APICompoundTypeEnum } from "types/api_flow_types"; +import type { AdditionalCoordinate } from "types/api_flow_types"; +import { validateUrlStateJSON } from "types/validation"; const MAX_UPDATE_INTERVAL = 1000; const MINIMUM_VALID_CSV_LENGTH = 5; diff --git a/frontend/javascripts/oxalis/controller/viewmodes/arbitrary_controller.tsx b/frontend/javascripts/oxalis/controller/viewmodes/arbitrary_controller.tsx index 7f81ed18181..3878eb43a86 100644 --- a/frontend/javascripts/oxalis/controller/viewmodes/arbitrary_controller.tsx +++ b/frontend/javascripts/oxalis/controller/viewmodes/arbitrary_controller.tsx @@ -1,51 +1,51 @@ -import * as React from "react"; import type { ModifierKeys } from "libs/input"; import { InputKeyboard, InputKeyboardNoLoop, InputMouse } from "libs/input"; import type { Matrix4x4 } from "libs/mjs"; import { V3 } from "libs/mjs"; +import Toast from "libs/toast"; +import * as Utils from "libs/utils"; +import messages from "messages"; +import type { Point2, Vector3, ViewMode, Viewport } from "oxalis/constants"; +import constants, { ArbitraryViewport } from "oxalis/constants"; +import getSceneController from "oxalis/controller/scene_controller_provider"; +import TDController from "oxalis/controller/td_controller"; +import ArbitraryPlane from "oxalis/geometries/arbitrary_plane"; +import Crosshair from "oxalis/geometries/crosshair"; +import { getMoveOffset3d, getPosition, getRotation } from "oxalis/model/accessors/flycam_accessor"; import { getActiveNode, getMaxNodeId, getNodePosition, untransformNodePosition, } from "oxalis/model/accessors/skeletontracing_accessor"; -import { getRotation, getPosition, getMoveOffset3d } from "oxalis/model/accessors/flycam_accessor"; import { getViewportScale } from "oxalis/model/accessors/view_mode_accessor"; -import { listenToStoreProperty } from "oxalis/model/helpers/listener_helpers"; import { - setActiveNodeAction, - deleteNodeAsUserAction, - createNodeAction, - createBranchPointAction, - requestDeleteBranchPointAction, - toggleAllTreesAction, - toggleInactiveTreesAction, - createTreeAction, -} from "oxalis/model/actions/skeletontracing_actions"; + moveFlycamAction, + pitchFlycamAction, + yawFlycamAction, + zoomInAction, + zoomOutAction, +} from "oxalis/model/actions/flycam_actions"; import { setFlightmodeRecordingAction, updateUserSettingAction, } from "oxalis/model/actions/settings_actions"; import { - yawFlycamAction, - pitchFlycamAction, - zoomInAction, - zoomOutAction, - moveFlycamAction, -} from "oxalis/model/actions/flycam_actions"; -import ArbitraryPlane from "oxalis/geometries/arbitrary_plane"; -import ArbitraryView from "oxalis/view/arbitrary_view"; -import Crosshair from "oxalis/geometries/crosshair"; -import Store from "oxalis/store"; -import TDController from "oxalis/controller/td_controller"; -import Toast from "libs/toast"; -import * as Utils from "libs/utils"; + createBranchPointAction, + createNodeAction, + createTreeAction, + deleteNodeAsUserAction, + requestDeleteBranchPointAction, + setActiveNodeAction, + toggleAllTreesAction, + toggleInactiveTreesAction, +} from "oxalis/model/actions/skeletontracing_actions"; +import { listenToStoreProperty } from "oxalis/model/helpers/listener_helpers"; import { api } from "oxalis/singletons"; -import type { ViewMode, Point2, Vector3, Viewport } from "oxalis/constants"; -import constants, { ArbitraryViewport } from "oxalis/constants"; -import getSceneController from "oxalis/controller/scene_controller_provider"; -import messages from "messages"; +import Store from "oxalis/store"; +import ArbitraryView from "oxalis/view/arbitrary_view"; import { downloadScreenshot } from "oxalis/view/rendering_utils"; +import * as React from "react"; import { SkeletonTool } from "../combinations/tool_controls"; const arbitraryViewportId = "inputcatcher_arbitraryViewport"; diff --git a/frontend/javascripts/oxalis/controller/viewmodes/plane_controller.tsx b/frontend/javascripts/oxalis/controller/viewmodes/plane_controller.tsx index 99dfb486eea..b24ae800199 100644 --- a/frontend/javascripts/oxalis/controller/viewmodes/plane_controller.tsx +++ b/frontend/javascripts/oxalis/controller/viewmodes/plane_controller.tsx @@ -1,70 +1,70 @@ -import { connect } from "react-redux"; -import * as React from "react"; -import _ from "lodash"; -import dimensions from "oxalis/model/dimensions"; -import { - deleteNodeAsUserAction, - createTreeAction, - createBranchPointAction, - requestDeleteBranchPointAction, - toggleAllTreesAction, - toggleInactiveTreesAction, -} from "oxalis/model/actions/skeletontracing_actions"; -import { addUserBoundingBoxAction } from "oxalis/model/actions/annotation_actions"; import { InputKeyboard, InputKeyboardNoLoop, InputMouse, type MouseBindingMap } from "libs/input"; +import Toast from "libs/toast"; +import * as Utils from "libs/utils"; import { document } from "libs/window"; +import _ from "lodash"; +import type { AnnotationTool, OrthoView, OrthoViewMap } from "oxalis/constants"; +import { AnnotationToolEnum, OrthoViewValuesWithoutTDView, OrthoViews } from "oxalis/constants"; +import * as MoveHandlers from "oxalis/controller/combinations/move_handlers"; +import * as SkeletonHandlers from "oxalis/controller/combinations/skeleton_handlers"; +import { + AreaMeasurementTool, + BoundingBoxTool, + DrawTool, + EraseTool, + FillCellTool, + LineMeasurementTool, + MoveTool, + PickCellTool, + ProofreadTool, + QuickSelectTool, + SkeletonTool, +} from "oxalis/controller/combinations/tool_controls"; +import * as VolumeHandlers from "oxalis/controller/combinations/volume_handlers"; +import getSceneController from "oxalis/controller/scene_controller_provider"; +import TDController from "oxalis/controller/td_controller"; import { - getPosition, getActiveMagIndexForLayer, getMoveOffset, + getPosition, } from "oxalis/model/accessors/flycam_accessor"; -import { listenToStoreProperty } from "oxalis/model/helpers/listener_helpers"; -import { setViewportAction } from "oxalis/model/actions/view_mode_actions"; +import { calculateGlobalPos } from "oxalis/model/accessors/view_mode_accessor"; +import { + getActiveSegmentationTracing, + getMaximumBrushSize, +} from "oxalis/model/accessors/volumetracing_accessor"; +import { addUserBoundingBoxAction } from "oxalis/model/actions/annotation_actions"; import { updateUserSettingAction } from "oxalis/model/actions/settings_actions"; -import { Model, api } from "oxalis/singletons"; -import PlaneView from "oxalis/view/plane_view"; -import type { BrushPresets, OxalisState, Tracing } from "oxalis/store"; -import Store from "oxalis/store"; -import TDController from "oxalis/controller/td_controller"; -import Toast from "libs/toast"; -import * as Utils from "libs/utils"; import { - createCellAction, - interpolateSegmentationLayerAction, -} from "oxalis/model/actions/volumetracing_actions"; + createBranchPointAction, + createTreeAction, + deleteNodeAsUserAction, + requestDeleteBranchPointAction, + toggleAllTreesAction, + toggleInactiveTreesAction, +} from "oxalis/model/actions/skeletontracing_actions"; import { cycleToolAction, enterAction, escapeAction, setToolAction, } from "oxalis/model/actions/ui_actions"; +import { setViewportAction } from "oxalis/model/actions/view_mode_actions"; import { - MoveTool, - SkeletonTool, - DrawTool, - EraseTool, - PickCellTool, - FillCellTool, - BoundingBoxTool, - QuickSelectTool, - ProofreadTool, - LineMeasurementTool, - AreaMeasurementTool, -} from "oxalis/controller/combinations/tool_controls"; -import type { OrthoView, OrthoViewMap, AnnotationTool } from "oxalis/constants"; -import { OrthoViewValuesWithoutTDView, OrthoViews, AnnotationToolEnum } from "oxalis/constants"; -import { calculateGlobalPos } from "oxalis/model/accessors/view_mode_accessor"; -import getSceneController from "oxalis/controller/scene_controller_provider"; -import * as SkeletonHandlers from "oxalis/controller/combinations/skeleton_handlers"; -import * as VolumeHandlers from "oxalis/controller/combinations/volume_handlers"; -import * as MoveHandlers from "oxalis/controller/combinations/move_handlers"; -import { downloadScreenshot } from "oxalis/view/rendering_utils"; -import { - getActiveSegmentationTracing, - getMaximumBrushSize, -} from "oxalis/model/accessors/volumetracing_accessor"; -import { showToastWarningForLargestSegmentIdMissing } from "oxalis/view/largest_segment_id_modal"; + createCellAction, + interpolateSegmentationLayerAction, +} from "oxalis/model/actions/volumetracing_actions"; +import dimensions from "oxalis/model/dimensions"; +import { listenToStoreProperty } from "oxalis/model/helpers/listener_helpers"; +import { Model, api } from "oxalis/singletons"; +import type { BrushPresets, OxalisState, Tracing } from "oxalis/store"; +import Store from "oxalis/store"; import { getDefaultBrushSizes } from "oxalis/view/action-bar/toolbar_view"; +import { showToastWarningForLargestSegmentIdMissing } from "oxalis/view/largest_segment_id_modal"; +import PlaneView from "oxalis/view/plane_view"; +import { downloadScreenshot } from "oxalis/view/rendering_utils"; +import * as React from "react"; +import { connect } from "react-redux"; import { userSettings } from "types/schemas/user_settings.schema"; import { highlightAndSetCursorOnHoveredBoundingBox } from "../combinations/bounding_box_handlers"; diff --git a/frontend/javascripts/oxalis/default_state.ts b/frontend/javascripts/oxalis/default_state.ts index 57fd1c860b1..77cd1ee1d4d 100644 --- a/frontend/javascripts/oxalis/default_state.ts +++ b/frontend/javascripts/oxalis/default_state.ts @@ -1,5 +1,3 @@ -import type { OxalisState } from "oxalis/store"; -import { defaultDatasetViewConfigurationWithoutNull } from "types/schemas/dataset_view_configuration.schema"; import Constants, { ControlModeEnum, OrthoViews, @@ -9,13 +7,15 @@ import Constants, { InterpolationModeEnum, UnitLong, } from "oxalis/constants"; +import constants from "oxalis/constants"; +import type { OxalisState } from "oxalis/store"; +import { getSystemColorTheme } from "theme"; import type { APIAllowedMode, APIAnnotationType, APIAnnotationVisibility, } from "types/api_flow_types"; -import constants from "oxalis/constants"; -import { getSystemColorTheme } from "theme"; +import { defaultDatasetViewConfigurationWithoutNull } from "types/schemas/dataset_view_configuration.schema"; const defaultViewportRect = { top: 0, diff --git a/frontend/javascripts/oxalis/geometries/arbitrary_plane.ts b/frontend/javascripts/oxalis/geometries/arbitrary_plane.ts index b7006eb94d0..cc1ef5151ca 100644 --- a/frontend/javascripts/oxalis/geometries/arbitrary_plane.ts +++ b/frontend/javascripts/oxalis/geometries/arbitrary_plane.ts @@ -1,11 +1,11 @@ -import * as THREE from "three"; import _ from "lodash"; -import { getZoomedMatrix } from "oxalis/model/accessors/flycam_accessor"; -import PlaneMaterialFactory from "oxalis/geometries/materials/plane_material_factory"; -import Store from "oxalis/store"; import constants, { OrthoViews } from "oxalis/constants"; import getSceneController from "oxalis/controller/scene_controller_provider"; +import PlaneMaterialFactory from "oxalis/geometries/materials/plane_material_factory"; +import { getZoomedMatrix } from "oxalis/model/accessors/flycam_accessor"; import shaderEditor from "oxalis/model/helpers/shader_editor"; +import Store from "oxalis/store"; +import * as THREE from "three"; // Let's set up our trianglesplane. // It serves as a "canvas" where the brain images // are drawn. diff --git a/frontend/javascripts/oxalis/geometries/crosshair.ts b/frontend/javascripts/oxalis/geometries/crosshair.ts index d01ae01b6ed..27825d58b76 100644 --- a/frontend/javascripts/oxalis/geometries/crosshair.ts +++ b/frontend/javascripts/oxalis/geometries/crosshair.ts @@ -1,6 +1,6 @@ -import * as THREE from "three"; import { getZoomedMatrix } from "oxalis/model/accessors/flycam_accessor"; import Store from "oxalis/store"; +import * as THREE from "three"; class Crosshair { mesh: THREE.Group; diff --git a/frontend/javascripts/oxalis/geometries/cube.ts b/frontend/javascripts/oxalis/geometries/cube.ts index 75c7e9e4c38..a749060b909 100644 --- a/frontend/javascripts/oxalis/geometries/cube.ts +++ b/frontend/javascripts/oxalis/geometries/cube.ts @@ -1,12 +1,12 @@ -import * as THREE from "three"; +import app from "app"; import _ from "lodash"; -import { listenToStoreProperty } from "oxalis/model/helpers/listener_helpers"; import type { OrthoView, OrthoViewWithoutTDMap, Vector3 } from "oxalis/constants"; import { OrthoViewValuesWithoutTDView, OrthoViews } from "oxalis/constants"; import { getPosition } from "oxalis/model/accessors/flycam_accessor"; -import Store from "oxalis/throttled_store"; -import app from "app"; import dimensions from "oxalis/model/dimensions"; +import { listenToStoreProperty } from "oxalis/model/helpers/listener_helpers"; +import Store from "oxalis/throttled_store"; +import * as THREE from "three"; type Properties = { min?: Vector3; max: Vector3; diff --git a/frontend/javascripts/oxalis/geometries/helper_geometries.ts b/frontend/javascripts/oxalis/geometries/helper_geometries.ts index 3631959f3da..8af50ca7079 100644 --- a/frontend/javascripts/oxalis/geometries/helper_geometries.ts +++ b/frontend/javascripts/oxalis/geometries/helper_geometries.ts @@ -1,11 +1,11 @@ -import * as THREE from "three"; -import { type OrthoView, OrthoViews, type Vector3 } from "oxalis/constants"; -import ResizableBuffer from "libs/resizable_buffer"; import app from "app"; import { V3 } from "libs/mjs"; -import Store from "oxalis/store"; +import ResizableBuffer from "libs/resizable_buffer"; +import { type OrthoView, OrthoViews, type Vector3 } from "oxalis/constants"; import Dimensions from "oxalis/model/dimensions"; import { getBaseVoxelInUnit } from "oxalis/model/scaleinfo"; +import Store from "oxalis/store"; +import * as THREE from "three"; export const CONTOUR_COLOR_NORMAL = new THREE.Color(0x0000ff); export const CONTOUR_COLOR_DELETE = new THREE.Color(0xff0000); diff --git a/frontend/javascripts/oxalis/geometries/materials/edge_shader.ts b/frontend/javascripts/oxalis/geometries/materials/edge_shader.ts index 5983bdc256a..ae6b471d830 100644 --- a/frontend/javascripts/oxalis/geometries/materials/edge_shader.ts +++ b/frontend/javascripts/oxalis/geometries/materials/edge_shader.ts @@ -1,17 +1,17 @@ -import * as THREE from "three"; +import { M4x4 } from "libs/mjs"; +import type TPS3D from "libs/thin_plate_spline"; +import _ from "lodash"; import { COLOR_TEXTURE_WIDTH_FIXED } from "oxalis/geometries/materials/node_shader"; import type { Uniforms } from "oxalis/geometries/materials/plane_material_factory"; +import { getTransformsForSkeletonLayer } from "oxalis/model/accessors/dataset_accessor"; import { listenToStoreProperty } from "oxalis/model/helpers/listener_helpers"; import shaderEditor from "oxalis/model/helpers/shader_editor"; -import { Store } from "oxalis/singletons"; -import _ from "lodash"; -import { getTransformsForSkeletonLayer } from "oxalis/model/accessors/dataset_accessor"; -import { M4x4 } from "libs/mjs"; import { generateCalculateTpsOffsetFunction, generateTpsInitialization, } from "oxalis/shaders/thin_plate_spline.glsl"; -import type TPS3D from "libs/thin_plate_spline"; +import { Store } from "oxalis/singletons"; +import * as THREE from "three"; class EdgeShader { material: THREE.RawShaderMaterial; diff --git a/frontend/javascripts/oxalis/geometries/materials/node_shader.ts b/frontend/javascripts/oxalis/geometries/materials/node_shader.ts index 84cec0fe626..8364bdcf1f7 100644 --- a/frontend/javascripts/oxalis/geometries/materials/node_shader.ts +++ b/frontend/javascripts/oxalis/geometries/materials/node_shader.ts @@ -1,20 +1,20 @@ -import * as THREE from "three"; +import { M4x4 } from "libs/mjs"; +import type TPS3D from "libs/thin_plate_spline"; +import _ from "lodash"; import { ViewModeValues, ViewModeValuesIndices } from "oxalis/constants"; import type { Uniforms } from "oxalis/geometries/materials/plane_material_factory"; -import { getBaseVoxelInUnit } from "oxalis/model/scaleinfo"; +import { getTransformsForSkeletonLayer } from "oxalis/model/accessors/dataset_accessor"; import { getZoomValue } from "oxalis/model/accessors/flycam_accessor"; import { listenToStoreProperty } from "oxalis/model/helpers/listener_helpers"; -import { Store } from "oxalis/singletons"; import shaderEditor from "oxalis/model/helpers/shader_editor"; -import _ from "lodash"; -import { formatNumberAsGLSLFloat } from "oxalis/shaders/utils.glsl"; -import { getTransformsForSkeletonLayer } from "oxalis/model/accessors/dataset_accessor"; -import { M4x4 } from "libs/mjs"; +import { getBaseVoxelInUnit } from "oxalis/model/scaleinfo"; import { generateCalculateTpsOffsetFunction, generateTpsInitialization, } from "oxalis/shaders/thin_plate_spline.glsl"; -import type TPS3D from "libs/thin_plate_spline"; +import { formatNumberAsGLSLFloat } from "oxalis/shaders/utils.glsl"; +import { Store } from "oxalis/singletons"; +import * as THREE from "three"; export const NodeTypes = { INVALID: 0.0, diff --git a/frontend/javascripts/oxalis/geometries/materials/plane_material_factory.ts b/frontend/javascripts/oxalis/geometries/materials/plane_material_factory.ts index aabec1e2429..5d79b46e7e2 100644 --- a/frontend/javascripts/oxalis/geometries/materials/plane_material_factory.ts +++ b/frontend/javascripts/oxalis/geometries/materials/plane_material_factory.ts @@ -1,58 +1,58 @@ -import * as THREE from "three"; +import app from "app"; +import { CuckooTableVec3 } from "libs/cuckoo/cuckoo_table_vec3"; +import { V3 } from "libs/mjs"; +import type TPS3D from "libs/thin_plate_spline"; +import * as Utils from "libs/utils"; import _ from "lodash"; import { BLEND_MODES, Identity4x4, type OrthoView, type Vector3 } from "oxalis/constants"; import { - ViewModeValues, + AnnotationToolEnum, + MappingStatusEnum, OrthoViewValues, OrthoViews, - MappingStatusEnum, - AnnotationToolEnum, + ViewModeValues, } from "oxalis/constants"; -import { calculateGlobalPos, getViewportExtents } from "oxalis/model/accessors/view_mode_accessor"; -import { isBrushTool } from "oxalis/model/accessors/tool_accessor"; -import { - getActiveCellId, - getActiveSegmentationTracing, - getActiveSegmentPosition, - getBucketRetrievalSourceFn, - needsLocalHdf5Mapping, -} from "oxalis/model/accessors/volumetracing_accessor"; -import { getPackingDegree } from "oxalis/model/bucket_data_handling/data_rendering_logic"; import { + getByteCount, getColorLayers, getDataLayers, - getByteCount, - getElementClass, getDatasetBoundingBox, + getElementClass, getEnabledLayers, - getSegmentationLayerWithMappingSupport, - getMappingInfoForSupportedLayer, - getVisibleSegmentationLayer, getLayerByName, - invertAndTranspose, - getTransformsForLayer, - getMagInfoByLayer, getMagInfo, + getMagInfoByLayer, + getMappingInfoForSupportedLayer, + getSegmentationLayerWithMappingSupport, + getTransformsForLayer, getTransformsPerLayer, + getVisibleSegmentationLayer, + invertAndTranspose, } from "oxalis/model/accessors/dataset_accessor"; import { getActiveMagIndicesForLayers, getUnrenderableLayerInfosForCurrentZoom, getZoomValue, } from "oxalis/model/accessors/flycam_accessor"; +import { isBrushTool } from "oxalis/model/accessors/tool_accessor"; +import { calculateGlobalPos, getViewportExtents } from "oxalis/model/accessors/view_mode_accessor"; +import { + getActiveCellId, + getActiveSegmentPosition, + getActiveSegmentationTracing, + getBucketRetrievalSourceFn, + needsLocalHdf5Mapping, +} from "oxalis/model/accessors/volumetracing_accessor"; +import { getPackingDegree } from "oxalis/model/bucket_data_handling/data_rendering_logic"; +import { getGlobalLayerIndexForLayerName } from "oxalis/model/bucket_data_handling/layer_rendering_manager"; import { listenToStoreProperty } from "oxalis/model/helpers/listener_helpers"; +import shaderEditor from "oxalis/model/helpers/shader_editor"; +import getMainFragmentShader, { getMainVertexShader } from "oxalis/shaders/main_data_shaders.glsl"; import { Model } from "oxalis/singletons"; import type { DatasetLayerConfiguration } from "oxalis/store"; import Store from "oxalis/store"; -import * as Utils from "libs/utils"; -import app from "app"; -import getMainFragmentShader, { getMainVertexShader } from "oxalis/shaders/main_data_shaders.glsl"; -import shaderEditor from "oxalis/model/helpers/shader_editor"; +import * as THREE from "three"; import type { ElementClass } from "types/api_flow_types"; -import { CuckooTableVec3 } from "libs/cuckoo/cuckoo_table_vec3"; -import { getGlobalLayerIndexForLayerName } from "oxalis/model/bucket_data_handling/layer_rendering_manager"; -import { V3 } from "libs/mjs"; -import type TPS3D from "libs/thin_plate_spline"; type ShaderMaterialOptions = { polygonOffset?: boolean; diff --git a/frontend/javascripts/oxalis/geometries/materials/plane_material_factory_helpers.ts b/frontend/javascripts/oxalis/geometries/materials/plane_material_factory_helpers.ts index e835a529bb0..2b29b5f1478 100644 --- a/frontend/javascripts/oxalis/geometries/materials/plane_material_factory_helpers.ts +++ b/frontend/javascripts/oxalis/geometries/materials/plane_material_factory_helpers.ts @@ -1,5 +1,5 @@ -import * as THREE from "three"; import UpdatableTexture from "libs/UpdatableTexture"; +import * as THREE from "three"; function channelCountToFormat(channelCount: number, type: THREE.TextureDataType) { switch (channelCount) { diff --git a/frontend/javascripts/oxalis/geometries/plane.ts b/frontend/javascripts/oxalis/geometries/plane.ts index 78369e54852..6bef85c7377 100644 --- a/frontend/javascripts/oxalis/geometries/plane.ts +++ b/frontend/javascripts/oxalis/geometries/plane.ts @@ -1,9 +1,4 @@ -import * as THREE from "three"; import _ from "lodash"; -import { getBaseVoxelFactorsInUnit } from "oxalis/model/scaleinfo"; -import Dimensions from "oxalis/model/dimensions"; -import PlaneMaterialFactory from "oxalis/geometries/materials/plane_material_factory"; -import Store from "oxalis/store"; import type { OrthoView, Vector3 } from "oxalis/constants"; import constants, { OrthoViewColors, @@ -11,6 +6,11 @@ import constants, { OrthoViewGrayCrosshairColor, OrthoViewValues, } from "oxalis/constants"; +import PlaneMaterialFactory from "oxalis/geometries/materials/plane_material_factory"; +import Dimensions from "oxalis/model/dimensions"; +import { getBaseVoxelFactorsInUnit } from "oxalis/model/scaleinfo"; +import Store from "oxalis/store"; +import * as THREE from "three"; // A subdivision of 100 means that there will be 100 segments per axis // and thus 101 vertices per axis (i.e., the vertex shader is executed 101**2). diff --git a/frontend/javascripts/oxalis/geometries/skeleton.ts b/frontend/javascripts/oxalis/geometries/skeleton.ts index eb4af6c3f14..b5bab0a4af0 100644 --- a/frontend/javascripts/oxalis/geometries/skeleton.ts +++ b/frontend/javascripts/oxalis/geometries/skeleton.ts @@ -1,19 +1,19 @@ -import * as THREE from "three"; -import _ from "lodash"; import type Maybe from "data.maybe"; -import type { Tree, Node, Edge, OxalisState, SkeletonTracing } from "oxalis/store"; +import * as Utils from "libs/utils"; +import _ from "lodash"; import type { Vector3, Vector4 } from "oxalis/constants"; -import { cachedDiffTrees } from "oxalis/model/sagas/skeletontracing_saga"; -import { getZoomValue } from "oxalis/model/accessors/flycam_accessor"; import EdgeShader from "oxalis/geometries/materials/edge_shader"; import NodeShader, { NodeTypes, COLOR_TEXTURE_WIDTH, } from "oxalis/geometries/materials/node_shader"; +import { getZoomValue } from "oxalis/model/accessors/flycam_accessor"; +import { cachedDiffTrees } from "oxalis/model/sagas/skeletontracing_saga"; +import type { CreateActionNode, UpdateActionNode } from "oxalis/model/sagas/update_actions"; +import type { Edge, Node, OxalisState, SkeletonTracing, Tree } from "oxalis/store"; import Store from "oxalis/throttled_store"; -import * as Utils from "libs/utils"; +import * as THREE from "three"; import type { AdditionalCoordinate } from "types/api_flow_types"; -import type { CreateActionNode, UpdateActionNode } from "oxalis/model/sagas/update_actions"; const MAX_CAPACITY = 1000; diff --git a/frontend/javascripts/oxalis/merger_mode.ts b/frontend/javascripts/oxalis/merger_mode.ts index d934f23596d..164a1033784 100644 --- a/frontend/javascripts/oxalis/merger_mode.ts +++ b/frontend/javascripts/oxalis/merger_mode.ts @@ -1,12 +1,7 @@ import _ from "lodash"; -import type { - DeleteNodeUpdateAction, - NodeWithTreeId, - UpdateActionNode, -} from "oxalis/model/sagas/update_actions"; -import type { TreeMap, SkeletonTracing, OxalisState, StoreType } from "oxalis/store"; +import messages from "messages"; +import type { UnregisterHandler } from "oxalis/api/api_latest"; import type { Vector3 } from "oxalis/constants"; -import { cachedDiffTrees } from "oxalis/model/sagas/skeletontracing_saga"; import { getInverseSegmentationTransformer, getVisibleSegmentationLayer, @@ -16,13 +11,18 @@ import { getSkeletonTracing, transformNodePosition, } from "oxalis/model/accessors/skeletontracing_accessor"; -import Store from "oxalis/throttled_store"; -import { api } from "oxalis/singletons"; -import messages from "messages"; -import type { UnregisterHandler } from "oxalis/api/api_latest"; import type { Action } from "oxalis/model/actions/actions"; -import type { CreateNodeAction } from "./model/actions/skeletontracing_actions"; +import { cachedDiffTrees } from "oxalis/model/sagas/skeletontracing_saga"; +import type { + DeleteNodeUpdateAction, + NodeWithTreeId, + UpdateActionNode, +} from "oxalis/model/sagas/update_actions"; +import { api } from "oxalis/singletons"; +import type { OxalisState, SkeletonTracing, StoreType, TreeMap } from "oxalis/store"; +import Store from "oxalis/throttled_store"; import type { AdditionalCoordinate } from "types/api_flow_types"; +import type { CreateNodeAction } from "./model/actions/skeletontracing_actions"; type MergerModeState = { treeIdToRepresentativeSegmentId: Record; diff --git a/frontend/javascripts/oxalis/model.ts b/frontend/javascripts/oxalis/model.ts index f2d9d5db78b..e0143178035 100644 --- a/frontend/javascripts/oxalis/model.ts +++ b/frontend/javascripts/oxalis/model.ts @@ -1,24 +1,24 @@ +import { isDatasetAccessibleBySwitching } from "admin/admin_rest_api"; +import * as Utils from "libs/utils"; import _ from "lodash"; import type { Vector3 } from "oxalis/constants"; -import type { Versions } from "oxalis/view/version_view"; -import { getActiveSegmentationTracingLayer } from "oxalis/model/accessors/volumetracing_accessor"; -import { getActiveMagIndexForLayer } from "oxalis/model/accessors/flycam_accessor"; import { - getSegmentationLayerWithMappingSupport, getLayerByName, + getSegmentationLayerWithMappingSupport, isLayerVisible, } from "oxalis/model/accessors/dataset_accessor"; -import { getTotalSaveQueueLength } from "oxalis/model/reducers/save_reducer"; +import { getActiveMagIndexForLayer } from "oxalis/model/accessors/flycam_accessor"; import { isBusy } from "oxalis/model/accessors/save_accessor"; -import { isDatasetAccessibleBySwitching } from "admin/admin_rest_api"; +import { getActiveSegmentationTracingLayer } from "oxalis/model/accessors/volumetracing_accessor"; import { saveNowAction } from "oxalis/model/actions/save_actions"; import type DataCube from "oxalis/model/bucket_data_handling/data_cube"; -import type DataLayer from "oxalis/model/data_layer"; import type LayerRenderingManager from "oxalis/model/bucket_data_handling/layer_rendering_manager"; import type PullQueue from "oxalis/model/bucket_data_handling/pullqueue"; +import type DataLayer from "oxalis/model/data_layer"; +import { getTotalSaveQueueLength } from "oxalis/model/reducers/save_reducer"; import type { TraceOrViewCommand } from "oxalis/store"; import Store from "oxalis/store"; -import * as Utils from "libs/utils"; +import type { Versions } from "oxalis/view/version_view"; import type { APICompoundType } from "types/api_flow_types"; import { initialize } from "./model_initialization"; diff --git a/frontend/javascripts/oxalis/model/accessors/annotation_accessor.ts b/frontend/javascripts/oxalis/model/accessors/annotation_accessor.ts index 90f5a9f4903..9c63138179d 100644 --- a/frontend/javascripts/oxalis/model/accessors/annotation_accessor.ts +++ b/frontend/javascripts/oxalis/model/accessors/annotation_accessor.ts @@ -1,8 +1,8 @@ import _ from "lodash"; import type { OxalisState, Tracing } from "oxalis/store"; -import { getVolumeTracingById } from "./volumetracing_accessor"; import type { APIAnnotationInfo } from "types/api_flow_types"; import type { EmptyObject } from "types/globals"; +import { getVolumeTracingById } from "./volumetracing_accessor"; export function mayEditAnnotationProperties(state: OxalisState) { const { owner, restrictions } = state.tracing; diff --git a/frontend/javascripts/oxalis/model/accessors/dataset_accessor.ts b/frontend/javascripts/oxalis/model/accessors/dataset_accessor.ts index 90fac26ea8f..d5fc3a89b8b 100644 --- a/frontend/javascripts/oxalis/model/accessors/dataset_accessor.ts +++ b/frontend/javascripts/oxalis/model/accessors/dataset_accessor.ts @@ -1,7 +1,28 @@ +import ErrorHandling from "libs/error_handling"; +import { formatExtentInUnitWithLength, formatNumberToLength } from "libs/format_utils"; +import { M4x4, type Matrix4x4, V3 } from "libs/mjs"; +import MultiKeyMap from "libs/multi_key_map"; +import { aggregateBoundingBox, maxValue } from "libs/utils"; import _ from "lodash"; import memoizeOne from "memoize-one"; +import messages from "messages"; +import { + IdentityTransform, + LongUnitToShortUnitMap, + type Vector3, + type Vector4, + type ViewMode, +} from "oxalis/constants"; +import constants, { ViewModeValues, Vector3Indicies, MappingStatusEnum } from "oxalis/constants"; +import type { + ActiveMappingInfo, + BoundingBoxObject, + DataLayerType, + DatasetConfiguration, + OxalisState, + Settings, +} from "oxalis/store"; import type { - AdditionalAxis, APIAllowedMode, APIDataLayer, APIDataset, @@ -9,39 +30,18 @@ import type { APIMaybeUnimportedDataset, APISegmentationLayer, APISkeletonLayer, + AdditionalAxis, ElementClass, } from "types/api_flow_types"; -import type { - Settings, - DataLayerType, - DatasetConfiguration, - BoundingBoxObject, - OxalisState, - ActiveMappingInfo, -} from "oxalis/store"; -import ErrorHandling from "libs/error_handling"; -import { - IdentityTransform, - LongUnitToShortUnitMap, - type Vector3, - type Vector4, - type ViewMode, -} from "oxalis/constants"; -import constants, { ViewModeValues, Vector3Indicies, MappingStatusEnum } from "oxalis/constants"; -import { aggregateBoundingBox, maxValue } from "libs/utils"; -import { formatExtentInUnitWithLength, formatNumberToLength } from "libs/format_utils"; -import messages from "messages"; import type { DataLayer } from "types/schemas/datasource.types"; import BoundingBox from "../bucket_data_handling/bounding_box"; -import { M4x4, type Matrix4x4, V3 } from "libs/mjs"; -import { convertToDenseMag, MagInfo } from "../helpers/mag_info"; -import MultiKeyMap from "libs/multi_key_map"; +import { MagInfo, convertToDenseMag } from "../helpers/mag_info"; import { + type Transform, chainTransforms, createAffineTransformFromMatrix, createThinPlateSplineTransform, invertTransform, - type Transform, transformPointUnscaled, } from "../helpers/transformation_helpers"; diff --git a/frontend/javascripts/oxalis/model/accessors/flycam_accessor.ts b/frontend/javascripts/oxalis/model/accessors/flycam_accessor.ts index c3040f57e8f..d3c1ecd0e94 100644 --- a/frontend/javascripts/oxalis/model/accessors/flycam_accessor.ts +++ b/frontend/javascripts/oxalis/model/accessors/flycam_accessor.ts @@ -1,22 +1,8 @@ -import * as THREE from "three"; -import _ from "lodash"; -import memoizeOne from "memoize-one"; -import type { DataLayerType, Flycam, LoadingStrategy, OxalisState } from "oxalis/store"; import type { Matrix4x4 } from "libs/mjs"; import { M4x4 } from "libs/mjs"; -import { getViewportRects } from "oxalis/model/accessors/view_mode_accessor"; -import { - getColorLayers, - getDataLayers, - getEnabledLayers, - getLayerByName, - getMaxZoomStep, - getMagInfo, - getTransformsForLayer, - invertAndTranspose, -} from "oxalis/model/accessors/dataset_accessor"; import { map3, mod } from "libs/utils"; -import Dimensions from "oxalis/model/dimensions"; +import _ from "lodash"; +import memoizeOne from "memoize-one"; import type { OrthoView, OrthoViewMap, @@ -27,16 +13,30 @@ import type { ViewMode, } from "oxalis/constants"; import constants, { OrthoViews } from "oxalis/constants"; +import { + getColorLayers, + getDataLayers, + getEnabledLayers, + getLayerByName, + getMagInfo, + getMaxZoomStep, + getTransformsForLayer, + invertAndTranspose, +} from "oxalis/model/accessors/dataset_accessor"; +import { getViewportRects } from "oxalis/model/accessors/view_mode_accessor"; import determineBucketsForFlight from "oxalis/model/bucket_data_handling/bucket_picker_strategies/flight_bucket_picker"; import determineBucketsForOblique from "oxalis/model/bucket_data_handling/bucket_picker_strategies/oblique_bucket_picker"; -import * as scaleInfo from "oxalis/model/scaleinfo"; -import { reuseInstanceOnEquality } from "./accessor_helpers"; -import { baseDatasetViewConfiguration } from "types/schemas/dataset_view_configuration.schema"; import { MAX_ZOOM_STEP_DIFF } from "oxalis/model/bucket_data_handling/loading_strategy_logic"; -import { getMatrixScale, rotateOnAxis } from "../reducers/flycam_reducer"; -import type { SmallerOrHigherInfo } from "../helpers/mag_info"; +import Dimensions from "oxalis/model/dimensions"; +import * as scaleInfo from "oxalis/model/scaleinfo"; import { getBaseVoxelInUnit } from "oxalis/model/scaleinfo"; +import type { DataLayerType, Flycam, LoadingStrategy, OxalisState } from "oxalis/store"; +import * as THREE from "three"; import type { AdditionalCoordinate, VoxelSize } from "types/api_flow_types"; +import { baseDatasetViewConfiguration } from "types/schemas/dataset_view_configuration.schema"; +import type { SmallerOrHigherInfo } from "../helpers/mag_info"; +import { getMatrixScale, rotateOnAxis } from "../reducers/flycam_reducer"; +import { reuseInstanceOnEquality } from "./accessor_helpers"; export const ZOOM_STEP_INTERVAL = 1.1; diff --git a/frontend/javascripts/oxalis/model/accessors/organization_accessors.ts b/frontend/javascripts/oxalis/model/accessors/organization_accessors.ts index 823d5cc8f5b..7d3e6077f10 100644 --- a/frontend/javascripts/oxalis/model/accessors/organization_accessors.ts +++ b/frontend/javascripts/oxalis/model/accessors/organization_accessors.ts @@ -1,5 +1,5 @@ -import type { APIOrganization } from "types/api_flow_types"; import messages from "messages"; +import type { APIOrganization } from "types/api_flow_types"; export function enforceActiveOrganization( activeOrganization: APIOrganization | null, diff --git a/frontend/javascripts/oxalis/model/accessors/save_accessor.ts b/frontend/javascripts/oxalis/model/accessors/save_accessor.ts index e35ed69805d..84a20377f0c 100644 --- a/frontend/javascripts/oxalis/model/accessors/save_accessor.ts +++ b/frontend/javascripts/oxalis/model/accessors/save_accessor.ts @@ -1,6 +1,6 @@ -import type { IsBusyInfo, OxalisState, SaveQueueEntry } from "oxalis/store"; -import type { SaveQueueType } from "oxalis/model/actions/save_actions"; import * as Utils from "libs/utils"; +import type { SaveQueueType } from "oxalis/model/actions/save_actions"; +import type { IsBusyInfo, OxalisState, SaveQueueEntry } from "oxalis/store"; export function isBusy(isBusyInfo: IsBusyInfo): boolean { return ( diff --git a/frontend/javascripts/oxalis/model/accessors/skeletontracing_accessor.ts b/frontend/javascripts/oxalis/model/accessors/skeletontracing_accessor.ts index 657a18ca2e0..ac383719ddd 100644 --- a/frontend/javascripts/oxalis/model/accessors/skeletontracing_accessor.ts +++ b/frontend/javascripts/oxalis/model/accessors/skeletontracing_accessor.ts @@ -1,33 +1,33 @@ import Maybe from "data.maybe"; import _ from "lodash"; +import type { TreeType, Vector3 } from "oxalis/constants"; import type { - ServerTracing, - ServerSkeletonTracing, - APIAnnotation, - AnnotationLayerDescriptor, -} from "types/api_flow_types"; -import type { - Tracing, + BranchPoint, + Node, + NumberLike, + OxalisState, SkeletonTracing, + Tracing, Tree, - TreeMap, - BranchPoint, TreeGroup, TreeGroupTypeFlat, - Node, - OxalisState, - NumberLike, + TreeMap, } from "oxalis/store"; import { - findGroup, MISSING_GROUP_ID, + findGroup, } from "oxalis/view/right-border-tabs/tree_hierarchy_view_helpers"; -import type { TreeType, Vector3 } from "oxalis/constants"; +import type { + APIAnnotation, + AnnotationLayerDescriptor, + ServerSkeletonTracing, + ServerTracing, +} from "types/api_flow_types"; +import { invertTransform, transformPointUnscaled } from "../helpers/transformation_helpers"; import { getTransformsForSkeletonLayer, getTransformsForSkeletonLayerOrNull, } from "./dataset_accessor"; -import { invertTransform, transformPointUnscaled } from "../helpers/transformation_helpers"; export function getSkeletonTracing(tracing: Tracing): Maybe { if (tracing.skeleton != null) { diff --git a/frontend/javascripts/oxalis/model/accessors/tool_accessor.ts b/frontend/javascripts/oxalis/model/accessors/tool_accessor.ts index 35dfe4c2b6b..f7575ec5874 100644 --- a/frontend/javascripts/oxalis/model/accessors/tool_accessor.ts +++ b/frontend/javascripts/oxalis/model/accessors/tool_accessor.ts @@ -1,7 +1,16 @@ +import { + PricingPlanEnum, + getFeatureNotAvailableInPlanMessage, + isFeatureAllowedByPricingPlan, +} from "admin/organization/pricing_plan_utils"; import memoizeOne from "memoize-one"; import { type AnnotationTool, IdentityTransform } from "oxalis/constants"; import { AnnotationToolEnum } from "oxalis/constants"; -import type { OxalisState } from "oxalis/store"; +import { + getTransformsPerLayer, + getVisibleSegmentationLayer, +} from "oxalis/model/accessors/dataset_accessor"; +import { isMagRestrictionViolated } from "oxalis/model/accessors/flycam_accessor"; import { type AgglomerateState, getActiveSegmentationTracing, @@ -9,19 +18,10 @@ import { hasAgglomerateMapping, isVolumeAnnotationDisallowedForZoom, } from "oxalis/model/accessors/volumetracing_accessor"; -import { - getTransformsPerLayer, - getVisibleSegmentationLayer, -} from "oxalis/model/accessors/dataset_accessor"; -import { isMagRestrictionViolated } from "oxalis/model/accessors/flycam_accessor"; +import type { OxalisState } from "oxalis/store"; import type { APIOrganization, APIUser } from "types/api_flow_types"; -import { - getFeatureNotAvailableInPlanMessage, - isFeatureAllowedByPricingPlan, - PricingPlanEnum, -} from "admin/organization/pricing_plan_utils"; -import { isSkeletonLayerTransformed } from "./skeletontracing_accessor"; import { reuseInstanceOnEquality } from "./accessor_helpers"; +import { isSkeletonLayerTransformed } from "./skeletontracing_accessor"; const zoomInToUseToolMessage = "Please zoom in further to use this tool. If you want to edit volume data on this zoom level, create an annotation with restricted magnifications from the extended annotation menu in the dashboard."; diff --git a/frontend/javascripts/oxalis/model/accessors/tracing_accessor.ts b/frontend/javascripts/oxalis/model/accessors/tracing_accessor.ts index 3cc0b15b089..60565bb4638 100644 --- a/frontend/javascripts/oxalis/model/accessors/tracing_accessor.ts +++ b/frontend/javascripts/oxalis/model/accessors/tracing_accessor.ts @@ -1,3 +1,5 @@ +import type { Vector3 } from "oxalis/constants"; +import type { SaveQueueType } from "oxalis/model/actions/save_actions"; import type { EditableMapping, OxalisState, @@ -9,9 +11,7 @@ import type { } from "oxalis/store"; import type { ServerTracing, TracingType } from "types/api_flow_types"; import { TracingTypeEnum } from "types/api_flow_types"; -import type { SaveQueueType } from "oxalis/model/actions/save_actions"; import BoundingBox from "../bucket_data_handling/bounding_box"; -import type { Vector3 } from "oxalis/constants"; export function maybeGetSomeTracing( tracing: Tracing, diff --git a/frontend/javascripts/oxalis/model/accessors/user_accessor.ts b/frontend/javascripts/oxalis/model/accessors/user_accessor.ts index 9ce49874e65..d8fc963b6a5 100644 --- a/frontend/javascripts/oxalis/model/accessors/user_accessor.ts +++ b/frontend/javascripts/oxalis/model/accessors/user_accessor.ts @@ -1,7 +1,7 @@ -import type { APIUser, APIUserBase } from "types/api_flow_types"; -import messages from "messages"; import _ from "lodash"; import memoizeOne from "memoize-one"; +import messages from "messages"; +import type { APIUser, APIUserBase } from "types/api_flow_types"; export function enforceActiveUser(activeUser: APIUser | null | undefined): APIUser { if (activeUser) { diff --git a/frontend/javascripts/oxalis/model/accessors/view_mode_accessor.ts b/frontend/javascripts/oxalis/model/accessors/view_mode_accessor.ts index ae3d4236d09..33d0a79f08e 100644 --- a/frontend/javascripts/oxalis/model/accessors/view_mode_accessor.ts +++ b/frontend/javascripts/oxalis/model/accessors/view_mode_accessor.ts @@ -1,25 +1,25 @@ -import memoizeOne from "memoize-one"; +import { V3 } from "libs/mjs"; import _ from "lodash"; -import type { Flycam, OxalisState } from "oxalis/store"; +import memoizeOne from "memoize-one"; import type { - OrthoViewExtents, - Rect, - Viewport, OrthoView, + OrthoViewExtents, Point2, + Rect, + Vector2, Vector3, ViewMode, - Vector2, + Viewport, } from "oxalis/constants"; import constants, { ArbitraryViewport, OrthoViews, OrthoViewValuesWithoutTDView, } from "oxalis/constants"; -import { V3 } from "libs/mjs"; -import { getBaseVoxelFactorsInUnit } from "oxalis/model/scaleinfo"; -import { getPosition } from "oxalis/model/accessors/flycam_accessor"; import { reuseInstanceOnEquality } from "oxalis/model/accessors/accessor_helpers"; +import { getPosition } from "oxalis/model/accessors/flycam_accessor"; +import { getBaseVoxelFactorsInUnit } from "oxalis/model/scaleinfo"; +import type { Flycam, OxalisState } from "oxalis/store"; export function getTDViewportSize(state: OxalisState): [number, number] { const camera = state.viewModeData.plane.tdCamera; diff --git a/frontend/javascripts/oxalis/model/accessors/volumetracing_accessor.ts b/frontend/javascripts/oxalis/model/accessors/volumetracing_accessor.ts index a3811acae5a..4534f4c33c1 100644 --- a/frontend/javascripts/oxalis/model/accessors/volumetracing_accessor.ts +++ b/frontend/javascripts/oxalis/model/accessors/volumetracing_accessor.ts @@ -1,26 +1,7 @@ +import { V3 } from "libs/mjs"; +import _ from "lodash"; import memoizeOne from "memoize-one"; -import type { - APIAnnotation, - APIAnnotationInfo, - APIDataLayer, - APIDataset, - APISegmentationLayer, - AdditionalCoordinate, - AnnotationLayerDescriptor, - ServerTracing, - ServerVolumeTracing, -} from "types/api_flow_types"; -import type { - ActiveMappingInfo, - HybridTracing, - LabelAction, - OxalisState, - Segment, - SegmentGroup, - SegmentMap, - Tracing, - VolumeTracing, -} from "oxalis/store"; +import messages from "messages"; import { type AnnotationTool, type ContourMode, @@ -29,36 +10,55 @@ import { type Vector4, } from "oxalis/constants"; import { AnnotationToolEnum, VolumeTools } from "oxalis/constants"; +import { reuseInstanceOnEquality } from "oxalis/model/accessors/accessor_helpers"; import { - getMappingInfo, + getDataLayers, + getLayerByName, getMagInfo, + getMappingInfo, getSegmentationLayerByName, getSegmentationLayers, - getVisibleSegmentationLayer, - getDataLayers, - getLayerByName, getVisibleOrLastSegmentationLayer, + getVisibleSegmentationLayer, } from "oxalis/model/accessors/dataset_accessor"; -import { MAX_ZOOM_STEP_DIFF } from "oxalis/model/bucket_data_handling/loading_strategy_logic"; import { - getFlooredPosition, getActiveMagIndexForLayer, getAdditionalCoordinatesAsString, + getFlooredPosition, } from "oxalis/model/accessors/flycam_accessor"; -import { reuseInstanceOnEquality } from "oxalis/model/accessors/accessor_helpers"; -import { V3 } from "libs/mjs"; +import { MAX_ZOOM_STEP_DIFF } from "oxalis/model/bucket_data_handling/loading_strategy_logic"; import { jsConvertCellIdToRGBA } from "oxalis/shaders/segmentation.glsl"; import { jsRgb2hsl } from "oxalis/shaders/utils.glsl"; -import { MagInfo } from "../helpers/mag_info"; -import messages from "messages"; +import { Store } from "oxalis/singletons"; +import type { + ActiveMappingInfo, + HybridTracing, + LabelAction, + OxalisState, + Segment, + SegmentGroup, + SegmentMap, + Tracing, + VolumeTracing, +} from "oxalis/store"; +import type { SegmentHierarchyNode } from "oxalis/view/right-border-tabs/segments_tab/segments_view_helper"; import { MISSING_GROUP_ID, getGroupByIdWithSubgroups, } from "oxalis/view/right-border-tabs/tree_hierarchy_view_helpers"; -import { Store } from "oxalis/singletons"; +import type { + APIAnnotation, + APIAnnotationInfo, + APIDataLayer, + APIDataset, + APISegmentationLayer, + AdditionalCoordinate, + AnnotationLayerDescriptor, + ServerTracing, + ServerVolumeTracing, +} from "types/api_flow_types"; import { setSelectedSegmentsOrGroupAction } from "../actions/volumetracing_actions"; -import _ from "lodash"; -import type { SegmentHierarchyNode } from "oxalis/view/right-border-tabs/segments_tab/segments_view_helper"; +import { MagInfo } from "../helpers/mag_info"; export function getVolumeTracings(tracing: Tracing): Array { return tracing.volumes; diff --git a/frontend/javascripts/oxalis/model/actions/actions.ts b/frontend/javascripts/oxalis/model/actions/actions.ts index 96ff28c2297..9ce4cd51a06 100644 --- a/frontend/javascripts/oxalis/model/actions/actions.ts +++ b/frontend/javascripts/oxalis/model/actions/actions.ts @@ -1,8 +1,11 @@ import type { AnnotationActionTypes } from "oxalis/model/actions/annotation_actions"; +import type { ConnectomeAction } from "oxalis/model/actions/connectome_actions"; import type { DatasetAction } from "oxalis/model/actions/dataset_actions"; import type { FlycamAction } from "oxalis/model/actions/flycam_actions"; -import type { SegmentationAction } from "oxalis/model/actions/segmentation_actions"; +import type { OrganizationAction } from "oxalis/model/actions/organization_actions"; +import type { ProofreadAction } from "oxalis/model/actions/proofread_actions"; import type { SaveAction } from "oxalis/model/actions/save_actions"; +import type { SegmentationAction } from "oxalis/model/actions/segmentation_actions"; import type { SettingAction } from "oxalis/model/actions/settings_actions"; import type { SkeletonTracingAction } from "oxalis/model/actions/skeletontracing_actions"; import type { TaskAction } from "oxalis/model/actions/task_actions"; @@ -10,9 +13,6 @@ import type { UiAction } from "oxalis/model/actions/ui_actions"; import type { UserAction } from "oxalis/model/actions/user_actions"; import type { ViewModeAction } from "oxalis/model/actions/view_mode_actions"; import type { VolumeTracingAction } from "oxalis/model/actions/volumetracing_actions"; -import type { ConnectomeAction } from "oxalis/model/actions/connectome_actions"; -import type { ProofreadAction } from "oxalis/model/actions/proofread_actions"; -import type { OrganizationAction } from "oxalis/model/actions/organization_actions"; export type EscalateErrorAction = ReturnType; diff --git a/frontend/javascripts/oxalis/model/actions/annotation_actions.ts b/frontend/javascripts/oxalis/model/actions/annotation_actions.ts index 1aa7ff5e470..290ced444c5 100644 --- a/frontend/javascripts/oxalis/model/actions/annotation_actions.ts +++ b/frontend/javascripts/oxalis/model/actions/annotation_actions.ts @@ -1,3 +1,13 @@ +import Deferred from "libs/async/deferred"; +import _ from "lodash"; +import type { Vector3 } from "oxalis/constants"; +import type { + MappingType, + UserBoundingBox, + UserBoundingBoxWithoutId, + UserBoundingBoxWithoutIdMaybe, +} from "oxalis/store"; +import type { Dispatch } from "redux"; import type { APIAnnotation, APIAnnotationVisibility, @@ -7,16 +17,6 @@ import type { APIUserCompact, EditableLayerProperties, } from "types/api_flow_types"; -import type { - MappingType, - UserBoundingBox, - UserBoundingBoxWithoutId, - UserBoundingBoxWithoutIdMaybe, -} from "oxalis/store"; -import type { Vector3 } from "oxalis/constants"; -import _ from "lodash"; -import type { Dispatch } from "redux"; -import Deferred from "libs/async/deferred"; import type { AdditionalCoordinate } from "types/api_flow_types"; type InitializeAnnotationAction = ReturnType; diff --git a/frontend/javascripts/oxalis/model/actions/flycam_actions.ts b/frontend/javascripts/oxalis/model/actions/flycam_actions.ts index adfb377204e..9dd78ad8a11 100644 --- a/frontend/javascripts/oxalis/model/actions/flycam_actions.ts +++ b/frontend/javascripts/oxalis/model/actions/flycam_actions.ts @@ -1,4 +1,4 @@ -import type { Vector3, OrthoView } from "oxalis/constants"; +import type { OrthoView, Vector3 } from "oxalis/constants"; import type { AdditionalCoordinate } from "types/api_flow_types"; type ZoomInAction = ReturnType; diff --git a/frontend/javascripts/oxalis/model/actions/proofread_actions.ts b/frontend/javascripts/oxalis/model/actions/proofread_actions.ts index 25cec83cca5..ba13535f793 100644 --- a/frontend/javascripts/oxalis/model/actions/proofread_actions.ts +++ b/frontend/javascripts/oxalis/model/actions/proofread_actions.ts @@ -1,6 +1,6 @@ import type { Vector3 } from "oxalis/constants"; -import type { AdditionalCoordinate } from "types/api_flow_types"; import type { Tree } from "oxalis/store"; +import type { AdditionalCoordinate } from "types/api_flow_types"; export type ProofreadAtPositionAction = ReturnType; export type ClearProofreadingByProductsAction = ReturnType; diff --git a/frontend/javascripts/oxalis/model/actions/save_actions.ts b/frontend/javascripts/oxalis/model/actions/save_actions.ts index dca4997b9f6..5d6cc663d86 100644 --- a/frontend/javascripts/oxalis/model/actions/save_actions.ts +++ b/frontend/javascripts/oxalis/model/actions/save_actions.ts @@ -1,8 +1,8 @@ -import type { Dispatch } from "redux"; -import type { UpdateAction } from "oxalis/model/sagas/update_actions"; -import { getUid } from "libs/uid_generator"; -import Date from "libs/date"; import Deferred from "libs/async/deferred"; +import Date from "libs/date"; +import { getUid } from "libs/uid_generator"; +import type { UpdateAction } from "oxalis/model/sagas/update_actions"; +import type { Dispatch } from "redux"; export type SaveQueueType = "skeleton" | "volume" | "mapping"; export type PushSaveQueueTransaction = ReturnType; diff --git a/frontend/javascripts/oxalis/model/actions/settings_actions.ts b/frontend/javascripts/oxalis/model/actions/settings_actions.ts index 6c2b87abea1..4b7387e4b41 100644 --- a/frontend/javascripts/oxalis/model/actions/settings_actions.ts +++ b/frontend/javascripts/oxalis/model/actions/settings_actions.ts @@ -1,13 +1,13 @@ -import type { ViewMode, ControlMode } from "oxalis/constants"; +import Deferred from "libs/async/deferred"; +import type { ControlMode, ViewMode } from "oxalis/constants"; import type { - UserConfiguration, DatasetConfiguration, DatasetLayerConfiguration, - TemporaryConfiguration, Mapping, MappingType, + TemporaryConfiguration, + UserConfiguration, } from "oxalis/store"; -import Deferred from "libs/async/deferred"; import type { APIHistogramData } from "types/api_flow_types"; export type UpdateUserSettingAction = ReturnType; diff --git a/frontend/javascripts/oxalis/model/actions/skeletontracing_actions.tsx b/frontend/javascripts/oxalis/model/actions/skeletontracing_actions.tsx index a5fd84d8b7c..5fc217b6581 100644 --- a/frontend/javascripts/oxalis/model/actions/skeletontracing_actions.tsx +++ b/frontend/javascripts/oxalis/model/actions/skeletontracing_actions.tsx @@ -13,7 +13,7 @@ import Store from "oxalis/store"; import RemoveTreeModal from "oxalis/view/remove_tree_modal"; import type { Key } from "react"; import { batchActions } from "redux-batched-actions"; -import type { ServerSkeletonTracing, MetadataEntryProto } from "types/api_flow_types"; +import type { MetadataEntryProto, ServerSkeletonTracing } from "types/api_flow_types"; import type { AdditionalCoordinate } from "types/api_flow_types"; export type InitializeSkeletonTracingAction = ReturnType; diff --git a/frontend/javascripts/oxalis/model/actions/ui_actions.ts b/frontend/javascripts/oxalis/model/actions/ui_actions.ts index de17e37210c..6276d195e46 100644 --- a/frontend/javascripts/oxalis/model/actions/ui_actions.ts +++ b/frontend/javascripts/oxalis/model/actions/ui_actions.ts @@ -1,5 +1,5 @@ import type { AnnotationTool, OrthoView, Vector3 } from "oxalis/constants"; -import type { OxalisState, BorderOpenStatus, Theme } from "oxalis/store"; +import type { BorderOpenStatus, OxalisState, Theme } from "oxalis/store"; import type { StartAIJobModalState } from "oxalis/view/action-bar/starting_job_modals"; type SetDropzoneModalVisibilityAction = ReturnType; diff --git a/frontend/javascripts/oxalis/model/actions/view_mode_actions.ts b/frontend/javascripts/oxalis/model/actions/view_mode_actions.ts index aa9d65d459a..60129ba164d 100644 --- a/frontend/javascripts/oxalis/model/actions/view_mode_actions.ts +++ b/frontend/javascripts/oxalis/model/actions/view_mode_actions.ts @@ -1,8 +1,8 @@ +import type { OrthoView, Point2, Rect, Viewport, ViewportRects } from "oxalis/constants"; +import constants from "oxalis/constants"; import { getTDViewportSize } from "oxalis/model/accessors/view_mode_accessor"; import type { PartialCameraData } from "oxalis/store"; import Store from "oxalis/store"; -import type { OrthoView, Point2, Rect, Viewport, ViewportRects } from "oxalis/constants"; -import constants from "oxalis/constants"; type SetViewportAction = ReturnType; type SetTDCameraAction = ReturnType; type CenterTDViewAction = ReturnType; diff --git a/frontend/javascripts/oxalis/model/actions/volumetracing_actions.ts b/frontend/javascripts/oxalis/model/actions/volumetracing_actions.ts index 9860f2b89f2..36a3e38e7ff 100644 --- a/frontend/javascripts/oxalis/model/actions/volumetracing_actions.ts +++ b/frontend/javascripts/oxalis/model/actions/volumetracing_actions.ts @@ -1,12 +1,12 @@ -import type { ServerEditableMapping, ServerVolumeTracing } from "types/api_flow_types"; -import type { Vector2, Vector3, OrthoView, ContourMode, BucketAddress } from "oxalis/constants"; +import Deferred from "libs/async/deferred"; +import type { BucketAddress, ContourMode, OrthoView, Vector2, Vector3 } from "oxalis/constants"; +import type { QuickSelectGeometry } from "oxalis/geometries/helper_geometries"; +import { AllUserBoundingBoxActions } from "oxalis/model/actions/annotation_actions"; import type { BucketDataArray } from "oxalis/model/bucket_data_handling/bucket"; import type { NumberLike, Segment, SegmentGroup, SegmentMap } from "oxalis/store"; -import Deferred from "libs/async/deferred"; import type { Dispatch } from "redux"; -import { AllUserBoundingBoxActions } from "oxalis/model/actions/annotation_actions"; -import type { QuickSelectGeometry } from "oxalis/geometries/helper_geometries"; import { batchActions } from "redux-batched-actions"; +import type { ServerEditableMapping, ServerVolumeTracing } from "types/api_flow_types"; import type { AdditionalCoordinate } from "types/api_flow_types"; export type InitializeVolumeTracingAction = ReturnType; diff --git a/frontend/javascripts/oxalis/model/bucket_data_handling/bounding_box.ts b/frontend/javascripts/oxalis/model/bucket_data_handling/bounding_box.ts index 9769bc95984..f5ae1e78fd0 100644 --- a/frontend/javascripts/oxalis/model/bucket_data_handling/bounding_box.ts +++ b/frontend/javascripts/oxalis/model/bucket_data_handling/bounding_box.ts @@ -1,10 +1,10 @@ -import _ from "lodash"; import { V3 } from "libs/mjs"; import { map3, mod } from "libs/utils"; +import _ from "lodash"; import type { BoundingBoxType, OrthoView, Vector2, Vector3, Vector4 } from "oxalis/constants"; import constants, { Vector3Indicies } from "oxalis/constants"; -import type { MagInfo } from "../helpers/mag_info"; import Dimensions from "../dimensions"; +import type { MagInfo } from "../helpers/mag_info"; class BoundingBox { min: Vector3; diff --git a/frontend/javascripts/oxalis/model/bucket_data_handling/bucket.ts b/frontend/javascripts/oxalis/model/bucket_data_handling/bucket.ts index 6bc025d7b67..63c7ed11288 100644 --- a/frontend/javascripts/oxalis/model/bucket_data_handling/bucket.ts +++ b/frontend/javascripts/oxalis/model/bucket_data_handling/bucket.ts @@ -1,21 +1,21 @@ -import { createNanoEvents, type Emitter } from "nanoevents"; -import * as THREE from "three"; -import _ from "lodash"; -import type { ElementClass } from "types/api_flow_types"; -import { PullQueueConstants } from "oxalis/model/bucket_data_handling/pullqueue"; -import type { MaybeUnmergedBucketLoadedPromise } from "oxalis/model/actions/volumetracing_actions"; -import { addBucketToUndoAction } from "oxalis/model/actions/volumetracing_actions"; -import { bucketPositionToGlobalAddress } from "oxalis/model/helpers/position_converter"; +import ErrorHandling from "libs/error_handling"; import { castForArrayType, mod } from "libs/utils"; +import window from "libs/window"; +import _ from "lodash"; +import { type Emitter, createNanoEvents } from "nanoevents"; import type { BoundingBoxType, BucketAddress, Vector3 } from "oxalis/constants"; import Constants from "oxalis/constants"; +import type { MaybeUnmergedBucketLoadedPromise } from "oxalis/model/actions/volumetracing_actions"; +import { addBucketToUndoAction } from "oxalis/model/actions/volumetracing_actions"; import type DataCube from "oxalis/model/bucket_data_handling/data_cube"; -import ErrorHandling from "libs/error_handling"; -import Store from "oxalis/store"; +import { PullQueueConstants } from "oxalis/model/bucket_data_handling/pullqueue"; import type TemporalBucketManager from "oxalis/model/bucket_data_handling/temporal_bucket_manager"; -import window from "libs/window"; -import { getActiveMagIndexForLayer } from "../accessors/flycam_accessor"; +import { bucketPositionToGlobalAddress } from "oxalis/model/helpers/position_converter"; +import Store from "oxalis/store"; +import * as THREE from "three"; +import type { ElementClass } from "types/api_flow_types"; import type { AdditionalCoordinate } from "types/api_flow_types"; +import { getActiveMagIndexForLayer } from "../accessors/flycam_accessor"; export enum BucketStateEnum { UNREQUESTED = "UNREQUESTED", diff --git a/frontend/javascripts/oxalis/model/bucket_data_handling/bucket_picker_strategies/flight_bucket_picker.ts b/frontend/javascripts/oxalis/model/bucket_data_handling/bucket_picker_strategies/flight_bucket_picker.ts index 7c2e0ad7d98..a3e9a2a4fce 100644 --- a/frontend/javascripts/oxalis/model/bucket_data_handling/bucket_picker_strategies/flight_bucket_picker.ts +++ b/frontend/javascripts/oxalis/model/bucket_data_handling/bucket_picker_strategies/flight_bucket_picker.ts @@ -1,14 +1,14 @@ -import type { EnqueueFunction } from "oxalis/model/bucket_data_handling/layer_rendering_manager"; import type { Matrix4x4 } from "libs/mjs"; import { M4x4, V3 } from "libs/mjs"; +import { map3, map4, mod } from "libs/utils"; +import type { BucketAddress, Vector3, Vector4 } from "oxalis/constants"; +import constants from "oxalis/constants"; +import type { EnqueueFunction } from "oxalis/model/bucket_data_handling/layer_rendering_manager"; import { globalPositionToBucketPosition, globalPositionToBucketPositionFloat, zoomedAddressToAnotherZoomStep, } from "oxalis/model/helpers/position_converter"; -import type { BucketAddress, Vector3, Vector4 } from "oxalis/constants"; -import constants from "oxalis/constants"; -import { map3, map4, mod } from "libs/utils"; const aggregatePerDimension = ( aggregateFn: (...args: number[]) => number, diff --git a/frontend/javascripts/oxalis/model/bucket_data_handling/bucket_picker_strategies/oblique_bucket_picker.ts b/frontend/javascripts/oxalis/model/bucket_data_handling/bucket_picker_strategies/oblique_bucket_picker.ts index 7585718a1a0..b1051ed5cba 100644 --- a/frontend/javascripts/oxalis/model/bucket_data_handling/bucket_picker_strategies/oblique_bucket_picker.ts +++ b/frontend/javascripts/oxalis/model/bucket_data_handling/bucket_picker_strategies/oblique_bucket_picker.ts @@ -1,13 +1,13 @@ -import _ from "lodash"; -import type { EnqueueFunction } from "oxalis/model/bucket_data_handling/layer_rendering_manager"; +import ThreeDMap from "libs/ThreeDMap"; import type { Matrix4x4 } from "libs/mjs"; import { M4x4, V3 } from "libs/mjs"; -import { chunk2 } from "oxalis/model/helpers/chunk"; -import { globalPositionToBucketPosition } from "oxalis/model/helpers/position_converter"; -import ThreeDMap from "libs/ThreeDMap"; +import _ from "lodash"; import type { OrthoViewWithoutTD, Vector2, Vector3, Vector4, ViewMode } from "oxalis/constants"; import constants from "oxalis/constants"; import traverse from "oxalis/model/bucket_data_handling/bucket_traversals"; +import type { EnqueueFunction } from "oxalis/model/bucket_data_handling/layer_rendering_manager"; +import { chunk2 } from "oxalis/model/helpers/chunk"; +import { globalPositionToBucketPosition } from "oxalis/model/helpers/position_converter"; import type { LoadingStrategy, PlaneRects } from "oxalis/store"; import { MAX_ZOOM_STEP_DIFF, getPriorityWeightForZoomStepDiff } from "../loading_strategy_logic"; diff --git a/frontend/javascripts/oxalis/model/bucket_data_handling/bucket_traversals.ts b/frontend/javascripts/oxalis/model/bucket_data_handling/bucket_traversals.ts index 1a623cd89e5..11eb211e1d8 100644 --- a/frontend/javascripts/oxalis/model/bucket_data_handling/bucket_traversals.ts +++ b/frontend/javascripts/oxalis/model/bucket_data_handling/bucket_traversals.ts @@ -1,10 +1,10 @@ import { V3 } from "libs/mjs"; +import { mod } from "libs/utils"; // Attention: Note that the implemented paper uses the term "voxel" for the unit import type { Vector3 } from "oxalis/constants"; import { - globalPositionToBucketPosition, getBucketExtent, + globalPositionToBucketPosition, } from "oxalis/model/helpers/position_converter"; -import { mod } from "libs/utils"; // Attention: Note that the implemented paper uses the term "voxel" for the unit // we usually refer to as bucket. This is reflected in comments as well as variable naming. // This module implements the algorithm presented in this paper: // "A Fast Voxel Traversal Algorithm for Ray Tracing" (http://www.cse.yorku.ca/~amana/research/grid.pdf) diff --git a/frontend/javascripts/oxalis/model/bucket_data_handling/data_cube.ts b/frontend/javascripts/oxalis/model/bucket_data_handling/data_cube.ts index 1df073770d6..722eacac8e1 100644 --- a/frontend/javascripts/oxalis/model/bucket_data_handling/data_cube.ts +++ b/frontend/javascripts/oxalis/model/bucket_data_handling/data_cube.ts @@ -1,40 +1,40 @@ -import _ from "lodash"; -import { createNanoEvents, type Emitter } from "nanoevents"; -import type { Bucket, BucketDataArray } from "oxalis/model/bucket_data_handling/bucket"; -import { DataBucket, NULL_BUCKET, NullBucket } from "oxalis/model/bucket_data_handling/bucket"; -import type { AdditionalAxis, ElementClass } from "types/api_flow_types"; -import type { ProgressCallback } from "libs/progress_callback"; +import ErrorHandling from "libs/error_handling"; import { V3 } from "libs/mjs"; -import { VoxelNeighborQueue2D, VoxelNeighborQueue3D } from "oxalis/model/volumetracing/volumelayer"; +import type { ProgressCallback } from "libs/progress_callback"; +import Toast from "libs/toast"; import { areBoundingBoxesOverlappingOrTouching, castForArrayType, isNumberMap, union, } from "libs/utils"; +import _ from "lodash"; +import { type Emitter, createNanoEvents } from "nanoevents"; +import type { + BoundingBoxType, + BucketAddress, + LabelMasksByBucketAndW, + Vector3, +} from "oxalis/constants"; +import constants, { MappingStatusEnum } from "oxalis/constants"; import { getMappingInfo } from "oxalis/model/accessors/dataset_accessor"; import { getSomeTracing } from "oxalis/model/accessors/tracing_accessor"; -import { globalPositionToBucketPosition } from "oxalis/model/helpers/position_converter"; -import { listenToStoreProperty } from "oxalis/model/helpers/listener_helpers"; import BoundingBox from "oxalis/model/bucket_data_handling/bounding_box"; -import type { DimensionMap } from "oxalis/model/dimensions"; -import Dimensions from "oxalis/model/dimensions"; -import ErrorHandling from "libs/error_handling"; +import type { Bucket, BucketDataArray } from "oxalis/model/bucket_data_handling/bucket"; +import { DataBucket, NULL_BUCKET, NullBucket } from "oxalis/model/bucket_data_handling/bucket"; import type PullQueue from "oxalis/model/bucket_data_handling/pullqueue"; import type PushQueue from "oxalis/model/bucket_data_handling/pushqueue"; +import TemporalBucketManager from "oxalis/model/bucket_data_handling/temporal_bucket_manager"; +import type { DimensionMap } from "oxalis/model/dimensions"; +import Dimensions from "oxalis/model/dimensions"; +import { listenToStoreProperty } from "oxalis/model/helpers/listener_helpers"; +import { globalPositionToBucketPosition } from "oxalis/model/helpers/position_converter"; +import { VoxelNeighborQueue2D, VoxelNeighborQueue3D } from "oxalis/model/volumetracing/volumelayer"; import type { Mapping } from "oxalis/store"; import Store from "oxalis/store"; -import TemporalBucketManager from "oxalis/model/bucket_data_handling/temporal_bucket_manager"; -import Toast from "libs/toast"; -import type { - Vector3, - BoundingBoxType, - LabelMasksByBucketAndW, - BucketAddress, -} from "oxalis/constants"; -import constants, { MappingStatusEnum } from "oxalis/constants"; -import type { MagInfo } from "../helpers/mag_info"; +import type { AdditionalAxis, ElementClass } from "types/api_flow_types"; import type { AdditionalCoordinate } from "types/api_flow_types"; +import type { MagInfo } from "../helpers/mag_info"; const warnAboutTooManyAllocations = _.once(() => { const msg = diff --git a/frontend/javascripts/oxalis/model/bucket_data_handling/data_rendering_logic.tsx b/frontend/javascripts/oxalis/model/bucket_data_handling/data_rendering_logic.tsx index 2b09d17f8fb..dcfe615b1cf 100644 --- a/frontend/javascripts/oxalis/model/bucket_data_handling/data_rendering_logic.tsx +++ b/frontend/javascripts/oxalis/model/bucket_data_handling/data_rendering_logic.tsx @@ -1,9 +1,9 @@ -import _ from "lodash"; +import ErrorHandling from "libs/error_handling"; +import Toast from "libs/toast"; import { document } from "libs/window"; +import _ from "lodash"; import constants from "oxalis/constants"; import type { ElementClass } from "types/api_flow_types"; -import Toast from "libs/toast"; -import ErrorHandling from "libs/error_handling"; type GpuSpecs = { supportedTextureSize: number; diff --git a/frontend/javascripts/oxalis/model/bucket_data_handling/layer_rendering_manager.ts b/frontend/javascripts/oxalis/model/bucket_data_handling/layer_rendering_manager.ts index 8d39d019265..41412d87e9d 100644 --- a/frontend/javascripts/oxalis/model/bucket_data_handling/layer_rendering_manager.ts +++ b/frontend/javascripts/oxalis/model/bucket_data_handling/layer_rendering_manager.ts @@ -1,37 +1,37 @@ -import type * as THREE from "three"; -import _ from "lodash"; -import memoizeOne from "memoize-one"; -import type { DataBucket } from "oxalis/model/bucket_data_handling/bucket"; +import app from "app"; +import type UpdatableTexture from "libs/UpdatableTexture"; +import LatestTaskExecutor, { SKIPPED_TASK_REASON } from "libs/async/latest_task_executor"; +import { CuckooTableVec3 } from "libs/cuckoo/cuckoo_table_vec3"; +import { CuckooTableVec5 } from "libs/cuckoo/cuckoo_table_vec5"; +import DiffableMap from "libs/diffable_map"; import { M4x4, type Matrix4x4 } from "libs/mjs"; -import { createWorker } from "oxalis/workers/comlink_wrapper"; import { map3 } from "libs/utils"; +import _ from "lodash"; +import memoizeOne from "memoize-one"; +import type { BucketAddress, Vector3, Vector4, ViewMode } from "oxalis/constants"; import { getByteCount, getElementClass, - isLayerVisible, getLayerByName, getMagInfo, - invertAndTranspose, getTransformsForLayer, + invertAndTranspose, + isLayerVisible, } from "oxalis/model/accessors/dataset_accessor"; -import AsyncBucketPickerWorker from "oxalis/workers/async_bucket_picker.worker"; +import type { DataBucket } from "oxalis/model/bucket_data_handling/bucket"; import type DataCube from "oxalis/model/bucket_data_handling/data_cube"; -import LatestTaskExecutor, { SKIPPED_TASK_REASON } from "libs/async/latest_task_executor"; import type PullQueue from "oxalis/model/bucket_data_handling/pullqueue"; -import Store, { type PlaneRects, type SegmentMap } from "oxalis/store"; import TextureBucketManager from "oxalis/model/bucket_data_handling/texture_bucket_manager"; -import type UpdatableTexture from "libs/UpdatableTexture"; -import type { ViewMode, Vector3, Vector4, BucketAddress } from "oxalis/constants"; import shaderEditor from "oxalis/model/helpers/shader_editor"; -import DiffableMap from "libs/diffable_map"; -import { CuckooTableVec3 } from "libs/cuckoo/cuckoo_table_vec3"; -import { CuckooTableVec5 } from "libs/cuckoo/cuckoo_table_vec5"; +import Store, { type PlaneRects, type SegmentMap } from "oxalis/store"; +import AsyncBucketPickerWorker from "oxalis/workers/async_bucket_picker.worker"; +import { createWorker } from "oxalis/workers/comlink_wrapper"; +import type * as THREE from "three"; +import type { AdditionalCoordinate } from "types/api_flow_types"; +import { getViewportRects } from "../accessors/view_mode_accessor"; +import { getSegmentsForLayer } from "../accessors/volumetracing_accessor"; import { listenToStoreProperty } from "../helpers/listener_helpers"; import { cachedDiffSegmentLists } from "../sagas/volumetracing_saga"; -import { getSegmentsForLayer } from "../accessors/volumetracing_accessor"; -import { getViewportRects } from "../accessors/view_mode_accessor"; -import type { AdditionalCoordinate } from "types/api_flow_types"; -import app from "app"; const CUSTOM_COLORS_TEXTURE_WIDTH = 512; // 256**2 (entries) * 0.25 (load capacity) / 8 (layers) == 2048 buckets/layer diff --git a/frontend/javascripts/oxalis/model/bucket_data_handling/mappings.ts b/frontend/javascripts/oxalis/model/bucket_data_handling/mappings.ts index 52a1cfdc9e5..cb131766365 100644 --- a/frontend/javascripts/oxalis/model/bucket_data_handling/mappings.ts +++ b/frontend/javascripts/oxalis/model/bucket_data_handling/mappings.ts @@ -1,20 +1,20 @@ +import { message } from "antd"; +import type UpdatableTexture from "libs/UpdatableTexture"; +import { CuckooTableUint32 } from "libs/cuckoo/cuckoo_table_uint32"; +import { CuckooTableUint64 } from "libs/cuckoo/cuckoo_table_uint64"; +import Toast from "libs/toast"; +import { diffMaps } from "libs/utils"; import _ from "lodash"; +import memoizeOne from "memoize-one"; import { - getMappings, - getMappingInfo, getElementClass, + getMappingInfo, + getMappings, } from "oxalis/model/accessors/dataset_accessor"; -import { listenToStoreProperty } from "oxalis/model/helpers/listener_helpers"; import { finishMappingInitializationAction } from "oxalis/model/actions/settings_actions"; +import { listenToStoreProperty } from "oxalis/model/helpers/listener_helpers"; import type { Mapping, NumberLike } from "oxalis/store"; import Store from "oxalis/store"; -import type UpdatableTexture from "libs/UpdatableTexture"; -import { CuckooTableUint64 } from "libs/cuckoo/cuckoo_table_uint64"; -import { CuckooTableUint32 } from "libs/cuckoo/cuckoo_table_uint32"; -import { message } from "antd"; -import { diffMaps } from "libs/utils"; -import memoizeOne from "memoize-one"; -import Toast from "libs/toast"; // With the default load factor of 0.9, this suffices for mapping // ~15M uint32 ids. diff --git a/frontend/javascripts/oxalis/model/bucket_data_handling/prefetch_strategy_arbitrary.ts b/frontend/javascripts/oxalis/model/bucket_data_handling/prefetch_strategy_arbitrary.ts index dc7c6230e45..f9fcd70245a 100644 --- a/frontend/javascripts/oxalis/model/bucket_data_handling/prefetch_strategy_arbitrary.ts +++ b/frontend/javascripts/oxalis/model/bucket_data_handling/prefetch_strategy_arbitrary.ts @@ -1,12 +1,12 @@ -import { AbstractPrefetchStrategy } from "oxalis/model/bucket_data_handling/prefetch_strategy_plane"; -import type { BoundingBoxType, Vector3 } from "oxalis/constants"; import type { Matrix4x4 } from "libs/mjs"; import { M4x4, V3 } from "libs/mjs"; +import type { BoundingBoxType, Vector3 } from "oxalis/constants"; +import PolyhedronRasterizer from "oxalis/model/bucket_data_handling/polyhedron_rasterizer"; +import { AbstractPrefetchStrategy } from "oxalis/model/bucket_data_handling/prefetch_strategy_plane"; import type { PullQueueItem } from "oxalis/model/bucket_data_handling/pullqueue"; import { globalPositionToBucketPosition } from "oxalis/model/helpers/position_converter"; -import PolyhedronRasterizer from "oxalis/model/bucket_data_handling/polyhedron_rasterizer"; -import type { MagInfo } from "../helpers/mag_info"; import type { AdditionalCoordinate } from "types/api_flow_types"; +import type { MagInfo } from "../helpers/mag_info"; export class PrefetchStrategyArbitrary extends AbstractPrefetchStrategy { velocityRangeStart = 0; diff --git a/frontend/javascripts/oxalis/model/bucket_data_handling/prefetch_strategy_plane.ts b/frontend/javascripts/oxalis/model/bucket_data_handling/prefetch_strategy_plane.ts index 52f78220e64..8b1244e88ad 100644 --- a/frontend/javascripts/oxalis/model/bucket_data_handling/prefetch_strategy_plane.ts +++ b/frontend/javascripts/oxalis/model/bucket_data_handling/prefetch_strategy_plane.ts @@ -1,15 +1,15 @@ import _ from "lodash"; +import type { OrthoView, OrthoViewMap, Vector3, Vector4 } from "oxalis/constants"; +import constants, { OrthoViewValuesWithoutTDView } from "oxalis/constants"; import type { Area } from "oxalis/model/accessors/flycam_accessor"; -import type { PullQueueItem } from "oxalis/model/bucket_data_handling/pullqueue"; -import { zoomedAddressToAnotherZoomStep } from "oxalis/model/helpers/position_converter"; import type DataCube from "oxalis/model/bucket_data_handling/data_cube"; +import { getPriorityWeightForPrefetch } from "oxalis/model/bucket_data_handling/loading_strategy_logic"; +import type { PullQueueItem } from "oxalis/model/bucket_data_handling/pullqueue"; import type { DimensionIndices } from "oxalis/model/dimensions"; import Dimensions from "oxalis/model/dimensions"; -import type { OrthoView, OrthoViewMap, Vector3, Vector4 } from "oxalis/constants"; -import constants, { OrthoViewValuesWithoutTDView } from "oxalis/constants"; -import { getPriorityWeightForPrefetch } from "oxalis/model/bucket_data_handling/loading_strategy_logic"; -import type { MagInfo } from "../helpers/mag_info"; +import { zoomedAddressToAnotherZoomStep } from "oxalis/model/helpers/position_converter"; import type { AdditionalCoordinate } from "types/api_flow_types"; +import type { MagInfo } from "../helpers/mag_info"; const { MAX_ZOOM_STEP_DIFF_PREFETCH } = constants; diff --git a/frontend/javascripts/oxalis/model/bucket_data_handling/pullqueue.ts b/frontend/javascripts/oxalis/model/bucket_data_handling/pullqueue.ts index d9c87af9613..7303a1e8191 100644 --- a/frontend/javascripts/oxalis/model/bucket_data_handling/pullqueue.ts +++ b/frontend/javascripts/oxalis/model/bucket_data_handling/pullqueue.ts @@ -1,11 +1,11 @@ import PriorityQueue from "js-priority-queue"; -import { getLayerByName } from "oxalis/model/accessors/dataset_accessor"; -import { requestWithFallback } from "oxalis/model/bucket_data_handling/wkstore_adapter"; +import { asAbortable, sleep } from "libs/utils"; import type { BucketAddress } from "oxalis/constants"; +import { getLayerByName } from "oxalis/model/accessors/dataset_accessor"; import type DataCube from "oxalis/model/bucket_data_handling/data_cube"; +import { requestWithFallback } from "oxalis/model/bucket_data_handling/wkstore_adapter"; import type { DataStoreInfo } from "oxalis/store"; import Store from "oxalis/store"; -import { asAbortable, sleep } from "libs/utils"; export type PullQueueItem = { priority: number; diff --git a/frontend/javascripts/oxalis/model/bucket_data_handling/pushqueue.ts b/frontend/javascripts/oxalis/model/bucket_data_handling/pushqueue.ts index 894261633a5..e062ec8e2d4 100644 --- a/frontend/javascripts/oxalis/model/bucket_data_handling/pushqueue.ts +++ b/frontend/javascripts/oxalis/model/bucket_data_handling/pushqueue.ts @@ -1,13 +1,13 @@ +import { AsyncFifoResolver } from "libs/async/async_fifo_resolver"; +import { createDebouncedAbortableParameterlessCallable } from "libs/async/debounced_abortable_saga"; import type { DataBucket } from "oxalis/model/bucket_data_handling/bucket"; -import { createCompressedUpdateBucketActions } from "oxalis/model/bucket_data_handling/wkstore_adapter"; import type DataCube from "oxalis/model/bucket_data_handling/data_cube"; -import { createDebouncedAbortableParameterlessCallable } from "libs/async/debounced_abortable_saga"; -import { call } from "redux-saga/effects"; +import { createCompressedUpdateBucketActions } from "oxalis/model/bucket_data_handling/wkstore_adapter"; import Store from "oxalis/store"; +import { call } from "redux-saga/effects"; +import { escalateErrorAction } from "../actions/actions"; import { pushSaveQueueTransaction } from "../actions/save_actions"; import type { UpdateAction } from "../sagas/update_actions"; -import { AsyncFifoResolver } from "libs/async/async_fifo_resolver"; -import { escalateErrorAction } from "../actions/actions"; // Only process the PushQueue after there was no user interaction (or bucket modification due to // downsampling) for PUSH_DEBOUNCE_TIME milliseconds. diff --git a/frontend/javascripts/oxalis/model/bucket_data_handling/texture_bucket_manager.ts b/frontend/javascripts/oxalis/model/bucket_data_handling/texture_bucket_manager.ts index f2cfe80c03d..ecf87c69198 100644 --- a/frontend/javascripts/oxalis/model/bucket_data_handling/texture_bucket_manager.ts +++ b/frontend/javascripts/oxalis/model/bucket_data_handling/texture_bucket_manager.ts @@ -1,21 +1,21 @@ -import * as THREE from "three"; +import app from "app"; +import type UpdatableTexture from "libs/UpdatableTexture"; +import type { CuckooTableVec5 } from "libs/cuckoo/cuckoo_table_vec5"; +import { waitForCondition } from "libs/utils"; +import window from "libs/window"; import _ from "lodash"; -import type { DataBucket } from "oxalis/model/bucket_data_handling/bucket"; +import { WkDevFlags } from "oxalis/api/wk_dev"; +import constants from "oxalis/constants"; +import { getRenderer } from "oxalis/controller/renderer"; import { createUpdatableTexture } from "oxalis/geometries/materials/plane_material_factory_helpers"; +import type { DataBucket } from "oxalis/model/bucket_data_handling/bucket"; import { getBucketCapacity, - getPackingDegree, getChannelCount, + getPackingDegree, } from "oxalis/model/bucket_data_handling/data_rendering_logic"; -import { getRenderer } from "oxalis/controller/renderer"; -import { waitForCondition } from "libs/utils"; -import type UpdatableTexture from "libs/UpdatableTexture"; -import constants from "oxalis/constants"; -import window from "libs/window"; +import * as THREE from "three"; import type { ElementClass } from "types/api_flow_types"; -import type { CuckooTableVec5 } from "libs/cuckoo/cuckoo_table_vec5"; -import app from "app"; -import { WkDevFlags } from "oxalis/api/wk_dev"; // A TextureBucketManager instance is responsible for making buckets available // to the GPU. diff --git a/frontend/javascripts/oxalis/model/bucket_data_handling/wkstore_adapter.ts b/frontend/javascripts/oxalis/model/bucket_data_handling/wkstore_adapter.ts index f0237087f41..0cc36a63a79 100644 --- a/frontend/javascripts/oxalis/model/bucket_data_handling/wkstore_adapter.ts +++ b/frontend/javascripts/oxalis/model/bucket_data_handling/wkstore_adapter.ts @@ -1,34 +1,34 @@ -import type { DataBucket } from "oxalis/model/bucket_data_handling/bucket"; -import { bucketPositionToGlobalAddress } from "oxalis/model/helpers/position_converter"; -import { createWorker } from "oxalis/workers/comlink_wrapper"; import { doWithToken } from "admin/admin_rest_api"; +import ErrorHandling from "libs/error_handling"; +import Request from "libs/request"; +import { parseMaybe } from "libs/utils"; +import WebworkerPool from "libs/webworker_pool"; +import window from "libs/window"; +import _ from "lodash"; +import type { BucketAddress, Vector3 } from "oxalis/constants"; +import constants, { MappingStatusEnum } from "oxalis/constants"; import { - isSegmentationLayer, getByteCountFromLayer, getMagInfo, getMappingInfo, + isSegmentationLayer, } from "oxalis/model/accessors/dataset_accessor"; import { getVolumeTracingById, needsLocalHdf5Mapping, } from "oxalis/model/accessors/volumetracing_accessor"; -import { parseMaybe } from "libs/utils"; +import type { DataBucket } from "oxalis/model/bucket_data_handling/bucket"; +import { bucketPositionToGlobalAddress } from "oxalis/model/helpers/position_converter"; import type { UpdateAction } from "oxalis/model/sagas/update_actions"; import { updateBucket } from "oxalis/model/sagas/update_actions"; -import ByteArraysToLz4Base64Worker from "oxalis/workers/byte_arrays_to_lz4_base64.worker"; -import DecodeFourBitWorker from "oxalis/workers/decode_four_bit.worker"; -import ErrorHandling from "libs/error_handling"; -import Request from "libs/request"; import type { DataLayerType, VolumeTracing } from "oxalis/store"; import Store from "oxalis/store"; -import WebworkerPool from "libs/webworker_pool"; -import type { BucketAddress, Vector3 } from "oxalis/constants"; -import constants, { MappingStatusEnum } from "oxalis/constants"; -import window from "libs/window"; +import ByteArraysToLz4Base64Worker from "oxalis/workers/byte_arrays_to_lz4_base64.worker"; +import { createWorker } from "oxalis/workers/comlink_wrapper"; +import DecodeFourBitWorker from "oxalis/workers/decode_four_bit.worker"; +import type { AdditionalCoordinate } from "types/api_flow_types"; import { getGlobalDataConnectionInfo } from "../data_connection_info"; import type { MagInfo } from "../helpers/mag_info"; -import type { AdditionalCoordinate } from "types/api_flow_types"; -import _ from "lodash"; const decodeFourBit = createWorker(DecodeFourBitWorker); diff --git a/frontend/javascripts/oxalis/model/data_connection_info.ts b/frontend/javascripts/oxalis/model/data_connection_info.ts index 5591260fee8..f61be1718a1 100644 --- a/frontend/javascripts/oxalis/model/data_connection_info.ts +++ b/frontend/javascripts/oxalis/model/data_connection_info.ts @@ -1,5 +1,5 @@ -import _ from "lodash"; import window from "libs/window"; +import _ from "lodash"; const CONSIDERED_TIMESPAN_IN_STATS = 5000; diff --git a/frontend/javascripts/oxalis/model/data_layer.ts b/frontend/javascripts/oxalis/model/data_layer.ts index ee53bf58b4e..725449e7ad5 100644 --- a/frontend/javascripts/oxalis/model/data_layer.ts +++ b/frontend/javascripts/oxalis/model/data_layer.ts @@ -1,7 +1,7 @@ +import ErrorHandling from "libs/error_handling"; import type { Vector3 } from "oxalis/constants"; import { getLayerBoundingBox, getMagInfo } from "oxalis/model/accessors/dataset_accessor"; import DataCube from "oxalis/model/bucket_data_handling/data_cube"; -import ErrorHandling from "libs/error_handling"; import LayerRenderingManager from "oxalis/model/bucket_data_handling/layer_rendering_manager"; import Mappings from "oxalis/model/bucket_data_handling/mappings"; import PullQueue from "oxalis/model/bucket_data_handling/pullqueue"; diff --git a/frontend/javascripts/oxalis/model/edge_collection.ts b/frontend/javascripts/oxalis/model/edge_collection.ts index d64c0550a54..0316fa6c458 100644 --- a/frontend/javascripts/oxalis/model/edge_collection.ts +++ b/frontend/javascripts/oxalis/model/edge_collection.ts @@ -1,7 +1,7 @@ -import _ from "lodash"; -import type { Edge } from "oxalis/store"; import DiffableMap, { diffDiffableMaps } from "libs/diffable_map"; import * as Utils from "libs/utils"; +import _ from "lodash"; +import type { Edge } from "oxalis/store"; type EdgeMap = DiffableMap>; export default class EdgeCollection { // Edge map keyed by the source id of the edges (outgoing) diff --git a/frontend/javascripts/oxalis/model/helpers/action_logger_middleware.ts b/frontend/javascripts/oxalis/model/helpers/action_logger_middleware.ts index 7d444e1b9a3..8c463b1c648 100644 --- a/frontend/javascripts/oxalis/model/helpers/action_logger_middleware.ts +++ b/frontend/javascripts/oxalis/model/helpers/action_logger_middleware.ts @@ -1,6 +1,6 @@ import _ from "lodash"; -import type { Dispatch } from "redux"; import type { Action } from "oxalis/model/actions/actions"; +import type { Dispatch } from "redux"; const MAX_ACTION_LOG_LENGTH = 250; let actionLog: string[] = []; diff --git a/frontend/javascripts/oxalis/model/helpers/bucket_compression.ts b/frontend/javascripts/oxalis/model/helpers/bucket_compression.ts index acbbe32f3d1..d0ea0da39f6 100644 --- a/frontend/javascripts/oxalis/model/helpers/bucket_compression.ts +++ b/frontend/javascripts/oxalis/model/helpers/bucket_compression.ts @@ -1,7 +1,7 @@ import type { BucketDataArray } from "oxalis/model/bucket_data_handling/bucket"; import type { DataBucket } from "oxalis/model/bucket_data_handling/bucket"; -import { createWorker } from "oxalis/workers/comlink_wrapper"; import compressLz4Block from "oxalis/workers/byte_array_lz4_compression.worker"; +import { createWorker } from "oxalis/workers/comlink_wrapper"; const _byteArrayToLz4Array = createWorker(compressLz4Block); diff --git a/frontend/javascripts/oxalis/model/helpers/compaction/compact_toggle_actions.ts b/frontend/javascripts/oxalis/model/helpers/compaction/compact_toggle_actions.ts index cc7ee5af199..c9b406a8ed7 100644 --- a/frontend/javascripts/oxalis/model/helpers/compaction/compact_toggle_actions.ts +++ b/frontend/javascripts/oxalis/model/helpers/compaction/compact_toggle_actions.ts @@ -4,16 +4,16 @@ // appropriate. // See compactToggleActions for the high-level logic of the compaction. import _ from "lodash"; -import type { SkeletonTracing, Tree, TreeGroup, TreeMap, VolumeTracing } from "oxalis/store"; import type { UpdateAction, UpdateTreeVisibilityUpdateAction, } from "oxalis/model/sagas/update_actions"; import { updateTreeGroupVisibility, updateTreeVisibility } from "oxalis/model/sagas/update_actions"; +import type { SkeletonTracing, Tree, TreeGroup, TreeMap, VolumeTracing } from "oxalis/store"; import { + MISSING_GROUP_ID, createGroupToTreesMap, getGroupByIdWithSubgroups, - MISSING_GROUP_ID, } from "oxalis/view/right-border-tabs/tree_hierarchy_view_helpers"; type GroupNode = { children: GroupNode[]; diff --git a/frontend/javascripts/oxalis/model/helpers/compaction/compact_update_actions.ts b/frontend/javascripts/oxalis/model/helpers/compaction/compact_update_actions.ts index b16e490e5e8..7fc942f658f 100644 --- a/frontend/javascripts/oxalis/model/helpers/compaction/compact_update_actions.ts +++ b/frontend/javascripts/oxalis/model/helpers/compaction/compact_update_actions.ts @@ -1,5 +1,6 @@ +import { withoutValues } from "libs/utils"; import _ from "lodash"; -import type { SkeletonTracing, VolumeTracing } from "oxalis/store"; +import compactToggleActions from "oxalis/model/helpers/compaction/compact_toggle_actions"; import type { CreateEdgeUpdateAction, CreateNodeUpdateAction, @@ -9,8 +10,7 @@ import type { UpdateAction, } from "oxalis/model/sagas/update_actions"; import { moveTreeComponent } from "oxalis/model/sagas/update_actions"; -import compactToggleActions from "oxalis/model/helpers/compaction/compact_toggle_actions"; -import { withoutValues } from "libs/utils"; +import type { SkeletonTracing, VolumeTracing } from "oxalis/store"; // The Cantor pairing function assigns one natural number to each pair of natural numbers function cantor(a: number, b: number): number { diff --git a/frontend/javascripts/oxalis/model/helpers/deep_update_test.ts b/frontend/javascripts/oxalis/model/helpers/deep_update_test.ts index d871d45d776..b83036bbe59 100644 --- a/frontend/javascripts/oxalis/model/helpers/deep_update_test.ts +++ b/frontend/javascripts/oxalis/model/helpers/deep_update_test.ts @@ -5,8 +5,8 @@ // - perform multiple invalid calls which TS should catch (--> ts-expect-error) // - perform one valid call -import type { OxalisState } from "oxalis/store"; import { updateKey, updateKey2, updateKey3, updateKey4 } from "oxalis/model/helpers/deep_update"; +import type { OxalisState } from "oxalis/store"; export function test1(state: OxalisState) { // @ts-expect-error diff --git a/frontend/javascripts/oxalis/model/helpers/nml_helpers.ts b/frontend/javascripts/oxalis/model/helpers/nml_helpers.ts index 4312fb8c941..1229dad3267 100644 --- a/frontend/javascripts/oxalis/model/helpers/nml_helpers.ts +++ b/frontend/javascripts/oxalis/model/helpers/nml_helpers.ts @@ -1,44 +1,44 @@ -// @ts-expect-error ts-migrate(7016) FIXME: Could not find a declaration file for module 'saxo... Remove this comment to see the full error message -import Saxophone from "saxophone"; +import Date from "libs/date"; +import DiffableMap from "libs/diffable_map"; +import * as Utils from "libs/utils"; +import { coalesce } from "libs/utils"; +import { location } from "libs/window"; import _ from "lodash"; -import type { APIBuildInfo, MetadataEntryProto } from "types/api_flow_types"; +import messages from "messages"; +import { + type BoundingBoxType, + IdentityTransform, + type TreeType, + TreeTypeEnum, + type Vector3, +} from "oxalis/constants"; +import Constants from "oxalis/constants"; +import { getPosition, getRotation } from "oxalis/model/accessors/flycam_accessor"; +import EdgeCollection from "oxalis/model/edge_collection"; import { getMaximumGroupId, getMaximumTreeId, } from "oxalis/model/reducers/skeletontracing_reducer_helpers"; -import { getPosition, getRotation } from "oxalis/model/accessors/flycam_accessor"; -import Date from "libs/date"; -import DiffableMap from "libs/diffable_map"; -import EdgeCollection from "oxalis/model/edge_collection"; import type { - UserBoundingBox, + BoundingBoxObject, + MutableNode, + MutableTree, + MutableTreeMap, NodeMap, OxalisState, SkeletonTracing, - MutableTreeMap, Tracing, Tree, - MutableTree, TreeGroup, - BoundingBoxObject, - MutableNode, + UserBoundingBox, } from "oxalis/store"; import { findGroup } from "oxalis/view/right-border-tabs/tree_hierarchy_view_helpers"; -import messages from "messages"; -import * as Utils from "libs/utils"; -import { - type BoundingBoxType, - IdentityTransform, - type TreeType, - TreeTypeEnum, - type Vector3, -} from "oxalis/constants"; -import Constants from "oxalis/constants"; -import { location } from "libs/window"; -import { coalesce } from "libs/utils"; +// @ts-expect-error ts-migrate(7016) FIXME: Could not find a declaration file for module 'saxo... Remove this comment to see the full error message +import Saxophone from "saxophone"; +import type { APIBuildInfo, MetadataEntryProto } from "types/api_flow_types"; import type { AdditionalCoordinate } from "types/api_flow_types"; -import { getNodePosition } from "../accessors/skeletontracing_accessor"; import { getTransformsForSkeletonLayer } from "../accessors/dataset_accessor"; +import { getNodePosition } from "../accessors/skeletontracing_accessor"; // NML Defaults const DEFAULT_COLOR: Vector3 = [1, 0, 0]; diff --git a/frontend/javascripts/oxalis/model/helpers/overwrite_action_middleware.ts b/frontend/javascripts/oxalis/model/helpers/overwrite_action_middleware.ts index c51d2debc60..a8938eda548 100644 --- a/frontend/javascripts/oxalis/model/helpers/overwrite_action_middleware.ts +++ b/frontend/javascripts/oxalis/model/helpers/overwrite_action_middleware.ts @@ -1,5 +1,5 @@ -import type { Dispatch, MiddlewareAPI } from "redux"; import type { Action } from "oxalis/model/actions/actions"; +import type { Dispatch, MiddlewareAPI } from "redux"; type OverwriteFunction = (store: S, next: (action: A) => void, action: A) => A | Promise; const overwrites: Record> = {}; diff --git a/frontend/javascripts/oxalis/model/helpers/position_converter.ts b/frontend/javascripts/oxalis/model/helpers/position_converter.ts index 15cf9fb465d..c8f751bacaa 100644 --- a/frontend/javascripts/oxalis/model/helpers/position_converter.ts +++ b/frontend/javascripts/oxalis/model/helpers/position_converter.ts @@ -1,4 +1,4 @@ -import type { Vector3, Vector4, BucketAddress } from "oxalis/constants"; +import type { BucketAddress, Vector3, Vector4 } from "oxalis/constants"; import constants from "oxalis/constants"; import type { AdditionalCoordinate } from "types/api_flow_types"; import type { MagInfo } from "./mag_info"; diff --git a/frontend/javascripts/oxalis/model/helpers/proto_helpers.ts b/frontend/javascripts/oxalis/model/helpers/proto_helpers.ts index cd3430779d9..800f7ae85e4 100644 --- a/frontend/javascripts/oxalis/model/helpers/proto_helpers.ts +++ b/frontend/javascripts/oxalis/model/helpers/proto_helpers.ts @@ -1,12 +1,12 @@ -import { Root } from "protobufjs/light"; -import type { ServerTracing } from "types/api_flow_types"; +// @ts-expect-error ts-migrate(2307) FIXME: Cannot find module 'ListOfLong.proto' or its co... Remove this comment to see the full error message +import ListOfLongProto from "ListOfLong.proto"; // @ts-expect-error ts-migrate(2307) FIXME: Cannot find module 'SkeletonTracing.proto' or its ... Remove this comment to see the full error message import SkeletonTracingProto from "SkeletonTracing.proto"; // @ts-expect-error ts-migrate(2307) FIXME: Cannot find module 'VolumeTracing.proto' or its co... Remove this comment to see the full error message import VolumeTracingProto from "VolumeTracing.proto"; -// @ts-expect-error ts-migrate(2307) FIXME: Cannot find module 'ListOfLong.proto' or its co... Remove this comment to see the full error message -import ListOfLongProto from "ListOfLong.proto"; import { isBigInt } from "libs/utils"; +import { Root } from "protobufjs/light"; +import type { ServerTracing } from "types/api_flow_types"; const PROTO_FILES = { skeleton: SkeletonTracingProto, diff --git a/frontend/javascripts/oxalis/model/helpers/reduce_reducers.ts b/frontend/javascripts/oxalis/model/helpers/reduce_reducers.ts index d9e6171753b..53ddb38150e 100644 --- a/frontend/javascripts/oxalis/model/helpers/reduce_reducers.ts +++ b/frontend/javascripts/oxalis/model/helpers/reduce_reducers.ts @@ -1,6 +1,6 @@ -import _ from "lodash"; // @ts-expect-error ts-migrate(7016) FIXME: Could not find a declaration file for module 'deep... Remove this comment to see the full error message import deepFreezeLib from "deep-freeze"; +import _ from "lodash"; // Do not use the deep-freeze library in production // process.env.NODE_ENV is being substituted by webpack let deepFreeze = deepFreezeLib; diff --git a/frontend/javascripts/oxalis/model/helpers/shader_editor.ts b/frontend/javascripts/oxalis/model/helpers/shader_editor.ts index 624a7362610..ff10486b140 100644 --- a/frontend/javascripts/oxalis/model/helpers/shader_editor.ts +++ b/frontend/javascripts/oxalis/model/helpers/shader_editor.ts @@ -1,6 +1,6 @@ +import app from "app"; // @ts-nocheck import window, { document } from "libs/window"; -import app from "app"; export default { addBucketManagers(textureBucketManager) { diff --git a/frontend/javascripts/oxalis/model/reducers/annotation_reducer.ts b/frontend/javascripts/oxalis/model/reducers/annotation_reducer.ts index 0bc85460aa5..908776e65a0 100644 --- a/frontend/javascripts/oxalis/model/reducers/annotation_reducer.ts +++ b/frontend/javascripts/oxalis/model/reducers/annotation_reducer.ts @@ -1,17 +1,17 @@ import update from "immutability-helper"; -import type { Action } from "oxalis/model/actions/actions"; -import type { OxalisState, UserBoundingBox, MeshInformation } from "oxalis/store"; import { V3 } from "libs/mjs"; -import { updateKey, updateKey2 } from "oxalis/model/helpers/deep_update"; -import { maybeGetSomeTracing } from "oxalis/model/accessors/tracing_accessor"; import * as Utils from "libs/utils"; +import _ from "lodash"; +import { maybeGetSomeTracing } from "oxalis/model/accessors/tracing_accessor"; import { getDisplayedDataExtentInPlaneMode } from "oxalis/model/accessors/view_mode_accessor"; +import type { Action } from "oxalis/model/actions/actions"; +import { updateKey, updateKey2 } from "oxalis/model/helpers/deep_update"; import { convertServerAnnotationToFrontendAnnotation } from "oxalis/model/reducers/reducer_helpers"; -import _ from "lodash"; -import { getAdditionalCoordinatesAsString } from "../accessors/flycam_accessor"; -import { getMeshesForAdditionalCoordinates } from "../accessors/volumetracing_accessor"; +import type { MeshInformation, OxalisState, UserBoundingBox } from "oxalis/store"; import type { AdditionalCoordinate } from "types/api_flow_types"; import { getDatasetBoundingBox } from "../accessors/dataset_accessor"; +import { getAdditionalCoordinatesAsString } from "../accessors/flycam_accessor"; +import { getMeshesForAdditionalCoordinates } from "../accessors/volumetracing_accessor"; import BoundingBox from "../bucket_data_handling/bounding_box"; const updateTracing = (state: OxalisState, shape: Partial): OxalisState => diff --git a/frontend/javascripts/oxalis/model/reducers/connectome_reducer.ts b/frontend/javascripts/oxalis/model/reducers/connectome_reducer.ts index 1a069bbdd02..1d2280f578e 100644 --- a/frontend/javascripts/oxalis/model/reducers/connectome_reducer.ts +++ b/frontend/javascripts/oxalis/model/reducers/connectome_reducer.ts @@ -1,14 +1,14 @@ import Maybe from "data.maybe"; -import _ from "lodash"; import update from "immutability-helper"; +import _ from "lodash"; +import Constants from "oxalis/constants"; import type { Action } from "oxalis/model/actions/actions"; -import type { OxalisState, SkeletonTracing, TreeMap } from "oxalis/store"; +import { updateKey3 } from "oxalis/model/helpers/deep_update"; import { addTreesAndGroups, getMaximumNodeId, } from "oxalis/model/reducers/skeletontracing_reducer_helpers"; -import { updateKey3 } from "oxalis/model/helpers/deep_update"; -import Constants from "oxalis/constants"; +import type { OxalisState, SkeletonTracing, TreeMap } from "oxalis/store"; function getSkeletonTracingForConnectome( state: OxalisState, diff --git a/frontend/javascripts/oxalis/model/reducers/dataset_reducer.ts b/frontend/javascripts/oxalis/model/reducers/dataset_reducer.ts index 295a6d411ad..6c7972ff25b 100644 --- a/frontend/javascripts/oxalis/model/reducers/dataset_reducer.ts +++ b/frontend/javascripts/oxalis/model/reducers/dataset_reducer.ts @@ -1,10 +1,10 @@ -import type { Action } from "oxalis/model/actions/actions"; -import type { OxalisState } from "oxalis/store"; -import { updateKey2 } from "oxalis/model/helpers/deep_update"; -import { getSegmentationLayers } from "oxalis/model/accessors/dataset_accessor"; import DiffableMap from "libs/diffable_map"; -import { MappingStatusEnum } from "oxalis/constants"; import { deepIterate } from "libs/utils"; +import { MappingStatusEnum } from "oxalis/constants"; +import { getSegmentationLayers } from "oxalis/model/accessors/dataset_accessor"; +import type { Action } from "oxalis/model/actions/actions"; +import { updateKey2 } from "oxalis/model/helpers/deep_update"; +import type { OxalisState } from "oxalis/store"; function createDictWithKeysAndValue( keys: Array, diff --git a/frontend/javascripts/oxalis/model/reducers/flycam_reducer.ts b/frontend/javascripts/oxalis/model/reducers/flycam_reducer.ts index 3569f26a462..54c5ac95991 100644 --- a/frontend/javascripts/oxalis/model/reducers/flycam_reducer.ts +++ b/frontend/javascripts/oxalis/model/reducers/flycam_reducer.ts @@ -1,17 +1,17 @@ -import _ from "lodash"; import update from "immutability-helper"; -import type { Action } from "oxalis/model/actions/actions"; import type { Matrix4x4 } from "libs/mjs"; import { M4x4 } from "libs/mjs"; -import type { OxalisState } from "oxalis/store"; +import * as Utils from "libs/utils"; +import _ from "lodash"; import type { Vector3 } from "oxalis/constants"; -import { getBaseVoxelFactorsInUnit } from "oxalis/model/scaleinfo"; import { - getValidZoomRangeForUser, ZOOM_STEP_INTERVAL, + getValidZoomRangeForUser, } from "oxalis/model/accessors/flycam_accessor"; +import type { Action } from "oxalis/model/actions/actions"; import Dimensions from "oxalis/model/dimensions"; -import * as Utils from "libs/utils"; +import { getBaseVoxelFactorsInUnit } from "oxalis/model/scaleinfo"; +import type { OxalisState } from "oxalis/store"; import { getUnifiedAdditionalCoordinates } from "../accessors/dataset_accessor"; function cloneMatrix(m: Matrix4x4): Matrix4x4 { diff --git a/frontend/javascripts/oxalis/model/reducers/reducer_helpers.ts b/frontend/javascripts/oxalis/model/reducers/reducer_helpers.ts index 7326ddd1ba8..9dc3722b690 100644 --- a/frontend/javascripts/oxalis/model/reducers/reducer_helpers.ts +++ b/frontend/javascripts/oxalis/model/reducers/reducer_helpers.ts @@ -1,27 +1,27 @@ import Maybe from "data.maybe"; +import * as Utils from "libs/utils"; +import { AnnotationToolEnum } from "oxalis/constants"; +import type { AnnotationTool, BoundingBoxType } from "oxalis/constants"; +import { getDisabledInfoForTools } from "oxalis/model/accessors/tool_accessor"; +import { + isVolumeAnnotationDisallowedForZoom, + isVolumeTool, +} from "oxalis/model/accessors/volumetracing_accessor"; import { updateKey } from "oxalis/model/helpers/deep_update"; -import type { - AdditionalAxis, - APIAnnotation, - ServerAdditionalAxis, - ServerBoundingBox, - UserBoundingBoxFromServer, -} from "types/api_flow_types"; import type { Annotation, BoundingBoxObject, + OxalisState, UserBoundingBox, UserBoundingBoxToServer, - OxalisState, } from "oxalis/store"; -import { AnnotationToolEnum } from "oxalis/constants"; -import type { BoundingBoxType, AnnotationTool } from "oxalis/constants"; -import * as Utils from "libs/utils"; -import { getDisabledInfoForTools } from "oxalis/model/accessors/tool_accessor"; -import { - isVolumeTool, - isVolumeAnnotationDisallowedForZoom, -} from "oxalis/model/accessors/volumetracing_accessor"; +import type { + APIAnnotation, + AdditionalAxis, + ServerAdditionalAxis, + ServerBoundingBox, + UserBoundingBoxFromServer, +} from "types/api_flow_types"; export function convertServerBoundingBoxToBoundingBox( boundingBox: ServerBoundingBox, diff --git a/frontend/javascripts/oxalis/model/reducers/save_reducer.ts b/frontend/javascripts/oxalis/model/reducers/save_reducer.ts index 7460f0e8de9..4fa95de6351 100644 --- a/frontend/javascripts/oxalis/model/reducers/save_reducer.ts +++ b/frontend/javascripts/oxalis/model/reducers/save_reducer.ts @@ -1,23 +1,23 @@ -import _ from "lodash"; import update from "immutability-helper"; +import Date from "libs/date"; +import * as Utils from "libs/utils"; +import _ from "lodash"; +import { getStats } from "oxalis/model/accessors/annotation_accessor"; +import { selectQueue } from "oxalis/model/accessors/save_accessor"; import type { Action } from "oxalis/model/actions/actions"; -import type { OxalisState, SaveState, SaveQueueEntry } from "oxalis/store"; import type { - SetVersionNumberAction, - SetLastSaveTimestampAction, SaveQueueType, + SetLastSaveTimestampAction, + SetVersionNumberAction, } from "oxalis/model/actions/save_actions"; import { getActionLog } from "oxalis/model/helpers/action_logger_middleware"; -import { getStats } from "oxalis/model/accessors/annotation_accessor"; -import { MAXIMUM_ACTION_COUNT_PER_BATCH } from "oxalis/model/sagas/save_saga_constants"; -import { selectQueue } from "oxalis/model/accessors/save_accessor"; import { updateKey2 } from "oxalis/model/helpers/deep_update"; import { updateEditableMapping, updateVolumeTracing, } from "oxalis/model/reducers/volumetracing_reducer_helpers"; -import Date from "libs/date"; -import * as Utils from "libs/utils"; +import { MAXIMUM_ACTION_COUNT_PER_BATCH } from "oxalis/model/sagas/save_saga_constants"; +import type { OxalisState, SaveQueueEntry, SaveState } from "oxalis/store"; // These update actions are not idempotent. Having them // twice in the save queue causes a corruption of the current annotation. diff --git a/frontend/javascripts/oxalis/model/reducers/settings_reducer.ts b/frontend/javascripts/oxalis/model/reducers/settings_reducer.ts index fb681beb5a1..328fd689f8c 100644 --- a/frontend/javascripts/oxalis/model/reducers/settings_reducer.ts +++ b/frontend/javascripts/oxalis/model/reducers/settings_reducer.ts @@ -1,19 +1,19 @@ -import type { Action } from "oxalis/model/actions/actions"; -import { MappingStatusEnum } from "oxalis/constants"; -import type { OxalisState, ActiveMappingInfo } from "oxalis/store"; import { clamp } from "libs/utils"; +import { MappingStatusEnum } from "oxalis/constants"; import { getLayerByName, + getMappingInfo, getSegmentationLayers, getVisibleSegmentationLayers, - getMappingInfo, } from "oxalis/model/accessors/dataset_accessor"; -import { updateKey, updateKey2, updateKey3 } from "oxalis/model/helpers/deep_update"; -import { userSettings } from "types/schemas/user_settings.schema"; import { hasEditableMapping, isMappingActivationAllowed, } from "oxalis/model/accessors/volumetracing_accessor"; +import type { Action } from "oxalis/model/actions/actions"; +import { updateKey, updateKey2, updateKey3 } from "oxalis/model/helpers/deep_update"; +import type { ActiveMappingInfo, OxalisState } from "oxalis/store"; +import { userSettings } from "types/schemas/user_settings.schema"; import { setRotationReducer } from "./flycam_reducer"; // diff --git a/frontend/javascripts/oxalis/model/reducers/skeletontracing_reducer.ts b/frontend/javascripts/oxalis/model/reducers/skeletontracing_reducer.ts index 16b3c90e4f0..9da00cdffbf 100644 --- a/frontend/javascripts/oxalis/model/reducers/skeletontracing_reducer.ts +++ b/frontend/javascripts/oxalis/model/reducers/skeletontracing_reducer.ts @@ -1,53 +1,53 @@ import Maybe from "data.maybe"; -import _ from "lodash"; import update from "immutability-helper"; +import ColorGenerator from "libs/color_generator"; +import Toast from "libs/toast"; +import * as Utils from "libs/utils"; +import _ from "lodash"; +import Constants, { AnnotationToolEnum, TreeTypeEnum } from "oxalis/constants"; +import { + findTreeByNodeId, + getNodeAndTree, + getSkeletonTracing, + getTree, + getTreesWithType, + isSkeletonLayerTransformed, +} from "oxalis/model/accessors/skeletontracing_accessor"; import type { Action } from "oxalis/model/actions/actions"; -import type { OxalisState, SkeletonTracing, Tree, TreeGroup } from "oxalis/store"; import { convertServerAdditionalAxesToFrontEnd, convertServerBoundingBoxToFrontend, convertUserBoundingBoxesFromServerToFrontend, } from "oxalis/model/reducers/reducer_helpers"; import { + addTreesAndGroups, createBranchPoint, - deleteBranchPoint, + createComment, createNode, createTree, - deleteTrees, - deleteNode, - deleteEdge, - shuffleTreeColor, - setTreeColorIndex, - createComment, + createTreeMapFromTreeArray, + deleteBranchPoint, deleteComment, + deleteEdge, + deleteNode, + deleteTrees, + ensureTreeNames, + getOrCreateTree, mergeTrees, - toggleAllTreesReducer, - toggleTreeGroupReducer, - addTreesAndGroups, - createTreeMapFromTreeArray, removeMissingGroupsFromTrees, - getOrCreateTree, - ensureTreeNames, setExpandedTreeGroups, + setTreeColorIndex, + shuffleTreeColor, + toggleAllTreesReducer, + toggleTreeGroupReducer, } from "oxalis/model/reducers/skeletontracing_reducer_helpers"; -import { - getSkeletonTracing, - findTreeByNodeId, - getTree, - getTreesWithType, - getNodeAndTree, - isSkeletonLayerTransformed, -} from "oxalis/model/accessors/skeletontracing_accessor"; -import ColorGenerator from "libs/color_generator"; -import Constants, { AnnotationToolEnum, TreeTypeEnum } from "oxalis/constants"; -import Toast from "libs/toast"; -import * as Utils from "libs/utils"; -import { userSettings } from "types/schemas/user_settings.schema"; +import type { OxalisState, SkeletonTracing, Tree, TreeGroup } from "oxalis/store"; import { GroupTypeEnum, getNodeKey, } from "oxalis/view/right-border-tabs/tree_hierarchy_view_helpers"; import type { MetadataEntryProto } from "types/api_flow_types"; +import { userSettings } from "types/schemas/user_settings.schema"; function SkeletonTracingReducer(state: OxalisState, action: Action): OxalisState { switch (action.type) { diff --git a/frontend/javascripts/oxalis/model/reducers/skeletontracing_reducer_helpers.ts b/frontend/javascripts/oxalis/model/reducers/skeletontracing_reducer_helpers.ts index ab66187254f..ed1896c47a2 100644 --- a/frontend/javascripts/oxalis/model/reducers/skeletontracing_reducer_helpers.ts +++ b/frontend/javascripts/oxalis/model/reducers/skeletontracing_reducer_helpers.ts @@ -1,48 +1,48 @@ import Maybe from "data.maybe"; -import _ from "lodash"; import update from "immutability-helper"; +import ColorGenerator from "libs/color_generator"; +import DiffableMap from "libs/diffable_map"; +import { V3 } from "libs/mjs"; +import * as Utils from "libs/utils"; +import _ from "lodash"; +import { type TreeType, TreeTypeEnum, type Vector3 } from "oxalis/constants"; +import Constants, { NODE_ID_REF_REGEX } from "oxalis/constants"; +import { + findTreeByNodeId, + getActiveNodeFromTree, + getActiveTree, + getActiveTreeGroup, + getSkeletonTracing, + getTree, + mapGroups, + mapGroupsToGenerator, +} from "oxalis/model/accessors/skeletontracing_accessor"; +import EdgeCollection from "oxalis/model/edge_collection"; import type { - OxalisState, - SkeletonTracing, - Edge, - Node, - MutableNode, - Tree, - MutableTree, BranchPoint, + CommentType, + Edge, MutableBranchPoint, MutableCommentType, - TreeMap, + MutableNode, + MutableNodeMap, + MutableTree, + MutableTreeGroup, MutableTreeMap, - CommentType, - TreeGroup, + Node, + OxalisState, RestrictionsAndSettings, - MutableTreeGroup, - MutableNodeMap, + SkeletonTracing, + Tree, + TreeGroup, + TreeMap, } from "oxalis/store"; import type { - ServerSkeletonTracingTree, - ServerNode, - ServerBranchPoint, MetadataEntryProto, + ServerBranchPoint, + ServerNode, + ServerSkeletonTracingTree, } from "types/api_flow_types"; -import { - getSkeletonTracing, - getActiveNodeFromTree, - getTree, - getActiveTree, - getActiveTreeGroup, - findTreeByNodeId, - mapGroupsToGenerator, - mapGroups, -} from "oxalis/model/accessors/skeletontracing_accessor"; -import ColorGenerator from "libs/color_generator"; -import { type TreeType, TreeTypeEnum, type Vector3 } from "oxalis/constants"; -import Constants, { NODE_ID_REF_REGEX } from "oxalis/constants"; -import DiffableMap from "libs/diffable_map"; -import EdgeCollection from "oxalis/model/edge_collection"; -import * as Utils from "libs/utils"; -import { V3 } from "libs/mjs"; import type { AdditionalCoordinate } from "types/api_flow_types"; export function generateTreeName(state: OxalisState, timestamp: number, treeId: number) { diff --git a/frontend/javascripts/oxalis/model/reducers/ui_reducer.ts b/frontend/javascripts/oxalis/model/reducers/ui_reducer.ts index f2ff54b4d7d..a35e6b62e76 100644 --- a/frontend/javascripts/oxalis/model/reducers/ui_reducer.ts +++ b/frontend/javascripts/oxalis/model/reducers/ui_reducer.ts @@ -1,12 +1,12 @@ import type { Action } from "oxalis/model/actions/actions"; -import type { OxalisState } from "oxalis/store"; import { updateKey, updateKey2 } from "oxalis/model/helpers/deep_update"; import { - setToolReducer, getNextTool, getPreviousTool, + setToolReducer, } from "oxalis/model/reducers/reducer_helpers"; import { hideBrushReducer } from "oxalis/model/reducers/volumetracing_reducer_helpers"; +import type { OxalisState } from "oxalis/store"; function UiReducer(state: OxalisState, action: Action): OxalisState { switch (action.type) { diff --git a/frontend/javascripts/oxalis/model/reducers/view_mode_reducer.ts b/frontend/javascripts/oxalis/model/reducers/view_mode_reducer.ts index 8912ac9cb57..271beed14be 100644 --- a/frontend/javascripts/oxalis/model/reducers/view_mode_reducer.ts +++ b/frontend/javascripts/oxalis/model/reducers/view_mode_reducer.ts @@ -1,10 +1,10 @@ import update from "immutability-helper"; -import type { Action } from "oxalis/model/actions/actions"; import type { Point2, Rect, Viewport } from "oxalis/constants"; import { ArbitraryViewport } from "oxalis/constants"; -import type { OxalisState, PartialCameraData } from "oxalis/store"; import { getTDViewportSize } from "oxalis/model/accessors/view_mode_accessor"; +import type { Action } from "oxalis/model/actions/actions"; import { zoomReducer } from "oxalis/model/reducers/flycam_reducer"; +import type { OxalisState, PartialCameraData } from "oxalis/store"; function ViewModeReducer(state: OxalisState, action: Action): OxalisState { switch (action.type) { diff --git a/frontend/javascripts/oxalis/model/reducers/volumetracing_reducer.ts b/frontend/javascripts/oxalis/model/reducers/volumetracing_reducer.ts index ec4ea3835af..d418d69a6a7 100644 --- a/frontend/javascripts/oxalis/model/reducers/volumetracing_reducer.ts +++ b/frontend/javascripts/oxalis/model/reducers/volumetracing_reducer.ts @@ -1,63 +1,63 @@ import update from "immutability-helper"; +import DiffableMap from "libs/diffable_map"; +import * as Utils from "libs/utils"; import { ContourModeEnum } from "oxalis/constants"; +import { + getMappingInfo, + getMaximumSegmentIdForLayer, +} from "oxalis/model/accessors/dataset_accessor"; +import { + getRequestedOrVisibleSegmentationLayer, + getSegmentationLayerForTracing, + getVisibleSegments, + getVolumeTracingById, +} from "oxalis/model/accessors/volumetracing_accessor"; import type { - EditableMapping, - OxalisState, - Segment, - SegmentGroup, - SegmentMap, - VolumeTracing, -} from "oxalis/store"; + FinishMappingInitializationAction, + SetMappingAction, + SetMappingEnabledAction, + SetMappingNameAction, +} from "oxalis/model/actions/settings_actions"; import type { - VolumeTracingAction, - UpdateSegmentAction, - SetSegmentsAction, - RemoveSegmentAction, ClickSegmentAction, + RemoveSegmentAction, + SetSegmentsAction, + UpdateSegmentAction, + VolumeTracingAction, } from "oxalis/model/actions/volumetracing_actions"; +import { updateKey2 } from "oxalis/model/helpers/deep_update"; import { convertServerAdditionalAxesToFrontEnd, convertServerBoundingBoxToFrontend, convertUserBoundingBoxesFromServerToFrontend, } from "oxalis/model/reducers/reducer_helpers"; import { - getRequestedOrVisibleSegmentationLayer, - getSegmentationLayerForTracing, - getVisibleSegments, - getVolumeTracingById, -} from "oxalis/model/accessors/volumetracing_accessor"; -import { - setActiveCellReducer, - createCellReducer, - updateDirectionReducer, addToLayerReducer, - resetContourReducer, + createCellReducer, hideBrushReducer, + removeMissingGroupsFromSegments, + resetContourReducer, + setActiveCellReducer, setContourTracingModeReducer, setLargestSegmentIdReducer, - updateVolumeTracing, setMappingNameReducer, - removeMissingGroupsFromSegments, + updateDirectionReducer, + updateVolumeTracing, } from "oxalis/model/reducers/volumetracing_reducer_helpers"; -import { updateKey2 } from "oxalis/model/helpers/deep_update"; -import DiffableMap from "libs/diffable_map"; -import * as Utils from "libs/utils"; -import type { AdditionalCoordinate, ServerVolumeTracing } from "types/api_flow_types"; import type { - FinishMappingInitializationAction, - SetMappingAction, - SetMappingEnabledAction, - SetMappingNameAction, -} from "oxalis/model/actions/settings_actions"; -import { - getMappingInfo, - getMaximumSegmentIdForLayer, -} from "oxalis/model/accessors/dataset_accessor"; -import { mapGroups } from "../accessors/skeletontracing_accessor"; + EditableMapping, + OxalisState, + Segment, + SegmentGroup, + SegmentMap, + VolumeTracing, +} from "oxalis/store"; import { findParentIdForGroupId, getGroupNodeKey, } from "oxalis/view/right-border-tabs/tree_hierarchy_view_helpers"; +import type { AdditionalCoordinate, ServerVolumeTracing } from "types/api_flow_types"; +import { mapGroups } from "../accessors/skeletontracing_accessor"; import { sanitizeMetadata } from "./skeletontracing_reducer"; type SegmentUpdateInfo = | { diff --git a/frontend/javascripts/oxalis/model/reducers/volumetracing_reducer_helpers.ts b/frontend/javascripts/oxalis/model/reducers/volumetracing_reducer_helpers.ts index 96e6dc11da0..06e63b6b259 100644 --- a/frontend/javascripts/oxalis/model/reducers/volumetracing_reducer_helpers.ts +++ b/frontend/javascripts/oxalis/model/reducers/volumetracing_reducer_helpers.ts @@ -1,27 +1,27 @@ import update from "immutability-helper"; import { type ContourMode, - OrthoViews, type OrthoViewWithoutTD, + OrthoViews, type Vector3, } from "oxalis/constants"; +import { + getSegmentationLayerForTracing, + isVolumeAnnotationDisallowedForZoom, +} from "oxalis/model/accessors/volumetracing_accessor"; +import { updateKey } from "oxalis/model/helpers/deep_update"; +import { setDirectionReducer } from "oxalis/model/reducers/flycam_reducer"; import type { EditableMapping, - MappingType, LabelAction, + MappingType, OxalisState, - VolumeTracing, SegmentGroup, SegmentMap, + VolumeTracing, } from "oxalis/store"; -import { - getSegmentationLayerForTracing, - isVolumeAnnotationDisallowedForZoom, -} from "oxalis/model/accessors/volumetracing_accessor"; -import { setDirectionReducer } from "oxalis/model/reducers/flycam_reducer"; -import { updateKey } from "oxalis/model/helpers/deep_update"; -import { mapGroupsToGenerator } from "../accessors/skeletontracing_accessor"; import { getMaximumSegmentIdForLayer } from "../accessors/dataset_accessor"; +import { mapGroupsToGenerator } from "../accessors/skeletontracing_accessor"; export function updateVolumeTracing( state: OxalisState, diff --git a/frontend/javascripts/oxalis/model/sagas/annotation_saga.tsx b/frontend/javascripts/oxalis/model/sagas/annotation_saga.tsx index c93961d49cd..81d1f7647ae 100644 --- a/frontend/javascripts/oxalis/model/sagas/annotation_saga.tsx +++ b/frontend/javascripts/oxalis/model/sagas/annotation_saga.tsx @@ -1,51 +1,51 @@ -import React from "react"; +import type { EditableAnnotation } from "admin/admin_rest_api"; +import { + acquireAnnotationMutex, + editAnnotation, + updateAnnotationLayer, +} from "admin/admin_rest_api"; +import { Button } from "antd"; +import ErrorHandling from "libs/error_handling"; +import Toast from "libs/toast"; import _ from "lodash"; +import messages from "messages"; +import constants, { MappingStatusEnum } from "oxalis/constants"; +import { getMappingInfo, is2dDataset } from "oxalis/model/accessors/dataset_accessor"; +import { getActiveMagIndexForLayer } from "oxalis/model/accessors/flycam_accessor"; import type { Action } from "oxalis/model/actions/actions"; import { type EditAnnotationLayerAction, + type SetOthersMayEditForAnnotationAction, setAnnotationAllowUpdateAction, setBlockedByUserAction, - type SetOthersMayEditForAnnotationAction, } from "oxalis/model/actions/annotation_actions"; -import type { EditableAnnotation } from "admin/admin_rest_api"; -import type { ActionPattern } from "redux-saga/effects"; -import { - editAnnotation, - updateAnnotationLayer, - acquireAnnotationMutex, -} from "admin/admin_rest_api"; +import type { Saga } from "oxalis/model/sagas/effect-generators"; +import { select } from "oxalis/model/sagas/effect-generators"; import { SETTINGS_MAX_RETRY_COUNT, SETTINGS_RETRY_DELAY, } from "oxalis/model/sagas/save_saga_constants"; -import type { Saga } from "oxalis/model/sagas/effect-generators"; +import { Model } from "oxalis/singletons"; +import Store from "oxalis/store"; +import { determineLayout } from "oxalis/view/layouting/default_layout_configs"; +import { is3dViewportMaximized } from "oxalis/view/layouting/flex_layout_helper"; +import { getLastActiveLayout, getLayoutConfig } from "oxalis/view/layouting/layout_persistence"; +import React from "react"; +import type { ActionPattern } from "redux-saga/effects"; import { - takeLatest, - take, - retry, - delay, call, - put, - fork, - takeEvery, cancel, cancelled, + delay, + fork, + put, + retry, + take, + takeEvery, + takeLatest, } from "typed-redux-saga"; -import { select } from "oxalis/model/sagas/effect-generators"; -import { getMappingInfo, is2dDataset } from "oxalis/model/accessors/dataset_accessor"; -import { getActiveMagIndexForLayer } from "oxalis/model/accessors/flycam_accessor"; -import { Model } from "oxalis/singletons"; -import Store from "oxalis/store"; -import Toast from "libs/toast"; -import constants, { MappingStatusEnum } from "oxalis/constants"; -import messages from "messages"; import type { APIUserCompact } from "types/api_flow_types"; -import { Button } from "antd"; -import ErrorHandling from "libs/error_handling"; import { mayEditAnnotationProperties } from "../accessors/annotation_accessor"; -import { determineLayout } from "oxalis/view/layouting/default_layout_configs"; -import { getLastActiveLayout, getLayoutConfig } from "oxalis/view/layouting/layout_persistence"; -import { is3dViewportMaximized } from "oxalis/view/layouting/flex_layout_helper"; import { needsLocalHdf5Mapping } from "../accessors/volumetracing_accessor"; /* Note that this must stay in sync with the back-end constant MaxMagForAgglomerateMapping diff --git a/frontend/javascripts/oxalis/model/sagas/annotation_tool_saga.ts b/frontend/javascripts/oxalis/model/sagas/annotation_tool_saga.ts index 84f4e720c6e..faca75c56b8 100644 --- a/frontend/javascripts/oxalis/model/sagas/annotation_tool_saga.ts +++ b/frontend/javascripts/oxalis/model/sagas/annotation_tool_saga.ts @@ -1,16 +1,16 @@ -import type { Saga } from "oxalis/model/sagas/effect-generators"; -import { select } from "oxalis/model/sagas/effect-generators"; -import { take, call, put } from "typed-redux-saga"; +import { AnnotationToolEnum, MeasurementTools } from "oxalis/constants"; +import { getToolClassForAnnotationTool } from "oxalis/controller/combinations/tool_controls"; +import getSceneController from "oxalis/controller/scene_controller_provider"; import { - type SetToolAction, type CycleToolAction, + type SetToolAction, hideMeasurementTooltipAction, setIsMeasuringAction, } from "oxalis/model/actions/ui_actions"; import { getNextTool } from "oxalis/model/reducers/reducer_helpers"; -import { getToolClassForAnnotationTool } from "oxalis/controller/combinations/tool_controls"; -import getSceneController from "oxalis/controller/scene_controller_provider"; -import { AnnotationToolEnum, MeasurementTools } from "oxalis/constants"; +import type { Saga } from "oxalis/model/sagas/effect-generators"; +import { select } from "oxalis/model/sagas/effect-generators"; +import { call, put, take } from "typed-redux-saga"; export function* watchToolDeselection(): Saga { yield* take("WK_READY"); let previousTool = yield* select((state) => state.uiInformation.activeTool); diff --git a/frontend/javascripts/oxalis/model/sagas/clip_histogram_saga.ts b/frontend/javascripts/oxalis/model/sagas/clip_histogram_saga.ts index b5fc6dc2c94..c1342a0da37 100644 --- a/frontend/javascripts/oxalis/model/sagas/clip_histogram_saga.ts +++ b/frontend/javascripts/oxalis/model/sagas/clip_histogram_saga.ts @@ -1,13 +1,13 @@ -import Store from "oxalis/store"; -import type { Saga } from "oxalis/model/sagas/effect-generators"; -import { takeEvery } from "typed-redux-saga"; -import type { ClipHistogramAction } from "oxalis/model/actions/settings_actions"; -import { updateLayerSettingAction } from "oxalis/model/actions/settings_actions"; import Toast from "libs/toast"; import { OrthoViews, type Vector3 } from "oxalis/constants"; -import { getConstructorForElementClass } from "oxalis/model/bucket_data_handling/bucket"; import { getLayerByName } from "oxalis/model/accessors/dataset_accessor"; +import type { ClipHistogramAction } from "oxalis/model/actions/settings_actions"; +import { updateLayerSettingAction } from "oxalis/model/actions/settings_actions"; +import { getConstructorForElementClass } from "oxalis/model/bucket_data_handling/bucket"; +import type { Saga } from "oxalis/model/sagas/effect-generators"; import { api } from "oxalis/singletons"; +import Store from "oxalis/store"; +import { takeEvery } from "typed-redux-saga"; import { getActiveMagIndexForLayer } from "../accessors/flycam_accessor"; function onThresholdChange(layerName: string, [firstVal, secVal]: [number, number]) { diff --git a/frontend/javascripts/oxalis/model/sagas/dataset_saga.ts b/frontend/javascripts/oxalis/model/sagas/dataset_saga.ts index b10c681ba5c..b6b367aaddf 100644 --- a/frontend/javascripts/oxalis/model/sagas/dataset_saga.ts +++ b/frontend/javascripts/oxalis/model/sagas/dataset_saga.ts @@ -1,24 +1,24 @@ -import { call, put, take, takeEvery, takeLatest } from "typed-redux-saga"; +import { V3 } from "libs/mjs"; +import Toast from "libs/toast"; +import { sleep } from "libs/utils"; import { sum } from "lodash"; +import messages from "messages"; +import { Identity4x4 } from "oxalis/constants"; import type { Saga } from "oxalis/model/sagas/effect-generators"; import { select } from "oxalis/model/sagas/effect-generators"; -import { sleep } from "libs/utils"; -import Toast from "libs/toast"; -import messages from "messages"; +import { hasSegmentIndex } from "oxalis/view/right-border-tabs/segments_tab/segments_view_helper"; +import { call, put, take, takeEvery, takeLatest } from "typed-redux-saga"; import { getEnabledLayers, getLayerByName, - getMaybeSegmentIndexAvailability, getMagInfo, + getMaybeSegmentIndexAvailability, getTransformsForLayer, invertAndTranspose, isLayerVisible, } from "../accessors/dataset_accessor"; import { getCurrentMag } from "../accessors/flycam_accessor"; import { getViewportExtents } from "../accessors/view_mode_accessor"; -import { V3 } from "libs/mjs"; -import { Identity4x4 } from "oxalis/constants"; -import { hasSegmentIndex } from "oxalis/view/right-border-tabs/segments_tab/segments_view_helper"; import { type EnsureSegmentIndexIsLoadedAction, setLayerHasSegmentIndexAction, diff --git a/frontend/javascripts/oxalis/model/sagas/effect-generators.ts b/frontend/javascripts/oxalis/model/sagas/effect-generators.ts index 60233bc273b..3835e1c1ea9 100644 --- a/frontend/javascripts/oxalis/model/sagas/effect-generators.ts +++ b/frontend/javascripts/oxalis/model/sagas/effect-generators.ts @@ -1,9 +1,9 @@ +import type { Action } from "oxalis/model/actions/actions"; // The typings are defined in effect-generators.js.flow. import type { OxalisState } from "oxalis/store"; -import type { Action } from "oxalis/model/actions/actions"; -import { select as _select, take as _take } from "typed-redux-saga"; import type { Channel } from "redux-saga"; import type { ActionPattern } from "redux-saga/effects"; +import { select as _select, take as _take } from "typed-redux-saga"; // Ensures that the type of state is known. Otherwise, // a statement such as diff --git a/frontend/javascripts/oxalis/model/sagas/load_histogram_data_saga.ts b/frontend/javascripts/oxalis/model/sagas/load_histogram_data_saga.ts index ad9b3249cf6..7010d647579 100644 --- a/frontend/javascripts/oxalis/model/sagas/load_histogram_data_saga.ts +++ b/frontend/javascripts/oxalis/model/sagas/load_histogram_data_saga.ts @@ -1,15 +1,15 @@ -import type { Saga } from "oxalis/model/sagas/effect-generators"; -import { select } from "oxalis/model/sagas/effect-generators"; -import { call, take, takeEvery, put } from "typed-redux-saga"; +import { getHistogramForLayer } from "admin/admin_rest_api"; +import type { Vector2 } from "oxalis/constants"; import { + type ReloadHistogramAction, setHistogramDataForLayerAction, updateLayerSettingAction, - type ReloadHistogramAction, } from "oxalis/model/actions/settings_actions"; -import { getHistogramForLayer } from "admin/admin_rest_api"; import type DataLayer from "oxalis/model/data_layer"; +import type { Saga } from "oxalis/model/sagas/effect-generators"; +import { select } from "oxalis/model/sagas/effect-generators"; import { Model } from "oxalis/singletons"; -import type { Vector2 } from "oxalis/constants"; +import { call, put, take, takeEvery } from "typed-redux-saga"; export default function* loadHistogramDataSaga(): Saga { yield* take("WK_READY"); diff --git a/frontend/javascripts/oxalis/model/sagas/mapping_saga.ts b/frontend/javascripts/oxalis/model/sagas/mapping_saga.ts index 0ec9d30ab66..507319353a2 100644 --- a/frontend/javascripts/oxalis/model/sagas/mapping_saga.ts +++ b/frontend/javascripts/oxalis/model/sagas/mapping_saga.ts @@ -1,49 +1,51 @@ -import _ from "lodash"; -import type { Saga } from "oxalis/model/sagas/effect-generators"; -import { - all, - call, - cancel, - fork, - takeEvery, - takeLatest, - take, - put, - race, - actionChannel, - flush, -} from "typed-redux-saga"; -import { api } from "oxalis/singletons"; -import { buffers, eventChannel } from "redux-saga"; -import { select } from "oxalis/model/sagas/effect-generators"; -import { message } from "antd"; -import type { - OptionalMappingProperties, - SetMappingAction, -} from "oxalis/model/actions/settings_actions"; -import { - clearMappingAction, - finishMappingInitializationAction, - setMappingAction, -} from "oxalis/model/actions/settings_actions"; import { fetchMapping, - getMappingsForDatasetLayer, getAgglomeratesForDatasetLayer, getAgglomeratesForSegmentsFromDatastore, getAgglomeratesForSegmentsFromTracingstore, + getMappingsForDatasetLayer, } from "admin/admin_rest_api"; -import type { APIDataLayer, APIMapping } from "types/api_flow_types"; -import { - type EnsureLayerMappingsAreLoadedAction, - setLayerMappingsAction, -} from "oxalis/model/actions/dataset_actions"; +import { message } from "antd"; +import ErrorHandling from "libs/error_handling"; +import Toast from "libs/toast"; +import { fastDiffSetAndMap, sleep } from "libs/utils"; +import _ from "lodash"; +import { MappingStatusEnum } from "oxalis/constants"; import { getLayerByName, getMappingInfo, getSegmentationLayers, getVisibleSegmentationLayer, } from "oxalis/model/accessors/dataset_accessor"; +import { + type BucketRetrievalSource, + getBucketRetrievalSourceFn, + getEditableMappingForVolumeTracingId, + needsLocalHdf5Mapping as getNeedsLocalHdf5Mapping, + isMappingActivationAllowed, +} from "oxalis/model/accessors/volumetracing_accessor"; +import { + type EnsureLayerMappingsAreLoadedAction, + setLayerMappingsAction, +} from "oxalis/model/actions/dataset_actions"; +import type { + OptionalMappingProperties, + SetMappingAction, +} from "oxalis/model/actions/settings_actions"; +import { + clearMappingAction, + finishMappingInitializationAction, + setMappingAction, +} from "oxalis/model/actions/settings_actions"; +import { + MAPPING_MESSAGE_KEY, + setCacheResultForDiffMappings, +} from "oxalis/model/bucket_data_handling/mappings"; +import type { Saga } from "oxalis/model/sagas/effect-generators"; +import { select } from "oxalis/model/sagas/effect-generators"; +import { jsHsv2rgb } from "oxalis/shaders/utils.glsl"; +import { api } from "oxalis/singletons"; +import { Model } from "oxalis/singletons"; import type { ActiveMappingInfo, Mapping, @@ -51,27 +53,25 @@ import type { NumberLike, NumberLikeMap, } from "oxalis/store"; -import ErrorHandling from "libs/error_handling"; -import { - MAPPING_MESSAGE_KEY, - setCacheResultForDiffMappings, -} from "oxalis/model/bucket_data_handling/mappings"; -import { Model } from "oxalis/singletons"; +import { buffers, eventChannel } from "redux-saga"; +import type { ActionPattern } from "redux-saga/effects"; import { - isMappingActivationAllowed, - getEditableMappingForVolumeTracingId, - needsLocalHdf5Mapping as getNeedsLocalHdf5Mapping, - getBucketRetrievalSourceFn, - type BucketRetrievalSource, -} from "oxalis/model/accessors/volumetracing_accessor"; -import Toast from "libs/toast"; -import { jsHsv2rgb } from "oxalis/shaders/utils.glsl"; + actionChannel, + all, + call, + cancel, + flush, + fork, + put, + race, + take, + takeEvery, + takeLatest, +} from "typed-redux-saga"; +import type { APIDataLayer, APIMapping } from "types/api_flow_types"; +import type { Action } from "../actions/actions"; import { updateSegmentAction } from "../actions/volumetracing_actions"; -import { MappingStatusEnum } from "oxalis/constants"; import type DataCube from "../bucket_data_handling/data_cube"; -import { fastDiffSetAndMap, sleep } from "libs/utils"; -import type { Action } from "../actions/actions"; -import type { ActionPattern } from "redux-saga/effects"; import { listenToStoreProperty } from "../helpers/listener_helpers"; type APIMappings = Record; diff --git a/frontend/javascripts/oxalis/model/sagas/mesh_saga.ts b/frontend/javascripts/oxalis/model/sagas/mesh_saga.ts index 2fdf47b3710..15154d8d097 100644 --- a/frontend/javascripts/oxalis/model/sagas/mesh_saga.ts +++ b/frontend/javascripts/oxalis/model/sagas/mesh_saga.ts @@ -1,87 +1,87 @@ import { saveAs } from "file-saver"; -import _ from "lodash"; -import { V3 } from "libs/mjs"; -import { areVec3AlmostEqual, chunkDynamically, sleep } from "libs/utils"; -import ErrorHandling from "libs/error_handling"; -import type { APIDataset, APIMeshFile, APISegmentationLayer } from "types/api_flow_types"; import { mergeBufferGeometries } from "libs/BufferGeometryUtils"; import Deferred from "libs/async/deferred"; +import ErrorHandling from "libs/error_handling"; +import { V3 } from "libs/mjs"; +import { areVec3AlmostEqual, chunkDynamically, sleep } from "libs/utils"; +import _ from "lodash"; import type { ActionPattern } from "redux-saga/effects"; +import type { APIDataset, APIMeshFile, APISegmentationLayer } from "types/api_flow_types"; -import Store from "oxalis/store"; +import { + computeAdHocMesh, + getBucketPositionsForAdHocMesh, + getMeshfilesForDatasetLayer, + meshApi, + sendAnalyticsEvent, +} from "admin/admin_rest_api"; +import ThreeDMap from "libs/ThreeDMap"; +import processTaskWithPool from "libs/async/task_pool"; +import { getDracoLoader } from "libs/draco"; +import exportToStl from "libs/stl_exporter"; +import Toast from "libs/toast"; +import Zip from "libs/zipjs_wrapper"; +import messages from "messages"; +import { WkDevFlags } from "oxalis/api/wk_dev"; +import type { Vector3 } from "oxalis/constants"; +import { AnnotationToolEnum, MappingStatusEnum } from "oxalis/constants"; +import getSceneController from "oxalis/controller/scene_controller_provider"; +import type { BufferGeometryWithInfo } from "oxalis/controller/segment_mesh_controller"; import { getMagInfo, getMappingInfo, - getVisibleSegmentationLayer, getSegmentationLayerByName, + getVisibleSegmentationLayer, } from "oxalis/model/accessors/dataset_accessor"; import { - type LoadAdHocMeshAction, - type LoadPrecomputedMeshAction, - type AdHocMeshInfo, - loadPrecomputedMeshAction, -} from "oxalis/model/actions/segmentation_actions"; + getActiveSegmentationTracing, + getEditableMappingForVolumeTracingId, + getMeshInfoForSegment, + getTracingForSegmentationLayer, +} from "oxalis/model/accessors/volumetracing_accessor"; import type { Action } from "oxalis/model/actions/actions"; -import type { Vector3 } from "oxalis/constants"; -import { AnnotationToolEnum, MappingStatusEnum } from "oxalis/constants"; import { - type UpdateMeshVisibilityAction, - type RemoveMeshAction, + type MaybeFetchMeshFilesAction, type RefreshMeshAction, + type RemoveMeshAction, type TriggerMeshDownloadAction, - type MaybeFetchMeshFilesAction, - updateMeshFileListAction, - updateCurrentMeshFileAction, - dispatchMaybeFetchMeshFilesAsync, - removeMeshAction, + type TriggerMeshesDownloadAction, + type UpdateMeshVisibilityAction, addAdHocMeshAction, addPrecomputedMeshAction, + dispatchMaybeFetchMeshFilesAsync, finishedLoadingMeshAction, + removeMeshAction, startedLoadingMeshAction, - type TriggerMeshesDownloadAction, + updateCurrentMeshFileAction, + updateMeshFileListAction, updateMeshVisibilityAction, } from "oxalis/model/actions/annotation_actions"; -import type { Saga } from "oxalis/model/sagas/effect-generators"; -import { select } from "oxalis/model/sagas/effect-generators"; -import { actionChannel, takeEvery, call, take, race, put, all } from "typed-redux-saga"; -import { stlMeshConstants } from "oxalis/view/right-border-tabs/segments_tab/segments_view"; +import { saveNowAction } from "oxalis/model/actions/save_actions"; import { - computeAdHocMesh, - sendAnalyticsEvent, - meshApi, - getMeshfilesForDatasetLayer, - getBucketPositionsForAdHocMesh, -} from "admin/admin_rest_api"; -import { zoomedAddressToAnotherZoomStepWithInfo } from "oxalis/model/helpers/position_converter"; + type AdHocMeshInfo, + type LoadAdHocMeshAction, + type LoadPrecomputedMeshAction, + loadPrecomputedMeshAction, +} from "oxalis/model/actions/segmentation_actions"; import type DataLayer from "oxalis/model/data_layer"; +import { zoomedAddressToAnotherZoomStepWithInfo } from "oxalis/model/helpers/position_converter"; +import type { Saga } from "oxalis/model/sagas/effect-generators"; +import { select } from "oxalis/model/sagas/effect-generators"; import { Model } from "oxalis/singletons"; -import ThreeDMap from "libs/ThreeDMap"; -import exportToStl from "libs/stl_exporter"; -import getSceneController from "oxalis/controller/scene_controller_provider"; -import { - getActiveSegmentationTracing, - getEditableMappingForVolumeTracingId, - getMeshInfoForSegment, - getTracingForSegmentationLayer, -} from "oxalis/model/accessors/volumetracing_accessor"; -import { saveNowAction } from "oxalis/model/actions/save_actions"; -import Toast from "libs/toast"; -import { getDracoLoader } from "libs/draco"; -import messages from "messages"; -import processTaskWithPool from "libs/async/task_pool"; +import Store from "oxalis/store"; +import { stlMeshConstants } from "oxalis/view/right-border-tabs/segments_tab/segments_view"; import { getBaseSegmentationName } from "oxalis/view/right-border-tabs/segments_tab/segments_view_helper"; +import { actionChannel, all, call, put, race, take, takeEvery } from "typed-redux-saga"; +import type { AdditionalCoordinate } from "types/api_flow_types"; +import { getAdditionalCoordinatesAsString } from "../accessors/flycam_accessor"; +import type { FlycamAction } from "../actions/flycam_actions"; import type { BatchUpdateGroupsAndSegmentsAction, RemoveSegmentAction, UpdateSegmentAction, } from "../actions/volumetracing_actions"; import type { MagInfo } from "../helpers/mag_info"; -import type { AdditionalCoordinate } from "types/api_flow_types"; -import Zip from "libs/zipjs_wrapper"; -import type { FlycamAction } from "../actions/flycam_actions"; -import { getAdditionalCoordinatesAsString } from "../accessors/flycam_accessor"; -import type { BufferGeometryWithInfo } from "oxalis/controller/segment_mesh_controller"; -import { WkDevFlags } from "oxalis/api/wk_dev"; export const NO_LOD_MESH_INDEX = -1; const MAX_RETRY_COUNT = 5; diff --git a/frontend/javascripts/oxalis/model/sagas/min_cut_saga.ts b/frontend/javascripts/oxalis/model/sagas/min_cut_saga.ts index 3453390fdeb..d8f0b4e5d1b 100644 --- a/frontend/javascripts/oxalis/model/sagas/min_cut_saga.ts +++ b/frontend/javascripts/oxalis/model/sagas/min_cut_saga.ts @@ -1,28 +1,28 @@ +import { V3 } from "libs/mjs"; +import createProgressCallback from "libs/progress_callback"; +import Toast from "libs/toast"; +import * as Utils from "libs/utils"; +import window from "libs/window"; import _ from "lodash"; -import type { Action } from "oxalis/model/actions/actions"; import type { BoundingBoxType, TypedArray, Vector3 } from "oxalis/constants"; -import type { MutableNode, Node } from "oxalis/store"; -import type { Saga } from "oxalis/model/sagas/effect-generators"; -import { call, put } from "typed-redux-saga"; -import { select } from "oxalis/model/sagas/effect-generators"; -import { V3 } from "libs/mjs"; -import { addUserBoundingBoxAction } from "oxalis/model/actions/annotation_actions"; +import { getMagInfo } from "oxalis/model/accessors/dataset_accessor"; import { enforceActiveVolumeTracing, getActiveSegmentationTracingLayer, } from "oxalis/model/accessors/volumetracing_accessor"; +import type { Action } from "oxalis/model/actions/actions"; +import { addUserBoundingBoxAction } from "oxalis/model/actions/annotation_actions"; import { finishAnnotationStrokeAction } from "oxalis/model/actions/volumetracing_actions"; -import { getMagInfo } from "oxalis/model/accessors/dataset_accessor"; -import { takeEveryUnlessBusy } from "oxalis/model/sagas/saga_helpers"; import BoundingBox from "oxalis/model/bucket_data_handling/bounding_box"; -import Toast from "libs/toast"; -import * as Utils from "libs/utils"; -import createProgressCallback from "libs/progress_callback"; +import type { Saga } from "oxalis/model/sagas/effect-generators"; +import { select } from "oxalis/model/sagas/effect-generators"; +import { takeEveryUnlessBusy } from "oxalis/model/sagas/saga_helpers"; import { api } from "oxalis/singletons"; -import window from "libs/window"; +import type { MutableNode, Node } from "oxalis/store"; +import { call, put } from "typed-redux-saga"; import type { APISegmentationLayer } from "types/api_flow_types"; -import type { MagInfo } from "../helpers/mag_info"; import type { AdditionalCoordinate } from "types/api_flow_types"; +import type { MagInfo } from "../helpers/mag_info"; // By default, a new bounding box is created around // the seed nodes with a padding. Within the bounding box diff --git a/frontend/javascripts/oxalis/model/sagas/prefetch_saga.ts b/frontend/javascripts/oxalis/model/sagas/prefetch_saga.ts index 49e160331f1..fbdf665c3b4 100644 --- a/frontend/javascripts/oxalis/model/sagas/prefetch_saga.ts +++ b/frontend/javascripts/oxalis/model/sagas/prefetch_saga.ts @@ -1,26 +1,26 @@ +import { WkDevFlags } from "oxalis/api/wk_dev"; +import type { Vector3 } from "oxalis/constants"; +import constants from "oxalis/constants"; +import { getMagInfo, isLayerVisible } from "oxalis/model/accessors/dataset_accessor"; +import { + getActiveMagIndexForLayer, + getAreasFromState, + getPosition, +} from "oxalis/model/accessors/flycam_accessor"; import { FlycamActions } from "oxalis/model/actions/flycam_actions"; -import type { OxalisState } from "oxalis/store"; import { PrefetchStrategyArbitrary } from "oxalis/model/bucket_data_handling/prefetch_strategy_arbitrary"; import { + ContentTypes as PrefetchContentTypes, PrefetchStrategySkeleton, PrefetchStrategyVolume, - ContentTypes as PrefetchContentTypes, } from "oxalis/model/bucket_data_handling/prefetch_strategy_plane"; import { getGlobalDataConnectionInfo } from "oxalis/model/data_connection_info"; +import type DataLayer from "oxalis/model/data_layer"; import type { Saga } from "oxalis/model/sagas/effect-generators"; -import { throttle, call, take } from "typed-redux-saga"; import { select } from "oxalis/model/sagas/effect-generators"; -import { - getPosition, - getActiveMagIndexForLayer, - getAreasFromState, -} from "oxalis/model/accessors/flycam_accessor"; -import { isLayerVisible, getMagInfo } from "oxalis/model/accessors/dataset_accessor"; -import type DataLayer from "oxalis/model/data_layer"; import { Model } from "oxalis/singletons"; -import type { Vector3 } from "oxalis/constants"; -import constants from "oxalis/constants"; -import { WkDevFlags } from "oxalis/api/wk_dev"; +import type { OxalisState } from "oxalis/store"; +import { call, take, throttle } from "typed-redux-saga"; const PREFETCH_THROTTLE_TIME = 50; const DIRECTION_VECTOR_SMOOTHER = 0.125; diff --git a/frontend/javascripts/oxalis/model/sagas/proofread_saga.ts b/frontend/javascripts/oxalis/model/sagas/proofread_saga.ts index 3839d8f48c3..0aa09ad0b5d 100644 --- a/frontend/javascripts/oxalis/model/sagas/proofread_saga.ts +++ b/frontend/javascripts/oxalis/model/sagas/proofread_saga.ts @@ -1,31 +1,27 @@ -import type { Saga } from "oxalis/model/sagas/effect-generators"; -import { takeEvery, put, call, all, spawn } from "typed-redux-saga"; -import { select, take } from "oxalis/model/sagas/effect-generators"; +import { + type NeighborInfo, + getAgglomeratesForSegmentsFromTracingstore, + getEdgesForAgglomerateMinCut, + getNeighborsForAgglomerateNode, + getPositionForSegmentInAgglomerate, + makeMappingEditable, +} from "admin/admin_rest_api"; +import { V3 } from "libs/mjs"; +import Toast from "libs/toast"; +import { SoftError, isBigInt, isNumberMap } from "libs/utils"; +import _ from "lodash"; import { AnnotationToolEnum, MappingStatusEnum, TreeTypeEnum, type Vector3, } from "oxalis/constants"; -import Toast from "libs/toast"; -import { - type CreateNodeAction, - type DeleteNodeAction, - deleteEdgeAction, - setTreeNameAction, - type SetNodePositionAction, -} from "oxalis/model/actions/skeletontracing_actions"; +import { getSegmentIdForPositionAsync } from "oxalis/controller/combinations/volume_handlers"; import { - initializeEditableMappingAction, - removeSegmentAction, - setHasEditableMappingAction, - updateSegmentAction, -} from "oxalis/model/actions/volumetracing_actions"; -import type { - MinCutAgglomerateWithPositionAction, - ProofreadAtPositionAction, - ProofreadMergeAction, -} from "oxalis/model/actions/proofread_actions"; + getLayerByName, + getMagInfo, + getMappingInfo, +} from "oxalis/model/accessors/dataset_accessor"; import { enforceSkeletonTracing, findTreeByNodeId, @@ -34,55 +30,59 @@ import { isSkeletonLayerTransformed, } from "oxalis/model/accessors/skeletontracing_accessor"; import { - pushSaveQueueTransaction, - setVersionNumberAction, -} from "oxalis/model/actions/save_actions"; -import { - splitAgglomerate, - mergeAgglomerate, - type UpdateAction, -} from "oxalis/model/sagas/update_actions"; -import { Model, api, Store } from "oxalis/singletons"; -import { - getActiveSegmentationTracingLayer, getActiveSegmentationTracing, - getSegmentsForLayer, - getMeshInfoForSegment, + getActiveSegmentationTracingLayer, getEditableMappingForVolumeTracingId, + getMeshInfoForSegment, getSegmentName, + getSegmentsForLayer, } from "oxalis/model/accessors/volumetracing_accessor"; import { - getLayerByName, - getMappingInfo, - getMagInfo, -} from "oxalis/model/accessors/dataset_accessor"; + dispatchMaybeFetchMeshFilesAsync, + refreshMeshAction, + removeMeshAction, +} from "oxalis/model/actions/annotation_actions"; +import type { + MinCutAgglomerateWithPositionAction, + ProofreadAtPositionAction, + ProofreadMergeAction, +} from "oxalis/model/actions/proofread_actions"; import { - type NeighborInfo, - getAgglomeratesForSegmentsFromTracingstore, - getEdgesForAgglomerateMinCut, - getNeighborsForAgglomerateNode, - getPositionForSegmentInAgglomerate, - makeMappingEditable, -} from "admin/admin_rest_api"; -import { setMappingAction, setMappingNameAction } from "oxalis/model/actions/settings_actions"; -import { getSegmentIdForPositionAsync } from "oxalis/controller/combinations/volume_handlers"; + pushSaveQueueTransaction, + setVersionNumberAction, +} from "oxalis/model/actions/save_actions"; import { loadAdHocMeshAction, loadPrecomputedMeshAction, } from "oxalis/model/actions/segmentation_actions"; -import { V3 } from "libs/mjs"; +import { setMappingAction, setMappingNameAction } from "oxalis/model/actions/settings_actions"; import { - dispatchMaybeFetchMeshFilesAsync, - refreshMeshAction, - removeMeshAction, -} from "oxalis/model/actions/annotation_actions"; + type CreateNodeAction, + type DeleteNodeAction, + type SetNodePositionAction, + deleteEdgeAction, + setTreeNameAction, +} from "oxalis/model/actions/skeletontracing_actions"; +import { + initializeEditableMappingAction, + removeSegmentAction, + setHasEditableMappingAction, + updateSegmentAction, +} from "oxalis/model/actions/volumetracing_actions"; +import type { Saga } from "oxalis/model/sagas/effect-generators"; +import { select, take } from "oxalis/model/sagas/effect-generators"; +import { + type UpdateAction, + mergeAgglomerate, + splitAgglomerate, +} from "oxalis/model/sagas/update_actions"; +import { Model, Store, api } from "oxalis/singletons"; import type { ActiveMappingInfo, Mapping, NumberLikeMap, Tree, VolumeTracing } from "oxalis/store"; -import _ from "lodash"; +import { all, call, put, spawn, takeEvery } from "typed-redux-saga"; import type { AdditionalCoordinate } from "types/api_flow_types"; -import { takeEveryUnlessBusy } from "./saga_helpers"; -import type { Action } from "../actions/actions"; -import { isBigInt, isNumberMap, SoftError } from "libs/utils"; import { getCurrentMag } from "../accessors/flycam_accessor"; +import type { Action } from "../actions/actions"; +import { takeEveryUnlessBusy } from "./saga_helpers"; function runSagaAndCatchSoftError(saga: (...args: any[]) => Saga) { return function* (...args: any[]) { diff --git a/frontend/javascripts/oxalis/model/sagas/quick_select_heuristic_saga.ts b/frontend/javascripts/oxalis/model/sagas/quick_select_heuristic_saga.ts index 8a6956f8cdb..b8bbddc5217 100644 --- a/frontend/javascripts/oxalis/model/sagas/quick_select_heuristic_saga.ts +++ b/frontend/javascripts/oxalis/model/sagas/quick_select_heuristic_saga.ts @@ -1,6 +1,7 @@ +import PriorityQueue from "js-priority-queue"; import _ from "lodash"; -import ops from "ndarray-ops"; import moments from "ndarray-moments"; +import ops from "ndarray-ops"; import { ContourModeEnum, type OrthoView, @@ -10,12 +11,14 @@ import { type Vector2, type Vector3, } from "oxalis/constants"; -import PriorityQueue from "js-priority-queue"; -import type { Saga } from "oxalis/model/sagas/effect-generators"; -import { call, put, race, take } from "typed-redux-saga"; -import { select } from "oxalis/model/sagas/effect-generators"; +import { sendAnalyticsEvent } from "admin/admin_rest_api"; +import morphology from "ball-morphology"; import { V2, V3 } from "libs/mjs"; +import Toast from "libs/toast"; +import { clamp, map3, take2 } from "libs/utils"; +import ndarray from "ndarray"; +import type { QuickSelectGeometry } from "oxalis/geometries/helper_geometries"; import { getActiveSegmentationTracing, getSegmentationLayerForTracing, @@ -31,27 +34,17 @@ import { updateSegmentAction, } from "oxalis/model/actions/volumetracing_actions"; import BoundingBox from "oxalis/model/bucket_data_handling/bounding_box"; +import type { Saga } from "oxalis/model/sagas/effect-generators"; +import { select } from "oxalis/model/sagas/effect-generators"; import { api } from "oxalis/singletons"; -import ndarray from "ndarray"; -import morphology from "ball-morphology"; -import Toast from "libs/toast"; import type { DatasetLayerConfiguration, OxalisState, QuickSelectConfig, VolumeTracing, } from "oxalis/store"; -import type { QuickSelectGeometry } from "oxalis/geometries/helper_geometries"; -import { clamp, map3, take2 } from "libs/utils"; +import { call, put, race, take } from "typed-redux-saga"; import type { APIDataLayer, APIDataset } from "types/api_flow_types"; -import { sendAnalyticsEvent } from "admin/admin_rest_api"; -import { copyNdArray } from "./volume/volume_interpolation_saga"; -import { createVolumeLayer, labelWithVoxelBuffer2D } from "./volume/helpers"; -import { - type EnterAction, - type EscapeAction, - showQuickSelectSettingsAction, -} from "../actions/ui_actions"; import { getDefaultValueRangeOfLayer, getEnabledColorLayers, @@ -59,9 +52,16 @@ import { getMagInfo, getTransformsForLayer, } from "../accessors/dataset_accessor"; -import Dimensions, { type DimensionIndices } from "../dimensions"; import { getActiveMagIndexForLayer } from "../accessors/flycam_accessor"; import { updateUserSettingAction } from "../actions/settings_actions"; +import { + type EnterAction, + type EscapeAction, + showQuickSelectSettingsAction, +} from "../actions/ui_actions"; +import Dimensions, { type DimensionIndices } from "../dimensions"; +import { createVolumeLayer, labelWithVoxelBuffer2D } from "./volume/helpers"; +import { copyNdArray } from "./volume/volume_interpolation_saga"; const TOAST_KEY = "QUICKSELECT_PREVIEW_MESSAGE"; diff --git a/frontend/javascripts/oxalis/model/sagas/quick_select_ml_saga.ts b/frontend/javascripts/oxalis/model/sagas/quick_select_ml_saga.ts index cbc1db4181c..b4cd20318f3 100644 --- a/frontend/javascripts/oxalis/model/sagas/quick_select_ml_saga.ts +++ b/frontend/javascripts/oxalis/model/sagas/quick_select_ml_saga.ts @@ -1,26 +1,26 @@ +import { getSamMask, sendAnalyticsEvent } from "admin/admin_rest_api"; +import { estimateBBoxInMask } from "libs/find_bounding_box_in_nd"; +import { V3 } from "libs/mjs"; +import Toast from "libs/toast"; +import { map3, sleep } from "libs/utils"; import _ from "lodash"; import ndarray, { type NdArray } from "ndarray"; +import { WkDevFlags } from "oxalis/api/wk_dev"; import type { OrthoView, TypedArrayWithoutBigInt, Vector2, Vector3 } from "oxalis/constants"; -import type { Saga } from "oxalis/model/sagas/effect-generators"; -import { call, cancel, fork, put } from "typed-redux-saga"; -import { select } from "oxalis/model/sagas/effect-generators"; -import { V3 } from "libs/mjs"; import type { ComputeQuickSelectForPointAction, ComputeQuickSelectForRectAction, } from "oxalis/model/actions/volumetracing_actions"; import BoundingBox from "oxalis/model/bucket_data_handling/bounding_box"; -import Toast from "libs/toast"; +import type { Saga } from "oxalis/model/sagas/effect-generators"; +import { select } from "oxalis/model/sagas/effect-generators"; import type { OxalisState } from "oxalis/store"; -import { map3, sleep } from "libs/utils"; -import type { AdditionalCoordinate, APIDataset } from "types/api_flow_types"; -import { getSamMask, sendAnalyticsEvent } from "admin/admin_rest_api"; +import { call, cancel, fork, put } from "typed-redux-saga"; +import type { APIDataset, AdditionalCoordinate } from "types/api_flow_types"; +import { getPlaneExtentInVoxelFromStore } from "../accessors/view_mode_accessor"; +import { setGlobalProgressAction } from "../actions/ui_actions"; import Dimensions from "../dimensions"; import { finalizeQuickSelectForSlice, prepareQuickSelect } from "./quick_select_heuristic_saga"; -import { setGlobalProgressAction } from "../actions/ui_actions"; -import { estimateBBoxInMask } from "libs/find_bounding_box_in_nd"; -import { getPlaneExtentInVoxelFromStore } from "../accessors/view_mode_accessor"; -import { WkDevFlags } from "oxalis/api/wk_dev"; const MAXIMUM_MASK_BASE = 1024; diff --git a/frontend/javascripts/oxalis/model/sagas/quick_select_saga.ts b/frontend/javascripts/oxalis/model/sagas/quick_select_saga.ts index 791d51e9211..7b668a0e6b3 100644 --- a/frontend/javascripts/oxalis/model/sagas/quick_select_saga.ts +++ b/frontend/javascripts/oxalis/model/sagas/quick_select_saga.ts @@ -1,20 +1,20 @@ import ErrorHandling from "libs/error_handling"; -import { type Saga, select } from "oxalis/model/sagas/effect-generators"; -import { call, put, takeEvery } from "typed-redux-saga"; +import features from "features"; +import Toast from "libs/toast"; import type { ComputeQuickSelectForPointAction, ComputeQuickSelectForRectAction, } from "oxalis/model/actions/volumetracing_actions"; -import Toast from "libs/toast"; -import features from "features"; +import { type Saga, select } from "oxalis/model/sagas/effect-generators"; +import { call, put, takeEvery } from "typed-redux-saga"; +import getSceneController from "oxalis/controller/scene_controller_provider"; +import type { VolumeTracing } from "oxalis/store"; +import { getActiveSegmentationTracing } from "../accessors/volumetracing_accessor"; import { setBusyBlockingInfoAction, setQuickSelectStateAction } from "../actions/ui_actions"; import performQuickSelectHeuristic from "./quick_select_heuristic_saga"; import performQuickSelectML from "./quick_select_ml_saga"; -import getSceneController from "oxalis/controller/scene_controller_provider"; -import { getActiveSegmentationTracing } from "../accessors/volumetracing_accessor"; -import type { VolumeTracing } from "oxalis/store"; import { requestBucketModificationInVolumeTracing } from "./saga_helpers"; function* shouldUseHeuristic() { diff --git a/frontend/javascripts/oxalis/model/sagas/root_saga.ts b/frontend/javascripts/oxalis/model/sagas/root_saga.ts index 8e03f177535..8609de3c5be 100644 --- a/frontend/javascripts/oxalis/model/sagas/root_saga.ts +++ b/frontend/javascripts/oxalis/model/sagas/root_saga.ts @@ -1,25 +1,25 @@ -import type { Saga } from "oxalis/model/sagas/effect-generators"; -import { all, call, cancel, fork, take, takeEvery } from "typed-redux-saga"; +import ErrorHandling from "libs/error_handling"; import { alert } from "libs/window"; -import VolumetracingSagas from "oxalis/model/sagas/volumetracing_saga"; -import SaveSagas, { toggleErrorHighlighting } from "oxalis/model/sagas/save_saga"; -import UndoSaga from "oxalis/model/sagas/undo_saga"; import AnnotationSagas from "oxalis/model/sagas/annotation_saga"; -import { watchDataRelevantChanges } from "oxalis/model/sagas/prefetch_saga"; -import SkeletontracingSagas from "oxalis/model/sagas/skeletontracing_saga"; -import ErrorHandling from "libs/error_handling"; -import meshSaga, { handleAdditionalCoordinateUpdate } from "oxalis/model/sagas/mesh_saga"; -import DatasetSagas from "oxalis/model/sagas/dataset_saga"; import { watchToolDeselection, watchToolReset } from "oxalis/model/sagas/annotation_tool_saga"; -import SettingsSaga from "oxalis/model/sagas/settings_saga"; -import watchTasksAsync, { warnAboutMagRestriction } from "oxalis/model/sagas/task_saga"; -import loadHistogramDataSaga from "oxalis/model/sagas/load_histogram_data_saga"; import listenToClipHistogramSaga from "oxalis/model/sagas/clip_histogram_saga"; +import DatasetSagas from "oxalis/model/sagas/dataset_saga"; +import type { Saga } from "oxalis/model/sagas/effect-generators"; +import loadHistogramDataSaga from "oxalis/model/sagas/load_histogram_data_saga"; import MappingSaga from "oxalis/model/sagas/mapping_saga"; +import meshSaga, { handleAdditionalCoordinateUpdate } from "oxalis/model/sagas/mesh_saga"; +import { watchDataRelevantChanges } from "oxalis/model/sagas/prefetch_saga"; import ProofreadSaga from "oxalis/model/sagas/proofread_saga"; +import SaveSagas, { toggleErrorHighlighting } from "oxalis/model/sagas/save_saga"; +import SettingsSaga from "oxalis/model/sagas/settings_saga"; +import SkeletontracingSagas from "oxalis/model/sagas/skeletontracing_saga"; +import watchTasksAsync, { warnAboutMagRestriction } from "oxalis/model/sagas/task_saga"; +import UndoSaga from "oxalis/model/sagas/undo_saga"; +import VolumetracingSagas from "oxalis/model/sagas/volumetracing_saga"; import { listenForWkReady } from "oxalis/model/sagas/wk_ready_saga"; -import { warnIfEmailIsUnverified } from "./user_saga"; +import { all, call, cancel, fork, take, takeEvery } from "typed-redux-saga"; import type { EscalateErrorAction } from "../actions/actions"; +import { warnIfEmailIsUnverified } from "./user_saga"; let rootSagaCrashed = false; export default function* rootSaga(): Saga { diff --git a/frontend/javascripts/oxalis/model/sagas/saga_helpers.ts b/frontend/javascripts/oxalis/model/sagas/saga_helpers.ts index abf7b049b1e..08a958bb996 100644 --- a/frontend/javascripts/oxalis/model/sagas/saga_helpers.ts +++ b/frontend/javascripts/oxalis/model/sagas/saga_helpers.ts @@ -1,19 +1,19 @@ +import type { ActionPattern } from "@redux-saga/types"; import { Modal } from "antd"; +import Toast from "libs/toast"; import messages from "messages"; +import { MappingStatusEnum } from "oxalis/constants"; import type { Action } from "oxalis/model/actions/actions"; import { setBusyBlockingInfoAction } from "oxalis/model/actions/ui_actions"; import type { Saga } from "oxalis/model/sagas/effect-generators"; import { select } from "oxalis/model/sagas/effect-generators"; +import { Store } from "oxalis/singletons"; import type { ActiveMappingInfo, VolumeTracing } from "oxalis/store"; import { call, put, takeEvery } from "typed-redux-saga"; -import Toast from "libs/toast"; -import { Store } from "oxalis/singletons"; -import type { ActionPattern } from "@redux-saga/types"; import { setMappingIsLockedAction, setVolumeBucketDataHasChangedAction, } from "../actions/volumetracing_actions"; -import { MappingStatusEnum } from "oxalis/constants"; export function* takeEveryUnlessBusy

( actionDescriptor: P, diff --git a/frontend/javascripts/oxalis/model/sagas/saga_selectors.ts b/frontend/javascripts/oxalis/model/sagas/saga_selectors.ts index c1d04d807e2..b75cc400777 100644 --- a/frontend/javascripts/oxalis/model/sagas/saga_selectors.ts +++ b/frontend/javascripts/oxalis/model/sagas/saga_selectors.ts @@ -1,11 +1,11 @@ -import type { OxalisState } from "oxalis/store"; -import type { Saga } from "oxalis/model/sagas/effect-generators"; -import { select } from "oxalis/model/sagas/effect-generators"; import { V2 } from "libs/mjs"; -import type { Vector2, OrthoView } from "oxalis/constants"; -import { getBaseVoxelFactorsInUnit } from "oxalis/model/scaleinfo"; +import type { OrthoView, Vector2 } from "oxalis/constants"; import { getPlaneExtentInVoxelFromStore } from "oxalis/model/accessors/view_mode_accessor"; import Dimensions from "oxalis/model/dimensions"; +import type { Saga } from "oxalis/model/sagas/effect-generators"; +import { select } from "oxalis/model/sagas/effect-generators"; +import { getBaseVoxelFactorsInUnit } from "oxalis/model/scaleinfo"; +import type { OxalisState } from "oxalis/store"; export function* getHalfViewportExtentsInVx(activeViewport: OrthoView): Saga { const zoom = yield* select((state) => state.flycam.zoomStep); diff --git a/frontend/javascripts/oxalis/model/sagas/settings_saga.ts b/frontend/javascripts/oxalis/model/sagas/settings_saga.ts index 454c4389f11..156f46cd3f8 100644 --- a/frontend/javascripts/oxalis/model/sagas/settings_saga.ts +++ b/frontend/javascripts/oxalis/model/sagas/settings_saga.ts @@ -1,15 +1,15 @@ +import { updateDatasetConfiguration, updateUserConfiguration } from "admin/admin_rest_api"; +import ErrorHandling from "libs/error_handling"; +import Toast from "libs/toast"; +import messages from "messages"; +import type { UpdateUserSettingAction } from "oxalis/model/actions/settings_actions"; +import { type Saga, select, take } from "oxalis/model/sagas/effect-generators"; import { SETTINGS_MAX_RETRY_COUNT, SETTINGS_RETRY_DELAY, } from "oxalis/model/sagas/save_saga_constants"; -import { type Saga, take, select } from "oxalis/model/sagas/effect-generators"; -import { all, takeEvery, debounce, call, retry } from "typed-redux-saga"; -import type { UpdateUserSettingAction } from "oxalis/model/actions/settings_actions"; -import { updateUserConfiguration, updateDatasetConfiguration } from "admin/admin_rest_api"; -import ErrorHandling from "libs/error_handling"; -import Toast from "libs/toast"; -import messages from "messages"; import type { DatasetConfiguration, DatasetLayerConfiguration } from "oxalis/store"; +import { all, call, debounce, retry, takeEvery } from "typed-redux-saga"; function* pushUserSettingsAsync(): Saga { const activeUser = yield* select((state) => state.activeUser); diff --git a/frontend/javascripts/oxalis/model/sagas/skeletontracing_saga.ts b/frontend/javascripts/oxalis/model/sagas/skeletontracing_saga.ts index 287f71350dd..11b92be74ce 100644 --- a/frontend/javascripts/oxalis/model/sagas/skeletontracing_saga.ts +++ b/frontend/javascripts/oxalis/model/sagas/skeletontracing_saga.ts @@ -1,21 +1,53 @@ +import { getAgglomerateSkeleton, getEditableAgglomerateSkeleton } from "admin/admin_rest_api"; import { Modal } from "antd"; +import DiffableMap, { diffDiffableMaps } from "libs/diffable_map"; +import ErrorHandling from "libs/error_handling"; +import { V3 } from "libs/mjs"; +import createProgressCallback from "libs/progress_callback"; +import type { Message } from "libs/toast"; +import Toast from "libs/toast"; +import * as Utils from "libs/utils"; import _ from "lodash"; +import memoizeOne from "memoize-one"; +import messages from "messages"; +import { TreeTypeEnum } from "oxalis/constants"; +import { getLayerByName } from "oxalis/model/accessors/dataset_accessor"; +import { getPosition, getRotation } from "oxalis/model/accessors/flycam_accessor"; +import { + enforceSkeletonTracing, + findTreeByName, + getActiveNode, + getBranchPoints, + getNodePosition, + getTreeNameForAgglomerateSkeleton, + getTreesWithType, +} from "oxalis/model/accessors/skeletontracing_accessor"; import type { Action } from "oxalis/model/actions/actions"; -import type { Saga } from "oxalis/model/sagas/effect-generators"; import { - actionChannel, - take, - takeEvery, - throttle, - all, - call, - fork, - put, - race, -} from "typed-redux-saga"; + addConnectomeTreesAction, + deleteConnectomeTreesAction, +} from "oxalis/model/actions/connectome_actions"; +import { + setAdditionalCoordinatesAction, + setPositionAction, + setRotationAction, +} from "oxalis/model/actions/flycam_actions"; +import type { LoadAgglomerateSkeletonAction } from "oxalis/model/actions/skeletontracing_actions"; +import { + addTreesAndGroupsAction, + deleteBranchPointAction, + setTreeNameAction, +} from "oxalis/model/actions/skeletontracing_actions"; +import { setVersionRestoreVisibilityAction } from "oxalis/model/actions/ui_actions"; +import EdgeCollection, { diffEdgeCollections } from "oxalis/model/edge_collection"; +import { parseProtoTracing } from "oxalis/model/helpers/proto_helpers"; +import { + createMutableTreeMapFromTreeArray, + generateTreeName, +} from "oxalis/model/reducers/skeletontracing_reducer_helpers"; +import type { Saga } from "oxalis/model/sagas/effect-generators"; import { select } from "oxalis/model/sagas/effect-generators"; import type { UpdateAction } from "oxalis/model/sagas/update_actions"; -import { TreeTypeEnum } from "oxalis/constants"; import { createEdge, createNode, @@ -23,44 +55,15 @@ import { deleteEdge, deleteNode, deleteTree, - updateTreeVisibility, - updateTreeEdgesVisibility, updateNode, updateSkeletonTracing, - updateUserBoundingBoxes, updateTree, + updateTreeEdgesVisibility, updateTreeGroups, + updateTreeVisibility, + updateUserBoundingBoxes, } from "oxalis/model/sagas/update_actions"; -import { V3 } from "libs/mjs"; -import type { LoadAgglomerateSkeletonAction } from "oxalis/model/actions/skeletontracing_actions"; -import { - deleteBranchPointAction, - setTreeNameAction, - addTreesAndGroupsAction, -} from "oxalis/model/actions/skeletontracing_actions"; -import { - generateTreeName, - createMutableTreeMapFromTreeArray, -} from "oxalis/model/reducers/skeletontracing_reducer_helpers"; -import { - getActiveNode, - getBranchPoints, - enforceSkeletonTracing, - findTreeByName, - getTreeNameForAgglomerateSkeleton, - getTreesWithType, - getNodePosition, -} from "oxalis/model/accessors/skeletontracing_accessor"; -import { getPosition, getRotation } from "oxalis/model/accessors/flycam_accessor"; -import { - setAdditionalCoordinatesAction, - setPositionAction, - setRotationAction, -} from "oxalis/model/actions/flycam_actions"; -import { setVersionRestoreVisibilityAction } from "oxalis/model/actions/ui_actions"; -import DiffableMap, { diffDiffableMaps } from "libs/diffable_map"; -import EdgeCollection, { diffEdgeCollections } from "oxalis/model/edge_collection"; -import ErrorHandling from "libs/error_handling"; +import { api } from "oxalis/singletons"; import type { Flycam, Node, @@ -71,21 +74,18 @@ import type { TreeMap, } from "oxalis/store"; import Store from "oxalis/store"; -import type { Message } from "libs/toast"; -import Toast from "libs/toast"; -import * as Utils from "libs/utils"; -import { api } from "oxalis/singletons"; -import messages from "messages"; -import { getLayerByName } from "oxalis/model/accessors/dataset_accessor"; -import { getAgglomerateSkeleton, getEditableAgglomerateSkeleton } from "admin/admin_rest_api"; -import { parseProtoTracing } from "oxalis/model/helpers/proto_helpers"; -import createProgressCallback from "libs/progress_callback"; import { - addConnectomeTreesAction, - deleteConnectomeTreesAction, -} from "oxalis/model/actions/connectome_actions"; + actionChannel, + all, + call, + fork, + put, + race, + take, + takeEvery, + throttle, +} from "typed-redux-saga"; import type { ServerSkeletonTracing } from "types/api_flow_types"; -import memoizeOne from "memoize-one"; function* centerActiveNode(action: Action): Saga { if ("suppressCentering" in action && action.suppressCentering) { diff --git a/frontend/javascripts/oxalis/model/sagas/task_saga.tsx b/frontend/javascripts/oxalis/model/sagas/task_saga.tsx index 05c86faa522..f9e702d19ed 100644 --- a/frontend/javascripts/oxalis/model/sagas/task_saga.tsx +++ b/frontend/javascripts/oxalis/model/sagas/task_saga.tsx @@ -1,31 +1,31 @@ -import React from "react"; -import _ from "lodash"; +import { updateLastTaskTypeIdOfUser } from "admin/admin_rest_api"; import { Button } from "antd"; -import type { APITaskType } from "types/api_flow_types"; -import type { Saga } from "oxalis/model/sagas/effect-generators"; -import { select } from "oxalis/model/sagas/effect-generators"; -import { call, put, delay, take } from "typed-redux-saga"; +import renderIndependently from "libs/render_independently"; +import Toast from "libs/toast"; import { clamp } from "libs/utils"; +import _ from "lodash"; +import messages from "messages"; +import { getSegmentationLayers } from "oxalis/model/accessors/dataset_accessor"; import { getValidTaskZoomRange, isMagRestrictionViolated, } from "oxalis/model/accessors/flycam_accessor"; -import { getSegmentationLayers } from "oxalis/model/accessors/dataset_accessor"; -import { setActiveUserAction } from "oxalis/model/actions/user_actions"; -import { setMergerModeEnabledAction } from "oxalis/model/actions/skeletontracing_actions"; import { setZoomStepAction } from "oxalis/model/actions/flycam_actions"; import { updateDatasetSettingAction, - updateUserSettingAction, updateLayerSettingAction, + updateUserSettingAction, } from "oxalis/model/actions/settings_actions"; -import { updateLastTaskTypeIdOfUser } from "admin/admin_rest_api"; +import { setMergerModeEnabledAction } from "oxalis/model/actions/skeletontracing_actions"; +import { setActiveUserAction } from "oxalis/model/actions/user_actions"; +import type { Saga } from "oxalis/model/sagas/effect-generators"; +import { select } from "oxalis/model/sagas/effect-generators"; +import Store, { type RecommendedConfiguration } from "oxalis/store"; import NewTaskDescriptionModal from "oxalis/view/new_task_description_modal"; import RecommendedConfigurationModal from "oxalis/view/recommended_configuration_modal"; -import Store, { type RecommendedConfiguration } from "oxalis/store"; -import Toast from "libs/toast"; -import messages from "messages"; -import renderIndependently from "libs/render_independently"; +import React from "react"; +import { call, delay, put, take } from "typed-redux-saga"; +import type { APITaskType } from "types/api_flow_types"; function* maybeShowNewTaskTypeModal(taskType: APITaskType): Saga { // Users can acquire new tasks directly in the tracing view. Occasionally, diff --git a/frontend/javascripts/oxalis/model/sagas/undo_saga.ts b/frontend/javascripts/oxalis/model/sagas/undo_saga.ts index fc88d2a3e1b..1beb630f780 100644 --- a/frontend/javascripts/oxalis/model/sagas/undo_saga.ts +++ b/frontend/javascripts/oxalis/model/sagas/undo_saga.ts @@ -18,23 +18,23 @@ import { import type { RedoAction, UndoAction } from "oxalis/model/actions/save_actions"; import type { SkeletonTracingAction } from "oxalis/model/actions/skeletontracing_actions"; import { + SkeletonTracingSaveRelevantActions, centerActiveNodeAction, setTracingAction, - SkeletonTracingSaveRelevantActions, } from "oxalis/model/actions/skeletontracing_actions"; import { setBusyBlockingInfoAction } from "oxalis/model/actions/ui_actions"; import { type AddBucketToUndoAction, type BatchUpdateGroupsAndSegmentsAction, - cancelQuickSelectAction, type FinishAnnotationStrokeAction, type ImportVolumeTracingAction, type MaybeUnmergedBucketLoadedPromise, type RemoveSegmentAction, - setSegmentGroupsAction, type SetSegmentGroupsAction, - setSegmentsAction, type UpdateSegmentAction, + cancelQuickSelectAction, + setSegmentGroupsAction, + setSegmentsAction, } from "oxalis/model/actions/volumetracing_actions"; import type { BucketDataArray } from "oxalis/model/bucket_data_handling/bucket"; import { diff --git a/frontend/javascripts/oxalis/model/sagas/update_actions.ts b/frontend/javascripts/oxalis/model/sagas/update_actions.ts index d2cf38aeb20..dac6feb12ce 100644 --- a/frontend/javascripts/oxalis/model/sagas/update_actions.ts +++ b/frontend/javascripts/oxalis/model/sagas/update_actions.ts @@ -1,15 +1,15 @@ -import type { SendBucketInfo } from "oxalis/model/bucket_data_handling/wkstore_adapter"; import type { Vector3 } from "oxalis/constants"; +import type { SendBucketInfo } from "oxalis/model/bucket_data_handling/wkstore_adapter"; +import { convertUserBoundingBoxesFromFrontendToServer } from "oxalis/model/reducers/reducer_helpers"; import type { - VolumeTracing, - Tree, Node, + NumberLike, + SegmentGroup, + Tree, TreeGroup, UserBoundingBox, - SegmentGroup, - NumberLike, + VolumeTracing, } from "oxalis/store"; -import { convertUserBoundingBoxesFromFrontendToServer } from "oxalis/model/reducers/reducer_helpers"; import type { AdditionalCoordinate, MetadataEntryProto } from "types/api_flow_types"; export type NodeWithTreeId = { diff --git a/frontend/javascripts/oxalis/model/sagas/user_saga.ts b/frontend/javascripts/oxalis/model/sagas/user_saga.ts index f1d3b191da6..a8fe5b4d41d 100644 --- a/frontend/javascripts/oxalis/model/sagas/user_saga.ts +++ b/frontend/javascripts/oxalis/model/sagas/user_saga.ts @@ -1,6 +1,6 @@ -import type { SetActiveUser } from "../actions/user_actions"; import { showVerificationReminderToast } from "admin/auth/verify_email_view"; import { takeEvery } from "typed-redux-saga"; +import type { SetActiveUser } from "../actions/user_actions"; export function* warnIfEmailIsUnverified() { yield* takeEvery("SET_ACTIVE_USER", function handler(action: SetActiveUser) { diff --git a/frontend/javascripts/oxalis/model/sagas/volume/floodfill_saga.tsx b/frontend/javascripts/oxalis/model/sagas/volume/floodfill_saga.tsx index dd1d17b692e..9274d616b9b 100644 --- a/frontend/javascripts/oxalis/model/sagas/volume/floodfill_saga.tsx +++ b/frontend/javascripts/oxalis/model/sagas/volume/floodfill_saga.tsx @@ -4,22 +4,23 @@ import Toast from "libs/toast"; import * as Utils from "libs/utils"; import type { BoundingBoxType, + FillMode, LabeledVoxelsMap, OrthoView, Vector2, Vector3, - FillMode, } from "oxalis/constants"; import Constants, { FillModeEnum, Unicode } from "oxalis/constants"; +import _ from "lodash"; import { getDatasetBoundingBox, getMagInfo } from "oxalis/model/accessors/dataset_accessor"; import { getActiveMagIndexForLayer } from "oxalis/model/accessors/flycam_accessor"; import { enforceActiveVolumeTracing } from "oxalis/model/accessors/volumetracing_accessor"; import { addUserBoundingBoxAction } from "oxalis/model/actions/annotation_actions"; import { setBusyBlockingInfoAction } from "oxalis/model/actions/ui_actions"; import { - finishAnnotationStrokeAction, type FloodFillAction, + finishAnnotationStrokeAction, updateSegmentAction, } from "oxalis/model/actions/volumetracing_actions"; import BoundingBox from "oxalis/model/bucket_data_handling/bounding_box"; @@ -31,7 +32,6 @@ import { Model } from "oxalis/singletons"; import { call, put, takeEvery } from "typed-redux-saga"; import { getUserBoundingBoxesThatContainPosition } from "../../accessors/tracing_accessor"; import { applyLabeledVoxelMapToAllMissingMags } from "./helpers"; -import _ from "lodash"; const NO_FLOODFILL_BBOX_TOAST_KEY = "NO_FLOODFILL_BBOX"; const NO_SUCCESS_MSG_WHEN_WITHIN_MS = 500; diff --git a/frontend/javascripts/oxalis/model/sagas/volume/helpers.ts b/frontend/javascripts/oxalis/model/sagas/volume/helpers.ts index 63e6fe197ed..0af435082ff 100644 --- a/frontend/javascripts/oxalis/model/sagas/volume/helpers.ts +++ b/frontend/javascripts/oxalis/model/sagas/volume/helpers.ts @@ -10,23 +10,23 @@ import Constants, { type Vector3, } from "oxalis/constants"; import { getDatasetBoundingBox, getMagInfo } from "oxalis/model/accessors/dataset_accessor"; +import { getFlooredPosition } from "oxalis/model/accessors/flycam_accessor"; +import { enforceActiveVolumeTracing } from "oxalis/model/accessors/volumetracing_accessor"; import BoundingBox from "oxalis/model/bucket_data_handling/bounding_box"; +import type DataCube from "oxalis/model/bucket_data_handling/data_cube"; +import Dimensions, { type DimensionMap } from "oxalis/model/dimensions"; +import type { MagInfo } from "oxalis/model/helpers/mag_info"; +import { zoomedPositionToZoomedAddress } from "oxalis/model/helpers/position_converter"; import type { Saga } from "oxalis/model/sagas/effect-generators"; import { select } from "oxalis/model/sagas/effect-generators"; import { getHalfViewportExtentsInVx } from "oxalis/model/sagas/saga_selectors"; -import { call } from "typed-redux-saga"; import sampleVoxelMapToMagnification, { applyVoxelMap, } from "oxalis/model/volumetracing/volume_annotation_sampling"; -import Dimensions, { type DimensionMap } from "oxalis/model/dimensions"; -import type DataCube from "oxalis/model/bucket_data_handling/data_cube"; -import { Model } from "oxalis/singletons"; import VolumeLayer, { type VoxelBuffer2D } from "oxalis/model/volumetracing/volumelayer"; -import { enforceActiveVolumeTracing } from "oxalis/model/accessors/volumetracing_accessor"; +import { Model } from "oxalis/singletons"; import type { BoundingBoxObject, VolumeTracing } from "oxalis/store"; -import { getFlooredPosition } from "oxalis/model/accessors/flycam_accessor"; -import { zoomedPositionToZoomedAddress } from "oxalis/model/helpers/position_converter"; -import type { MagInfo } from "oxalis/model/helpers/mag_info"; +import { call } from "typed-redux-saga"; function* pairwise(arr: Array): Generator<[T, T], any, any> { for (let i = 0; i < arr.length - 1; i++) { diff --git a/frontend/javascripts/oxalis/model/sagas/volume/volume_interpolation_saga.ts b/frontend/javascripts/oxalis/model/sagas/volume/volume_interpolation_saga.ts index 3d1690b9363..712c016589b 100644 --- a/frontend/javascripts/oxalis/model/sagas/volume/volume_interpolation_saga.ts +++ b/frontend/javascripts/oxalis/model/sagas/volume/volume_interpolation_saga.ts @@ -37,8 +37,8 @@ import type { VoxelBuffer2D } from "oxalis/model/volumetracing/volumelayer"; import { Model, api } from "oxalis/singletons"; import type { OxalisState } from "oxalis/store"; import { call, put } from "typed-redux-saga"; -import { createVolumeLayer, getBoundingBoxForViewport, labelWithVoxelBuffer2D } from "./helpers"; import { requestBucketModificationInVolumeTracing } from "../saga_helpers"; +import { createVolumeLayer, getBoundingBoxForViewport, labelWithVoxelBuffer2D } from "./helpers"; /* * This saga is capable of doing segment interpolation between two slices. diff --git a/frontend/javascripts/oxalis/model/sagas/volumetracing_saga.tsx b/frontend/javascripts/oxalis/model/sagas/volumetracing_saga.tsx index 463e2ea4c13..265b9c078fa 100644 --- a/frontend/javascripts/oxalis/model/sagas/volumetracing_saga.tsx +++ b/frontend/javascripts/oxalis/model/sagas/volumetracing_saga.tsx @@ -69,6 +69,7 @@ import { takeEveryUnlessBusy, } from "oxalis/model/sagas/saga_helpers"; import { + type UpdateAction, createSegmentVolumeAction, deleteSegmentDataVolumeAction, deleteSegmentVolumeAction, @@ -78,7 +79,6 @@ import { updateSegmentVolumeAction, updateUserBoundingBoxes, updateVolumeTracing, - type UpdateAction, } from "oxalis/model/sagas/update_actions"; import type VolumeLayer from "oxalis/model/volumetracing/volumelayer"; import { Model, api } from "oxalis/singletons"; @@ -86,9 +86,9 @@ import type { Flycam, SegmentMap, VolumeTracing } from "oxalis/store"; import type { ActionPattern } from "redux-saga/effects"; import { actionChannel, call, fork, put, takeEvery, takeLatest } from "typed-redux-saga"; import { pushSaveQueueTransaction } from "../actions/save_actions"; -import { createVolumeLayer, labelWithVoxelBuffer2D, type BooleanBox } from "./volume/helpers"; -import maybeInterpolateSegmentationLayer from "./volume/volume_interpolation_saga"; import { floodFill } from "./volume/floodfill_saga"; +import { type BooleanBox, createVolumeLayer, labelWithVoxelBuffer2D } from "./volume/helpers"; +import maybeInterpolateSegmentationLayer from "./volume/volume_interpolation_saga"; const OVERWRITE_EMPTY_WARNING_KEY = "OVERWRITE-EMPTY-WARNING"; diff --git a/frontend/javascripts/oxalis/model/volumetracing/volume_annotation_sampling.ts b/frontend/javascripts/oxalis/model/volumetracing/volume_annotation_sampling.ts index 89cf8ec610f..c2fa996d638 100644 --- a/frontend/javascripts/oxalis/model/volumetracing/volume_annotation_sampling.ts +++ b/frontend/javascripts/oxalis/model/volumetracing/volume_annotation_sampling.ts @@ -1,10 +1,10 @@ +import { map3 } from "libs/utils"; import _ from "lodash"; -import type { Vector3, LabeledVoxelsMap, BucketAddress } from "oxalis/constants"; +import messages from "messages"; +import type { BucketAddress, LabeledVoxelsMap, Vector3 } from "oxalis/constants"; import constants from "oxalis/constants"; -import { map3 } from "libs/utils"; -import type DataCube from "oxalis/model/bucket_data_handling/data_cube"; import type { Bucket } from "oxalis/model/bucket_data_handling/bucket"; -import messages from "messages"; +import type DataCube from "oxalis/model/bucket_data_handling/data_cube"; import type { DimensionMap } from "oxalis/model/dimensions"; function upsampleVoxelMap( diff --git a/frontend/javascripts/oxalis/model/volumetracing/volumelayer.ts b/frontend/javascripts/oxalis/model/volumetracing/volumelayer.ts index 81d4ffaff79..9f823003d95 100644 --- a/frontend/javascripts/oxalis/model/volumetracing/volumelayer.ts +++ b/frontend/javascripts/oxalis/model/volumetracing/volumelayer.ts @@ -1,21 +1,21 @@ -import _ from "lodash"; +import Drawing from "libs/drawing"; import { V2, V3 } from "libs/mjs"; -import { getBaseVoxelFactorsInUnit } from "oxalis/model/scaleinfo"; -import { getVolumeTracingById } from "oxalis/model/accessors/volumetracing_accessor"; +import Toast from "libs/toast"; +import _ from "lodash"; +import messages from "messages"; +import type { AnnotationTool, OrthoView, Vector2, Vector3 } from "oxalis/constants"; +import Constants, { OrthoViews, Vector3Indicies, Vector2Indicies } from "oxalis/constants"; import { isBrushTool } from "oxalis/model/accessors/tool_accessor"; +import { getVolumeTracingById } from "oxalis/model/accessors/volumetracing_accessor"; +import BoundingBox from "oxalis/model/bucket_data_handling/bounding_box"; +import Dimensions from "oxalis/model/dimensions"; import { scaleGlobalPositionWithMagnification, scaleGlobalPositionWithMagnificationFloat, zoomedPositionToGlobalPosition, } from "oxalis/model/helpers/position_converter"; -import type { OrthoView, Vector2, Vector3, AnnotationTool } from "oxalis/constants"; -import Constants, { OrthoViews, Vector3Indicies, Vector2Indicies } from "oxalis/constants"; -import Dimensions from "oxalis/model/dimensions"; -import Drawing from "libs/drawing"; +import { getBaseVoxelFactorsInUnit } from "oxalis/model/scaleinfo"; import Store from "oxalis/store"; -import Toast from "libs/toast"; -import messages from "messages"; -import BoundingBox from "oxalis/model/bucket_data_handling/bounding_box"; /* A VoxelBuffer2D instance holds a two dimensional slice diff --git a/frontend/javascripts/oxalis/model_initialization.ts b/frontend/javascripts/oxalis/model_initialization.ts index 3be1248d892..b09c17e4f48 100644 --- a/frontend/javascripts/oxalis/model_initialization.ts +++ b/frontend/javascripts/oxalis/model_initialization.ts @@ -1,88 +1,90 @@ -import _ from "lodash"; -import type { - APIAnnotation, - APIDataset, - MutableAPIDataset, - APIDataLayer, - ServerVolumeTracing, - ServerTracing, - ServerEditableMapping, - APICompoundType, - APISegmentationLayer, -} from "types/api_flow_types"; -import type { Versions } from "oxalis/view/version_view"; import { - computeDataTexturesSetup, - getSupportedTextureSpecs, - validateMinimumRequirements, -} from "oxalis/model/bucket_data_handling/data_rendering_logic"; + getAnnotationCompoundInformation, + getAnnotationInformation, + getDataset, + getDatasetViewConfiguration, + getEditableMappingInfo, + getEmptySandboxAnnotationInformation, + getSharingTokenFromUrlParameters, + getTracingsForAnnotation, + getUserConfiguration, +} from "admin/admin_rest_api"; +import { + PricingPlanEnum, + isFeatureAllowedByPricingPlan, +} from "admin/organization/pricing_plan_utils"; +import ErrorHandling from "libs/error_handling"; +import Toast from "libs/toast"; +import * as Utils from "libs/utils"; +import _ from "lodash"; +import messages from "messages"; +import constants, { ControlModeEnum, AnnotationToolEnum, type Vector3 } from "oxalis/constants"; +import type { PartialUrlManagerState, UrlStateByLayer } from "oxalis/controller/url_manager"; +import UrlManager from "oxalis/controller/url_manager"; import { determineAllowedModes, getBitDepth, - getDatasetBoundingBox, getDataLayers, + getDatasetBoundingBox, getDatasetCenter, - hasSegmentation, - isElementClassSupported, - isSegmentationLayer, - getSegmentationLayers, getLayerByName, getSegmentationLayerByName, + getSegmentationLayers, getUnifiedAdditionalCoordinates, + hasSegmentation, + isElementClassSupported, + isSegmentationLayer, } from "oxalis/model/accessors/dataset_accessor"; import { getNullableSkeletonTracing } from "oxalis/model/accessors/skeletontracing_accessor"; -import { getServerVolumeTracings } from "oxalis/model/accessors/volumetracing_accessor"; import { getSomeServerTracing } from "oxalis/model/accessors/tracing_accessor"; -import { - getTracingsForAnnotation, - getAnnotationInformation, - getEmptySandboxAnnotationInformation, - getDataset, - getSharingTokenFromUrlParameters, - getUserConfiguration, - getDatasetViewConfiguration, - getEditableMappingInfo, - getAnnotationCompoundInformation, -} from "admin/admin_rest_api"; +import { getServerVolumeTracings } from "oxalis/model/accessors/volumetracing_accessor"; import { dispatchMaybeFetchMeshFilesAsync, initializeAnnotationAction, updateCurrentMeshFileAction, } from "oxalis/model/actions/annotation_actions"; import { - initializeSettingsAction, + setActiveConnectomeAgglomerateIdsAction, + updateCurrentConnectomeFileAction, +} from "oxalis/model/actions/connectome_actions"; +import { setDatasetAction } from "oxalis/model/actions/dataset_actions"; +import { + setAdditionalCoordinatesAction, + setPositionAction, + setRotationAction, + setZoomStepAction, +} from "oxalis/model/actions/flycam_actions"; +import { + loadAdHocMeshAction, + loadPrecomputedMeshAction, +} from "oxalis/model/actions/segmentation_actions"; +import { initializeGpuSetupAction, + initializeSettingsAction, setControlModeAction, - setViewModeAction, setMappingAction, - updateLayerSettingAction, setMappingEnabledAction, + setViewModeAction, + updateLayerSettingAction, } from "oxalis/model/actions/settings_actions"; import { - initializeEditableMappingAction, - initializeVolumeTracingAction, -} from "oxalis/model/actions/volumetracing_actions"; -import { - setActiveNodeAction, initializeSkeletonTracingAction, loadAgglomerateSkeletonAction, + setActiveNodeAction, setShowSkeletonsAction, } from "oxalis/model/actions/skeletontracing_actions"; -import { setDatasetAction } from "oxalis/model/actions/dataset_actions"; -import { - setPositionAction, - setZoomStepAction, - setRotationAction, - setAdditionalCoordinatesAction, -} from "oxalis/model/actions/flycam_actions"; import { setTaskAction } from "oxalis/model/actions/task_actions"; import { setToolAction } from "oxalis/model/actions/ui_actions"; import { - loadAdHocMeshAction, - loadPrecomputedMeshAction, -} from "oxalis/model/actions/segmentation_actions"; + initializeEditableMappingAction, + initializeVolumeTracingAction, +} from "oxalis/model/actions/volumetracing_actions"; +import { + computeDataTexturesSetup, + getSupportedTextureSpecs, + validateMinimumRequirements, +} from "oxalis/model/bucket_data_handling/data_rendering_logic"; import DataLayer from "oxalis/model/data_layer"; -import ErrorHandling from "libs/error_handling"; import type { DatasetConfiguration, DatasetLayerConfiguration, @@ -90,20 +92,18 @@ import type { UserConfiguration, } from "oxalis/store"; import Store from "oxalis/store"; -import Toast from "libs/toast"; -import type { PartialUrlManagerState, UrlStateByLayer } from "oxalis/controller/url_manager"; -import UrlManager from "oxalis/controller/url_manager"; -import * as Utils from "libs/utils"; -import constants, { ControlModeEnum, AnnotationToolEnum, type Vector3 } from "oxalis/constants"; -import messages from "messages"; -import { - setActiveConnectomeAgglomerateIdsAction, - updateCurrentConnectomeFileAction, -} from "oxalis/model/actions/connectome_actions"; -import { - PricingPlanEnum, - isFeatureAllowedByPricingPlan, -} from "admin/organization/pricing_plan_utils"; +import type { Versions } from "oxalis/view/version_view"; +import type { + APIAnnotation, + APICompoundType, + APIDataLayer, + APIDataset, + APISegmentationLayer, + MutableAPIDataset, + ServerEditableMapping, + ServerTracing, + ServerVolumeTracing, +} from "types/api_flow_types"; import { convertServerAdditionalAxesToFrontEnd } from "./model/reducers/reducer_helpers"; export const HANDLED_ERROR = "error_was_handled"; diff --git a/frontend/javascripts/oxalis/shaders/coords.glsl.ts b/frontend/javascripts/oxalis/shaders/coords.glsl.ts index dff7a25cdfe..66b044c8447 100644 --- a/frontend/javascripts/oxalis/shaders/coords.glsl.ts +++ b/frontend/javascripts/oxalis/shaders/coords.glsl.ts @@ -1,4 +1,4 @@ -import { isFlightMode, getW } from "oxalis/shaders/utils.glsl"; +import { getW, isFlightMode } from "oxalis/shaders/utils.glsl"; import type { ShaderModule } from "./shader_module_system"; export const getMagnification: ShaderModule = { code: ` diff --git a/frontend/javascripts/oxalis/shaders/main_data_shaders.glsl.ts b/frontend/javascripts/oxalis/shaders/main_data_shaders.glsl.ts index 68444fa1fdd..84f5d3d74ed 100644 --- a/frontend/javascripts/oxalis/shaders/main_data_shaders.glsl.ts +++ b/frontend/javascripts/oxalis/shaders/main_data_shaders.glsl.ts @@ -1,40 +1,40 @@ +import type TPS3D from "libs/thin_plate_spline"; import _ from "lodash"; -import { MAPPING_TEXTURE_WIDTH } from "oxalis/model/bucket_data_handling/mappings"; import type { Vector3 } from "oxalis/constants"; import constants, { ViewModeValuesIndices, OrthoViewIndices } from "oxalis/constants"; -import { - convertCellIdToRGB, - getBrushOverlay, - getCrossHairOverlay, - getSegmentationAlphaIncrement, - getSegmentId, -} from "./segmentation.glsl"; -import { getMaybeFilteredColorOrFallback } from "./filtering.glsl"; +import Constants from "oxalis/constants"; +import { PLANE_SUBDIVISION } from "oxalis/geometries/plane"; +import { MAX_ZOOM_STEP_DIFF } from "oxalis/model/bucket_data_handling/loading_strategy_logic"; +import { MAPPING_TEXTURE_WIDTH } from "oxalis/model/bucket_data_handling/mappings"; +import { getBlendLayersAdditive, getBlendLayersCover } from "./blending.glsl"; import { getAbsoluteCoords, getMagnification, getWorldCoordUVW, isOutsideOfBoundingBox, } from "./coords.glsl"; +import { getMaybeFilteredColorOrFallback } from "./filtering.glsl"; import { - inverse, - div, - isNan, - transDim, - isFlightMode, - formatNumberAsGLSLFloat, - almostEq, -} from "./utils.glsl"; + convertCellIdToRGB, + getBrushOverlay, + getCrossHairOverlay, + getSegmentId, + getSegmentationAlphaIncrement, +} from "./segmentation.glsl"; import compileShader from "./shader_module_system"; -import Constants from "oxalis/constants"; -import { PLANE_SUBDIVISION } from "oxalis/geometries/plane"; -import { MAX_ZOOM_STEP_DIFF } from "oxalis/model/bucket_data_handling/loading_strategy_logic"; -import { getBlendLayersAdditive, getBlendLayersCover } from "./blending.glsl"; -import type TPS3D from "libs/thin_plate_spline"; import { generateCalculateTpsOffsetFunction, generateTpsInitialization, } from "./thin_plate_spline.glsl"; +import { + almostEq, + div, + formatNumberAsGLSLFloat, + inverse, + isFlightMode, + isNan, + transDim, +} from "./utils.glsl"; type Params = { globalLayerCount: number; diff --git a/frontend/javascripts/oxalis/shaders/segmentation.glsl.ts b/frontend/javascripts/oxalis/shaders/segmentation.glsl.ts index f86e4bc6a49..8b4e3e0e8ce 100644 --- a/frontend/javascripts/oxalis/shaders/segmentation.glsl.ts +++ b/frontend/javascripts/oxalis/shaders/segmentation.glsl.ts @@ -1,17 +1,17 @@ +import type { Vector3, Vector4 } from "oxalis/constants"; import { - hsvToRgb, - jsRgb2hsv, - getElementOfPermutation, - jsGetElementOfPermutation, aaStep, colormapJet, + getElementOfPermutation, + hsvToRgb, jsColormapJet, + jsGetElementOfPermutation, + jsRgb2hsv, } from "oxalis/shaders/utils.glsl"; -import type { Vector3, Vector4 } from "oxalis/constants"; -import type { ShaderModule } from "./shader_module_system"; -import { getRgbaAtIndex } from "./texture_access.glsl"; import { hashCombine } from "./hashing.glsl"; import { attemptMappingLookUp } from "./mappings.glsl"; +import type { ShaderModule } from "./shader_module_system"; +import { getRgbaAtIndex } from "./texture_access.glsl"; export const convertCellIdToRGB: ShaderModule = { requirements: [ diff --git a/frontend/javascripts/oxalis/shaders/texture_access.glsl.ts b/frontend/javascripts/oxalis/shaders/texture_access.glsl.ts index 8e15185537e..ddbc6acfd97 100644 --- a/frontend/javascripts/oxalis/shaders/texture_access.glsl.ts +++ b/frontend/javascripts/oxalis/shaders/texture_access.glsl.ts @@ -1,5 +1,5 @@ import { MAX_ZOOM_STEP_DIFF } from "oxalis/model/bucket_data_handling/loading_strategy_logic"; -import { getMagnificationFactors, getAbsoluteCoords } from "oxalis/shaders/coords.glsl"; +import { getAbsoluteCoords, getMagnificationFactors } from "oxalis/shaders/coords.glsl"; import { hashCombine } from "./hashing.glsl"; import type { ShaderModule } from "./shader_module_system"; import { transDim } from "./utils.glsl"; diff --git a/frontend/javascripts/oxalis/store.ts b/frontend/javascripts/oxalis/store.ts index d056af18b3d..4d074326f60 100644 --- a/frontend/javascripts/oxalis/store.ts +++ b/frontend/javascripts/oxalis/store.ts @@ -1,4 +1,45 @@ -import { createStore, applyMiddleware, type Middleware } from "redux"; +import type DiffableMap from "libs/diffable_map"; +import type { Matrix4x4 } from "libs/mjs"; +import type { + AnnotationTool, + BoundingBoxType, + ContourMode, + ControlMode, + FillMode, + InterpolationMode, + MappingStatus, + OrthoView, + OrthoViewWithoutTD, + OverwriteMode, + Rect, + TDViewDisplayMode, + TreeType, + Vector2, + Vector3, + ViewMode, +} from "oxalis/constants"; +import type { BLEND_MODES, ControlModeEnum } from "oxalis/constants"; +import defaultState from "oxalis/default_state"; +import type { TracingStats } from "oxalis/model/accessors/annotation_accessor"; +import type { Action } from "oxalis/model/actions/actions"; +import type EdgeCollection from "oxalis/model/edge_collection"; +import actionLoggerMiddleware from "oxalis/model/helpers/action_logger_middleware"; +import overwriteActionMiddleware from "oxalis/model/helpers/overwrite_action_middleware"; +import reduceReducers from "oxalis/model/helpers/reduce_reducers"; +import AnnotationReducer from "oxalis/model/reducers/annotation_reducer"; +import ConnectomeReducer from "oxalis/model/reducers/connectome_reducer"; +import DatasetReducer from "oxalis/model/reducers/dataset_reducer"; +import FlycamReducer from "oxalis/model/reducers/flycam_reducer"; +import SaveReducer from "oxalis/model/reducers/save_reducer"; +import SettingsReducer from "oxalis/model/reducers/settings_reducer"; +import SkeletonTracingReducer from "oxalis/model/reducers/skeletontracing_reducer"; +import TaskReducer from "oxalis/model/reducers/task_reducer"; +import UiReducer from "oxalis/model/reducers/ui_reducer"; +import UserReducer from "oxalis/model/reducers/user_reducer"; +import ViewModeReducer from "oxalis/model/reducers/view_mode_reducer"; +import VolumeTracingReducer from "oxalis/model/reducers/volumetracing_reducer"; +import type { UpdateAction } from "oxalis/model/sagas/update_actions"; +import { type Middleware, applyMiddleware, createStore } from "redux"; import { enableBatching } from "redux-batched-actions"; import createSagaMiddleware, { type Saga } from "redux-saga"; import type { @@ -7,10 +48,12 @@ import type { APIAnnotationVisibility, APIConnectomeFile, APIDataLayer, + APIDataSourceId, APIDataStore, APIDataset, - APIDataSourceId, APIHistogramData, + APIMeshFile, + APIOrganization, APIRestrictions, APIScript, APISettings, @@ -18,57 +61,14 @@ import type { APITracingStore, APIUser, APIUserBase, - AnnotationLayerDescriptor, - TracingType, - APIMeshFile, - ServerEditableMapping, - APIOrganization, APIUserCompact, - AdditionalCoordinate, AdditionalAxis, + AdditionalCoordinate, + AnnotationLayerDescriptor, MetadataEntryProto, + ServerEditableMapping, + TracingType, } from "types/api_flow_types"; -import type { TracingStats } from "oxalis/model/accessors/annotation_accessor"; -import type { Action } from "oxalis/model/actions/actions"; -import type { - BoundingBoxType, - ContourMode, - OverwriteMode, - FillMode, - ControlMode, - TDViewDisplayMode, - ViewMode, - OrthoView, - Rect, - Vector2, - Vector3, - AnnotationTool, - MappingStatus, - OrthoViewWithoutTD, - InterpolationMode, - TreeType, -} from "oxalis/constants"; -import type { BLEND_MODES, ControlModeEnum } from "oxalis/constants"; -import type { Matrix4x4 } from "libs/mjs"; -import type { UpdateAction } from "oxalis/model/sagas/update_actions"; -import AnnotationReducer from "oxalis/model/reducers/annotation_reducer"; -import DatasetReducer from "oxalis/model/reducers/dataset_reducer"; -import type DiffableMap from "libs/diffable_map"; -import type EdgeCollection from "oxalis/model/edge_collection"; -import FlycamReducer from "oxalis/model/reducers/flycam_reducer"; -import SaveReducer from "oxalis/model/reducers/save_reducer"; -import SettingsReducer from "oxalis/model/reducers/settings_reducer"; -import SkeletonTracingReducer from "oxalis/model/reducers/skeletontracing_reducer"; -import TaskReducer from "oxalis/model/reducers/task_reducer"; -import UiReducer from "oxalis/model/reducers/ui_reducer"; -import UserReducer from "oxalis/model/reducers/user_reducer"; -import ViewModeReducer from "oxalis/model/reducers/view_mode_reducer"; -import VolumeTracingReducer from "oxalis/model/reducers/volumetracing_reducer"; -import actionLoggerMiddleware from "oxalis/model/helpers/action_logger_middleware"; -import defaultState from "oxalis/default_state"; -import overwriteActionMiddleware from "oxalis/model/helpers/overwrite_action_middleware"; -import reduceReducers from "oxalis/model/helpers/reduce_reducers"; -import ConnectomeReducer from "oxalis/model/reducers/connectome_reducer"; import OrganizationReducer from "./model/reducers/organization_reducer"; import type { StartAIJobModalState } from "./view/action-bar/starting_job_modals"; diff --git a/frontend/javascripts/oxalis/throttled_store.ts b/frontend/javascripts/oxalis/throttled_store.ts index ea33403cf14..3b5bb663ea8 100644 --- a/frontend/javascripts/oxalis/throttled_store.ts +++ b/frontend/javascripts/oxalis/throttled_store.ts @@ -1,9 +1,9 @@ -/* eslint no-await-in-loop: 0 */ -import type { Store as StoreType } from "redux"; import Deferred from "libs/async/deferred"; +import * as Utils from "libs/utils"; import type { OxalisState } from "oxalis/store"; import Store from "oxalis/store"; -import * as Utils from "libs/utils"; +/* eslint no-await-in-loop: 0 */ +import type { Store as StoreType } from "redux"; const MAXIMUM_STORE_UPDATE_DELAY = 10000; const listeners: Array<() => void> = []; let waitForUpdate = new Deferred(); diff --git a/frontend/javascripts/oxalis/view/action-bar/create_animation_modal.tsx b/frontend/javascripts/oxalis/view/action-bar/create_animation_modal.tsx index 5c19d7a00ae..180ecc1ccde 100644 --- a/frontend/javascripts/oxalis/view/action-bar/create_animation_modal.tsx +++ b/frontend/javascripts/oxalis/view/action-bar/create_animation_modal.tsx @@ -1,11 +1,23 @@ import { Alert, Checkbox, Col, Divider, Modal, Radio, Row, Space, Tooltip } from "antd"; -import { useSelector } from "react-redux"; import React, { useState } from "react"; +import { useSelector } from "react-redux"; import { startRenderAnimationJob } from "admin/admin_rest_api"; import Toast from "libs/toast"; import Store, { type MeshInformation, type OxalisState, type UserBoundingBox } from "oxalis/store"; +import { InfoCircleOutlined } from "@ant-design/icons"; +import { + PricingPlanEnum, + isFeatureAllowedByPricingPlan, +} from "admin/organization/pricing_plan_utils"; +import { LayerSelection } from "components/layer_selection"; +import { PricingEnforcedSpan } from "components/pricing_enforcers"; +import { + computeBoundingBoxFromBoundingBoxObject, + computeBoundingBoxObjectFromBoundingBox, +} from "libs/utils"; +import type { Vector3 } from "oxalis/constants"; import { getColorLayers, getEffectiveIntensityRange, @@ -13,30 +25,18 @@ import { getMagInfo, is2dDataset, } from "oxalis/model/accessors/dataset_accessor"; -import { - computeBoundingBoxFromBoundingBoxObject, - computeBoundingBoxObjectFromBoundingBox, -} from "libs/utils"; +import { getAdditionalCoordinatesAsString } from "oxalis/model/accessors/flycam_accessor"; import { getUserBoundingBoxesFromState } from "oxalis/model/accessors/tracing_accessor"; +import BoundingBox from "oxalis/model/bucket_data_handling/bounding_box"; import { - CAMERA_POSITIONS, - type RenderAnimationOptions, - MOVIE_RESOLUTIONS, type APIDataLayer, APIJobType, type APISegmentationLayer, + CAMERA_POSITIONS, + MOVIE_RESOLUTIONS, + type RenderAnimationOptions, } from "types/api_flow_types"; -import { InfoCircleOutlined } from "@ant-design/icons"; -import { PricingEnforcedSpan } from "components/pricing_enforcers"; -import { - PricingPlanEnum, - isFeatureAllowedByPricingPlan, -} from "admin/organization/pricing_plan_utils"; -import type { Vector3 } from "oxalis/constants"; -import BoundingBox from "oxalis/model/bucket_data_handling/bounding_box"; import { BoundingBoxSelection } from "./starting_job_modals"; -import { LayerSelection } from "components/layer_selection"; -import { getAdditionalCoordinatesAsString } from "oxalis/model/accessors/flycam_accessor"; type Props = { isOpen: boolean; diff --git a/frontend/javascripts/oxalis/view/action-bar/dataset_position_view.tsx b/frontend/javascripts/oxalis/view/action-bar/dataset_position_view.tsx index d449c2c8ad1..69049585aca 100644 --- a/frontend/javascripts/oxalis/view/action-bar/dataset_position_view.tsx +++ b/frontend/javascripts/oxalis/view/action-bar/dataset_position_view.tsx @@ -1,23 +1,23 @@ -import { Space } from "antd"; import { PushpinOutlined, ReloadOutlined } from "@ant-design/icons"; -import { connect } from "react-redux"; -import type React from "react"; -import { PureComponent } from "react"; -import type { APIDataset } from "types/api_flow_types"; +import { Space } from "antd"; +import FastTooltip from "components/fast_tooltip"; import { V3 } from "libs/mjs"; +import Toast from "libs/toast"; import { Vector3Input } from "libs/vector_input"; +import message from "messages"; +import type { Vector3, ViewMode } from "oxalis/constants"; +import constants from "oxalis/constants"; +import { getDatasetExtentInVoxel } from "oxalis/model/accessors/dataset_accessor"; import { getPosition, getRotation } from "oxalis/model/accessors/flycam_accessor"; import { setPositionAction, setRotationAction } from "oxalis/model/actions/flycam_actions"; -import { getDatasetExtentInVoxel } from "oxalis/model/accessors/dataset_accessor"; -import ButtonComponent from "oxalis/view/components/button_component"; -import type { OxalisState, Flycam, Task } from "oxalis/store"; +import type { Flycam, OxalisState, Task } from "oxalis/store"; import Store from "oxalis/store"; -import Toast from "libs/toast"; -import type { ViewMode, Vector3 } from "oxalis/constants"; -import constants from "oxalis/constants"; -import message from "messages"; import { ShareButton } from "oxalis/view/action-bar/share_modal_view"; -import FastTooltip from "components/fast_tooltip"; +import ButtonComponent from "oxalis/view/components/button_component"; +import type React from "react"; +import { PureComponent } from "react"; +import { connect } from "react-redux"; +import type { APIDataset } from "types/api_flow_types"; type Props = { flycam: Flycam; diff --git a/frontend/javascripts/oxalis/view/action-bar/download_modal_view.tsx b/frontend/javascripts/oxalis/view/action-bar/download_modal_view.tsx index 4e0713d595d..74a18309e13 100644 --- a/frontend/javascripts/oxalis/view/action-bar/download_modal_view.tsx +++ b/frontend/javascripts/oxalis/view/action-bar/download_modal_view.tsx @@ -1,64 +1,64 @@ +import { CopyOutlined } from "@ant-design/icons"; import { + doWithToken, + downloadAnnotation, + downloadWithFilename, + getAuthToken, + startExportTiffJob, +} from "admin/admin_rest_api"; +import { useStartAndPollJob } from "admin/job/job_hooks"; +import { + Alert, + Button, + Checkbox, + Col, Divider, Modal, - Checkbox, + Radio, Row, - Col, Tabs, - Typography, - Button, - Radio, - Alert, - Tooltip, type TabsProps, + Tooltip, + Typography, } from "antd"; -import { CopyOutlined } from "@ant-design/icons"; -import type React from "react"; -import { useState } from "react"; +import { LayerSelection } from "components/layer_selection"; +import features from "features"; +import { formatCountToDataAmountUnit, formatScale } from "libs/format_utils"; import { makeComponentLazy, useFetch } from "libs/react_helpers"; -import { - APIJobType, - type VoxelSize, - type AdditionalAxis, - type APIDataLayer, - type APIDataset, -} from "types/api_flow_types"; import Toast from "libs/toast"; +import { + computeArrayFromBoundingBox, + computeBoundingBoxFromBoundingBoxObject, + computeShapeFromBoundingBox, +} from "libs/utils"; import messages from "messages"; -import { Model } from "oxalis/singletons"; -import features from "features"; +import type { BoundingBoxType, Vector3 } from "oxalis/constants"; import { - doWithToken, - downloadAnnotation, - downloadWithFilename, - getAuthToken, - startExportTiffJob, -} from "admin/admin_rest_api"; -import { BoundingBoxSelection, MagSlider } from "oxalis/view/action-bar/starting_job_modals"; + getByteCountFromLayer, + getDataLayers, + getLayerByName, + getMagInfo, +} from "oxalis/model/accessors/dataset_accessor"; +import { getAdditionalCoordinatesAsString } from "oxalis/model/accessors/flycam_accessor"; import { getUserBoundingBoxesFromState } from "oxalis/model/accessors/tracing_accessor"; import { getReadableNameOfVolumeLayer, getVolumeTracingById, hasVolumeTracings, } from "oxalis/model/accessors/volumetracing_accessor"; -import { - getByteCountFromLayer, - getDataLayers, - getLayerByName, - getMagInfo, -} from "oxalis/model/accessors/dataset_accessor"; -import { useSelector } from "react-redux"; +import { Model } from "oxalis/singletons"; import type { HybridTracing, OxalisState, UserBoundingBox } from "oxalis/store"; +import { BoundingBoxSelection, MagSlider } from "oxalis/view/action-bar/starting_job_modals"; +import type React from "react"; +import { useState } from "react"; +import { useSelector } from "react-redux"; import { - computeArrayFromBoundingBox, - computeBoundingBoxFromBoundingBoxObject, - computeShapeFromBoundingBox, -} from "libs/utils"; -import { formatCountToDataAmountUnit, formatScale } from "libs/format_utils"; -import type { BoundingBoxType, Vector3 } from "oxalis/constants"; -import { useStartAndPollJob } from "admin/job/job_hooks"; -import { LayerSelection } from "components/layer_selection"; -import { getAdditionalCoordinatesAsString } from "oxalis/model/accessors/flycam_accessor"; + type APIDataLayer, + type APIDataset, + APIJobType, + type AdditionalAxis, + type VoxelSize, +} from "types/api_flow_types"; const { Paragraph, Text } = Typography; type TabKeys = "download" | "export" | "python"; diff --git a/frontend/javascripts/oxalis/view/action-bar/merge_modal_view.tsx b/frontend/javascripts/oxalis/view/action-bar/merge_modal_view.tsx index 9f3f5f52d9d..0e16b229070 100644 --- a/frontend/javascripts/oxalis/view/action-bar/merge_modal_view.tsx +++ b/frontend/javascripts/oxalis/view/action-bar/merge_modal_view.tsx @@ -1,28 +1,28 @@ -import { Alert, Modal, Button, Select, Form, Spin, Tooltip } from "antd"; -import { connect } from "react-redux"; -import type React from "react"; -import { PureComponent } from "react"; -import type { Dispatch } from "redux"; -import { type APIAnnotation, APIAnnotationTypeEnum } from "types/api_flow_types"; -import { addTreesAndGroupsAction } from "oxalis/model/actions/skeletontracing_actions"; -import { getSkeletonDescriptor } from "oxalis/model/accessors/skeletontracing_accessor"; -import { createMutableTreeMapFromTreeArray } from "oxalis/model/reducers/skeletontracing_reducer_helpers"; import { - getAnnotationInformation, getAnnotationCompoundInformation, + getAnnotationInformation, getTracingForAnnotationType, } from "admin/admin_rest_api"; -import { location } from "libs/window"; -import InputComponent from "oxalis/view/components/input_component"; +import { Alert, Button, Form, Modal, Select, Spin, Tooltip } from "antd"; +import { makeComponentLazy } from "libs/react_helpers"; import Request from "libs/request"; -import Constants from "oxalis/constants"; -import type { OxalisState, MutableTreeMap, TreeGroup } from "oxalis/store"; -import Store from "oxalis/store"; import Toast from "libs/toast"; import * as Utils from "libs/utils"; -import { api } from "oxalis/singletons"; +import { location } from "libs/window"; import messages from "messages"; -import { makeComponentLazy } from "libs/react_helpers"; +import Constants from "oxalis/constants"; +import { getSkeletonDescriptor } from "oxalis/model/accessors/skeletontracing_accessor"; +import { addTreesAndGroupsAction } from "oxalis/model/actions/skeletontracing_actions"; +import { createMutableTreeMapFromTreeArray } from "oxalis/model/reducers/skeletontracing_reducer_helpers"; +import { api } from "oxalis/singletons"; +import type { MutableTreeMap, OxalisState, TreeGroup } from "oxalis/store"; +import Store from "oxalis/store"; +import InputComponent from "oxalis/view/components/input_component"; +import type React from "react"; +import { PureComponent } from "react"; +import { connect } from "react-redux"; +import type { Dispatch } from "redux"; +import { type APIAnnotation, APIAnnotationTypeEnum } from "types/api_flow_types"; type ProjectInfo = { id: string; label: string; diff --git a/frontend/javascripts/oxalis/view/action-bar/private_links_view.tsx b/frontend/javascripts/oxalis/view/action-bar/private_links_view.tsx index bed6e40ac78..a40e754721f 100644 --- a/frontend/javascripts/oxalis/view/action-bar/private_links_view.tsx +++ b/frontend/javascripts/oxalis/view/action-bar/private_links_view.tsx @@ -1,17 +1,24 @@ +import { + CopyOutlined, + DeleteOutlined, + DownOutlined, + EditOutlined, + InfoCircleOutlined, + PlusOutlined, +} from "@ant-design/icons"; +import { + useIsFetching, + useIsMutating, + useMutation, + useQuery, + useQueryClient, +} from "@tanstack/react-query"; import { createPrivateLink, deletePrivateLink, getPrivateLinksByAnnotation, updatePrivateLink, } from "admin/admin_rest_api"; -import { - useQuery, - useMutation, - useQueryClient, - useIsFetching, - useIsMutating, -} from "@tanstack/react-query"; -import Toast from "libs/toast"; import { Button, DatePicker, @@ -26,24 +33,17 @@ import { Table, Tooltip, } from "antd"; -import { - CopyOutlined, - DeleteOutlined, - DownOutlined, - EditOutlined, - InfoCircleOutlined, - PlusOutlined, -} from "@ant-design/icons"; -import type { ZarrPrivateLink } from "types/api_flow_types"; +import type { ColumnsType } from "antd/lib/table"; import { AsyncButton, AsyncIconButton } from "components/async_clickables"; -import dayjs from "dayjs"; import FormattedDate from "components/formatted_date"; -import type { ColumnsType } from "antd/lib/table"; +import dayjs from "dayjs"; import { makeComponentLazy } from "libs/react_helpers"; -import type { OxalisState } from "oxalis/store"; -import { useSelector } from "react-redux"; +import Toast from "libs/toast"; import { getDataLayers } from "oxalis/model/accessors/dataset_accessor"; import { getReadableNameByVolumeTracingId } from "oxalis/model/accessors/volumetracing_accessor"; +import type { OxalisState } from "oxalis/store"; +import { useSelector } from "react-redux"; +import type { ZarrPrivateLink } from "types/api_flow_types"; // TODO Remove explicit (error) type declaration when updating to tanstack/query >= 5 // https://github.com/TanStack/query/pull/4706 diff --git a/frontend/javascripts/oxalis/view/action-bar/quick_select_settings.tsx b/frontend/javascripts/oxalis/view/action-bar/quick_select_settings.tsx index 97187d8ca9f..dcf70e2b2e4 100644 --- a/frontend/javascripts/oxalis/view/action-bar/quick_select_settings.tsx +++ b/frontend/javascripts/oxalis/view/action-bar/quick_select_settings.tsx @@ -1,20 +1,20 @@ +import { QuestionCircleOutlined } from "@ant-design/icons"; +import { Radio, type RadioChangeEvent } from "antd"; +import FastTooltip from "components/fast_tooltip"; +import features from "features"; +import Shortcut from "libs/shortcut_component"; +import defaultState from "oxalis/default_state"; +import { updateUserSettingAction } from "oxalis/model/actions/settings_actions"; +import { showQuickSelectSettingsAction } from "oxalis/model/actions/ui_actions"; import { cancelQuickSelectAction, confirmQuickSelectAction, fineTuneQuickSelectAction, } from "oxalis/model/actions/volumetracing_actions"; -import { updateUserSettingAction } from "oxalis/model/actions/settings_actions"; -import { useDispatch, useSelector } from "react-redux"; import type { OxalisState } from "oxalis/store"; -import defaultState from "oxalis/default_state"; -import Shortcut from "libs/shortcut_component"; -import { Radio, type RadioChangeEvent } from "antd"; -import { NumberSliderSetting, SwitchSetting } from "../components/setting_input_views"; +import { useDispatch, useSelector } from "react-redux"; import ButtonComponent from "../components/button_component"; -import { showQuickSelectSettingsAction } from "oxalis/model/actions/ui_actions"; -import features from "features"; -import FastTooltip from "components/fast_tooltip"; -import { QuestionCircleOutlined } from "@ant-design/icons"; +import { NumberSliderSetting, SwitchSetting } from "../components/setting_input_views"; // The maximum depth of 16 also needs to be adapted in the back-end // (at the time of writing, in segmentAnythingMask in DatasetController.scala). diff --git a/frontend/javascripts/oxalis/view/action-bar/save_button.tsx b/frontend/javascripts/oxalis/view/action-bar/save_button.tsx index e577c802e94..6c107a71c2e 100644 --- a/frontend/javascripts/oxalis/view/action-bar/save_button.tsx +++ b/frontend/javascripts/oxalis/view/action-bar/save_button.tsx @@ -1,23 +1,23 @@ -import { connect } from "react-redux"; -import React from "react"; -import _ from "lodash"; -import Store, { type SaveState } from "oxalis/store"; -import type { OxalisState, IsBusyInfo } from "oxalis/store"; -import { isBusy } from "oxalis/model/accessors/save_accessor"; -import ButtonComponent from "oxalis/view/components/button_component"; -import { Model } from "oxalis/singletons"; -import window from "libs/window"; import { CheckOutlined, ExclamationCircleOutlined, HourglassOutlined, LoadingOutlined, } from "@ant-design/icons"; +import { Tooltip } from "antd"; +import FastTooltip from "components/fast_tooltip"; import ErrorHandling from "libs/error_handling"; import * as Utils from "libs/utils"; -import FastTooltip from "components/fast_tooltip"; -import { Tooltip } from "antd"; +import window from "libs/window"; +import _ from "lodash"; import { reuseInstanceOnEquality } from "oxalis/model/accessors/accessor_helpers"; +import { isBusy } from "oxalis/model/accessors/save_accessor"; +import { Model } from "oxalis/singletons"; +import Store, { type SaveState } from "oxalis/store"; +import type { IsBusyInfo, OxalisState } from "oxalis/store"; +import ButtonComponent from "oxalis/view/components/button_component"; +import React from "react"; +import { connect } from "react-redux"; type OwnProps = { onClick: (arg0: React.MouseEvent) => Promise; diff --git a/frontend/javascripts/oxalis/view/action-bar/share_modal_view.tsx b/frontend/javascripts/oxalis/view/action-bar/share_modal_view.tsx index d2c7f16d8bf..bea013e3e48 100644 --- a/frontend/javascripts/oxalis/view/action-bar/share_modal_view.tsx +++ b/frontend/javascripts/oxalis/view/action-bar/share_modal_view.tsx @@ -1,55 +1,55 @@ -import { - Alert, - Divider, - Radio, - Modal, - Input, - Button, - Row, - Col, - type RadioChangeEvent, - Tooltip, - Space, -} from "antd"; import { CompressOutlined, CopyOutlined, ShareAltOutlined } from "@ant-design/icons"; -import { useSelector } from "react-redux"; -import type React from "react"; -import { useState, useEffect } from "react"; -import type { - APIDataset, - APIAnnotationVisibility, - APIAnnotationType, - APITeam, -} from "types/api_flow_types"; import { + createShortLink, + editAnnotation, getDatasetSharingToken, + getSharingTokenFromUrlParameters, getTeamsForSharedAnnotation, - updateTeamsForSharedAnnotation, - editAnnotation, sendAnalyticsEvent, setOthersMayEditForAnnotation, - getSharingTokenFromUrlParameters, - createShortLink, + updateTeamsForSharedAnnotation, } from "admin/admin_rest_api"; +import { PricingPlanEnum } from "admin/organization/pricing_plan_utils"; +import { + Alert, + Button, + Col, + Divider, + Input, + Modal, + Radio, + type RadioChangeEvent, + Row, + Space, + Tooltip, +} from "antd"; +import { AsyncButton } from "components/async_clickables"; +import { PricingEnforcedBlur } from "components/pricing_enforcers"; import TeamSelectionComponent from "dashboard/dataset/team_selection_component"; +import { makeComponentLazy } from "libs/react_helpers"; import Toast from "libs/toast"; import { location } from "libs/window"; import _ from "lodash"; import messages from "messages"; -import Store, { type OxalisState } from "oxalis/store"; +import { ControlModeEnum } from "oxalis/constants"; import UrlManager from "oxalis/controller/url_manager"; +import { mayEditAnnotationProperties } from "oxalis/model/accessors/annotation_accessor"; +import { formatUserName } from "oxalis/model/accessors/user_accessor"; import { setAnnotationVisibilityAction, setOthersMayEditForAnnotationAction, } from "oxalis/model/actions/annotation_actions"; import { setShareModalVisibilityAction } from "oxalis/model/actions/ui_actions"; -import { ControlModeEnum } from "oxalis/constants"; -import { makeComponentLazy } from "libs/react_helpers"; -import { AsyncButton } from "components/async_clickables"; -import { PricingEnforcedBlur } from "components/pricing_enforcers"; -import { PricingPlanEnum } from "admin/organization/pricing_plan_utils"; -import { mayEditAnnotationProperties } from "oxalis/model/accessors/annotation_accessor"; -import { formatUserName } from "oxalis/model/accessors/user_accessor"; +import Store, { type OxalisState } from "oxalis/store"; +import type React from "react"; +import { useEffect, useState } from "react"; +import { useSelector } from "react-redux"; +import type { + APIAnnotationType, + APIAnnotationVisibility, + APIDataset, + APITeam, +} from "types/api_flow_types"; const RadioGroup = Radio.Group; const sharingActiveNode = true; diff --git a/frontend/javascripts/oxalis/view/action-bar/share_view_dataset_modal_view.tsx b/frontend/javascripts/oxalis/view/action-bar/share_view_dataset_modal_view.tsx index 4b6af0c9ffe..2291b9c99d5 100644 --- a/frontend/javascripts/oxalis/view/action-bar/share_view_dataset_modal_view.tsx +++ b/frontend/javascripts/oxalis/view/action-bar/share_view_dataset_modal_view.tsx @@ -1,11 +1,11 @@ import { CopyOutlined } from "@ant-design/icons"; -import { Modal, Input, Button, Row, Col, Dropdown, Space } from "antd"; -import { useSelector } from "react-redux"; +import { Button, Col, Dropdown, Input, Modal, Row, Space } from "antd"; import { makeComponentLazy } from "libs/react_helpers"; import messages from "messages"; import type { OxalisState } from "oxalis/store"; -import { useDatasetSharingToken, getUrl, CopyableSharingLink } from "./share_modal_view"; +import { useSelector } from "react-redux"; import { useZarrLinkMenu } from "./private_links_view"; +import { CopyableSharingLink, getUrl, useDatasetSharingToken } from "./share_modal_view"; const sharingActiveNode = false; diff --git a/frontend/javascripts/oxalis/view/action-bar/starting_job_modals.tsx b/frontend/javascripts/oxalis/view/action-bar/starting_job_modals.tsx index 3fa2fdb69fe..6bccdeb2029 100644 --- a/frontend/javascripts/oxalis/view/action-bar/starting_job_modals.tsx +++ b/frontend/javascripts/oxalis/view/action-bar/starting_job_modals.tsx @@ -1,64 +1,64 @@ -import React, { useState } from "react"; -import type { APIJob, APIDataLayer } from "types/api_flow_types"; +import { InfoCircleOutlined } from "@ant-design/icons"; import { - Modal, - Select, + getAiModels, + runInferenceJob, + startAlignSectionsJob, + startMaterializingVolumeAnnotationJob, + startMitochondriaInferralJob, + startNeuronInferralJob, + startNucleiInferralJob, +} from "admin/admin_rest_api"; +import { DatasetNameFormItem } from "admin/dataset/dataset_components"; +import { + Alert, Button, + Card, + Checkbox, Form, + type FormInstance, + Modal, + Radio, Row, + Select, Space, - Radio, - Card, - Tooltip, - Alert, - Tabs, Switch, - type FormInstance, - Checkbox, + Tabs, + Tooltip, } from "antd"; -import { - startNucleiInferralJob, - startMaterializingVolumeAnnotationJob, - startNeuronInferralJob, - startMitochondriaInferralJob, - runInferenceJob, - startAlignSectionsJob, - getAiModels, -} from "admin/admin_rest_api"; -import { useDispatch, useSelector } from "react-redux"; -import { DatasetNameFormItem } from "admin/dataset/dataset_components"; -import { getColorLayers, getSegmentationLayers } from "oxalis/model/accessors/dataset_accessor"; -import { - getActiveSegmentationTracingLayer, - getReadableNameOfVolumeLayer, -} from "oxalis/model/accessors/volumetracing_accessor"; -import { getUserBoundingBoxesFromState } from "oxalis/model/accessors/tracing_accessor"; +import { LayerSelectionFormItem } from "components/layer_selection"; +import { Slider } from "components/slider"; +import features from "features"; +import { V3 } from "libs/mjs"; +import { useGuardedFetch } from "libs/react_helpers"; import Toast from "libs/toast"; -import type { OxalisState, UserBoundingBox } from "oxalis/store"; -import { ControlModeEnum, Unicode, type Vector3 } from "oxalis/constants"; -import { Model, Store } from "oxalis/singletons"; import { clamp, computeArrayFromBoundingBox, computeBoundingBoxFromBoundingBoxObject, rgbToHex, } from "libs/utils"; -import { getBaseSegmentationName } from "oxalis/view/right-border-tabs/segments_tab/segments_view_helper"; -import { V3 } from "libs/mjs"; -import type { MagInfo } from "oxalis/model/helpers/mag_info"; -import { isBoundingBoxExportable } from "./download_modal_view"; -import features from "features"; +import _ from "lodash"; +import { ControlModeEnum, Unicode, type Vector3 } from "oxalis/constants"; +import { getColorLayers, getSegmentationLayers } from "oxalis/model/accessors/dataset_accessor"; +import { getUserBoundingBoxesFromState } from "oxalis/model/accessors/tracing_accessor"; +import { + getActiveSegmentationTracingLayer, + getReadableNameOfVolumeLayer, +} from "oxalis/model/accessors/volumetracing_accessor"; import { setAIJobModalStateAction } from "oxalis/model/actions/ui_actions"; -import { InfoCircleOutlined } from "@ant-design/icons"; +import type { MagInfo } from "oxalis/model/helpers/mag_info"; +import { Model, Store } from "oxalis/singletons"; +import type { OxalisState, UserBoundingBox } from "oxalis/store"; +import { getBaseSegmentationName } from "oxalis/view/right-border-tabs/segments_tab/segments_view_helper"; +import React, { useState } from "react"; +import { useDispatch, useSelector } from "react-redux"; +import type { APIDataLayer, APIJob } from "types/api_flow_types"; import { CollapsibleWorkflowYamlEditor, TrainAiModelFromAnnotationTab, } from "../jobs/train_ai_model"; -import { LayerSelectionFormItem } from "components/layer_selection"; -import { useGuardedFetch } from "libs/react_helpers"; -import _ from "lodash"; import DEFAULT_PREDICT_WORKFLOW from "./default-predict-workflow-template"; -import { Slider } from "components/slider"; +import { isBoundingBoxExportable } from "./download_modal_view"; const { ThinSpace } = Unicode; diff --git a/frontend/javascripts/oxalis/view/action-bar/toolbar_view.tsx b/frontend/javascripts/oxalis/view/action-bar/toolbar_view.tsx index 000fe1f5ca3..22c05fe5115 100644 --- a/frontend/javascripts/oxalis/view/action-bar/toolbar_view.tsx +++ b/frontend/javascripts/oxalis/view/action-bar/toolbar_view.tsx @@ -1,16 +1,3 @@ -import { - Radio, - Badge, - Space, - Popover, - type RadioChangeEvent, - Dropdown, - type MenuProps, - Col, - Row, - Divider, - Popconfirm, -} from "antd"; import { ClearOutlined, DownOutlined, @@ -18,22 +5,44 @@ import { InfoCircleOutlined, SettingOutlined, } from "@ant-design/icons"; -import { useSelector, useDispatch } from "react-redux"; +import { + Badge, + Col, + Divider, + Dropdown, + type MenuProps, + Popconfirm, + Popover, + Radio, + type RadioChangeEvent, + Row, + Space, +} from "antd"; import React, { useEffect, useCallback, useState } from "react"; +import { useDispatch, useSelector } from "react-redux"; -import { showToastWarningForLargestSegmentIdMissing } from "oxalis/view/largest_segment_id_modal"; -import { LogSliderSetting } from "oxalis/view/components/setting_input_views"; -import { addUserBoundingBoxAction } from "oxalis/model/actions/annotation_actions"; +import { useKeyPress, usePrevious } from "libs/react_hooks"; +import { document } from "libs/window"; import { - interpolateSegmentationLayerAction, - createCellAction, - setMousePositionAction, -} from "oxalis/model/actions/volumetracing_actions"; + type AnnotationTool, + AnnotationToolEnum, + FillModeEnum, + type InterpolationMode, + InterpolationModeEnum, + MappingStatusEnum, + MeasurementTools, + type OverwriteMode, + OverwriteModeEnum, + ToolsWithInterpolationCapabilities, + ToolsWithOverwriteCapabilities, + Unicode, + VolumeTools, +} from "oxalis/constants"; +import { getActiveTree } from "oxalis/model/accessors/skeletontracing_accessor"; import { - createTreeAction, - setMergerModeEnabledAction, -} from "oxalis/model/actions/skeletontracing_actions"; -import { document } from "libs/window"; + adaptActiveToolToShortcuts, + getDisabledInfoForTools, +} from "oxalis/model/accessors/tool_accessor"; import { getActiveSegmentationTracing, getMappingInfoForVolumeTracing, @@ -43,49 +52,40 @@ import { hasAgglomerateMapping, hasEditableMapping, } from "oxalis/model/accessors/volumetracing_accessor"; -import { getActiveTree } from "oxalis/model/accessors/skeletontracing_accessor"; +import { addUserBoundingBoxAction } from "oxalis/model/actions/annotation_actions"; +import { updateUserSettingAction } from "oxalis/model/actions/settings_actions"; import { - getDisabledInfoForTools, - adaptActiveToolToShortcuts, -} from "oxalis/model/accessors/tool_accessor"; + createTreeAction, + setMergerModeEnabledAction, +} from "oxalis/model/actions/skeletontracing_actions"; import { setToolAction, showQuickSelectSettingsAction } from "oxalis/model/actions/ui_actions"; -import { updateUserSettingAction } from "oxalis/model/actions/settings_actions"; -import { usePrevious, useKeyPress } from "libs/react_hooks"; -import { userSettings } from "types/schemas/user_settings.schema"; -import ButtonComponent, { ToggleButton } from "oxalis/view/components/button_component"; -import { MaterializeVolumeAnnotationModal } from "oxalis/view/action-bar/starting_job_modals"; import { - ToolsWithOverwriteCapabilities, - AnnotationToolEnum, - OverwriteModeEnum, - FillModeEnum, - VolumeTools, - MappingStatusEnum, - type AnnotationTool, - type OverwriteMode, - ToolsWithInterpolationCapabilities, - InterpolationModeEnum, - type InterpolationMode, - Unicode, - MeasurementTools, -} from "oxalis/constants"; + createCellAction, + interpolateSegmentationLayerAction, + setMousePositionAction, +} from "oxalis/model/actions/volumetracing_actions"; import { Model } from "oxalis/singletons"; import Store, { type BrushPresets, type OxalisState } from "oxalis/store"; +import { MaterializeVolumeAnnotationModal } from "oxalis/view/action-bar/starting_job_modals"; +import ButtonComponent, { ToggleButton } from "oxalis/view/components/button_component"; +import { LogSliderSetting } from "oxalis/view/components/setting_input_views"; +import { showToastWarningForLargestSegmentIdMissing } from "oxalis/view/largest_segment_id_modal"; +import { userSettings } from "types/schemas/user_settings.schema"; +import { updateNovelUserExperienceInfos } from "admin/admin_rest_api"; +import FastTooltip from "components/fast_tooltip"; import features from "features"; +import { useIsActiveUserAdminOrManager } from "libs/react_helpers"; +import defaultState from "oxalis/default_state"; +import { getViewportExtents } from "oxalis/model/accessors/view_mode_accessor"; +import { ensureLayerMappingsAreLoadedAction } from "oxalis/model/actions/dataset_actions"; +import { clearProofreadingByProducts } from "oxalis/model/actions/proofread_actions"; +import { setActiveUserAction } from "oxalis/model/actions/user_actions"; import { getInterpolationInfo } from "oxalis/model/sagas/volume/volume_interpolation_saga"; import { rgbaToCSS } from "oxalis/shaders/utils.glsl"; -import { clearProofreadingByProducts } from "oxalis/model/actions/proofread_actions"; -import { QuickSelectControls } from "./quick_select_settings"; import type { MenuInfo } from "rc-menu/lib/interface"; -import { getViewportExtents } from "oxalis/model/accessors/view_mode_accessor"; -import { ensureLayerMappingsAreLoadedAction } from "oxalis/model/actions/dataset_actions"; import { APIJobType } from "types/api_flow_types"; -import { useIsActiveUserAdminOrManager } from "libs/react_helpers"; -import { updateNovelUserExperienceInfos } from "admin/admin_rest_api"; -import { setActiveUserAction } from "oxalis/model/actions/user_actions"; -import FastTooltip from "components/fast_tooltip"; -import defaultState from "oxalis/default_state"; +import { QuickSelectControls } from "./quick_select_settings"; const NARROW_BUTTON_STYLE = { paddingLeft: 10, diff --git a/frontend/javascripts/oxalis/view/action-bar/tracing_actions_view.tsx b/frontend/javascripts/oxalis/view/action-bar/tracing_actions_view.tsx index ef0fcf610f0..e93029c0ef4 100644 --- a/frontend/javascripts/oxalis/view/action-bar/tracing_actions_view.tsx +++ b/frontend/javascripts/oxalis/view/action-bar/tracing_actions_view.tsx @@ -1,84 +1,84 @@ -import { Button, Dropdown, Modal, Space, Tooltip } from "antd"; import { - HistoryOutlined, CheckCircleOutlined, CheckOutlined, CodeSandboxOutlined, CopyOutlined, DeleteOutlined, DisconnectOutlined, - DownloadOutlined, DownOutlined, + DownloadOutlined, FileAddOutlined, FolderOpenOutlined, + HistoryOutlined, InfoCircleOutlined, LayoutOutlined, LinkOutlined, + LockOutlined, PlusOutlined, RollbackOutlined, SaveOutlined, SettingOutlined, ShareAltOutlined, StopOutlined, + UnlockOutlined, VerticalLeftOutlined, VerticalRightOutlined, - UnlockOutlined, - LockOutlined, } from "@ant-design/icons"; -import { connect } from "react-redux"; -import * as React from "react"; -import type { APIAnnotationType, APIUser, APIUserBase } from "types/api_flow_types"; -import { APIAnnotationTypeEnum, TracingTypeEnum } from "types/api_flow_types"; -import { AsyncButton, type AsyncButtonProps } from "components/async_clickables"; -import type { LayoutKeys } from "oxalis/view/layouting/default_layout_configs"; -import { mapLayoutKeysToLanguage } from "oxalis/view/layouting/default_layout_configs"; import { + createExplorational, duplicateAnnotation, + editLockedState, finishAnnotation, reOpenAnnotation, - createExplorational, - editLockedState, } from "admin/admin_rest_api"; +import { withAuthentication } from "admin/auth/authentication_modal"; +import { Button, Dropdown, Modal, Space, Tooltip } from "antd"; +import type { ItemType, SubMenuType } from "antd/es/menu/interface"; +import { AsyncButton, type AsyncButtonProps } from "components/async_clickables"; +import features from "features"; +import Toast from "libs/toast"; +import UserLocalStorage from "libs/user_local_storage"; +import * as Utils from "libs/utils"; import { location } from "libs/window"; +import messages from "messages"; +import Constants, { ControlModeEnum } from "oxalis/constants"; +import UrlManager from "oxalis/controller/url_manager"; +import { enforceSkeletonTracing } from "oxalis/model/accessors/skeletontracing_accessor"; +import { getTracingType } from "oxalis/model/accessors/tracing_accessor"; +import { + disableSavingAction, + dispatchRedoAsync, + dispatchUndoAsync, +} from "oxalis/model/actions/save_actions"; +import { setTracingAction } from "oxalis/model/actions/skeletontracing_actions"; import { - setVersionRestoreVisibilityAction, setDownloadModalVisibilityAction, - setShareModalVisibilityAction, setRenderAnimationModalVisibilityAction, + setShareModalVisibilityAction, + setVersionRestoreVisibilityAction, } from "oxalis/model/actions/ui_actions"; -import { setTracingAction } from "oxalis/model/actions/skeletontracing_actions"; -import { enforceSkeletonTracing } from "oxalis/model/accessors/skeletontracing_accessor"; +import { Model } from "oxalis/singletons"; +import { api } from "oxalis/singletons"; import type { BusyBlockingInfo, OxalisState, RestrictionsAndSettings, Task } from "oxalis/store"; import Store from "oxalis/store"; -import { - dispatchUndoAsync, - dispatchRedoAsync, - disableSavingAction, -} from "oxalis/model/actions/save_actions"; -import ButtonComponent from "oxalis/view/components/button_component"; -import Constants, { ControlModeEnum } from "oxalis/constants"; +import DownloadModalView from "oxalis/view/action-bar/download_modal_view"; import MergeModalView from "oxalis/view/action-bar/merge_modal_view"; -import { Model } from "oxalis/singletons"; import SaveButton from "oxalis/view/action-bar/save_button"; import ShareModalView from "oxalis/view/action-bar/share_modal_view"; -import DownloadModalView from "oxalis/view/action-bar/download_modal_view"; import UserScriptsModalView from "oxalis/view/action-bar/user_scripts_modal_view"; -import { api } from "oxalis/singletons"; -import messages from "messages"; import { - screenshotMenuItem, renderAnimationMenuItem, + screenshotMenuItem, } from "oxalis/view/action-bar/view_dataset_actions_view"; -import * as Utils from "libs/utils"; -import UserLocalStorage from "libs/user_local_storage"; -import features from "features"; -import { getTracingType } from "oxalis/model/accessors/tracing_accessor"; -import Toast from "libs/toast"; -import UrlManager from "oxalis/controller/url_manager"; -import { withAuthentication } from "admin/auth/authentication_modal"; -import { PrivateLinksModal } from "./private_links_view"; -import type { ItemType, SubMenuType } from "antd/es/menu/interface"; +import ButtonComponent from "oxalis/view/components/button_component"; +import type { LayoutKeys } from "oxalis/view/layouting/default_layout_configs"; +import { mapLayoutKeysToLanguage } from "oxalis/view/layouting/default_layout_configs"; +import * as React from "react"; +import { connect } from "react-redux"; +import type { APIAnnotationType, APIUser, APIUserBase } from "types/api_flow_types"; +import { APIAnnotationTypeEnum, TracingTypeEnum } from "types/api_flow_types"; import CreateAnimationModal from "./create_animation_modal"; +import { PrivateLinksModal } from "./private_links_view"; const AsyncButtonWithAuthentication = withAuthentication( AsyncButton, diff --git a/frontend/javascripts/oxalis/view/action-bar/user_scripts_modal_view.tsx b/frontend/javascripts/oxalis/view/action-bar/user_scripts_modal_view.tsx index 27910cdbf73..73f9cb040ee 100644 --- a/frontend/javascripts/oxalis/view/action-bar/user_scripts_modal_view.tsx +++ b/frontend/javascripts/oxalis/view/action-bar/user_scripts_modal_view.tsx @@ -1,13 +1,13 @@ /* eslint-disable no-eval */ -import { Modal, Input, Select, Spin } from "antd"; -import * as React from "react"; -import type { Script } from "oxalis/store"; -import { alert } from "libs/window"; -import { fetchGistContent } from "libs/gist"; +import { Input, Modal, Select, Spin } from "antd"; import { handleGenericError } from "libs/error_handling"; +import { fetchGistContent } from "libs/gist"; +import { makeComponentLazy } from "libs/react_helpers"; import Request from "libs/request"; +import { alert } from "libs/window"; import messages from "messages"; -import { makeComponentLazy } from "libs/react_helpers"; +import type { Script } from "oxalis/store"; +import * as React from "react"; const { TextArea } = Input; diff --git a/frontend/javascripts/oxalis/view/action-bar/view_dataset_actions_view.tsx b/frontend/javascripts/oxalis/view/action-bar/view_dataset_actions_view.tsx index 74723d5c024..439ef88ff1d 100644 --- a/frontend/javascripts/oxalis/view/action-bar/view_dataset_actions_view.tsx +++ b/frontend/javascripts/oxalis/view/action-bar/view_dataset_actions_view.tsx @@ -1,24 +1,24 @@ -import { useSelector } from "react-redux"; -import { Dropdown, type MenuProps } from "antd"; import { - ShareAltOutlined, - DownOutlined, - VideoCameraOutlined, CameraOutlined, + DownOutlined, DownloadOutlined, + ShareAltOutlined, + VideoCameraOutlined, } from "@ant-design/icons"; -import ButtonComponent from "oxalis/view/components/button_component"; -import ShareViewDatasetModalView from "oxalis/view/action-bar/share_view_dataset_modal_view"; -import { downloadScreenshot } from "oxalis/view/rendering_utils"; +import { Dropdown, type MenuProps } from "antd"; +import type { MenuItemType, SubMenuType } from "antd/es/menu/interface"; import { setPythonClientModalVisibilityAction, - setShareModalVisibilityAction, setRenderAnimationModalVisibilityAction, + setShareModalVisibilityAction, } from "oxalis/model/actions/ui_actions"; import Store, { type OxalisState } from "oxalis/store"; -import type { MenuItemType, SubMenuType } from "antd/es/menu/interface"; -import DownloadModalView from "./download_modal_view"; +import ShareViewDatasetModalView from "oxalis/view/action-bar/share_view_dataset_modal_view"; +import ButtonComponent from "oxalis/view/components/button_component"; +import { downloadScreenshot } from "oxalis/view/rendering_utils"; +import { useSelector } from "react-redux"; import CreateAnimationModal from "./create_animation_modal"; +import DownloadModalView from "./download_modal_view"; type Props = { layoutMenu: SubMenuType; diff --git a/frontend/javascripts/oxalis/view/action-bar/view_modes_view.tsx b/frontend/javascripts/oxalis/view/action-bar/view_modes_view.tsx index cb74404fe05..d8cea72cf5f 100644 --- a/frontend/javascripts/oxalis/view/action-bar/view_modes_view.tsx +++ b/frontend/javascripts/oxalis/view/action-bar/view_modes_view.tsx @@ -1,16 +1,16 @@ import { Button, Dropdown, type MenuProps, Space } from "antd"; -import { connect } from "react-redux"; -import type { Dispatch } from "redux"; -import { PureComponent } from "react"; +import * as Utils from "libs/utils"; +import { type ViewMode, ViewModeValues } from "oxalis/constants"; +import constants from "oxalis/constants"; import { - setViewModeAction, setFlightmodeRecordingAction, + setViewModeAction, } from "oxalis/model/actions/settings_actions"; -import type { OxalisState, AllowedMode } from "oxalis/store"; +import type { AllowedMode, OxalisState } from "oxalis/store"; import Store from "oxalis/store"; -import * as Utils from "libs/utils"; -import { type ViewMode, ViewModeValues } from "oxalis/constants"; -import constants from "oxalis/constants"; +import { PureComponent } from "react"; +import { connect } from "react-redux"; +import type { Dispatch } from "redux"; import type { EmptyObject } from "types/globals"; type StateProps = { diff --git a/frontend/javascripts/oxalis/view/action_bar_view.tsx b/frontend/javascripts/oxalis/view/action_bar_view.tsx index ef4a68f6a6b..69942829a66 100644 --- a/frontend/javascripts/oxalis/view/action_bar_view.tsx +++ b/frontend/javascripts/oxalis/view/action_bar_view.tsx @@ -1,45 +1,45 @@ -import { Alert, Popover } from "antd"; -import { connect, useDispatch, useSelector } from "react-redux"; -import * as React from "react"; -import type { APIDataset, APIUser } from "types/api_flow_types"; import { createExplorational } from "admin/admin_rest_api"; -import { - layoutEmitter, - deleteLayout, - getLayoutConfig, - addNewLayout, -} from "oxalis/view/layouting/layout_persistence"; -import AddNewLayoutModal from "oxalis/view/action-bar/add_new_layout_modal"; import { withAuthentication } from "admin/auth/authentication_modal"; -import { type ViewMode, type ControlMode, MappingStatusEnum } from "oxalis/constants"; +import { Alert, Popover } from "antd"; +import { AsyncButton, type AsyncButtonProps } from "components/async_clickables"; +import { isUserAdminOrTeamManager } from "libs/utils"; +import { ArbitraryVectorInput } from "libs/vector_input"; +import { type ControlMode, MappingStatusEnum, type ViewMode } from "oxalis/constants"; import constants, { ControlModeEnum } from "oxalis/constants"; -import DatasetPositionView from "oxalis/view/action-bar/dataset_position_view"; +import { + doesSupportVolumeWithFallback, + getColorLayers, + getMappingInfoForSupportedLayer, + getUnifiedAdditionalCoordinates, + getVisibleSegmentationLayer, + is2dDataset, +} from "oxalis/model/accessors/dataset_accessor"; +import { setAdditionalCoordinatesAction } from "oxalis/model/actions/flycam_actions"; +import { setAIJobModalStateAction } from "oxalis/model/actions/ui_actions"; import type { OxalisState } from "oxalis/store"; import Store from "oxalis/store"; +import AddNewLayoutModal from "oxalis/view/action-bar/add_new_layout_modal"; +import DatasetPositionView from "oxalis/view/action-bar/dataset_position_view"; +import ToolbarView from "oxalis/view/action-bar/toolbar_view"; import TracingActionsView, { getLayoutMenu, type LayoutProps, } from "oxalis/view/action-bar/tracing_actions_view"; import ViewDatasetActionsView from "oxalis/view/action-bar/view_dataset_actions_view"; import ViewModesView from "oxalis/view/action-bar/view_modes_view"; -import ToolbarView from "oxalis/view/action-bar/toolbar_view"; import { - is2dDataset, - doesSupportVolumeWithFallback, - getVisibleSegmentationLayer, - getMappingInfoForSupportedLayer, - getUnifiedAdditionalCoordinates, - getColorLayers, -} from "oxalis/model/accessors/dataset_accessor"; -import { AsyncButton, type AsyncButtonProps } from "components/async_clickables"; -import { setAdditionalCoordinatesAction } from "oxalis/model/actions/flycam_actions"; -import { NumberSliderSetting } from "./components/setting_input_views"; -import { ArbitraryVectorInput } from "libs/vector_input"; + addNewLayout, + deleteLayout, + getLayoutConfig, + layoutEmitter, +} from "oxalis/view/layouting/layout_persistence"; +import * as React from "react"; +import { connect, useDispatch, useSelector } from "react-redux"; +import type { APIDataset, APIUser } from "types/api_flow_types"; import { APIJobType, type AdditionalCoordinate } from "types/api_flow_types"; +import { StartAIJobModal, type StartAIJobModalState } from "./action-bar/starting_job_modals"; import ButtonComponent from "./components/button_component"; -import { setAIJobModalStateAction } from "oxalis/model/actions/ui_actions"; -import { type StartAIJobModalState, StartAIJobModal } from "./action-bar/starting_job_modals"; -import { isUserAdminOrTeamManager } from "libs/utils"; +import { NumberSliderSetting } from "./components/setting_input_views"; const VersionRestoreWarning = ( void; diff --git a/frontend/javascripts/oxalis/view/components/border_toggle_button.tsx b/frontend/javascripts/oxalis/view/components/border_toggle_button.tsx index cbc605938e9..42c114318c8 100644 --- a/frontend/javascripts/oxalis/view/components/border_toggle_button.tsx +++ b/frontend/javascripts/oxalis/view/components/border_toggle_button.tsx @@ -1,9 +1,9 @@ -import * as React from "react"; import { Button } from "antd"; -import { connect } from "react-redux"; -import type { OxalisState, BorderOpenStatus } from "oxalis/store"; -import { V2 } from "libs/mjs"; import FastTooltip from "components/fast_tooltip"; +import { V2 } from "libs/mjs"; +import type { BorderOpenStatus, OxalisState } from "oxalis/store"; +import * as React from "react"; +import { connect } from "react-redux"; type OwnProps = { onClick: () => void; side: "left" | "right"; diff --git a/frontend/javascripts/oxalis/view/components/button_component.tsx b/frontend/javascripts/oxalis/view/components/button_component.tsx index d620dd001b0..1ae3890d9c0 100644 --- a/frontend/javascripts/oxalis/view/components/button_component.tsx +++ b/frontend/javascripts/oxalis/view/components/button_component.tsx @@ -1,7 +1,7 @@ import { Button, type ButtonProps } from "antd"; -import * as React from "react"; -import _ from "lodash"; import FastTooltip, { type FastTooltipPlacement } from "components/fast_tooltip"; +import _ from "lodash"; +import * as React from "react"; type ButtonComponentProps = ButtonProps & { faIcon?: string; diff --git a/frontend/javascripts/oxalis/view/components/categorization_label.tsx b/frontend/javascripts/oxalis/view/components/categorization_label.tsx index a623a5b80b5..97c0df820ae 100644 --- a/frontend/javascripts/oxalis/view/components/categorization_label.tsx +++ b/frontend/javascripts/oxalis/view/components/categorization_label.tsx @@ -1,8 +1,8 @@ import { Tag, Tooltip } from "antd"; -import UserLocalStorage from "libs/user_local_storage"; -import { type MouseEventHandler, useEffect } from "react"; import { stringToColor } from "libs/format_utils"; import { useEffectOnlyOnce } from "libs/react_hooks"; +import UserLocalStorage from "libs/user_local_storage"; +import { type MouseEventHandler, useEffect } from "react"; type LabelProps = { tag: string; kind: string; diff --git a/frontend/javascripts/oxalis/view/components/checkbox_component.tsx b/frontend/javascripts/oxalis/view/components/checkbox_component.tsx index 1cc02fe803a..f945ff421ee 100644 --- a/frontend/javascripts/oxalis/view/components/checkbox_component.tsx +++ b/frontend/javascripts/oxalis/view/components/checkbox_component.tsx @@ -1,6 +1,6 @@ import { Checkbox } from "antd"; -import * as React from "react"; import _ from "lodash"; +import * as React from "react"; type CheckboxComponentProp = { onClick?: (...args: Array) => any; }; diff --git a/frontend/javascripts/oxalis/view/components/editable_text_label.tsx b/frontend/javascripts/oxalis/view/components/editable_text_label.tsx index 3e27aa02ce0..ee4d3985d53 100644 --- a/frontend/javascripts/oxalis/view/components/editable_text_label.tsx +++ b/frontend/javascripts/oxalis/view/components/editable_text_label.tsx @@ -1,11 +1,11 @@ -import { Input, type InputProps } from "antd"; import { CheckOutlined, EditOutlined } from "@ant-design/icons"; -import * as React from "react"; +import { Input, type InputProps } from "antd"; +import FastTooltip from "components/fast_tooltip"; import Markdown from "libs/markdown_adapter"; -import { MarkdownModal } from "oxalis/view/components/markdown_modal"; import Toast from "libs/toast"; +import { MarkdownModal } from "oxalis/view/components/markdown_modal"; +import * as React from "react"; import type { ValidationResult } from "../left-border-tabs/modals/add_volume_layer_modal"; -import FastTooltip from "components/fast_tooltip"; type Rule = { message?: string; diff --git a/frontend/javascripts/oxalis/view/components/input_component.tsx b/frontend/javascripts/oxalis/view/components/input_component.tsx index 6db361a48ce..be9cb1f8a0e 100644 --- a/frontend/javascripts/oxalis/view/components/input_component.tsx +++ b/frontend/javascripts/oxalis/view/components/input_component.tsx @@ -1,7 +1,7 @@ import { Input, type InputProps, type InputRef } from "antd"; -import * as React from "react"; -import _ from "lodash"; import FastTooltip from "components/fast_tooltip"; +import _ from "lodash"; +import * as React from "react"; type InputComponentState = { currentValue: React.InputHTMLAttributes["value"] | bigint; diff --git a/frontend/javascripts/oxalis/view/components/markdown_modal.tsx b/frontend/javascripts/oxalis/view/components/markdown_modal.tsx index 94997418cb0..e4034ac1e80 100644 --- a/frontend/javascripts/oxalis/view/components/markdown_modal.tsx +++ b/frontend/javascripts/oxalis/view/components/markdown_modal.tsx @@ -1,4 +1,4 @@ -import { Alert, Modal, Button, Row, Col, Input } from "antd"; +import { Alert, Button, Col, Input, Modal, Row } from "antd"; import Markdown from "libs/markdown_adapter"; import * as React from "react"; diff --git a/frontend/javascripts/oxalis/view/components/setting_input_views.tsx b/frontend/javascripts/oxalis/view/components/setting_input_views.tsx index 57c6424722e..61b20829b55 100644 --- a/frontend/javascripts/oxalis/view/components/setting_input_views.tsx +++ b/frontend/javascripts/oxalis/view/components/setting_input_views.tsx @@ -1,14 +1,3 @@ -import { - Row, - Col, - InputNumber, - Switch, - Input, - Select, - Popover, - type PopoverProps, - type MenuProps, -} from "antd"; import { BorderInnerOutlined, DeleteOutlined, @@ -18,19 +7,30 @@ import { InfoCircleOutlined, ScanOutlined, } from "@ant-design/icons"; -import * as React from "react"; -import _ from "lodash"; -import type { Vector3, Vector6 } from "oxalis/constants"; +import { + Col, + Input, + InputNumber, + type MenuProps, + Popover, + type PopoverProps, + Row, + Select, + Switch, +} from "antd"; +import FastTooltip from "components/fast_tooltip"; +import { Slider } from "components/slider"; +import Toast from "libs/toast"; import * as Utils from "libs/utils"; +import _ from "lodash"; import messages from "messages"; +import type { Vector3, Vector6 } from "oxalis/constants"; import { getVisibleSegmentationLayer } from "oxalis/model/accessors/dataset_accessor"; -import { connect } from "react-redux"; +import { api } from "oxalis/singletons"; import type { OxalisState } from "oxalis/store"; +import * as React from "react"; +import { connect } from "react-redux"; import type { APISegmentationLayer } from "types/api_flow_types"; -import { api } from "oxalis/singletons"; -import FastTooltip from "components/fast_tooltip"; -import Toast from "libs/toast"; -import { Slider } from "components/slider"; const ROW_GUTTER = 1; diff --git a/frontend/javascripts/oxalis/view/context_menu.tsx b/frontend/javascripts/oxalis/view/context_menu.tsx index 4b9e5a7cd90..1abc5a7ba74 100644 --- a/frontend/javascripts/oxalis/view/context_menu.tsx +++ b/frontend/javascripts/oxalis/view/context_menu.tsx @@ -1,71 +1,65 @@ import { CopyOutlined, PushpinOutlined, ReloadOutlined, WarningOutlined } from "@ant-design/icons"; -import type { Dispatch } from "redux"; +import { getSegmentBoundingBoxes, getSegmentVolumes } from "admin/admin_rest_api"; import { + ConfigProvider, Dropdown, Empty, - notification, - Popover, Input, type MenuProps, Modal, - ConfigProvider, + Popover, + notification, } from "antd"; -import { useSelector } from "react-redux"; -import React, { createContext, type MouseEvent, useContext, useEffect, useState } from "react"; import type { - APIConnectomeFile, - APIDataset, - APIDataLayer, - APIMeshFile, - VoxelSize, -} from "types/api_flow_types"; -import type { - ActiveMappingInfo, - MutableNode, - OxalisState, - SegmentMap, - SkeletonTracing, - Tree, - UserBoundingBox, - VolumeTracing, -} from "oxalis/store"; + ItemType, + MenuItemGroupType, + MenuItemType, + SubMenuType, +} from "antd/es/menu/interface"; +import { AsyncIconButton } from "components/async_clickables"; +import FastTooltip from "components/fast_tooltip"; +import { formatLengthAsVx, formatNumberToLength, formatNumberToVolume } from "libs/format_utils"; +import { V3 } from "libs/mjs"; +import { useFetch } from "libs/react_helpers"; +import Shortcut from "libs/shortcut_component"; +import Toast from "libs/toast"; +import { hexToRgb, rgbToHex, roundTo, truncateStringToLength } from "libs/utils"; +import messages from "messages"; import { + AltOrOptionKey, type AnnotationTool, - type Vector3, - type OrthoView, AnnotationToolEnum, - VolumeTools, - AltOrOptionKey, CtrlOrCmdKey, LongUnitToShortUnitMap, + type OrthoView, type UnitLong, + type Vector3, + VolumeTools, } from "oxalis/constants"; -import { V3 } from "libs/mjs"; import { - loadAdHocMeshAction, - loadPrecomputedMeshAction, -} from "oxalis/model/actions/segmentation_actions"; + loadAgglomerateSkeletonAtPosition, + loadSynapsesOfAgglomerateAtPosition, +} from "oxalis/controller/combinations/segmentation_handlers"; +import { handleCreateNodeFromGlobalPosition } from "oxalis/controller/combinations/skeleton_handlers"; import { - addUserBoundingBoxAction, - deleteUserBoundingBoxAction, - changeUserBoundingBoxAction, - maybeFetchMeshFilesAction, - removeMeshAction, - updateMeshVisibilityAction, - refreshMeshAction, -} from "oxalis/model/actions/annotation_actions"; + getSegmentIdForPosition, + getSegmentIdForPositionAsync, + handleFloodFillFromGlobalPosition, +} from "oxalis/controller/combinations/volume_handlers"; import { - deleteEdgeAction, - mergeTreesAction, - deleteNodeAsUserAction, - setActiveNodeAction, - createTreeAction, - setTreeVisibilityAction, - createBranchPointAction, - deleteBranchpointByIdAction, - addTreesAndGroupsAction, -} from "oxalis/model/actions/skeletontracing_actions"; -import { formatNumberToLength, formatLengthAsVx, formatNumberToVolume } from "libs/format_utils"; + getMagInfo, + getMappingInfo, + getMaybeSegmentIndexAvailability, + getVisibleSegmentationLayer, +} from "oxalis/model/accessors/dataset_accessor"; +import { + getNodeAndTree, + getNodeAndTreeOrNull, + getNodePosition, + isSkeletonLayerTransformed, +} from "oxalis/model/accessors/skeletontracing_accessor"; +import { getDisabledInfoForTools } from "oxalis/model/accessors/tool_accessor"; +import { maybeGetSomeTracing } from "oxalis/model/accessors/tracing_accessor"; import { getActiveCellId, getActiveSegmentationTracing, @@ -75,71 +69,77 @@ import { hasEditableMapping, } from "oxalis/model/accessors/volumetracing_accessor"; import { - getNodeAndTree, - getNodeAndTreeOrNull, - getNodePosition, - isSkeletonLayerTransformed, -} from "oxalis/model/accessors/skeletontracing_accessor"; + addUserBoundingBoxAction, + changeUserBoundingBoxAction, + deleteUserBoundingBoxAction, + maybeFetchMeshFilesAction, + refreshMeshAction, + removeMeshAction, + updateMeshVisibilityAction, +} from "oxalis/model/actions/annotation_actions"; import { - getSegmentIdForPosition, - getSegmentIdForPositionAsync, - handleFloodFillFromGlobalPosition, -} from "oxalis/controller/combinations/volume_handlers"; + ensureLayerMappingsAreLoadedAction, + ensureSegmentIndexIsLoadedAction, +} from "oxalis/model/actions/dataset_actions"; +import { setPositionAction } from "oxalis/model/actions/flycam_actions"; import { - getVisibleSegmentationLayer, - getMappingInfo, - getMagInfo, - getMaybeSegmentIndexAvailability, -} from "oxalis/model/accessors/dataset_accessor"; + cutAgglomerateFromNeighborsAction, + minCutAgglomerateAction, + minCutAgglomerateWithPositionAction, + proofreadMerge, +} from "oxalis/model/actions/proofread_actions"; import { - loadAgglomerateSkeletonAtPosition, - loadSynapsesOfAgglomerateAtPosition, -} from "oxalis/controller/combinations/segmentation_handlers"; -import { isBoundingBoxUsableForMinCut } from "oxalis/model/sagas/min_cut_saga"; + loadAdHocMeshAction, + loadPrecomputedMeshAction, +} from "oxalis/model/actions/segmentation_actions"; import { - getVolumeRequestUrl, - withMappingActivationConfirmation, -} from "oxalis/view/right-border-tabs/segments_tab/segments_view_helper"; -import { maybeGetSomeTracing } from "oxalis/model/accessors/tracing_accessor"; + addTreesAndGroupsAction, + createBranchPointAction, + createTreeAction, + deleteBranchpointByIdAction, + deleteEdgeAction, + deleteNodeAsUserAction, + mergeTreesAction, + setActiveNodeAction, + setTreeVisibilityAction, +} from "oxalis/model/actions/skeletontracing_actions"; +import { hideContextMenuAction, setActiveUserBoundingBoxId } from "oxalis/model/actions/ui_actions"; import { clickSegmentAction, performMinCutAction, setActiveCellAction, } from "oxalis/model/actions/volumetracing_actions"; -import { roundTo, hexToRgb, rgbToHex, truncateStringToLength } from "libs/utils"; -import { handleCreateNodeFromGlobalPosition } from "oxalis/controller/combinations/skeleton_handlers"; -import Shortcut from "libs/shortcut_component"; -import Toast from "libs/toast"; -import { api } from "oxalis/singletons"; -import messages from "messages"; import { extractPathAsNewTree } from "oxalis/model/reducers/skeletontracing_reducer_helpers"; +import { isBoundingBoxUsableForMinCut } from "oxalis/model/sagas/min_cut_saga"; +import { getBoundingBoxInMag1 } from "oxalis/model/sagas/volume/helpers"; +import { voxelToVolumeInUnit } from "oxalis/model/scaleinfo"; +import { api } from "oxalis/singletons"; +import type { + ActiveMappingInfo, + MutableNode, + OxalisState, + SegmentMap, + SkeletonTracing, + Tree, + UserBoundingBox, + VolumeTracing, +} from "oxalis/store"; import Store from "oxalis/store"; import { - minCutAgglomerateAction, - minCutAgglomerateWithPositionAction, - cutAgglomerateFromNeighborsAction, - proofreadMerge, -} from "oxalis/model/actions/proofread_actions"; -import { setPositionAction } from "oxalis/model/actions/flycam_actions"; + getVolumeRequestUrl, + withMappingActivationConfirmation, +} from "oxalis/view/right-border-tabs/segments_tab/segments_view_helper"; +import React, { createContext, type MouseEvent, useContext, useEffect, useState } from "react"; +import { useSelector } from "react-redux"; +import type { Dispatch } from "redux"; import type { - ItemType, - MenuItemGroupType, - MenuItemType, - SubMenuType, -} from "antd/es/menu/interface"; -import { getSegmentBoundingBoxes, getSegmentVolumes } from "admin/admin_rest_api"; -import { useFetch } from "libs/react_helpers"; -import { AsyncIconButton } from "components/async_clickables"; + APIConnectomeFile, + APIDataLayer, + APIDataset, + APIMeshFile, + VoxelSize, +} from "types/api_flow_types"; import type { AdditionalCoordinate } from "types/api_flow_types"; -import { voxelToVolumeInUnit } from "oxalis/model/scaleinfo"; -import { getBoundingBoxInMag1 } from "oxalis/model/sagas/volume/helpers"; -import { - ensureLayerMappingsAreLoadedAction, - ensureSegmentIndexIsLoadedAction, -} from "oxalis/model/actions/dataset_actions"; -import { hideContextMenuAction, setActiveUserBoundingBoxId } from "oxalis/model/actions/ui_actions"; -import { getDisabledInfoForTools } from "oxalis/model/accessors/tool_accessor"; -import FastTooltip from "components/fast_tooltip"; import { LoadMeshMenuItemLabel } from "./right-border-tabs/segments_tab/load_mesh_menu_item_label"; type ContextMenuContextValue = React.MutableRefObject | null; diff --git a/frontend/javascripts/oxalis/view/distance_measurement_tooltip.tsx b/frontend/javascripts/oxalis/view/distance_measurement_tooltip.tsx index 85ded86875a..4bb5f5a8d1f 100644 --- a/frontend/javascripts/oxalis/view/distance_measurement_tooltip.tsx +++ b/frontend/javascripts/oxalis/view/distance_measurement_tooltip.tsx @@ -1,30 +1,30 @@ -import { useDispatch, useSelector } from "react-redux"; -import { useEffect, useRef } from "react"; -import type { OxalisState } from "oxalis/store"; -import { - AnnotationToolEnum, - MeasurementTools, - LongUnitToShortUnitMap, - type Vector3, -} from "oxalis/constants"; -import { getPosition } from "oxalis/model/accessors/flycam_accessor"; -import { hideMeasurementTooltipAction } from "oxalis/model/actions/ui_actions"; -import getSceneController from "oxalis/controller/scene_controller_provider"; import { CopyOutlined } from "@ant-design/icons"; import { copyToClipboad } from "admin/voxelytics/utils"; +import { Tooltip } from "antd"; import { - formatNumberToLength, - formatLengthAsVx, formatAreaAsVx, + formatLengthAsVx, formatNumberToArea, + formatNumberToLength, } from "libs/format_utils"; -import { Tooltip } from "antd"; +import { clamp } from "libs/utils"; +import { + AnnotationToolEnum, + LongUnitToShortUnitMap, + MeasurementTools, + type Vector3, +} from "oxalis/constants"; +import getSceneController from "oxalis/controller/scene_controller_provider"; +import { getPosition } from "oxalis/model/accessors/flycam_accessor"; import { calculateMaybePlaneScreenPos, getInputCatcherRect, } from "oxalis/model/accessors/view_mode_accessor"; -import { clamp } from "libs/utils"; +import { hideMeasurementTooltipAction } from "oxalis/model/actions/ui_actions"; import dimensions from "oxalis/model/dimensions"; +import type { OxalisState } from "oxalis/store"; +import { useEffect, useRef } from "react"; +import { useDispatch, useSelector } from "react-redux"; const TOOLTIP_HEIGHT = 48; const ADDITIONAL_OFFSET = 12; diff --git a/frontend/javascripts/oxalis/view/help_modal.tsx b/frontend/javascripts/oxalis/view/help_modal.tsx index fc5faef87e2..236ad7a9dee 100644 --- a/frontend/javascripts/oxalis/view/help_modal.tsx +++ b/frontend/javascripts/oxalis/view/help_modal.tsx @@ -1,5 +1,5 @@ import { sendHelpEmail, updateNovelUserExperienceInfos } from "admin/admin_rest_api"; -import { Modal, Input, Alert, message } from "antd"; +import { Alert, Input, Modal, message } from "antd"; import { setActiveUserAction } from "oxalis/model/actions/user_actions"; import type { OxalisState } from "oxalis/store"; import type React from "react"; diff --git a/frontend/javascripts/oxalis/view/input_catcher.tsx b/frontend/javascripts/oxalis/view/input_catcher.tsx index 7c1a4233c60..9527899d054 100644 --- a/frontend/javascripts/oxalis/view/input_catcher.tsx +++ b/frontend/javascripts/oxalis/view/input_catcher.tsx @@ -1,5 +1,6 @@ +import { useEffectOnlyOnce, useKeyPress } from "libs/react_hooks"; +import { waitForCondition } from "libs/utils"; import _ from "lodash"; -import type * as React from "react"; import type { Rect, Viewport } from "oxalis/constants"; import { AnnotationToolEnum, @@ -7,17 +8,16 @@ import { ArbitraryViews, OrthoViews, } from "oxalis/constants"; +import { adaptActiveToolToShortcuts } from "oxalis/model/accessors/tool_accessor"; import { setInputCatcherRects } from "oxalis/model/actions/view_mode_actions"; -import Scalebar from "oxalis/view/scalebar"; -import ViewportStatusIndicator from "oxalis/view/viewport_status_indicator"; import type { BusyBlockingInfo, OxalisState } from "oxalis/store"; import Store from "oxalis/store"; import makeRectRelativeToCanvas from "oxalis/view/layouting/layout_canvas_adapter"; -import { waitForCondition } from "libs/utils"; -import { useEffectOnlyOnce, useKeyPress } from "libs/react_hooks"; +import Scalebar from "oxalis/view/scalebar"; +import ViewportStatusIndicator from "oxalis/view/viewport_status_indicator"; +import type * as React from "react"; import { useRef } from "react"; import { useSelector } from "react-redux"; -import { adaptActiveToolToShortcuts } from "oxalis/model/accessors/tool_accessor"; const emptyViewportRect = { top: 0, diff --git a/frontend/javascripts/oxalis/view/jobs/train_ai_model.tsx b/frontend/javascripts/oxalis/view/jobs/train_ai_model.tsx index 9314c3d57eb..81205c1ca4c 100644 --- a/frontend/javascripts/oxalis/view/jobs/train_ai_model.tsx +++ b/frontend/javascripts/oxalis/view/jobs/train_ai_model.tsx @@ -1,53 +1,53 @@ -import React, { useRef, useState } from "react"; +import { + getAnnotationInformation, + getDataset, + getTracingForAnnotationType, + runTraining, +} from "admin/admin_rest_api"; +import { getAnnotationsForTask } from "admin/api/tasks"; import { Alert, - Form, - Row, + Button, + Checkbox, Col, + Collapse, + Form, + type FormInstance, Input, - Button, + Row, Select, - Collapse, Tooltip, - Checkbox, - type FormInstance, } from "antd"; -import { useSelector } from "react-redux"; -import type { HybridTracing, OxalisState, UserBoundingBox, VolumeTracing } from "oxalis/store"; -import { getSomeTracing } from "oxalis/model/accessors/tracing_accessor"; +import { LayerSelection, LayerSelectionFormItem } from "components/layer_selection"; +import { MagSelectionFormItem } from "components/mag_selection"; +import { formatVoxels } from "libs/format_utils"; +import { V3 } from "libs/mjs"; +import Toast from "libs/toast"; +import * as Utils from "libs/utils"; +import { computeArrayFromBoundingBox } from "libs/utils"; +import _ from "lodash"; +import type { Vector3, Vector6 } from "oxalis/constants"; import { getColorLayers, getMagInfo, getSegmentationLayers, } from "oxalis/model/accessors/dataset_accessor"; -import { - getAnnotationInformation, - getDataset, - getTracingForAnnotationType, - runTraining, -} from "admin/admin_rest_api"; -import { LayerSelection, LayerSelectionFormItem } from "components/layer_selection"; -import Toast from "libs/toast"; -import { Model } from "oxalis/singletons"; +import { getSomeTracing } from "oxalis/model/accessors/tracing_accessor"; import { getSegmentationLayerByHumanReadableName } from "oxalis/model/accessors/volumetracing_accessor"; -import _ from "lodash"; import BoundingBox from "oxalis/model/bucket_data_handling/bounding_box"; -import { formatVoxels } from "libs/format_utils"; -import * as Utils from "libs/utils"; +import { MagInfo } from "oxalis/model/helpers/mag_info"; +import { convertUserBoundingBoxesFromServerToFrontend } from "oxalis/model/reducers/reducer_helpers"; +import { serverVolumeToClientVolumeTracing } from "oxalis/model/reducers/volumetracing_reducer"; +import { Model } from "oxalis/singletons"; +import type { HybridTracing, OxalisState, UserBoundingBox, VolumeTracing } from "oxalis/store"; +import React, { useRef, useState } from "react"; +import { useSelector } from "react-redux"; import type { APIAnnotation, APIDataLayer, APIDataset, ServerVolumeTracing, } from "types/api_flow_types"; -import type { Vector3, Vector6 } from "oxalis/constants"; -import { serverVolumeToClientVolumeTracing } from "oxalis/model/reducers/volumetracing_reducer"; -import { convertUserBoundingBoxesFromServerToFrontend } from "oxalis/model/reducers/reducer_helpers"; -import { computeArrayFromBoundingBox } from "libs/utils"; -import { MagSelectionFormItem } from "components/mag_selection"; -import { MagInfo } from "oxalis/model/helpers/mag_info"; -import { V3 } from "libs/mjs"; -import { getAnnotationsForTask } from "admin/api/tasks"; const { TextArea } = Input; const FormItem = Form.Item; diff --git a/frontend/javascripts/oxalis/view/largest_segment_id_modal.tsx b/frontend/javascripts/oxalis/view/largest_segment_id_modal.tsx index 4e6f495d208..f4885d4cd2c 100644 --- a/frontend/javascripts/oxalis/view/largest_segment_id_modal.tsx +++ b/frontend/javascripts/oxalis/view/largest_segment_id_modal.tsx @@ -1,20 +1,20 @@ -import * as React from "react"; -import { Button, Modal, InputNumber } from "antd"; -import { useDispatch, useSelector } from "react-redux"; -import { - createCellAction, - setLargestSegmentIdAction, -} from "oxalis/model/actions/volumetracing_actions"; +import { Button, InputNumber, Modal } from "antd"; import renderIndependently from "libs/render_independently"; import Toast from "libs/toast"; -import Store from "oxalis/throttled_store"; -import type { OxalisState, VolumeTracing } from "oxalis/store"; import { mayUserEditDataset } from "libs/utils"; import { getBitDepth, getReadableURLPart } from "oxalis/model/accessors/dataset_accessor"; import { getSegmentationLayerForTracing, getVolumeTracingByLayerName, } from "oxalis/model/accessors/volumetracing_accessor"; +import { + createCellAction, + setLargestSegmentIdAction, +} from "oxalis/model/actions/volumetracing_actions"; +import type { OxalisState, VolumeTracing } from "oxalis/store"; +import Store from "oxalis/throttled_store"; +import * as React from "react"; +import { useDispatch, useSelector } from "react-redux"; import type { APISegmentationLayer } from "types/api_flow_types"; const TOAST_KEY = "enter-largest-segment-id"; diff --git a/frontend/javascripts/oxalis/view/layouting/default_layout_configs.ts b/frontend/javascripts/oxalis/view/layouting/default_layout_configs.ts index fdb79b7cc92..111d6fa66a4 100644 --- a/frontend/javascripts/oxalis/view/layouting/default_layout_configs.ts +++ b/frontend/javascripts/oxalis/view/layouting/default_layout_configs.ts @@ -1,3 +1,5 @@ +import { getIsInIframe } from "libs/utils"; +import * as Utils from "libs/utils"; /* * This file defines: * - the main tabs which can be arranged in WK Core @@ -5,7 +7,6 @@ * - a `determineLayout` function which decides which layout type has to be chosen */ import _ from "lodash"; -import { getIsInIframe } from "libs/utils"; import type { BorderTabType, ControlMode, ViewMode } from "oxalis/constants"; import Constants, { ArbitraryViews, @@ -15,17 +16,16 @@ import Constants, { OrthoViews, OrthoViewsToName, } from "oxalis/constants"; -import * as Utils from "libs/utils"; +import { Store } from "oxalis/singletons"; import type { - RowOrTabsetNode, - RowNode, - TabsetNode, - TabNode, - GlobalConfig, Border, + GlobalConfig, ModelConfig, + RowNode, + RowOrTabsetNode, + TabNode, + TabsetNode, } from "./flex_layout_types"; -import { Store } from "oxalis/singletons"; // Increment this number to invalidate old layoutConfigs in localStorage export const currentLayoutVersion = 15; const layoutHeaderHeight = 20; diff --git a/frontend/javascripts/oxalis/view/layouting/flex_layout_helper.ts b/frontend/javascripts/oxalis/view/layouting/flex_layout_helper.ts index 07422c22029..6bc857aa40d 100644 --- a/frontend/javascripts/oxalis/view/layouting/flex_layout_helper.ts +++ b/frontend/javascripts/oxalis/view/layouting/flex_layout_helper.ts @@ -1,4 +1,4 @@ -import { type Model, Actions, type TabSetNode, type BorderNode } from "flexlayout-react"; +import { Actions, type BorderNode, type Model, type TabSetNode } from "flexlayout-react"; import type { BorderOpenStatus } from "oxalis/store"; import type { ModelConfig } from "./flex_layout_types"; diff --git a/frontend/javascripts/oxalis/view/layouting/flex_layout_wrapper.tsx b/frontend/javascripts/oxalis/view/layouting/flex_layout_wrapper.tsx index 59b34a3300a..81f4edc5a52 100644 --- a/frontend/javascripts/oxalis/view/layouting/flex_layout_wrapper.tsx +++ b/frontend/javascripts/oxalis/view/layouting/flex_layout_wrapper.tsx @@ -1,49 +1,49 @@ -import type { Dispatch } from "redux"; +import { sendAnalyticsEvent } from "admin/admin_rest_api"; import { Layout } from "antd"; -import { connect } from "react-redux"; +import FastTooltip from "components/fast_tooltip"; +import features from "features"; import * as FlexLayout from "flexlayout-react"; import type { BorderNode, TabNode, TabSetNode } from "flexlayout-react"; -import * as React from "react"; +import { InputKeyboardNoLoop } from "libs/input"; +import Toast from "libs/toast"; import _ from "lodash"; -import features from "features"; +import messages from "messages"; +import type { OrthoView } from "oxalis/constants"; +import { ArbitraryViews, BorderTabs, OrthoViews } from "oxalis/constants"; +import { setBorderOpenStatusAction } from "oxalis/model/actions/ui_actions"; +import { setViewportAction } from "oxalis/model/actions/view_mode_actions"; +import type { BorderOpenStatus, BusyBlockingInfo, OxalisState } from "oxalis/store"; +import Store from "oxalis/store"; +import InputCatcher from "oxalis/view/input_catcher"; import type { LayoutKeys } from "oxalis/view/layouting/default_layout_configs"; import { DEFAULT_LAYOUT_NAME, getTabDescriptorForBorderTab, resetDefaultLayouts, } from "oxalis/view/layouting/default_layout_configs"; -import { InputKeyboardNoLoop } from "libs/input"; -import type { OrthoView } from "oxalis/constants"; -import { OrthoViews, ArbitraryViews, BorderTabs } from "oxalis/constants"; -import { sendAnalyticsEvent } from "admin/admin_rest_api"; -import { setBorderOpenStatusAction } from "oxalis/model/actions/ui_actions"; -import { setViewportAction } from "oxalis/model/actions/view_mode_actions"; +import ControlsAndRenderingSettingsTab from "oxalis/view/left-border-tabs/controls_and_rendering_settings_tab"; +import LayerSettingsTab from "oxalis/view/left-border-tabs/layer_settings_tab"; +import RecordingSwitch from "oxalis/view/recording_switch"; import AbstractTreeTab from "oxalis/view/right-border-tabs/abstract_tree_tab"; import BoundingBoxTab from "oxalis/view/right-border-tabs/bounding_box_tab"; import CommentTabView from "oxalis/view/right-border-tabs/comment_tab/comment_tab_view"; import ConnectomeView from "oxalis/view/right-border-tabs/connectome_tab/connectome_view"; -import ControlsAndRenderingSettingsTab from "oxalis/view/left-border-tabs/controls_and_rendering_settings_tab"; import DatasetInfoTabView from "oxalis/view/right-border-tabs/dataset_info_tab_view"; -import InputCatcher from "oxalis/view/input_catcher"; -import LayerSettingsTab from "oxalis/view/left-border-tabs/layer_settings_tab"; -import RecordingSwitch from "oxalis/view/recording_switch"; import SegmentsView from "oxalis/view/right-border-tabs/segments_tab/segments_view"; import SkeletonTabView from "oxalis/view/right-border-tabs/trees_tab/skeleton_tab_view"; import Statusbar from "oxalis/view/statusbar"; -import type { OxalisState, BusyBlockingInfo, BorderOpenStatus } from "oxalis/store"; -import Store from "oxalis/store"; import TDViewControls from "oxalis/view/td_view_controls"; -import Toast from "libs/toast"; -import messages from "messages"; +import * as React from "react"; +import { connect } from "react-redux"; +import type { Dispatch } from "redux"; +import BorderToggleButton from "../components/border_toggle_button"; import { - getMaximizedItemId, - getBorderOpenStatus, adjustModelToBorderOpenStatus, + getBorderOpenStatus, + getMaximizedItemId, getPositionStatusOf, } from "./flex_layout_helper"; -import { layoutEmitter, getLayoutConfig } from "./layout_persistence"; -import BorderToggleButton from "../components/border_toggle_button"; -import FastTooltip from "components/fast_tooltip"; +import { getLayoutConfig, layoutEmitter } from "./layout_persistence"; const { Footer } = Layout; diff --git a/frontend/javascripts/oxalis/view/layouting/layout_canvas_adapter.ts b/frontend/javascripts/oxalis/view/layouting/layout_canvas_adapter.ts index 19cbadf5c78..2f38f8e5b89 100644 --- a/frontend/javascripts/oxalis/view/layouting/layout_canvas_adapter.ts +++ b/frontend/javascripts/oxalis/view/layouting/layout_canvas_adapter.ts @@ -1,5 +1,5 @@ -import type { Rect } from "oxalis/constants"; import { document } from "libs/window"; +import type { Rect } from "oxalis/constants"; export default function makeRectRelativeToCanvas(rect: Rect): Rect { const layoutContainerDOM = document.getElementById("render-canvas"); diff --git a/frontend/javascripts/oxalis/view/layouting/layout_persistence.ts b/frontend/javascripts/oxalis/view/layouting/layout_persistence.ts index 6ccb65bd323..223b47ae1df 100644 --- a/frontend/javascripts/oxalis/view/layouting/layout_persistence.ts +++ b/frontend/javascripts/oxalis/view/layouting/layout_persistence.ts @@ -1,11 +1,11 @@ -import { createNanoEvents } from "nanoevents"; -import _ from "lodash"; +import Toast from "libs/toast"; +import UserLocalStorage from "libs/user_local_storage"; import { getIsInIframe } from "libs/utils"; -import { listenToStoreProperty } from "oxalis/model/helpers/listener_helpers"; +import _ from "lodash"; +import { createNanoEvents } from "nanoevents"; import { setStoredLayoutsAction } from "oxalis/model/actions/ui_actions"; +import { listenToStoreProperty } from "oxalis/model/helpers/listener_helpers"; import Store from "oxalis/store"; -import Toast from "libs/toast"; -import UserLocalStorage from "libs/user_local_storage"; import type { LayoutKeys } from "./default_layout_configs"; import getDefaultLayouts, { currentLayoutVersion, diff --git a/frontend/javascripts/oxalis/view/layouting/portal_utils.tsx b/frontend/javascripts/oxalis/view/layouting/portal_utils.tsx index b49a1d770af..ef4b5abf477 100644 --- a/frontend/javascripts/oxalis/view/layouting/portal_utils.tsx +++ b/frontend/javascripts/oxalis/view/layouting/portal_utils.tsx @@ -1,6 +1,6 @@ +import { document } from "libs/window"; import * as React from "react"; import ReactDOM from "react-dom"; -import { document } from "libs/window"; // The actual content of a layout pane is a portal target, // to which is rendered within GoldenLayoutAdapter. diff --git a/frontend/javascripts/oxalis/view/layouting/tracing_layout_view.tsx b/frontend/javascripts/oxalis/view/layouting/tracing_layout_view.tsx index 031bd1a6478..4600a81cabb 100644 --- a/frontend/javascripts/oxalis/view/layouting/tracing_layout_view.tsx +++ b/frontend/javascripts/oxalis/view/layouting/tracing_layout_view.tsx @@ -1,4 +1,5 @@ import { ConfigProvider, Layout } from "antd"; +import app from "app"; import ErrorHandling from "libs/error_handling"; import Request from "libs/request"; import Toast from "libs/toast"; @@ -16,6 +17,7 @@ import { Store } from "oxalis/singletons"; import type { OxalisState, Theme, TraceOrViewCommand } from "oxalis/store"; import ActionBarView from "oxalis/view/action_bar_view"; import WkContextMenu from "oxalis/view/context_menu"; +import DistanceMeasurementTooltip from "oxalis/view/distance_measurement_tooltip"; import { initializeInputCatcherSizes, recalculateInputCatcherSizes, @@ -38,14 +40,12 @@ import * as React from "react"; import { connect } from "react-redux"; import { type RouteComponentProps, withRouter } from "react-router-dom"; import type { Dispatch } from "redux"; +import { NavAndStatusBarTheme } from "theme"; import type { APICompoundType } from "types/api_flow_types"; -import DistanceMeasurementTooltip from "oxalis/view/distance_measurement_tooltip"; import TabTitle from "../components/tab_title_component"; import { determineLayout } from "./default_layout_configs"; import FlexLayoutWrapper from "./flex_layout_wrapper"; import { FloatingMobileControls } from "./floating_mobile_controls"; -import app from "app"; -import { NavAndStatusBarTheme } from "theme"; const { Sider } = Layout; diff --git a/frontend/javascripts/oxalis/view/left-border-tabs/controls_and_rendering_settings_tab.tsx b/frontend/javascripts/oxalis/view/left-border-tabs/controls_and_rendering_settings_tab.tsx index 060fa54423e..3767aef438a 100644 --- a/frontend/javascripts/oxalis/view/left-border-tabs/controls_and_rendering_settings_tab.tsx +++ b/frontend/javascripts/oxalis/view/left-border-tabs/controls_and_rendering_settings_tab.tsx @@ -1,36 +1,36 @@ +import { ExclamationCircleOutlined } from "@ant-design/icons"; +import { clearCache } from "admin/admin_rest_api"; +import { PricingPlanEnum } from "admin/organization/pricing_plan_utils"; import { Collapse, type CollapseProps } from "antd"; -import type { Dispatch } from "redux"; -import { connect } from "react-redux"; -import React, { PureComponent } from "react"; +import FastTooltip from "components/fast_tooltip"; +import { PricingEnforcedSwitchSetting } from "components/pricing_enforcers"; +import Toast from "libs/toast"; import _ from "lodash"; -import type { APIDataset, APIUser } from "types/api_flow_types"; -import { - LogSliderSetting, - NumberSliderSetting, - SwitchSetting, - DropdownSetting, -} from "oxalis/view/components/setting_input_views"; -import type { UserConfiguration, OxalisState, DatasetConfiguration } from "oxalis/store"; -import { clearCache } from "admin/admin_rest_api"; +import messages, { settingsTooltips, settings as settingsLabels } from "messages"; +import type { ViewMode } from "oxalis/constants"; +import Constants, { BLEND_MODES } from "oxalis/constants"; +import defaultState from "oxalis/default_state"; import { getValidZoomRangeForUser } from "oxalis/model/accessors/flycam_accessor"; +import { setZoomStepAction } from "oxalis/model/actions/flycam_actions"; import { updateDatasetSettingAction, updateUserSettingAction, } from "oxalis/model/actions/settings_actions"; import { getGpuFactorsWithLabels } from "oxalis/model/bucket_data_handling/data_rendering_logic"; -import { setZoomStepAction } from "oxalis/model/actions/flycam_actions"; -import messages, { settingsTooltips, settings as settingsLabels } from "messages"; -import { userSettings } from "types/schemas/user_settings.schema"; -import type { ViewMode } from "oxalis/constants"; -import Constants, { BLEND_MODES } from "oxalis/constants"; import { api } from "oxalis/singletons"; -import Toast from "libs/toast"; -import { ExclamationCircleOutlined } from "@ant-design/icons"; -import { PricingPlanEnum } from "admin/organization/pricing_plan_utils"; -import { PricingEnforcedSwitchSetting } from "components/pricing_enforcers"; +import type { DatasetConfiguration, OxalisState, UserConfiguration } from "oxalis/store"; +import { + DropdownSetting, + LogSliderSetting, + NumberSliderSetting, + SwitchSetting, +} from "oxalis/view/components/setting_input_views"; +import React, { PureComponent } from "react"; +import { connect } from "react-redux"; +import type { Dispatch } from "redux"; +import type { APIDataset, APIUser } from "types/api_flow_types"; import type { ArrayElement } from "types/globals"; -import FastTooltip from "components/fast_tooltip"; -import defaultState from "oxalis/default_state"; +import { userSettings } from "types/schemas/user_settings.schema"; type ControlsAndRenderingSettingsTabProps = { activeUser: APIUser | null | undefined; diff --git a/frontend/javascripts/oxalis/view/left-border-tabs/histogram_view.tsx b/frontend/javascripts/oxalis/view/left-border-tabs/histogram_view.tsx index 9ad2fe5ec1f..00f1bbbbb8f 100644 --- a/frontend/javascripts/oxalis/view/left-border-tabs/histogram_view.tsx +++ b/frontend/javascripts/oxalis/view/left-border-tabs/histogram_view.tsx @@ -1,16 +1,16 @@ -import type { Dispatch } from "redux"; -import { Alert, Row, Col, InputNumber, Spin } from "antd"; -import { connect } from "react-redux"; -import * as React from "react"; +import { CloseOutlined } from "@ant-design/icons"; +import { Alert, Col, InputNumber, Row, Spin } from "antd"; +import FastTooltip from "components/fast_tooltip"; +import { Slider } from "components/slider"; +import { roundTo } from "libs/utils"; import * as _ from "lodash"; import { PRIMARY_COLOR, type Vector2, type Vector3 } from "oxalis/constants"; -import type { APIHistogramData, HistogramDatum, ElementClass } from "types/api_flow_types"; -import { roundTo } from "libs/utils"; import { updateLayerSettingAction } from "oxalis/model/actions/settings_actions"; import type { DatasetLayerConfiguration } from "oxalis/store"; -import { CloseOutlined } from "@ant-design/icons"; -import FastTooltip from "components/fast_tooltip"; -import { Slider } from "components/slider"; +import * as React from "react"; +import { connect } from "react-redux"; +import type { Dispatch } from "redux"; +import type { APIHistogramData, ElementClass, HistogramDatum } from "types/api_flow_types"; type OwnProps = { data: APIHistogramData | null | undefined; diff --git a/frontend/javascripts/oxalis/view/left-border-tabs/layer_settings_tab.tsx b/frontend/javascripts/oxalis/view/left-border-tabs/layer_settings_tab.tsx index 2c66b66a082..ed86920c531 100644 --- a/frontend/javascripts/oxalis/view/left-border-tabs/layer_settings_tab.tsx +++ b/frontend/javascripts/oxalis/view/left-border-tabs/layer_settings_tab.tsx @@ -1,133 +1,133 @@ -import { Button, Col, Divider, Dropdown, type MenuProps, Modal, Row, Switch } from "antd"; -import type { Dispatch } from "redux"; import { EditOutlined, + EllipsisOutlined, InfoCircleOutlined, + LockOutlined, + MenuOutlined, + PlusOutlined, ReloadOutlined, + SaveOutlined, ScanOutlined, - WarningOutlined, - PlusOutlined, - VerticalAlignMiddleOutlined, - LockOutlined, UnlockOutlined, - EllipsisOutlined, - SaveOutlined, - MenuOutlined, + VerticalAlignMiddleOutlined, + WarningOutlined, } from "@ant-design/icons"; -import ErrorHandling from "libs/error_handling"; -import { connect, useDispatch, useSelector } from "react-redux"; -import React, { useCallback } from "react"; -import _ from "lodash"; -import classnames from "classnames"; -import update from "immutability-helper"; -import { - APIAnnotationTypeEnum, - type APIDataLayer, - type APIDataset, - type APISkeletonLayer, - APIJobType, - type EditableLayerProperties, -} from "types/api_flow_types"; -import type { ValueOf } from "types/globals"; -import { HoverIconButton } from "components/hover_icon_button"; -import { - SwitchSetting, - NumberSliderSetting, - LogSliderSetting, - ColorSetting, - SETTING_LEFT_SPAN, - SETTING_MIDDLE_SPAN, - SETTING_VALUE_SPAN, -} from "oxalis/view/components/setting_input_views"; -import { M4x4, V3 } from "libs/mjs"; -import { editAnnotationLayerAction } from "oxalis/model/actions/annotation_actions"; -import { - enforceSkeletonTracing, - getActiveNode, -} from "oxalis/model/accessors/skeletontracing_accessor"; +import { DndContext, type DragEndEvent } from "@dnd-kit/core"; +import { SortableContext, useSortable, verticalListSortingStrategy } from "@dnd-kit/sortable"; +import { CSS } from "@dnd-kit/utilities"; import { - findDataPositionForLayer, clearCache, - findDataPositionForVolumeTracing, convertToHybridTracing, deleteAnnotationLayer, - updateDatasetDefaultConfiguration, + findDataPositionForLayer, + findDataPositionForVolumeTracing, startComputeSegmentIndexFileJob, + updateDatasetDefaultConfiguration, } from "admin/admin_rest_api"; +import { Button, Col, Divider, Dropdown, type MenuProps, Modal, Row, Switch } from "antd"; +import classnames from "classnames"; +import FastTooltip from "components/fast_tooltip"; +import { HoverIconButton } from "components/hover_icon_button"; +import LinkButton from "components/link_button"; +import update from "immutability-helper"; +import ErrorHandling from "libs/error_handling"; +import { M4x4, V3 } from "libs/mjs"; +import Toast from "libs/toast"; +import * as Utils from "libs/utils"; +import _ from "lodash"; +import { + type RecommendedConfiguration, + layerViewConfigurationTooltips, + layerViewConfigurations, + settings, + settingsTooltips, +} from "messages"; +import type { Vector3 } from "oxalis/constants"; +import Constants, { ControlModeEnum, MappingStatusEnum } from "oxalis/constants"; +import defaultState from "oxalis/default_state"; import { getDefaultValueRangeOfLayer, getElementClass, isColorLayer as getIsColorLayer, + getLayerBoundingBox, getLayerByName, getMagInfo, + getTransformsForLayer, getTransformsForLayerOrNull, getWidestMags, - getLayerBoundingBox, - getTransformsForLayer, hasDatasetTransforms, } from "oxalis/model/accessors/dataset_accessor"; import { getMaxZoomValueForMag, getPosition } from "oxalis/model/accessors/flycam_accessor"; +import { + enforceSkeletonTracing, + getActiveNode, +} from "oxalis/model/accessors/skeletontracing_accessor"; import { getAllReadableLayerNames, getReadableNameByVolumeTracingId, getVolumeDescriptorById, getVolumeTracingById, } from "oxalis/model/accessors/volumetracing_accessor"; -import { - setNodeRadiusAction, - setShowSkeletonsAction, -} from "oxalis/model/actions/skeletontracing_actions"; +import { editAnnotationLayerAction } from "oxalis/model/actions/annotation_actions"; import { setPositionAction, setZoomStepAction } from "oxalis/model/actions/flycam_actions"; import { - updateUserSettingAction, - updateDatasetSettingAction, - updateLayerSettingAction, dispatchClipHistogramAsync, reloadHistogramAction, + updateDatasetSettingAction, + updateLayerSettingAction, + updateUserSettingAction, } from "oxalis/model/actions/settings_actions"; -import { userSettings } from "types/schemas/user_settings.schema"; -import type { Vector3 } from "oxalis/constants"; -import Constants, { ControlModeEnum, MappingStatusEnum } from "oxalis/constants"; -import EditableTextLabel from "oxalis/view/components/editable_text_label"; -import LinkButton from "components/link_button"; +import { + setNodeRadiusAction, + setShowSkeletonsAction, +} from "oxalis/model/actions/skeletontracing_actions"; +import { + invertTransform, + transformPointUnscaled, +} from "oxalis/model/helpers/transformation_helpers"; import { Model } from "oxalis/singletons"; +import { api } from "oxalis/singletons"; import type { - VolumeTracing, DatasetConfiguration, DatasetLayerConfiguration, OxalisState, UserConfiguration, + VolumeTracing, } from "oxalis/store"; import Store from "oxalis/store"; -import Toast from "libs/toast"; -import * as Utils from "libs/utils"; -import { api } from "oxalis/singletons"; -import { - layerViewConfigurations, - layerViewConfigurationTooltips, - type RecommendedConfiguration, - settings, - settingsTooltips, -} from "messages"; import { MaterializeVolumeAnnotationModal } from "oxalis/view/action-bar/starting_job_modals"; -import AddVolumeLayerModal, { validateReadableLayerName } from "./modals/add_volume_layer_modal"; -import DownsampleVolumeModal from "./modals/downsample_volume_modal"; -import Histogram, { isHistogramSupported } from "./histogram_view"; -import MappingSettingsView from "./mapping_settings_view"; -import { confirmAsync } from "../../../dashboard/dataset/helper_components"; +import EditableTextLabel from "oxalis/view/components/editable_text_label"; import { - invertTransform, - transformPointUnscaled, -} from "oxalis/model/helpers/transformation_helpers"; -import FastTooltip from "components/fast_tooltip"; -import { SortableContext, useSortable, verticalListSortingStrategy } from "@dnd-kit/sortable"; -import { DndContext, type DragEndEvent } from "@dnd-kit/core"; -import { CSS } from "@dnd-kit/utilities"; + ColorSetting, + LogSliderSetting, + NumberSliderSetting, + SETTING_LEFT_SPAN, + SETTING_MIDDLE_SPAN, + SETTING_VALUE_SPAN, + SwitchSetting, +} from "oxalis/view/components/setting_input_views"; +import React, { useCallback } from "react"; +import { connect, useDispatch, useSelector } from "react-redux"; +import type { Dispatch } from "redux"; +import { + APIAnnotationTypeEnum, + type APIDataLayer, + type APIDataset, + APIJobType, + type APISkeletonLayer, + type EditableLayerProperties, +} from "types/api_flow_types"; +import type { ValueOf } from "types/globals"; import { defaultDatasetViewConfigurationWithoutNull, getDefaultLayerViewConfiguration, } from "types/schemas/dataset_view_configuration.schema"; -import defaultState from "oxalis/default_state"; +import { userSettings } from "types/schemas/user_settings.schema"; +import { confirmAsync } from "../../../dashboard/dataset/helper_components"; +import Histogram, { isHistogramSupported } from "./histogram_view"; +import MappingSettingsView from "./mapping_settings_view"; +import AddVolumeLayerModal, { validateReadableLayerName } from "./modals/add_volume_layer_modal"; +import DownsampleVolumeModal from "./modals/downsample_volume_modal"; type DatasetSettingsProps = ReturnType & ReturnType; diff --git a/frontend/javascripts/oxalis/view/left-border-tabs/mapping_settings_view.tsx b/frontend/javascripts/oxalis/view/left-border-tabs/mapping_settings_view.tsx index 00850c36eae..51de6ac673c 100644 --- a/frontend/javascripts/oxalis/view/left-border-tabs/mapping_settings_view.tsx +++ b/frontend/javascripts/oxalis/view/left-border-tabs/mapping_settings_view.tsx @@ -1,33 +1,33 @@ import { Select } from "antd"; -import { connect } from "react-redux"; -import React from "react"; -import debounceRender from "react-debounce-render"; -import type { APISegmentationLayer } from "types/api_flow_types"; +import FastTooltip from "components/fast_tooltip"; +import * as Utils from "libs/utils"; +import messages from "messages"; import { MappingStatusEnum } from "oxalis/constants"; -import type { OxalisState, Mapping, MappingType, EditableMapping } from "oxalis/store"; +import { isAnnotationOwner } from "oxalis/model/accessors/annotation_accessor"; import { - getSegmentationLayerByName, getMappingInfo, + getSegmentationLayerByName, } from "oxalis/model/accessors/dataset_accessor"; +import { + getEditableMappingForVolumeTracingId, + hasEditableMapping, + isMappingLocked, +} from "oxalis/model/accessors/volumetracing_accessor"; import { ensureLayerMappingsAreLoadedAction, setLayerMappingsAction, } from "oxalis/model/actions/dataset_actions"; import { - setMappingEnabledAction, setHideUnmappedIdsAction, setMappingAction, + setMappingEnabledAction, } from "oxalis/model/actions/settings_actions"; +import type { EditableMapping, Mapping, MappingType, OxalisState } from "oxalis/store"; import { SwitchSetting } from "oxalis/view/components/setting_input_views"; -import * as Utils from "libs/utils"; -import { - getEditableMappingForVolumeTracingId, - hasEditableMapping, - isMappingLocked, -} from "oxalis/model/accessors/volumetracing_accessor"; -import messages from "messages"; -import { isAnnotationOwner } from "oxalis/model/accessors/annotation_accessor"; -import FastTooltip from "components/fast_tooltip"; +import React from "react"; +import debounceRender from "react-debounce-render"; +import { connect } from "react-redux"; +import type { APISegmentationLayer } from "types/api_flow_types"; const { Option, OptGroup } = Select; diff --git a/frontend/javascripts/oxalis/view/left-border-tabs/modals/add_volume_layer_modal.tsx b/frontend/javascripts/oxalis/view/left-border-tabs/modals/add_volume_layer_modal.tsx index fad6a364a53..aa8e45aa44d 100644 --- a/frontend/javascripts/oxalis/view/left-border-tabs/modals/add_volume_layer_modal.tsx +++ b/frontend/javascripts/oxalis/view/left-border-tabs/modals/add_volume_layer_modal.tsx @@ -1,32 +1,32 @@ -import { Modal, Row } from "antd"; import { PlusOutlined } from "@ant-design/icons"; -import type React from "react"; -import { useMemo, useState } from "react"; -import _ from "lodash"; -import type { APIDataset, APISegmentationLayer } from "types/api_flow_types"; +import { addAnnotationLayer } from "admin/admin_rest_api"; +import { Modal, Row } from "antd"; import { AsyncButton } from "components/async_clickables"; import { NewVolumeLayerSelection, RestrictMagnificationSlider, } from "dashboard/advanced_dataset/create_explorative_modal"; -import Store, { type Tracing } from "oxalis/store"; -import { addAnnotationLayer } from "admin/admin_rest_api"; +import Toast from "libs/toast"; +import _ from "lodash"; +import messages from "messages"; +import { MappingStatusEnum } from "oxalis/constants"; import { - getSomeMagInfoForDataset, getLayerByName, + getMagInfo, getMappingInfo, getSegmentationLayers, - getMagInfo, + getSomeMagInfoForDataset, } from "oxalis/model/accessors/dataset_accessor"; import { getAllReadableLayerNames, getVolumeTracingLayers, } from "oxalis/model/accessors/volumetracing_accessor"; -import messages from "messages"; -import InputComponent from "oxalis/view/components/input_component"; import { api } from "oxalis/singletons"; -import Toast from "libs/toast"; -import { MappingStatusEnum } from "oxalis/constants"; +import Store, { type Tracing } from "oxalis/store"; +import InputComponent from "oxalis/view/components/input_component"; +import type React from "react"; +import { useMemo, useState } from "react"; +import type { APIDataset, APISegmentationLayer } from "types/api_flow_types"; export type ValidationResult = { isValid: boolean; message: string }; export function checkForLayerNameDuplication( diff --git a/frontend/javascripts/oxalis/view/left-border-tabs/modals/downsample_volume_modal.tsx b/frontend/javascripts/oxalis/view/left-border-tabs/modals/downsample_volume_modal.tsx index 7142b602e27..39a32733709 100644 --- a/frontend/javascripts/oxalis/view/left-border-tabs/modals/downsample_volume_modal.tsx +++ b/frontend/javascripts/oxalis/view/left-border-tabs/modals/downsample_volume_modal.tsx @@ -1,9 +1,9 @@ import { Modal } from "antd"; -import { useState } from "react"; import { AsyncButton } from "components/async_clickables"; import type { Vector3 } from "oxalis/constants"; -import type { VolumeTracing } from "oxalis/store"; import { api } from "oxalis/singletons"; +import type { VolumeTracing } from "oxalis/store"; +import { useState } from "react"; export default function DownsampleVolumeModal({ hideDownsampleVolumeModal, magsToDownsample, diff --git a/frontend/javascripts/oxalis/view/merger_mode_modal_view.tsx b/frontend/javascripts/oxalis/view/merger_mode_modal_view.tsx index d8491256a56..af45d49d9c6 100644 --- a/frontend/javascripts/oxalis/view/merger_mode_modal_view.tsx +++ b/frontend/javascripts/oxalis/view/merger_mode_modal_view.tsx @@ -1,4 +1,4 @@ -import { Modal, Button, Spin, Tooltip } from "antd"; +import { Button, Modal, Spin, Tooltip } from "antd"; type Props = { isCloseable: boolean; diff --git a/frontend/javascripts/oxalis/view/new_task_description_modal.tsx b/frontend/javascripts/oxalis/view/new_task_description_modal.tsx index 6eb409dd798..e912406dbe3 100644 --- a/frontend/javascripts/oxalis/view/new_task_description_modal.tsx +++ b/frontend/javascripts/oxalis/view/new_task_description_modal.tsx @@ -1,4 +1,4 @@ -import { Modal, Button } from "antd"; +import { Button, Modal } from "antd"; import Markdown from "libs/markdown_adapter"; import * as React from "react"; type Props = { diff --git a/frontend/javascripts/oxalis/view/nml_upload_zone_container.tsx b/frontend/javascripts/oxalis/view/nml_upload_zone_container.tsx index 5d37fa67e45..3e084cfa8d1 100644 --- a/frontend/javascripts/oxalis/view/nml_upload_zone_container.tsx +++ b/frontend/javascripts/oxalis/view/nml_upload_zone_container.tsx @@ -1,13 +1,13 @@ -import { Button, Modal, Avatar, List, Spin, Checkbox, Alert } from "antd"; import { FileOutlined, InboxOutlined } from "@ant-design/icons"; -import { connect } from "react-redux"; -import Dropzone, { type DropzoneInputProps } from "react-dropzone"; -import * as React from "react"; +import { Alert, Avatar, Button, Checkbox, List, Modal, Spin } from "antd"; +import FormattedDate from "components/formatted_date"; +import { setDropzoneModalVisibilityAction } from "oxalis/model/actions/ui_actions"; +import type { OxalisState } from "oxalis/store"; import prettyBytes from "pretty-bytes"; +import * as React from "react"; +import Dropzone, { type DropzoneInputProps } from "react-dropzone"; +import { connect } from "react-redux"; import type { Dispatch } from "redux"; -import type { OxalisState } from "oxalis/store"; -import { setDropzoneModalVisibilityAction } from "oxalis/model/actions/ui_actions"; -import FormattedDate from "components/formatted_date"; type State = { files: Array; diff --git a/frontend/javascripts/oxalis/view/novel_user_experiences/01-present-modern-controls.tsx b/frontend/javascripts/oxalis/view/novel_user_experiences/01-present-modern-controls.tsx index 8935020703d..c4c878da843 100644 --- a/frontend/javascripts/oxalis/view/novel_user_experiences/01-present-modern-controls.tsx +++ b/frontend/javascripts/oxalis/view/novel_user_experiences/01-present-modern-controls.tsx @@ -1,9 +1,9 @@ -import { Modal, Button } from "antd"; -import * as React from "react"; -import { useSelector, useDispatch } from "react-redux"; -import { updateUserSettingAction } from "oxalis/model/actions/settings_actions"; import { updateNovelUserExperienceInfos } from "admin/admin_rest_api"; +import { Button, Modal } from "antd"; +import { updateUserSettingAction } from "oxalis/model/actions/settings_actions"; import type { OxalisState } from "oxalis/store"; +import * as React from "react"; +import { useDispatch, useSelector } from "react-redux"; export default function PresentModernControls() { const dispatch = useDispatch(); diff --git a/frontend/javascripts/oxalis/view/novel_user_experiences/welcome_toast.tsx b/frontend/javascripts/oxalis/view/novel_user_experiences/welcome_toast.tsx index 2e9b209fe80..cf5dfc34a32 100644 --- a/frontend/javascripts/oxalis/view/novel_user_experiences/welcome_toast.tsx +++ b/frontend/javascripts/oxalis/view/novel_user_experiences/welcome_toast.tsx @@ -1,9 +1,9 @@ import { Button, notification } from "antd"; -import { useSelector } from "react-redux"; import features from "features"; +import { useEffectOnlyOnce } from "libs/react_hooks"; import UserLocalStorage from "libs/user_local_storage"; import type { OxalisState } from "oxalis/store"; -import { useEffectOnlyOnce } from "libs/react_hooks"; +import { useSelector } from "react-redux"; function showWelcomeToast() { notification.open({ diff --git a/frontend/javascripts/oxalis/view/plane_view.ts b/frontend/javascripts/oxalis/view/plane_view.ts index 9337b67d0c2..8162ef210d8 100644 --- a/frontend/javascripts/oxalis/view/plane_view.ts +++ b/frontend/javascripts/oxalis/view/plane_view.ts @@ -1,23 +1,23 @@ -import * as THREE from "three"; -// @ts-expect-error ts-migrate(7016) FIXME: Could not find a declaration file for module 'twee... Remove this comment to see the full error message -import TWEEN from "tween.js"; -import _ from "lodash"; -import { getGroundTruthLayoutRect } from "oxalis/view/layouting/default_layout_configs"; -import { getInputCatcherRect } from "oxalis/model/accessors/view_mode_accessor"; -import { updateTemporarySettingAction } from "oxalis/model/actions/settings_actions"; -import type { OrthoViewMap, Vector3, Viewport } from "oxalis/constants"; -import Constants, { OrthoViewColors, OrthoViewValues, OrthoViews } from "oxalis/constants"; -import Store from "oxalis/store"; import app from "app"; -import getSceneController from "oxalis/controller/scene_controller_provider"; -import window from "libs/window"; -import { clearCanvas, setupRenderArea } from "oxalis/view/rendering_utils"; import VisibilityAwareRaycaster, { type RaycastIntersection, } from "libs/visibility_aware_raycaster"; -import { listenToStoreProperty } from "oxalis/model/helpers/listener_helpers"; -import { getActiveSegmentationTracing } from "oxalis/model/accessors/volumetracing_accessor"; +import window from "libs/window"; +import _ from "lodash"; +import type { OrthoViewMap, Vector3, Viewport } from "oxalis/constants"; +import Constants, { OrthoViewColors, OrthoViewValues, OrthoViews } from "oxalis/constants"; +import getSceneController from "oxalis/controller/scene_controller_provider"; import type { MeshSceneNode, SceneGroupForMeshes } from "oxalis/controller/segment_mesh_controller"; +import { getInputCatcherRect } from "oxalis/model/accessors/view_mode_accessor"; +import { getActiveSegmentationTracing } from "oxalis/model/accessors/volumetracing_accessor"; +import { updateTemporarySettingAction } from "oxalis/model/actions/settings_actions"; +import { listenToStoreProperty } from "oxalis/model/helpers/listener_helpers"; +import Store from "oxalis/store"; +import { getGroundTruthLayoutRect } from "oxalis/view/layouting/default_layout_configs"; +import { clearCanvas, setupRenderArea } from "oxalis/view/rendering_utils"; +import * as THREE from "three"; +// @ts-expect-error ts-migrate(7016) FIXME: Could not find a declaration file for module 'twee... Remove this comment to see the full error message +import TWEEN from "tween.js"; const createDirLight = ( position: Vector3, diff --git a/frontend/javascripts/oxalis/view/recommended_configuration_modal.tsx b/frontend/javascripts/oxalis/view/recommended_configuration_modal.tsx index 55732f2eb31..c042f7d2199 100644 --- a/frontend/javascripts/oxalis/view/recommended_configuration_modal.tsx +++ b/frontend/javascripts/oxalis/view/recommended_configuration_modal.tsx @@ -1,9 +1,9 @@ +import { settingComments } from "admin/tasktype/recommended_configuration_view"; import { Modal, Table } from "antd"; -import * as React from "react"; import _ from "lodash"; -import type { RecommendedConfiguration } from "oxalis/store"; -import { settingComments } from "admin/tasktype/recommended_configuration_view"; import messages, { settings } from "messages"; +import type { RecommendedConfiguration } from "oxalis/store"; +import * as React from "react"; const columns = [ { title: "Setting", diff --git a/frontend/javascripts/oxalis/view/recording_switch.tsx b/frontend/javascripts/oxalis/view/recording_switch.tsx index 8d26d2a4019..291d00f0fc8 100644 --- a/frontend/javascripts/oxalis/view/recording_switch.tsx +++ b/frontend/javascripts/oxalis/view/recording_switch.tsx @@ -1,8 +1,8 @@ import { Switch } from "antd"; +import { setFlightmodeRecordingAction } from "oxalis/model/actions/settings_actions"; +import type { OxalisState } from "oxalis/store"; import { connect } from "react-redux"; import type { Dispatch } from "redux"; -import type { OxalisState } from "oxalis/store"; -import { setFlightmodeRecordingAction } from "oxalis/model/actions/settings_actions"; type Props = { flightmodeRecording: boolean; onChangeFlightmodeRecording: (arg0: boolean) => void; diff --git a/frontend/javascripts/oxalis/view/remove_tree_modal.tsx b/frontend/javascripts/oxalis/view/remove_tree_modal.tsx index 083f5975ec6..44a5bef82fb 100644 --- a/frontend/javascripts/oxalis/view/remove_tree_modal.tsx +++ b/frontend/javascripts/oxalis/view/remove_tree_modal.tsx @@ -1,9 +1,9 @@ -import { Modal, Checkbox } from "antd"; -import * as React from "react"; +import { Checkbox, Modal } from "antd"; +import type { CheckboxChangeEvent } from "antd/lib/checkbox"; +import messages from "messages"; import { updateUserSettingAction } from "oxalis/model/actions/settings_actions"; import Store from "oxalis/store"; -import messages from "messages"; -import type { CheckboxChangeEvent } from "antd/lib/checkbox"; +import * as React from "react"; type Props = { onOk: (...args: Array) => any; destroy?: (...args: Array) => any; diff --git a/frontend/javascripts/oxalis/view/rendering_utils.ts b/frontend/javascripts/oxalis/view/rendering_utils.ts index 62e31e4aa03..fe8a84b52ac 100644 --- a/frontend/javascripts/oxalis/view/rendering_utils.ts +++ b/frontend/javascripts/oxalis/view/rendering_utils.ts @@ -1,6 +1,5 @@ -import * as THREE from "three"; import { saveAs } from "file-saver"; -import Store from "oxalis/store"; +import { convertBufferToImage } from "libs/utils"; import { ARBITRARY_CAM_DISTANCE, type OrthoView } from "oxalis/constants"; import constants, { ArbitraryViewport, @@ -8,10 +7,11 @@ import constants, { OrthoViewValues, OrthoViews, } from "oxalis/constants"; -import { getInputCatcherRect } from "oxalis/model/accessors/view_mode_accessor"; import getSceneController from "oxalis/controller/scene_controller_provider"; import { getFlooredPosition } from "oxalis/model/accessors/flycam_accessor"; -import { convertBufferToImage } from "libs/utils"; +import { getInputCatcherRect } from "oxalis/model/accessors/view_mode_accessor"; +import Store from "oxalis/store"; +import * as THREE from "three"; const getBackgroundColor = (): number => Store.getState().uiInformation.theme === "dark" ? 0x000000 : 0xffffff; diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/abstract_tree_renderer.ts b/frontend/javascripts/oxalis/view/right-border-tabs/abstract_tree_renderer.ts index 929ea6c270a..40e23290496 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/abstract_tree_renderer.ts +++ b/frontend/javascripts/oxalis/view/right-border-tabs/abstract_tree_renderer.ts @@ -1,7 +1,7 @@ import _ from "lodash"; -import type { Tree } from "oxalis/store"; -import type { Vector2 } from "oxalis/constants"; import messages from "messages"; +import type { Vector2 } from "oxalis/constants"; +import type { Tree } from "oxalis/store"; const NODE_RADIUS = 2; const MAX_NODE_DISTANCE = 100; const CLICK_TRESHOLD = 6; diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/abstract_tree_tab.tsx b/frontend/javascripts/oxalis/view/right-border-tabs/abstract_tree_tab.tsx index 0fe78928d1a..2798f4e881a 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/abstract_tree_tab.tsx +++ b/frontend/javascripts/oxalis/view/right-border-tabs/abstract_tree_tab.tsx @@ -1,13 +1,13 @@ import { Button } from "antd"; -import type { Dispatch } from "redux"; -import { connect } from "react-redux"; -import React, { Component } from "react"; +import window from "libs/window"; import _ from "lodash"; -import type { OxalisState, SkeletonTracing } from "oxalis/store"; import { setActiveNodeAction } from "oxalis/model/actions/skeletontracing_actions"; +import type { OxalisState, SkeletonTracing } from "oxalis/store"; import type { NodeListItem } from "oxalis/view/right-border-tabs/abstract_tree_renderer"; import AbstractTreeRenderer from "oxalis/view/right-border-tabs/abstract_tree_renderer"; -import window from "libs/window"; +import React, { Component } from "react"; +import { connect } from "react-redux"; +import type { Dispatch } from "redux"; type StateProps = { dispatch: Dispatch; skeletonTracing: SkeletonTracing | null | undefined; diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/advanced_search_popover.tsx b/frontend/javascripts/oxalis/view/right-border-tabs/advanced_search_popover.tsx index 54852103229..1a8b777ba00 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/advanced_search_popover.tsx +++ b/frontend/javascripts/oxalis/view/right-border-tabs/advanced_search_popover.tsx @@ -1,11 +1,11 @@ -import { Input, Tooltip, Popover, Space, type InputRef } from "antd"; import { CheckSquareOutlined, DownOutlined, UpOutlined } from "@ant-design/icons"; -import * as React from "react"; +import { Input, type InputRef, Popover, Space, Tooltip } from "antd"; +import Shortcut from "libs/shortcut_component"; +import { mod } from "libs/utils"; import memoizeOne from "memoize-one"; import ButtonComponent from "oxalis/view/components/button_component"; -import Shortcut from "libs/shortcut_component"; import DomVisibilityObserver from "oxalis/view/components/dom_visibility_observer"; -import { mod } from "libs/utils"; +import * as React from "react"; const PRIMARY_COLOR = "var(--ant-color-primary)"; diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/bounding_box_tab.tsx b/frontend/javascripts/oxalis/view/right-border-tabs/bounding_box_tab.tsx index cc837f4ac31..7617be4828b 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/bounding_box_tab.tsx +++ b/frontend/javascripts/oxalis/view/right-border-tabs/bounding_box_tab.tsx @@ -1,32 +1,32 @@ -import { type MenuProps, Table, Tooltip, Typography } from "antd"; import { PlusSquareOutlined } from "@ant-design/icons"; -import { useSelector, useDispatch } from "react-redux"; -import type React from "react"; -import { useCallback, useEffect, useRef, useState } from "react"; +import { type MenuProps, Table, Tooltip, Typography } from "antd"; +import * as Utils from "libs/utils"; import _ from "lodash"; -import UserBoundingBoxInput from "oxalis/view/components/setting_input_views"; import { - type Vector3, - type Vector6, type BoundingBoxType, ControlModeEnum, + type Vector3, + type Vector6, } from "oxalis/constants"; +import { isAnnotationOwner } from "oxalis/model/accessors/annotation_accessor"; +import { getSomeTracing } from "oxalis/model/accessors/tracing_accessor"; import { - changeUserBoundingBoxAction, addUserBoundingBoxAction, + changeUserBoundingBoxAction, deleteUserBoundingBoxAction, } from "oxalis/model/actions/annotation_actions"; -import { getSomeTracing } from "oxalis/model/accessors/tracing_accessor"; -import { isAnnotationOwner } from "oxalis/model/accessors/annotation_accessor"; import { setPositionAction } from "oxalis/model/actions/flycam_actions"; -import * as Utils from "libs/utils"; +import { setActiveUserBoundingBoxId } from "oxalis/model/actions/ui_actions"; import type { OxalisState, UserBoundingBox } from "oxalis/store"; -import DownloadModalView from "../action-bar/download_modal_view"; +import UserBoundingBoxInput from "oxalis/view/components/setting_input_views"; +import type React from "react"; +import { useCallback, useEffect, useRef, useState } from "react"; +import { useDispatch, useSelector } from "react-redux"; +import AutoSizer from "react-virtualized-auto-sizer"; import { APIJobType } from "types/api_flow_types"; -import { ContextMenuContainer } from "./sidebar_context_menu"; +import DownloadModalView from "../action-bar/download_modal_view"; import { getContextMenuPositionFromEvent } from "../context_menu"; -import AutoSizer from "react-virtualized-auto-sizer"; -import { setActiveUserBoundingBoxId } from "oxalis/model/actions/ui_actions"; +import { ContextMenuContainer } from "./sidebar_context_menu"; const ADD_BBOX_BUTTON_HEIGHT = 32; const CONTEXT_MENU_CLASS = "bbox-list-context-menu-overlay"; diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/comment_tab/comment.tsx b/frontend/javascripts/oxalis/view/right-border-tabs/comment_tab/comment.tsx index 4d06f190740..8530a56122f 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/comment_tab/comment.tsx +++ b/frontend/javascripts/oxalis/view/right-border-tabs/comment_tab/comment.tsx @@ -2,12 +2,12 @@ import { Popover } from "antd"; import type * as React from "react"; import classNames from "classnames"; -import { MarkdownWrapper } from "oxalis/view/components/markdown_modal"; -import { NODE_ID_REF_REGEX, POSITION_REF_REGEX } from "oxalis/constants"; import { document } from "libs/window"; +import { NODE_ID_REF_REGEX, POSITION_REF_REGEX } from "oxalis/constants"; import { setActiveNodeAction } from "oxalis/model/actions/skeletontracing_actions"; import type { CommentType } from "oxalis/store"; import Store from "oxalis/store"; +import { MarkdownWrapper } from "oxalis/view/components/markdown_modal"; function linkify(comment: string) { return comment // Replace linked nodes (#) with a proper link diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/comment_tab/comment_tab_view.tsx b/frontend/javascripts/oxalis/view/right-border-tabs/comment_tab/comment_tab_view.tsx index 0e5fd08ea85..ebb52912d11 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/comment_tab/comment_tab_view.tsx +++ b/frontend/javascripts/oxalis/view/right-border-tabs/comment_tab/comment_tab_view.tsx @@ -1,4 +1,3 @@ -import { Dropdown, Tooltip, Space, Tree as AntdTree, type TreeProps, type GetRef } from "antd"; import { ArrowLeftOutlined, ArrowRightOutlined, @@ -8,24 +7,23 @@ import { SearchOutlined, ShrinkOutlined, } from "@ant-design/icons"; -import { useDispatch, useSelector } from "react-redux"; -import React, { useEffect, useRef, useState } from "react"; +import { Tree as AntdTree, Dropdown, type GetRef, Space, Tooltip, type TreeProps } from "antd"; +import type { EventDataNode } from "antd/es/tree"; +import { useLifecycle } from "beautiful-react-hooks"; +import { InputKeyboard } from "libs/input"; +import { useEffectOnlyOnce } from "libs/react_hooks"; +import { compareBy, localeCompareBy } from "libs/utils"; import _ from "lodash"; import memoizeOne from "memoize-one"; -import { Comment, commentListId } from "oxalis/view/right-border-tabs/comment_tab/comment"; -import { compareBy, localeCompareBy } from "libs/utils"; -import { InputKeyboard } from "libs/input"; -import { MarkdownModal } from "oxalis/view/components/markdown_modal"; -import { cachedDiffTrees } from "oxalis/model/sagas/skeletontracing_saga"; +import messages from "messages"; +import { isAnnotationOwner } from "oxalis/model/accessors/annotation_accessor"; import { getActiveNode, getSkeletonTracing } from "oxalis/model/accessors/skeletontracing_accessor"; import { - setActiveNodeAction, createCommentAction, deleteCommentAction, + setActiveNodeAction, } from "oxalis/model/actions/skeletontracing_actions"; -import ButtonComponent from "oxalis/view/components/button_component"; -import DomVisibilityObserver from "oxalis/view/components/dom_visibility_observer"; -import InputComponent from "oxalis/view/components/input_component"; +import { cachedDiffTrees } from "oxalis/model/sagas/skeletontracing_saga"; import type { CommentType, MutableCommentType, @@ -34,16 +32,18 @@ import type { Tree, TreeMap, } from "oxalis/store"; -import messages from "messages"; -import AdvancedSearchPopover from "../advanced_search_popover"; +import ButtonComponent from "oxalis/view/components/button_component"; +import DomVisibilityObserver from "oxalis/view/components/dom_visibility_observer"; +import InputComponent from "oxalis/view/components/input_component"; +import { MarkdownModal } from "oxalis/view/components/markdown_modal"; +import { Comment, commentListId } from "oxalis/view/right-border-tabs/comment_tab/comment"; import type { MenuProps } from "rc-menu"; -import type { Comparator } from "types/globals"; -import type { EventDataNode } from "antd/es/tree"; +import React, { useEffect, useRef, useState } from "react"; +import { useDispatch, useSelector } from "react-redux"; import AutoSizer from "react-virtualized-auto-sizer"; -import { useEffectOnlyOnce } from "libs/react_hooks"; +import type { Comparator } from "types/globals"; +import AdvancedSearchPopover from "../advanced_search_popover"; import { ColoredDotIcon } from "../segments_tab/segment_list_item"; -import { useLifecycle } from "beautiful-react-hooks"; -import { isAnnotationOwner } from "oxalis/model/accessors/annotation_accessor"; const commentTabId = "commentTabId"; enum SortByEnum { diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/connectome_tab/connectome_filters.tsx b/frontend/javascripts/oxalis/view/right-border-tabs/connectome_tab/connectome_filters.tsx index de669865627..7afa6ab593b 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/connectome_tab/connectome_filters.tsx +++ b/frontend/javascripts/oxalis/view/right-border-tabs/connectome_tab/connectome_filters.tsx @@ -1,14 +1,14 @@ -import { Checkbox, Divider, Popover, Tooltip } from "antd"; import { FilterOutlined } from "@ant-design/icons"; -import React from "react"; +import { Checkbox, Divider, Popover, Tooltip } from "antd"; import _ from "lodash"; +import ButtonComponent from "oxalis/view/components/button_component"; import type { - Synapse, ConnectomeData, DirectionCaptionsKeys, + Synapse, } from "oxalis/view/right-border-tabs/connectome_tab/synapse_tree"; import { directionCaptions } from "oxalis/view/right-border-tabs/connectome_tab/synapse_tree"; -import ButtonComponent from "oxalis/view/components/button_component"; +import React from "react"; type SynapseDirection = "in" | "out"; diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/connectome_tab/connectome_settings.tsx b/frontend/javascripts/oxalis/view/right-border-tabs/connectome_tab/connectome_settings.tsx index e8e136052ac..c5a30e71ae0 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/connectome_tab/connectome_settings.tsx +++ b/frontend/javascripts/oxalis/view/right-border-tabs/connectome_tab/connectome_settings.tsx @@ -1,22 +1,22 @@ -import { Popover, Select, Tooltip, Row, Col } from "antd"; import { SettingOutlined } from "@ant-design/icons"; -import { connect } from "react-redux"; -import React from "react"; -import type { APISegmentationLayer, APIConnectomeFile, APIDataset } from "types/api_flow_types"; -import type { OxalisState } from "oxalis/store"; -import Store from "oxalis/store"; -import ButtonComponent from "oxalis/view/components/button_component"; import { getConnectomeFilesForDatasetLayer } from "admin/admin_rest_api"; +import { Col, Popover, Row, Select, Tooltip } from "antd"; +import { settings } from "messages"; +import defaultState from "oxalis/default_state"; import { updateConnectomeFileListAction, updateCurrentConnectomeFileAction, } from "oxalis/model/actions/connectome_actions"; -import { getBaseSegmentationName } from "oxalis/view/right-border-tabs/segments_tab/segments_view_helper"; -import { userSettings } from "types/schemas/user_settings.schema"; -import { settings } from "messages"; import { updateUserSettingAction } from "oxalis/model/actions/settings_actions"; +import type { OxalisState } from "oxalis/store"; +import Store from "oxalis/store"; +import ButtonComponent from "oxalis/view/components/button_component"; import { NumberSliderSetting } from "oxalis/view/components/setting_input_views"; -import defaultState from "oxalis/default_state"; +import { getBaseSegmentationName } from "oxalis/view/right-border-tabs/segments_tab/segments_view_helper"; +import React from "react"; +import { connect } from "react-redux"; +import type { APIConnectomeFile, APIDataset, APISegmentationLayer } from "types/api_flow_types"; +import { userSettings } from "types/schemas/user_settings.schema"; const { Option } = Select; type OwnProps = { segmentationLayer: APISegmentationLayer | null | undefined; diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/connectome_tab/connectome_view.tsx b/frontend/javascripts/oxalis/view/right-border-tabs/connectome_tab/connectome_view.tsx index ac50d3a0de1..9628ab6b503 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/connectome_tab/connectome_view.tsx +++ b/frontend/javascripts/oxalis/view/right-border-tabs/connectome_tab/connectome_view.tsx @@ -1,66 +1,66 @@ -import { Alert, Empty, Space, Tooltip, type TreeProps } from "antd"; -import { connect } from "react-redux"; -import Maybe from "data.maybe"; -import React from "react"; -import _ from "lodash"; -import type { - APISegmentationLayer, - APIDataset, - APIConnectomeFile, - APIDataSourceId, -} from "types/api_flow_types"; -import { diffArrays, unique, map3 } from "libs/utils"; -import { getTreeNameForAgglomerateSkeleton } from "oxalis/model/accessors/skeletontracing_accessor"; -import { getBaseSegmentationName } from "oxalis/view/right-border-tabs/segments_tab/segments_view_helper"; import { - getSynapsesOfAgglomerates, - getSynapseSources, getSynapseDestinations, getSynapsePositions, + getSynapseSources, getSynapseTypes, + getSynapsesOfAgglomerates, } from "admin/admin_rest_api"; +import { Alert, Empty, Space, Tooltip, type TreeProps } from "antd"; +import Maybe from "data.maybe"; +import DiffableMap from "libs/diffable_map"; +import { stringToAntdColorPresetRgb } from "libs/format_utils"; +import Toast from "libs/toast"; +import { diffArrays, map3, unique } from "libs/utils"; +import _ from "lodash"; +import { TreeTypeEnum, type Vector3 } from "oxalis/constants"; +import Constants, { MappingStatusEnum } from "oxalis/constants"; +import getSceneController from "oxalis/controller/scene_controller_provider"; import { - getVisibleOrLastSegmentationLayer, getMappingInfo, + getVisibleOrLastSegmentationLayer, } from "oxalis/model/accessors/dataset_accessor"; +import { getTreeNameForAgglomerateSkeleton } from "oxalis/model/accessors/skeletontracing_accessor"; import { - initializeConnectomeTracingAction, - removeConnectomeTracingAction, - deleteConnectomeTreesAction, addConnectomeTreesAction, - setConnectomeTreesVisibilityAction, - setActiveConnectomeAgglomerateIdsAction, + deleteConnectomeTreesAction, + initializeConnectomeTracingAction, loadConnectomeAgglomerateSkeletonAction, removeConnectomeAgglomerateSkeletonAction, + removeConnectomeTracingAction, + setActiveConnectomeAgglomerateIdsAction, + setConnectomeTreesVisibilityAction, } from "oxalis/model/actions/connectome_actions"; -import { stringToAntdColorPresetRgb } from "libs/format_utils"; import { setMappingAction } from "oxalis/model/actions/settings_actions"; -import ButtonComponent from "oxalis/view/components/button_component"; -import { TreeTypeEnum, type Vector3 } from "oxalis/constants"; -import Constants, { MappingStatusEnum } from "oxalis/constants"; -import DiffableMap from "libs/diffable_map"; import EdgeCollection from "oxalis/model/edge_collection"; -import InputComponent from "oxalis/view/components/input_component"; import type { - OxalisState, - MutableTree, + ActiveMappingInfo, MutableNode, + MutableTree, MutableTreeMap, - ActiveMappingInfo, + OxalisState, } from "oxalis/store"; import Store from "oxalis/store"; -import Toast from "libs/toast"; -import getSceneController from "oxalis/controller/scene_controller_provider"; +import ButtonComponent from "oxalis/view/components/button_component"; +import InputComponent from "oxalis/view/components/input_component"; +import ConnectomeFilters from "oxalis/view/right-border-tabs/connectome_tab/connectome_filters"; +import ConnectomeSettings from "oxalis/view/right-border-tabs/connectome_tab/connectome_settings"; import type { - ConnectomeData, Agglomerate, + ConnectomeData, TreeNode, } from "oxalis/view/right-border-tabs/connectome_tab/synapse_tree"; import SynapseTree, { convertConnectomeToTreeData, } from "oxalis/view/right-border-tabs/connectome_tab/synapse_tree"; -import ConnectomeFilters from "oxalis/view/right-border-tabs/connectome_tab/connectome_filters"; -import ConnectomeSettings from "oxalis/view/right-border-tabs/connectome_tab/connectome_settings"; +import { getBaseSegmentationName } from "oxalis/view/right-border-tabs/segments_tab/segments_view_helper"; +import React from "react"; +import { connect } from "react-redux"; +import type { + APIConnectomeFile, + APIDataSourceId, + APIDataset, + APISegmentationLayer, +} from "types/api_flow_types"; const connectomeTabId = "connectome-view"; type StateProps = { dataset: APIDataset; diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/connectome_tab/synapse_tree.tsx b/frontend/javascripts/oxalis/view/right-border-tabs/connectome_tab/synapse_tree.tsx index 2f9cc9d07c2..23ffc0e98c7 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/connectome_tab/synapse_tree.tsx +++ b/frontend/javascripts/oxalis/view/right-border-tabs/connectome_tab/synapse_tree.tsx @@ -1,14 +1,14 @@ -import AutoSizer from "react-virtualized-auto-sizer"; import { Dropdown, type MenuProps, Tag, Tree, type TreeProps } from "antd"; -import React from "react"; +import { stringToAntdColorPreset } from "libs/format_utils"; import _ from "lodash"; import memoizeOne from "memoize-one"; -import { stringToAntdColorPreset } from "libs/format_utils"; -import { api } from "oxalis/singletons"; import type { Vector3 } from "oxalis/constants"; -import type { APIConnectomeFile } from "types/api_flow_types"; -import Store from "oxalis/store"; import { updateTemporarySettingAction } from "oxalis/model/actions/settings_actions"; +import { api } from "oxalis/singletons"; +import Store from "oxalis/store"; +import React from "react"; +import AutoSizer from "react-virtualized-auto-sizer"; +import type { APIConnectomeFile } from "types/api_flow_types"; type BaseSynapse = { id: number; position: Vector3; diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/dataset_info_tab_view.tsx b/frontend/javascripts/oxalis/view/right-border-tabs/dataset_info_tab_view.tsx index f9e09e57d8c..7910b9fcf57 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/dataset_info_tab_view.tsx +++ b/frontend/javascripts/oxalis/view/right-border-tabs/dataset_info_tab_view.tsx @@ -1,13 +1,12 @@ -import type { Dispatch } from "redux"; -import { Typography, Tag } from "antd"; -import { SettingOutlined, InfoCircleOutlined, EditOutlined } from "@ant-design/icons"; -import { connect } from "react-redux"; +import { EditOutlined, InfoCircleOutlined, SettingOutlined } from "@ant-design/icons"; +import { Tag, Typography } from "antd"; +import { formatNumberToVolume, formatScale, formatVoxels } from "libs/format_utils"; import Markdown from "libs/markdown_adapter"; -import React, { type CSSProperties } from "react"; -import { Link } from "react-router-dom"; -import type { APIDataset, APIUser } from "types/api_flow_types"; import { ControlModeEnum, LongUnitToShortUnitMap } from "oxalis/constants"; -import { formatNumberToVolume, formatScale, formatVoxels } from "libs/format_utils"; +import { + type CombinedTracingStats, + getCombinedStats, +} from "oxalis/model/accessors/annotation_accessor"; import { getDatasetExtentAsString, getDatasetExtentInUnitAsProduct, @@ -17,24 +16,25 @@ import { } from "oxalis/model/accessors/dataset_accessor"; import { getActiveMagInfo } from "oxalis/model/accessors/flycam_accessor"; import { - getCombinedStats, - type CombinedTracingStats, -} from "oxalis/model/accessors/annotation_accessor"; -import { - setAnnotationNameAction, setAnnotationDescriptionAction, + setAnnotationNameAction, } from "oxalis/model/actions/annotation_actions"; +import React, { type CSSProperties } from "react"; +import { connect } from "react-redux"; +import { Link } from "react-router-dom"; +import type { Dispatch } from "redux"; +import type { APIDataset, APIUser } from "types/api_flow_types"; import type { OxalisState, Task, Tracing } from "oxalis/store"; -import { formatUserName } from "oxalis/model/accessors/user_accessor"; -import { mayEditAnnotationProperties } from "oxalis/model/accessors/annotation_accessor"; -import { mayUserEditDataset, pluralize, safeNumberToStr } from "libs/utils"; -import { getReadableNameForLayerName } from "oxalis/model/accessors/volumetracing_accessor"; import { getOrganization } from "admin/admin_rest_api"; -import { MarkdownModal } from "../components/markdown_modal"; import FastTooltip from "components/fast_tooltip"; +import { mayUserEditDataset, pluralize, safeNumberToStr } from "libs/utils"; import messages from "messages"; +import { mayEditAnnotationProperties } from "oxalis/model/accessors/annotation_accessor"; +import { formatUserName } from "oxalis/model/accessors/user_accessor"; +import { getReadableNameForLayerName } from "oxalis/model/accessors/volumetracing_accessor"; +import { MarkdownModal } from "../components/markdown_modal"; type StateProps = { annotation: Tracing; diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/delete_group_modal_view.tsx b/frontend/javascripts/oxalis/view/right-border-tabs/delete_group_modal_view.tsx index bae50076b91..7810a53a1dc 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/delete_group_modal_view.tsx +++ b/frontend/javascripts/oxalis/view/right-border-tabs/delete_group_modal_view.tsx @@ -1,4 +1,4 @@ -import { Modal, Button } from "antd"; +import { Button, Modal } from "antd"; import messages from "messages"; type Props = { diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/metadata_table.tsx b/frontend/javascripts/oxalis/view/right-border-tabs/metadata_table.tsx index f55aa120a25..513dea8f6f3 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/metadata_table.tsx +++ b/frontend/javascripts/oxalis/view/right-border-tabs/metadata_table.tsx @@ -1,20 +1,20 @@ import { CloseOutlined, TagsOutlined } from "@ant-design/icons"; import { Button } from "antd"; +import FastTooltip from "components/fast_tooltip"; import { type APIMetadataWithError, - getTypeSelectDropdownMenu, - getUsedTagsWithinMetadata, InnerMetadataTable, MetadataValueInput, + getTypeSelectDropdownMenu, + getUsedTagsWithinMetadata, } from "dashboard/folders/metadata_table"; +import { memo } from "react"; import { type APIMetadataEntry, APIMetadataEnum, type MetadataEntryProto, } from "types/api_flow_types"; import { InputWithUpdateOnBlur } from "../components/input_with_update_on_blur"; -import { memo } from "react"; -import FastTooltip from "components/fast_tooltip"; const getKeyInputIdForIndex = (index: number) => `metadata-key-input-id-${index}`; diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/scrollable_virtualized_tree.tsx b/frontend/javascripts/oxalis/view/right-border-tabs/scrollable_virtualized_tree.tsx index aa02951bc02..17a58c15036 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/scrollable_virtualized_tree.tsx +++ b/frontend/javascripts/oxalis/view/right-border-tabs/scrollable_virtualized_tree.tsx @@ -1,8 +1,8 @@ import { Tree as AntdTree, type TreeProps } from "antd"; import type { BasicDataNode } from "antd/es/tree"; import { throttle } from "lodash"; -import { forwardRef, useCallback, useRef } from "react"; import type RcTree from "rc-tree"; +import { forwardRef, useCallback, useRef } from "react"; const MIN_SCROLL_SPEED = 30; const MAX_SCROLL_SPEED = 200; diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/segments_tab/segment_list_item.tsx b/frontend/javascripts/oxalis/view/right-border-tabs/segments_tab/segment_list_item.tsx index 04ba5ef6737..2337df6556c 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/segments_tab/segment_list_item.tsx +++ b/frontend/javascripts/oxalis/view/right-border-tabs/segments_tab/segment_list_item.tsx @@ -1,27 +1,40 @@ import { DeleteOutlined, + EllipsisOutlined, LoadingOutlined, ReloadOutlined, - VerticalAlignBottomOutlined, - EllipsisOutlined, TagsOutlined, + VerticalAlignBottomOutlined, } from "@ant-design/icons"; -import { List, type MenuProps, App } from "antd"; -import { useDispatch, useSelector } from "react-redux"; +import { App, List, type MenuProps } from "antd"; import Checkbox, { type CheckboxChangeEvent } from "antd/lib/checkbox/Checkbox"; import React from "react"; +import { useDispatch, useSelector } from "react-redux"; +import type { MenuItemType } from "antd/es/menu/interface"; import classnames from "classnames"; +import { ChangeColorMenuItemContent } from "components/color_picker"; +import FastTooltip from "components/fast_tooltip"; +import { V4 } from "libs/mjs"; +import Toast from "libs/toast"; import * as Utils from "libs/utils"; -import type { APISegmentationLayer, APIMeshFile } from "types/api_flow_types"; import type { Vector3, Vector4 } from "oxalis/constants"; +import { getSegmentIdForPosition } from "oxalis/controller/combinations/volume_handlers"; import { + getAdditionalCoordinatesAsString, + getPosition, +} from "oxalis/model/accessors/flycam_accessor"; +import { + getSegmentColorAsRGBA, + getSegmentName, +} from "oxalis/model/accessors/volumetracing_accessor"; +import { + refreshMeshAction, + removeMeshAction, triggerMeshDownloadAction, updateMeshVisibilityAction, - removeMeshAction, - refreshMeshAction, } from "oxalis/model/actions/annotation_actions"; -import EditableTextLabel from "oxalis/view/components/editable_text_label"; +import { rgbaToCSS } from "oxalis/shaders/utils.glsl"; import type { ActiveMappingInfo, MeshInformation, @@ -30,25 +43,12 @@ import type { VolumeTracing, } from "oxalis/store"; import Store from "oxalis/store"; -import { - getSegmentColorAsRGBA, - getSegmentName, -} from "oxalis/model/accessors/volumetracing_accessor"; -import Toast from "libs/toast"; -import { rgbaToCSS } from "oxalis/shaders/utils.glsl"; -import { V4 } from "libs/mjs"; -import { ChangeColorMenuItemContent } from "components/color_picker"; -import type { MenuItemType } from "antd/es/menu/interface"; -import { withMappingActivationConfirmation } from "./segments_view_helper"; -import { LoadMeshMenuItemLabel } from "./load_mesh_menu_item_label"; -import type { AdditionalCoordinate } from "types/api_flow_types"; -import { - getAdditionalCoordinatesAsString, - getPosition, -} from "oxalis/model/accessors/flycam_accessor"; -import FastTooltip from "components/fast_tooltip"; +import EditableTextLabel from "oxalis/view/components/editable_text_label"; import { getContextMenuPositionFromEvent } from "oxalis/view/context_menu"; -import { getSegmentIdForPosition } from "oxalis/controller/combinations/volume_handlers"; +import type { APIMeshFile, APISegmentationLayer } from "types/api_flow_types"; +import type { AdditionalCoordinate } from "types/api_flow_types"; +import { LoadMeshMenuItemLabel } from "./load_mesh_menu_item_label"; +import { withMappingActivationConfirmation } from "./segments_view_helper"; const ALSO_DELETE_SEGMENT_FROM_LIST_KEY = "also-delete-segment-from-list"; diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/segments_tab/segment_statistics_modal.tsx b/frontend/javascripts/oxalis/view/right-border-tabs/segments_tab/segment_statistics_modal.tsx index b5efd828211..eba4554034d 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/segments_tab/segment_statistics_modal.tsx +++ b/frontend/javascripts/oxalis/view/right-border-tabs/segments_tab/segment_statistics_modal.tsx @@ -3,25 +3,25 @@ import { Alert, Modal, Spin, Table } from "antd"; import saveAs from "file-saver"; import { formatNumberToVolume } from "libs/format_utils"; import { useFetch } from "libs/react_helpers"; +import { pluralize, transformToCSVRow } from "libs/utils"; import { LongUnitToShortUnitMap, type Vector3 } from "oxalis/constants"; -import { getMappingInfo, getMagInfo } from "oxalis/model/accessors/dataset_accessor"; -import type { OxalisState, Segment } from "oxalis/store"; -import { - type SegmentHierarchyNode, - type SegmentHierarchyGroup, - getVolumeRequestUrl, -} from "./segments_view_helper"; -import { api } from "oxalis/singletons"; -import type { APISegmentationLayer, VoxelSize } from "types/api_flow_types"; -import { getBoundingBoxInMag1 } from "oxalis/model/sagas/volume/helpers"; -import { useSelector } from "react-redux"; +import { getMagInfo, getMappingInfo } from "oxalis/model/accessors/dataset_accessor"; import { getAdditionalCoordinatesAsString, hasAdditionalCoordinates, } from "oxalis/model/accessors/flycam_accessor"; -import { pluralize, transformToCSVRow } from "libs/utils"; import { getVolumeTracingById } from "oxalis/model/accessors/volumetracing_accessor"; +import { getBoundingBoxInMag1 } from "oxalis/model/sagas/volume/helpers"; import { voxelToVolumeInUnit } from "oxalis/model/scaleinfo"; +import { api } from "oxalis/singletons"; +import type { OxalisState, Segment } from "oxalis/store"; +import { useSelector } from "react-redux"; +import type { APISegmentationLayer, VoxelSize } from "types/api_flow_types"; +import { + type SegmentHierarchyGroup, + type SegmentHierarchyNode, + getVolumeRequestUrl, +} from "./segments_view_helper"; const MODAL_ERROR_MESSAGE = "Segment statistics could not be fetched. Check the console for more details."; diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/segments_tab/segments_view.tsx b/frontend/javascripts/oxalis/view/right-border-tabs/segments_tab/segments_view.tsx index d17eb5ea64f..21f1232fa77 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/segments_tab/segments_view.tsx +++ b/frontend/javascripts/oxalis/view/right-border-tabs/segments_tab/segments_view.tsx @@ -2,8 +2,8 @@ import { ArrowRightOutlined, CloseOutlined, DeleteOutlined, - DownloadOutlined, DownOutlined, + DownloadOutlined, ExclamationCircleOutlined, ExpandAltOutlined, EyeInvisibleOutlined, @@ -17,20 +17,21 @@ import { } from "@ant-design/icons"; import { getJobs, startComputeMeshFileJob } from "admin/admin_rest_api"; import { + PricingPlanEnum, getFeatureNotAvailableInPlanMessage, isFeatureAllowedByPricingPlan, - PricingPlanEnum, } from "admin/organization/pricing_plan_utils"; import { Button, ConfigProvider, Divider, Empty, + type MenuProps, Modal, Popover, Select, - type MenuProps, } from "antd"; +import type { ItemType } from "antd/lib/menu/interface"; import type { DataNode } from "antd/lib/tree"; import { ChangeColorMenuItemContent } from "components/color_picker"; import FastTooltip from "components/fast_tooltip"; @@ -40,9 +41,9 @@ import _, { isNumber, memoize } from "lodash"; import type { Vector3 } from "oxalis/constants"; import { EMPTY_OBJECT, MappingStatusEnum } from "oxalis/constants"; import { + getMagInfoOfVisibleSegmentationLayer, getMappingInfo, getMaybeSegmentIndexAvailability, - getMagInfoOfVisibleSegmentationLayer, getVisibleSegmentationLayer, } from "oxalis/model/accessors/dataset_accessor"; import { getAdditionalCoordinatesAsString } from "oxalis/model/accessors/flycam_accessor"; @@ -97,11 +98,12 @@ import Store from "oxalis/store"; import ButtonComponent from "oxalis/view/components/button_component"; import DomVisibilityObserver from "oxalis/view/components/dom_visibility_observer"; import EditableTextLabel from "oxalis/view/components/editable_text_label"; +import { InputWithUpdateOnBlur } from "oxalis/view/components/input_with_update_on_blur"; import { getContextMenuPositionFromEvent } from "oxalis/view/context_menu"; import SegmentListItem from "oxalis/view/right-border-tabs/segments_tab/segment_list_item"; import { - getBaseSegmentationName, type SegmentHierarchyNode, + getBaseSegmentationName, } from "oxalis/view/right-border-tabs/segments_tab/segments_view_helper"; import type RcTree from "rc-tree"; import React, { type Key } from "react"; @@ -119,9 +121,12 @@ import { APIJobType, type AdditionalCoordinate } from "types/api_flow_types"; import type { ValueOf } from "types/globals"; import AdvancedSearchPopover from "../advanced_search_popover"; import DeleteGroupModalView from "../delete_group_modal_view"; +import { MetadataEntryTableRows } from "../metadata_table"; import { ResizableSplitPane } from "../resizable_split_pane"; +import ScrollableVirtualizedTree from "../scrollable_virtualized_tree"; import { ContextMenuContainer } from "../sidebar_context_menu"; import { + MISSING_GROUP_ID, additionallyExpandGroup, createGroupToParentMap, createGroupToSegmentsMap, @@ -129,13 +134,8 @@ import { getExpandedGroups, getGroupByIdWithSubgroups, getGroupNodeKey, - MISSING_GROUP_ID, } from "../tree_hierarchy_view_helpers"; -import { MetadataEntryTableRows } from "../metadata_table"; import { SegmentStatisticsModal } from "./segment_statistics_modal"; -import type { ItemType } from "antd/lib/menu/interface"; -import { InputWithUpdateOnBlur } from "oxalis/view/components/input_with_update_on_blur"; -import ScrollableVirtualizedTree from "../scrollable_virtualized_tree"; const SCROLL_DELAY_MS = 50; diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/segments_tab/segments_view_helper.tsx b/frontend/javascripts/oxalis/view/right-border-tabs/segments_tab/segments_view_helper.tsx index 8ef6374d529..4c4e3f3ff4a 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/segments_tab/segments_view_helper.tsx +++ b/frontend/javascripts/oxalis/view/right-border-tabs/segments_tab/segments_view_helper.tsx @@ -1,18 +1,18 @@ +import { hasSegmentIndexInDataStore } from "admin/admin_rest_api"; import { Modal } from "antd"; -import type { APIDataLayer, APIDataset, APISegmentationLayer } from "types/api_flow_types"; -import type { ActiveMappingInfo, HybridTracing, Segment } from "oxalis/store"; -import Store from "oxalis/store"; -import { MappingStatusEnum } from "oxalis/constants"; -import { setMappingAction, setMappingEnabledAction } from "oxalis/model/actions/settings_actions"; +import type { BasicDataNode } from "antd/es/tree"; import { waitForCondition } from "libs/utils"; +import { MappingStatusEnum } from "oxalis/constants"; import { getMappingInfo } from "oxalis/model/accessors/dataset_accessor"; import { getEditableMappingForVolumeTracingId, getVolumeTracingById, } from "oxalis/model/accessors/volumetracing_accessor"; +import { setMappingAction, setMappingEnabledAction } from "oxalis/model/actions/settings_actions"; +import type { ActiveMappingInfo, HybridTracing, Segment } from "oxalis/store"; +import Store from "oxalis/store"; import type { MenuClickEventHandler } from "rc-menu/lib/interface"; -import { hasSegmentIndexInDataStore } from "admin/admin_rest_api"; -import type { BasicDataNode } from "antd/es/tree"; +import type { APIDataLayer, APIDataset, APISegmentationLayer } from "types/api_flow_types"; const { confirm } = Modal; diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/tree_hierarchy_view_helpers.ts b/frontend/javascripts/oxalis/view/right-border-tabs/tree_hierarchy_view_helpers.ts index b8cf6e283df..cda611dd49d 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/tree_hierarchy_view_helpers.ts +++ b/frontend/javascripts/oxalis/view/right-border-tabs/tree_hierarchy_view_helpers.ts @@ -1,7 +1,7 @@ import type { DataNode } from "antd/es/tree"; import _ from "lodash"; import { mapGroupsWithRoot } from "oxalis/model/accessors/skeletontracing_accessor"; -import type { Tree, TreeGroup, SegmentMap, Segment, TreeMap, SegmentGroup } from "oxalis/store"; +import type { Segment, SegmentGroup, SegmentMap, Tree, TreeGroup, TreeMap } from "oxalis/store"; export const MISSING_GROUP_ID = -1; diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/trees_tab/skeleton_tab_view.tsx b/frontend/javascripts/oxalis/view/right-border-tabs/trees_tab/skeleton_tab_view.tsx index f373160a65f..fcfffe11bf9 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/trees_tab/skeleton_tab_view.tsx +++ b/frontend/javascripts/oxalis/view/right-border-tabs/trees_tab/skeleton_tab_view.tsx @@ -1,99 +1,99 @@ -import { Dropdown, Empty, Spin, Modal, Tooltip, notification, type MenuProps, Space } from "antd"; -import type { Dispatch } from "redux"; import { - DownloadOutlined, DownOutlined, + DownloadOutlined, ExclamationCircleOutlined, SearchOutlined, UploadOutlined, WarningOutlined, } from "@ant-design/icons"; -import { batchActions } from "redux-batched-actions"; -import { connect } from "react-redux"; +import { BlobReader, BlobWriter, type Entry, ZipReader } from "@zip.js/zip.js"; +import { clearCache, getBuildInfo, importVolumeTracing } from "admin/admin_rest_api"; +import { Dropdown, Empty, type MenuProps, Modal, Space, Spin, Tooltip, notification } from "antd"; import { saveAs } from "file-saver"; -import { BlobReader, BlobWriter, ZipReader, type Entry } from "@zip.js/zip.js"; -import * as React from "react"; +import { formatLengthAsVx, formatNumberToLength } from "libs/format_utils"; +import { readFileAsArrayBuffer, readFileAsText } from "libs/read_file"; +import Toast from "libs/toast"; +import * as Utils from "libs/utils"; import _ from "lodash"; import memoizeOne from "memoize-one"; -import type { Action } from "oxalis/model/actions/actions"; -import { addUserBoundingBoxesAction } from "oxalis/model/actions/annotation_actions"; -import { - createGroupToTreesMap, - callDeep, - MISSING_GROUP_ID, - GroupTypeEnum, - createGroupToParentMap, - additionallyExpandGroup, -} from "oxalis/view/right-border-tabs/tree_hierarchy_view_helpers"; -import { createMutableTreeMapFromTreeArray } from "oxalis/model/reducers/skeletontracing_reducer_helpers"; -import { formatNumberToLength, formatLengthAsVx } from "libs/format_utils"; -import { getActiveSegmentationTracing } from "oxalis/model/accessors/volumetracing_accessor"; +import messages from "messages"; +import { LongUnitToShortUnitMap } from "oxalis/constants"; +import { isAnnotationOwner } from "oxalis/model/accessors/annotation_accessor"; import { + enforceSkeletonTracing, getActiveTree, getActiveTreeGroup, getTree, - enforceSkeletonTracing, isSkeletonLayerTransformed, } from "oxalis/model/accessors/skeletontracing_accessor"; -import { getBuildInfo, importVolumeTracing, clearCache } from "admin/admin_rest_api"; -import { - importVolumeTracingAction, - setLargestSegmentIdAction, -} from "oxalis/model/actions/volumetracing_actions"; -import { parseProtoTracing } from "oxalis/model/helpers/proto_helpers"; -import { readFileAsText, readFileAsArrayBuffer } from "libs/read_file"; -import { - serializeToNml, - getNmlName, - parseNml, - wrapInNewGroup, - NmlParseError, -} from "oxalis/model/helpers/nml_helpers"; -import { setDropzoneModalVisibilityAction } from "oxalis/model/actions/ui_actions"; +import { getActiveSegmentationTracing } from "oxalis/model/accessors/volumetracing_accessor"; +import type { Action } from "oxalis/model/actions/actions"; +import { addUserBoundingBoxesAction } from "oxalis/model/actions/annotation_actions"; +import { setVersionNumberAction } from "oxalis/model/actions/save_actions"; +import { updateUserSettingAction } from "oxalis/model/actions/settings_actions"; import { - setTreeNameAction, + type BatchableUpdateTreeAction, + addTreesAndGroupsAction, + batchUpdateGroupsAndTreesAction, createTreeAction, - deleteTreesAction, deleteTreeAsUserAction, - shuffleAllTreeColorsAction, - selectNextTreeAction, - toggleAllTreesAction, - toggleInactiveTreesAction, - setActiveTreeAction, + deleteTreesAction, deselectActiveTreeAction, deselectActiveTreeGroupAction, + selectNextTreeAction, + setActiveTreeAction, setActiveTreeGroupAction, + setExpandedTreeGroupsByIdsAction, setTreeGroupAction, setTreeGroupsAction, - addTreesAndGroupsAction, - type BatchableUpdateTreeAction, - batchUpdateGroupsAndTreesAction, - setExpandedTreeGroupsByIdsAction, + setTreeNameAction, + shuffleAllTreeColorsAction, + toggleAllTreesAction, + toggleInactiveTreesAction, } from "oxalis/model/actions/skeletontracing_actions"; -import { setVersionNumberAction } from "oxalis/model/actions/save_actions"; -import { updateUserSettingAction } from "oxalis/model/actions/settings_actions"; -import ButtonComponent from "oxalis/view/components/button_component"; -import DomVisibilityObserver from "oxalis/view/components/dom_visibility_observer"; -import InputComponent from "oxalis/view/components/input_component"; +import { setDropzoneModalVisibilityAction } from "oxalis/model/actions/ui_actions"; +import { + importVolumeTracingAction, + setLargestSegmentIdAction, +} from "oxalis/model/actions/volumetracing_actions"; +import { + NmlParseError, + getNmlName, + parseNml, + serializeToNml, + wrapInNewGroup, +} from "oxalis/model/helpers/nml_helpers"; +import { parseProtoTracing } from "oxalis/model/helpers/proto_helpers"; +import { createMutableTreeMapFromTreeArray } from "oxalis/model/reducers/skeletontracing_reducer_helpers"; import { Model } from "oxalis/singletons"; +import { api } from "oxalis/singletons"; import type { + MutableTreeMap, OxalisState, Tree, - TreeMap, TreeGroup, - MutableTreeMap, + TreeMap, UserBoundingBox, } from "oxalis/store"; import Store from "oxalis/store"; -import Toast from "libs/toast"; +import ButtonComponent from "oxalis/view/components/button_component"; +import DomVisibilityObserver from "oxalis/view/components/dom_visibility_observer"; +import InputComponent from "oxalis/view/components/input_component"; +import { + GroupTypeEnum, + MISSING_GROUP_ID, + additionallyExpandGroup, + callDeep, + createGroupToParentMap, + createGroupToTreesMap, +} from "oxalis/view/right-border-tabs/tree_hierarchy_view_helpers"; import TreeHierarchyView from "oxalis/view/right-border-tabs/trees_tab/tree_hierarchy_view"; -import * as Utils from "libs/utils"; -import { api } from "oxalis/singletons"; -import messages from "messages"; +import * as React from "react"; +import { connect } from "react-redux"; +import type { Dispatch } from "redux"; +import { batchActions } from "redux-batched-actions"; import AdvancedSearchPopover from "../advanced_search_popover"; import DeleteGroupModalView from "../delete_group_modal_view"; -import { isAnnotationOwner } from "oxalis/model/accessors/annotation_accessor"; -import { LongUnitToShortUnitMap } from "oxalis/constants"; const { confirm } = Modal; const treeTabId = "tree-list"; diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/trees_tab/tree_hierarchy_renderers.tsx b/frontend/javascripts/oxalis/view/right-border-tabs/trees_tab/tree_hierarchy_renderers.tsx index c43db01f878..b462d960088 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/trees_tab/tree_hierarchy_renderers.tsx +++ b/frontend/javascripts/oxalis/view/right-border-tabs/trees_tab/tree_hierarchy_renderers.tsx @@ -11,8 +11,8 @@ import { type MenuProps, notification } from "antd"; import _ from "lodash"; import { LongUnitToShortUnitMap, - TreeTypeEnum, type TreeType, + TreeTypeEnum, type Vector3, } from "oxalis/constants"; import type { Action } from "oxalis/model/actions/actions"; @@ -38,21 +38,21 @@ import { toggleInactiveTreesAction, } from "oxalis/model/actions/skeletontracing_actions"; import { getMaximumGroupId } from "oxalis/model/reducers/skeletontracing_reducer_helpers"; -import { api, Store } from "oxalis/singletons"; +import { Store, api } from "oxalis/singletons"; import type { Tree, TreeGroup, TreeMap } from "oxalis/store"; import { + GroupTypeEnum, + MISSING_GROUP_ID, + type TreeNode, anySatisfyDeep, callDeep, createGroupToTreesMap, getGroupByIdWithSubgroups, getNodeKey, - GroupTypeEnum, makeBasicGroupObject, - MISSING_GROUP_ID, - type TreeNode, } from "oxalis/view/right-border-tabs/tree_hierarchy_view_helpers"; -import { HideTreeEdgesIcon } from "./hide_tree_edges_icon"; import { ColoredDotIcon } from "../segments_tab/segment_list_item"; +import { HideTreeEdgesIcon } from "./hide_tree_edges_icon"; export type Props = { activeTreeId: number | null | undefined; diff --git a/frontend/javascripts/oxalis/view/right-border-tabs/trees_tab/tree_hierarchy_view.tsx b/frontend/javascripts/oxalis/view/right-border-tabs/trees_tab/tree_hierarchy_view.tsx index e25c28cc865..9a0826090ea 100644 --- a/frontend/javascripts/oxalis/view/right-border-tabs/trees_tab/tree_hierarchy_view.tsx +++ b/frontend/javascripts/oxalis/view/right-border-tabs/trees_tab/tree_hierarchy_view.tsx @@ -1,46 +1,46 @@ import { DownOutlined } from "@ant-design/icons"; import { type Tree as AntdTree, type GetRef, type MenuProps, Modal, type TreeProps } from "antd"; -import React, { memo, useCallback, useEffect, useRef, useState } from "react"; -import AutoSizer from "react-virtualized-auto-sizer"; +import * as Utils from "libs/utils"; import { mapGroups } from "oxalis/model/accessors/skeletontracing_accessor"; import { setTreeGroupAction, - setTreeNameAction, setTreeMetadataAction, + setTreeNameAction, toggleAllTreesAction, toggleTreeAction, toggleTreeGroupAction, } from "oxalis/model/actions/skeletontracing_actions"; -import * as Utils from "libs/utils"; import { Store } from "oxalis/singletons"; import type { Tree, TreeGroup, TreeMap } from "oxalis/store"; import { + GroupTypeEnum, + MISSING_GROUP_ID, + type TreeNode, createGroupToTreesMap, deepFlatFilter, findParentGroupNode, getNodeKey, - GroupTypeEnum, insertTreesAndTransform, - MISSING_GROUP_ID, moveGroupsHelper, - type TreeNode, } from "oxalis/view/right-border-tabs/tree_hierarchy_view_helpers"; +import React, { memo, useCallback, useEffect, useRef, useState } from "react"; +import AutoSizer from "react-virtualized-auto-sizer"; +import type { MetadataEntryProto } from "types/api_flow_types"; +import { InputWithUpdateOnBlur } from "../../components/input_with_update_on_blur"; import { getContextMenuPositionFromEvent } from "../../context_menu"; +import { MetadataEntryTableRows } from "../metadata_table"; +import { ResizableSplitPane } from "../resizable_split_pane"; +import ScrollableVirtualizedTree from "../scrollable_virtualized_tree"; import { ContextMenuContainer } from "../sidebar_context_menu"; import { - onBatchActions, type Props, + onBatchActions, renderGroupNode, renderTreeNode, selectGroupById, setExpandedGroups, setUpdateTreeGroups, } from "./tree_hierarchy_renderers"; -import { ResizableSplitPane } from "../resizable_split_pane"; -import { MetadataEntryTableRows } from "../metadata_table"; -import type { MetadataEntryProto } from "types/api_flow_types"; -import { InputWithUpdateOnBlur } from "../../components/input_with_update_on_blur"; -import ScrollableVirtualizedTree from "../scrollable_virtualized_tree"; const onCheck: TreeProps["onCheck"] = (_checkedKeysValue, info) => { const { id, type } = info.node; diff --git a/frontend/javascripts/oxalis/view/scalebar.tsx b/frontend/javascripts/oxalis/view/scalebar.tsx index 54cc894d7ec..5b782648710 100644 --- a/frontend/javascripts/oxalis/view/scalebar.tsx +++ b/frontend/javascripts/oxalis/view/scalebar.tsx @@ -1,13 +1,13 @@ -import { connect } from "react-redux"; -import type { APIDataset } from "types/api_flow_types"; -import type { OxalisState } from "oxalis/store"; +import FastTooltip from "components/fast_tooltip"; import { formatNumberToLength } from "libs/format_utils"; -import { getViewportExtents, getTDViewZoom } from "oxalis/model/accessors/view_mode_accessor"; -import { getZoomValue } from "oxalis/model/accessors/flycam_accessor"; import type { OrthoView } from "oxalis/constants"; import constants, { Unicode, OrthoViews, LongUnitToShortUnitMap } from "oxalis/constants"; +import { getZoomValue } from "oxalis/model/accessors/flycam_accessor"; +import { getTDViewZoom, getViewportExtents } from "oxalis/model/accessors/view_mode_accessor"; import { getBaseVoxelInUnit } from "oxalis/model/scaleinfo"; -import FastTooltip from "components/fast_tooltip"; +import type { OxalisState } from "oxalis/store"; +import { connect } from "react-redux"; +import type { APIDataset } from "types/api_flow_types"; const { ThinSpace, MultiplicationSymbol } = Unicode; diff --git a/frontend/javascripts/oxalis/view/statusbar.tsx b/frontend/javascripts/oxalis/view/statusbar.tsx index e2fe885cdc4..594772f7a7e 100644 --- a/frontend/javascripts/oxalis/view/statusbar.tsx +++ b/frontend/javascripts/oxalis/view/statusbar.tsx @@ -1,44 +1,44 @@ -import { useDispatch, useSelector } from "react-redux"; -import React, { useCallback, useState } from "react"; -import { WarningOutlined, MoreOutlined, DownloadOutlined } from "@ant-design/icons"; +import { DownloadOutlined, MoreOutlined, WarningOutlined } from "@ant-design/icons"; +import FastTooltip from "components/fast_tooltip"; +import { formatCountToDataAmountUnit } from "libs/format_utils"; +import { V3 } from "libs/mjs"; +import { useInterval } from "libs/react_helpers"; +import { useKeyPress } from "libs/react_hooks"; +import message from "messages"; +import messages from "messages"; import type { Vector3 } from "oxalis/constants"; import { AltOrOptionKey, MappingStatusEnum, OrthoViews } from "oxalis/constants"; +import { + type ActionDescriptor, + getToolClassForAnnotationTool, +} from "oxalis/controller/combinations/tool_controls"; import { getMappingInfoOrNull, getVisibleSegmentationLayer, hasVisibleUint64Segmentation, } from "oxalis/model/accessors/dataset_accessor"; -import { NumberInputPopoverSetting } from "oxalis/view/components/setting_input_views"; -import { useKeyPress } from "libs/react_hooks"; import { getActiveMagInfo } from "oxalis/model/accessors/flycam_accessor"; -import { setActiveCellAction } from "oxalis/model/actions/volumetracing_actions"; -import { - setActiveNodeAction, - setActiveTreeAction, -} from "oxalis/model/actions/skeletontracing_actions"; -import { formatCountToDataAmountUnit } from "libs/format_utils"; -import message from "messages"; -import { - type ActionDescriptor, - getToolClassForAnnotationTool, -} from "oxalis/controller/combinations/tool_controls"; +import { adaptActiveToolToShortcuts } from "oxalis/model/accessors/tool_accessor"; import { calculateGlobalPos, isPlaneMode as getIsPlaneMode, } from "oxalis/model/accessors/view_mode_accessor"; -import { adaptActiveToolToShortcuts } from "oxalis/model/accessors/tool_accessor"; -import { V3 } from "libs/mjs"; -import type { OxalisState } from "oxalis/store"; import { getActiveSegmentationTracing, getReadableNameForLayerName, } from "oxalis/model/accessors/volumetracing_accessor"; +import { + setActiveNodeAction, + setActiveTreeAction, +} from "oxalis/model/actions/skeletontracing_actions"; +import { setActiveCellAction } from "oxalis/model/actions/volumetracing_actions"; import { getGlobalDataConnectionInfo } from "oxalis/model/data_connection_info"; -import { useInterval } from "libs/react_helpers"; -import type { AdditionalCoordinate } from "types/api_flow_types"; -import FastTooltip from "components/fast_tooltip"; import { Store } from "oxalis/singletons"; -import messages from "messages"; +import type { OxalisState } from "oxalis/store"; +import { NumberInputPopoverSetting } from "oxalis/view/components/setting_input_views"; +import React, { useCallback, useState } from "react"; +import { useDispatch, useSelector } from "react-redux"; +import type { AdditionalCoordinate } from "types/api_flow_types"; const lineColor = "rgba(255, 255, 255, 0.67)"; const moreIconStyle = { diff --git a/frontend/javascripts/oxalis/view/td_view_controls.tsx b/frontend/javascripts/oxalis/view/td_view_controls.tsx index 266246411ba..2761f998b9b 100644 --- a/frontend/javascripts/oxalis/view/td_view_controls.tsx +++ b/frontend/javascripts/oxalis/view/td_view_controls.tsx @@ -1,29 +1,29 @@ +import { + BorderInnerOutlined, + BorderOuterOutlined, + SettingOutlined, + StopOutlined, +} from "@ant-design/icons"; import { Button, - Radio, - Tooltip, - Dropdown, Col, - Row, - Switch, - type RadioChangeEvent, + Dropdown, type MenuProps, + Radio, + type RadioChangeEvent, + Row, Space, + Switch, + Tooltip, } from "antd"; -import { - StopOutlined, - BorderInnerOutlined, - BorderOuterOutlined, - SettingOutlined, -} from "@ant-design/icons"; -import { connect } from "react-redux"; -import type { Dispatch } from "redux"; -import type { OxalisState } from "oxalis/store"; +import type { SwitchChangeEventHandler } from "antd/lib/switch"; import type { TDViewDisplayMode } from "oxalis/constants"; import { TDViewDisplayModeEnum } from "oxalis/constants"; import { updateUserSettingAction } from "oxalis/model/actions/settings_actions"; import { api } from "oxalis/singletons"; -import type { SwitchChangeEventHandler } from "antd/lib/switch"; +import type { OxalisState } from "oxalis/store"; +import { connect } from "react-redux"; +import type { Dispatch } from "redux"; type Props = { tdViewDisplayPlanes: TDViewDisplayMode; tdViewDisplayDatasetBorders: boolean; diff --git a/frontend/javascripts/oxalis/view/tracing_view.tsx b/frontend/javascripts/oxalis/view/tracing_view.tsx index 6da611cf347..cfe8b4e77d5 100644 --- a/frontend/javascripts/oxalis/view/tracing_view.tsx +++ b/frontend/javascripts/oxalis/view/tracing_view.tsx @@ -1,10 +1,10 @@ -import type * as React from "react"; +import ErrorHandling from "libs/error_handling"; import Toast from "libs/toast"; import messages from "messages"; -import ErrorHandling from "libs/error_handling"; -import Store from "oxalis/store"; import { setViewModeAction } from "oxalis/model/actions/settings_actions"; import { api } from "oxalis/singletons"; +import Store from "oxalis/store"; +import type * as React from "react"; const WEBGL_CONTEXT_LOST_KEY = "WEBGL_CONTEXT_LOST_KEY"; diff --git a/frontend/javascripts/oxalis/view/version_entry.tsx b/frontend/javascripts/oxalis/view/version_entry.tsx index c792f7171d6..6864903b735 100644 --- a/frontend/javascripts/oxalis/view/version_entry.tsx +++ b/frontend/javascripts/oxalis/view/version_entry.tsx @@ -1,9 +1,8 @@ -import { Avatar, Button, List } from "antd"; import { ArrowsAltOutlined, BackwardOutlined, - CodepenOutlined, CodeSandboxOutlined, + CodepenOutlined, DeleteOutlined, EditOutlined, EyeOutlined, @@ -12,38 +11,39 @@ import { RocketOutlined, ShrinkOutlined, } from "@ant-design/icons"; -import * as React from "react"; +import { Avatar, Button, List } from "antd"; import _ from "lodash"; +import * as React from "react"; import classNames from "classnames"; +import FormattedDate from "components/formatted_date"; +import { formatUserName, getContributorById } from "oxalis/model/accessors/user_accessor"; import type { - ServerUpdateAction, + CreateEdgeUpdateAction, CreateNodeUpdateAction, + CreateSegmentUpdateAction, + DeleteEdgeUpdateAction, DeleteNodeUpdateAction, - UpdateTreeUpdateAction, + DeleteSegmentDataUpdateAction, + DeleteSegmentUpdateAction, DeleteTreeUpdateAction, + MergeAgglomerateUpdateAction, + MergeTreeUpdateAction, + MoveTreeComponentUpdateAction, RevertToVersionUpdateAction, + ServerUpdateAction, + SplitAgglomerateUpdateAction, + UpdateMappingNameUpdateAction, UpdateNodeUpdateAction, - UpdateTreeVisibilityUpdateAction, + UpdateSegmentUpdateAction, UpdateTreeEdgesVisibilityUpdateAction, UpdateTreeGroupVisibilityUpdateAction, - CreateEdgeUpdateAction, - DeleteEdgeUpdateAction, - SplitAgglomerateUpdateAction, - MergeAgglomerateUpdateAction, - CreateSegmentUpdateAction, - UpdateSegmentUpdateAction, - DeleteSegmentUpdateAction, - MoveTreeComponentUpdateAction, - MergeTreeUpdateAction, - UpdateMappingNameUpdateAction, - DeleteSegmentDataUpdateAction, + UpdateTreeUpdateAction, + UpdateTreeVisibilityUpdateAction, } from "oxalis/model/sagas/update_actions"; -import FormattedDate from "components/formatted_date"; +import type { OxalisState } from "oxalis/store"; import { MISSING_GROUP_ID } from "oxalis/view/right-border-tabs/tree_hierarchy_view_helpers"; import { useSelector } from "react-redux"; -import type { OxalisState } from "oxalis/store"; -import { formatUserName, getContributorById } from "oxalis/model/accessors/user_accessor"; type Description = { description: string; icon: React.ReactNode; diff --git a/frontend/javascripts/oxalis/view/version_entry_group.tsx b/frontend/javascripts/oxalis/view/version_entry_group.tsx index 4d5783fc148..a3be4824f29 100644 --- a/frontend/javascripts/oxalis/view/version_entry_group.tsx +++ b/frontend/javascripts/oxalis/view/version_entry_group.tsx @@ -1,10 +1,10 @@ -import * as React from "react"; +import { CaretDownOutlined, CaretRightOutlined } from "@ant-design/icons"; import { Avatar, List } from "antd"; -import _ from "lodash"; -import type { APIUpdateActionBatch } from "types/api_flow_types"; import FormattedDate from "components/formatted_date"; +import _ from "lodash"; import VersionEntry from "oxalis/view/version_entry"; -import { CaretDownOutlined, CaretRightOutlined } from "@ant-design/icons"; +import * as React from "react"; +import type { APIUpdateActionBatch } from "types/api_flow_types"; type Props = { batches: APIUpdateActionBatch[]; diff --git a/frontend/javascripts/oxalis/view/version_list.tsx b/frontend/javascripts/oxalis/view/version_list.tsx index be21599922e..a185f504466 100644 --- a/frontend/javascripts/oxalis/view/version_list.tsx +++ b/frontend/javascripts/oxalis/view/version_list.tsx @@ -1,38 +1,38 @@ -import { Button, List, Spin } from "antd"; -import { useState, useEffect } from "react"; -import _ from "lodash"; -import dayjs from "dayjs"; -import type { APIUpdateActionBatch } from "types/api_flow_types"; -import type { Versions } from "oxalis/view/version_view"; -import { chunkIntoTimeWindows } from "libs/utils"; +import { useInfiniteQuery, useQueryClient } from "@tanstack/react-query"; import { - getUpdateActionLog, downloadAnnotation, getNewestVersionForTracing, + getUpdateActionLog, } from "admin/admin_rest_api"; +import { Button, List, Spin } from "antd"; +import dayjs from "dayjs"; import { handleGenericError } from "libs/error_handling"; +import { useFetch } from "libs/react_helpers"; +import { useEffectOnlyOnce } from "libs/react_hooks"; +import Toast from "libs/toast"; +import { chunkIntoTimeWindows } from "libs/utils"; +import _ from "lodash"; +import { setAnnotationAllowUpdateAction } from "oxalis/model/actions/annotation_actions"; import { - pushSaveQueueTransaction, type SaveQueueType, + pushSaveQueueTransaction, setVersionNumberAction, } from "oxalis/model/actions/save_actions"; +import { setVersionRestoreVisibilityAction } from "oxalis/model/actions/ui_actions"; import { + type ServerUpdateAction, revertToVersion, serverCreateTracing, - type ServerUpdateAction, } from "oxalis/model/sagas/update_actions"; -import { setAnnotationAllowUpdateAction } from "oxalis/model/actions/annotation_actions"; -import { setVersionRestoreVisibilityAction } from "oxalis/model/actions/ui_actions"; import { Model } from "oxalis/singletons"; +import { api } from "oxalis/singletons"; import type { EditableMapping, OxalisState, SkeletonTracing, VolumeTracing } from "oxalis/store"; import Store from "oxalis/store"; import VersionEntryGroup from "oxalis/view/version_entry_group"; -import { api } from "oxalis/singletons"; -import Toast from "libs/toast"; -import { useInfiniteQuery, useQueryClient } from "@tanstack/react-query"; -import { useEffectOnlyOnce } from "libs/react_hooks"; -import { useFetch } from "libs/react_helpers"; +import type { Versions } from "oxalis/view/version_view"; +import { useEffect, useState } from "react"; import { useSelector } from "react-redux"; +import type { APIUpdateActionBatch } from "types/api_flow_types"; const ENTRIES_PER_PAGE = 5000; diff --git a/frontend/javascripts/oxalis/view/version_view.tsx b/frontend/javascripts/oxalis/view/version_view.tsx index 8068ad59be6..9b0a7c01c66 100644 --- a/frontend/javascripts/oxalis/view/version_view.tsx +++ b/frontend/javascripts/oxalis/view/version_view.tsx @@ -1,14 +1,14 @@ -import { Button, Alert, Tabs, type TabsProps } from "antd"; import { CloseOutlined } from "@ant-design/icons"; -import { connect } from "react-redux"; -import * as React from "react"; +import { Alert, Button, Tabs, type TabsProps } from "antd"; import { getReadableNameByVolumeTracingId } from "oxalis/model/accessors/volumetracing_accessor"; import { setAnnotationAllowUpdateAction } from "oxalis/model/actions/annotation_actions"; import { setVersionRestoreVisibilityAction } from "oxalis/model/actions/ui_actions"; import type { OxalisState, Tracing } from "oxalis/store"; -import { type TracingType, TracingTypeEnum } from "types/api_flow_types"; import Store from "oxalis/store"; import VersionList, { previewVersion } from "oxalis/view/version_list"; +import * as React from "react"; +import { connect } from "react-redux"; +import { type TracingType, TracingTypeEnum } from "types/api_flow_types"; export type Versions = { skeleton?: number | null | undefined; diff --git a/frontend/javascripts/oxalis/view/viewport_status_indicator.tsx b/frontend/javascripts/oxalis/view/viewport_status_indicator.tsx index bd2a708d4ec..ffee594861b 100644 --- a/frontend/javascripts/oxalis/view/viewport_status_indicator.tsx +++ b/frontend/javascripts/oxalis/view/viewport_status_indicator.tsx @@ -1,10 +1,10 @@ -import * as React from "react"; -import _ from "lodash"; import { WarningOutlined } from "@ant-design/icons"; -import { getUnrenderableLayerInfosForCurrentZoom } from "oxalis/model/accessors/flycam_accessor"; +import FastTooltip from "components/fast_tooltip"; import { usePolledState } from "libs/react_helpers"; +import _ from "lodash"; +import { getUnrenderableLayerInfosForCurrentZoom } from "oxalis/model/accessors/flycam_accessor"; import type { SmallerOrHigherInfo } from "oxalis/model/helpers/mag_info"; -import FastTooltip from "components/fast_tooltip"; +import * as React from "react"; const { useState } = React; type UnrenderableLayerNamesInfo = { diff --git a/frontend/javascripts/oxalis/workers/async_bucket_picker.worker.ts b/frontend/javascripts/oxalis/workers/async_bucket_picker.worker.ts index 61df9c1247a..ec8409ab0e3 100644 --- a/frontend/javascripts/oxalis/workers/async_bucket_picker.worker.ts +++ b/frontend/javascripts/oxalis/workers/async_bucket_picker.worker.ts @@ -1,10 +1,10 @@ import PriorityQueue from "js-priority-queue"; -import type { LoadingStrategy, PlaneRects } from "oxalis/store"; import type { Matrix4x4 } from "libs/mjs"; import type { Vector3, Vector4, ViewMode } from "oxalis/constants"; import constants from "oxalis/constants"; import determineBucketsForFlight from "oxalis/model/bucket_data_handling/bucket_picker_strategies/flight_bucket_picker"; import determineBucketsForOblique from "oxalis/model/bucket_data_handling/bucket_picker_strategies/oblique_bucket_picker"; +import type { LoadingStrategy, PlaneRects } from "oxalis/store"; import { expose } from "./comlink_wrapper"; type PriorityItem = { diff --git a/frontend/javascripts/oxalis/workers/byte_array_lz4_compression.worker.ts b/frontend/javascripts/oxalis/workers/byte_array_lz4_compression.worker.ts index 7612047af0e..9e194fa7280 100644 --- a/frontend/javascripts/oxalis/workers/byte_array_lz4_compression.worker.ts +++ b/frontend/javascripts/oxalis/workers/byte_array_lz4_compression.worker.ts @@ -1,5 +1,5 @@ -import { expose } from "./comlink_wrapper"; import * as lz4 from "lz4-wasm"; +import { expose } from "./comlink_wrapper"; function compressLz4Block(data: Uint8Array, compress: boolean): Uint8Array { if (compress) { diff --git a/frontend/javascripts/oxalis/workers/slow_byte_array_lz4_compression.worker.ts b/frontend/javascripts/oxalis/workers/slow_byte_array_lz4_compression.worker.ts index 67cf5ee2ec2..9f3b9f2440b 100644 --- a/frontend/javascripts/oxalis/workers/slow_byte_array_lz4_compression.worker.ts +++ b/frontend/javascripts/oxalis/workers/slow_byte_array_lz4_compression.worker.ts @@ -1,8 +1,8 @@ +import { sleep } from "libs/utils"; // NOTE: This is a mirror of byte_array_lz4_compression.worker.js // and is ONLY meant for mocking during tests. This implementation // allows to introduce an artificial delay for compression/decompression. import { __compressLz4BlockHelper } from "oxalis/workers/byte_array_lz4_compression.worker"; -import { sleep } from "libs/utils"; let isSleepEnabled = false; export function setSlowCompression(isEnabled: boolean) { isSleepEnabled = isEnabled; diff --git a/frontend/javascripts/router.tsx b/frontend/javascripts/router.tsx index 1f3556672f1..3f4a16c20dc 100644 --- a/frontend/javascripts/router.tsx +++ b/frontend/javascripts/router.tsx @@ -9,8 +9,8 @@ import StartResetPasswordView from "admin/auth/start_reset_password_view"; import DatasetAddView from "admin/dataset/dataset_add_view"; import JobListView from "admin/job/job_list_view"; import Onboarding from "admin/onboarding"; -import { PricingPlanEnum } from "admin/organization/pricing_plan_utils"; import OrganizationEditView from "admin/organization/organization_edit_view"; +import { PricingPlanEnum } from "admin/organization/pricing_plan_utils"; import ProjectCreateView from "admin/project/project_create_view"; import ProjectListView from "admin/project/project_list_view"; import ScriptCreateView from "admin/scripts/script_create_view"; @@ -55,20 +55,20 @@ import { TracingTypeEnum, } from "types/api_flow_types"; -import ErrorBoundary from "components/error_boundary"; -import { Store } from "oxalis/singletons"; -import VerifyEmailView from "admin/auth/verify_email_view"; -import TimeTrackingOverview from "admin/statistic/time_tracking_overview"; -import loadable from "libs/lazy_loader"; -import type { EmptyObject } from "types/globals"; -import { DatasetURLImport } from "admin/dataset/dataset_url_import"; -import AiModelListView from "admin/voxelytics/ai_model_list_view"; -import { CheckTermsOfServices } from "components/terms_of_services_check"; import { getDatasetIdFromNameAndOrganization, getOrganizationForDataset, } from "admin/api/disambiguate_legacy_routes"; +import VerifyEmailView from "admin/auth/verify_email_view"; +import { DatasetURLImport } from "admin/dataset/dataset_url_import"; +import TimeTrackingOverview from "admin/statistic/time_tracking_overview"; +import AiModelListView from "admin/voxelytics/ai_model_list_view"; +import ErrorBoundary from "components/error_boundary"; +import { CheckTermsOfServices } from "components/terms_of_services_check"; +import loadable from "libs/lazy_loader"; import { getDatasetIdOrNameFromReadableURLPart } from "oxalis/model/accessors/dataset_accessor"; +import { Store } from "oxalis/singletons"; +import type { EmptyObject } from "types/globals"; const { Content } = Layout; diff --git a/frontend/javascripts/theme.tsx b/frontend/javascripts/theme.tsx index 03c00f0f67f..53f49ca5ca2 100644 --- a/frontend/javascripts/theme.tsx +++ b/frontend/javascripts/theme.tsx @@ -1,13 +1,13 @@ +import { App, ConfigProvider, type ThemeConfig, theme } from "antd"; +import type { AliasToken, OverrideToken } from "antd/lib/theme/interface"; +import { ToastContextMountRoot } from "libs/toast"; +import window from "libs/window"; +import _ from "lodash"; +import type { OxalisState, Theme } from "oxalis/store"; import type React from "react"; import { useEffect } from "react"; import { useSelector } from "react-redux"; -import { App, ConfigProvider, theme, type ThemeConfig } from "antd"; import type { APIUser } from "types/api_flow_types"; -import window from "libs/window"; -import type { OxalisState, Theme } from "oxalis/store"; -import type { AliasToken, OverrideToken } from "antd/lib/theme/interface"; -import { ToastContextMountRoot } from "libs/toast"; -import _ from "lodash"; const ColorWKBlue = "#5660ff"; // WK ~blue/purple const ColorWKLinkHover = "#a8b4ff"; // slightly brighter WK Blue diff --git a/frontend/javascripts/types/api_flow_types.ts b/frontend/javascripts/types/api_flow_types.ts index 4d9fef32c78..0f5dc954b7c 100644 --- a/frontend/javascripts/types/api_flow_types.ts +++ b/frontend/javascripts/types/api_flow_types.ts @@ -1,29 +1,29 @@ +import type { PricingPlanEnum } from "admin/organization/pricing_plan_utils"; import _ from "lodash"; import type { - BoundingBoxObject, - Edge, - CommentType, - TreeGroup, - RecommendedConfiguration, - SegmentGroup, - MeshInformation, -} from "oxalis/store"; -import type { ServerUpdateAction } from "oxalis/model/sagas/update_actions"; -import type { - SkeletonTracingStats, - TracingStats, -} from "oxalis/model/accessors/annotation_accessor"; -import type { - Vector3, - Vector6, - Point3, ColorObject, LOG_LEVELS, - Vector4, + Point3, TreeType, UnitLong, + Vector3, + Vector4, + Vector6, } from "oxalis/constants"; -import type { PricingPlanEnum } from "admin/organization/pricing_plan_utils"; +import type { + SkeletonTracingStats, + TracingStats, +} from "oxalis/model/accessors/annotation_accessor"; +import type { ServerUpdateAction } from "oxalis/model/sagas/update_actions"; +import type { + BoundingBoxObject, + CommentType, + Edge, + MeshInformation, + RecommendedConfiguration, + SegmentGroup, + TreeGroup, +} from "oxalis/store"; import type { EmptyObject } from "./globals"; export type AdditionalCoordinate = { name: string; value: number }; diff --git a/frontend/javascripts/types/schemas/dataset_view_configuration.schema.ts b/frontend/javascripts/types/schemas/dataset_view_configuration.schema.ts index 672acab0ad2..758414ee74c 100644 --- a/frontend/javascripts/types/schemas/dataset_view_configuration.schema.ts +++ b/frontend/javascripts/types/schemas/dataset_view_configuration.schema.ts @@ -1,5 +1,5 @@ import { BLEND_MODES } from "oxalis/constants"; -import type { DatasetLayerConfiguration, DatasetConfiguration } from "oxalis/store"; +import type { DatasetConfiguration, DatasetLayerConfiguration } from "oxalis/store"; export function getDefaultLayerViewConfiguration( dynamicDefault: Partial = {}, diff --git a/frontend/javascripts/types/schemas/dataset_view_configuration_defaults.ts b/frontend/javascripts/types/schemas/dataset_view_configuration_defaults.ts index 8aec61a2c73..2792929c262 100644 --- a/frontend/javascripts/types/schemas/dataset_view_configuration_defaults.ts +++ b/frontend/javascripts/types/schemas/dataset_view_configuration_defaults.ts @@ -1,10 +1,10 @@ import _ from "lodash"; +import { getDefaultValueRangeOfLayer, isColorLayer } from "oxalis/model/accessors/dataset_accessor"; +import type { APIDataLayer, APIDataset, APIMaybeUnimportedDataset } from "types/api_flow_types"; import { - getDefaultLayerViewConfiguration, defaultDatasetViewConfiguration, + getDefaultLayerViewConfiguration, } from "types/schemas/dataset_view_configuration.schema"; -import type { APIDataset, APIMaybeUnimportedDataset, APIDataLayer } from "types/api_flow_types"; -import { getDefaultValueRangeOfLayer, isColorLayer } from "oxalis/model/accessors/dataset_accessor"; import { validateObjectWithType } from "types/validation"; const eliminateErrors = ( diff --git a/frontend/javascripts/types/schemas/user_settings.schema.ts b/frontend/javascripts/types/schemas/user_settings.schema.ts index 5258e7ef287..f83a2ceaa5d 100644 --- a/frontend/javascripts/types/schemas/user_settings.schema.ts +++ b/frontend/javascripts/types/schemas/user_settings.schema.ts @@ -1,11 +1,11 @@ import { - OverwriteModeEnum, FillModeEnum, - TDViewDisplayModeEnum, InterpolationModeEnum, + OverwriteModeEnum, + TDViewDisplayModeEnum, } from "oxalis/constants"; -import { baseDatasetViewConfiguration } from "types/schemas/dataset_view_configuration.schema"; import { getMaximumBrushSize } from "oxalis/model/accessors/volumetracing_accessor"; +import { baseDatasetViewConfiguration } from "types/schemas/dataset_view_configuration.schema"; export const userSettings = { clippingDistance: { diff --git a/frontend/javascripts/types/validation.ts b/frontend/javascripts/types/validation.ts index 2bd7baf1fcc..f356510c40a 100644 --- a/frontend/javascripts/types/validation.ts +++ b/frontend/javascripts/types/validation.ts @@ -1,8 +1,8 @@ import jsonschema from "jsonschema"; -import DatasourceSchema from "types/schemas/datasource.schema"; -import UserSettingsSchema from "types/schemas/user_settings.schema"; import ViewConfigurationSchema from "types/schemas/dataset_view_configuration.schema"; +import DatasourceSchema from "types/schemas/datasource.schema"; import UrlStateSchema from "types/schemas/url_state.schema"; +import UserSettingsSchema from "types/schemas/user_settings.schema"; const validator = new jsonschema.Validator(); // @ts-expect-error ts-migrate(2345) FIXME: Argument of type '{ definitions: { "types::Vector3... Remove this comment to see the full error message validator.addSchema(DatasourceSchema, "/");