Merge branch '15027-object-update-fix'
authorLucas Di Pentima <lucas@di-pentima.com.ar>
Fri, 23 Aug 2019 16:24:52 +0000 (13:24 -0300)
committerLucas Di Pentima <lucas@di-pentima.com.ar>
Fri, 23 Aug 2019 16:24:52 +0000 (13:24 -0300)
Closes #15027

Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <ldipentima@veritasgenetics.com>

68 files changed:
.licenseignore
package.json
src/components/file-tree/file-tree-item.tsx
src/components/search-input/search-input.tsx
src/components/select-field/select-field.tsx
src/index.tsx
src/lib/cwl-svg/plugins/arrange/arrange.ts
src/models/group.ts
src/models/test-utils.ts
src/models/workflow.ts
src/services/api/url-builder.test.ts
src/services/collection-files-service/collection-files-service.ts
src/services/collection-service/collection-service.ts
src/services/container-request-service/container-request-service.ts
src/services/groups-service/groups-service.ts
src/services/project-service/project-service.ts
src/store/advanced-tab/advanced-tab.tsx
src/store/auth/auth-action.test.ts
src/store/collection-panel/collection-panel-action.ts
src/store/collection-panel/collection-panel-files/collection-panel-files-actions.ts
src/store/collections/collection-move-actions.ts
src/store/details-panel/details-panel-action.ts
src/store/group-details-panel/group-details-panel-actions.ts
src/store/groups-panel/groups-panel-actions.ts
src/store/groups-panel/groups-panel-middleware-service.ts
src/store/link-account-panel/link-account-panel-reducer.test.ts
src/store/navigation/navigation-action.ts
src/store/processes/processes-actions.ts
src/store/projects/project-move-actions.ts
src/store/rich-text-editor-dialog/rich-text-editor-dialog-actions.tsx
src/store/search-bar/search-bar-actions.ts
src/store/search-results-panel/search-results-middleware-service.ts
src/store/tree-picker/tree-picker-reducer.ts
src/store/users/users-actions.ts
src/store/workbench/workbench-actions.ts
src/validators/is-float.tsx
src/validators/max-length.tsx
src/validators/require.tsx
src/views-components/api-client-authorizations-dialog/help-dialog.tsx
src/views-components/api-token/api-token.tsx
src/views-components/context-menu/action-sets/collection-action-set.ts
src/views-components/context-menu/action-sets/collection-resource-action-set.ts
src/views-components/context-menu/action-sets/process-action-set.ts
src/views-components/details-panel/project-details.tsx
src/views-components/main-app-bar/account-menu.tsx
src/views-components/main-app-bar/admin-menu.tsx
src/views-components/project-tree/project-tree.tsx
src/views-components/projects-tree-picker/projects-tree-picker.tsx
src/views-components/search-bar/search-bar-basic-view.tsx
src/views-components/sharing-dialog/permission-select.tsx
src/views-components/side-panel/side-panel.tsx
src/views/collection-panel/collection-panel.tsx
src/views/keep-service-panel/keep-service-panel-root.tsx
src/views/login-panel/login-panel.tsx
src/views/main-panel/main-panel-root.tsx
src/views/run-process-panel/inputs/directory-array-input.tsx
src/views/run-process-panel/inputs/file-array-input.tsx
src/views/run-process-panel/run-process-advanced-form.tsx
src/views/run-process-panel/run-process-inputs-form.tsx
src/views/run-process-panel/run-process-second-step.tsx
src/views/trash-panel/trash-panel.tsx
src/views/user-panel/user-panel.tsx
src/views/workbench/fed-login.tsx
src/views/workbench/workbench.tsx
src/views/workflow-panel/workflow-panel-view.tsx
src/websocket/websocket.ts
tslint.json
yarn.lock

index 09914c902bc81a844c2dca12dfc90bdc6266818d..7ac3c8369abb351a31acb5ec6a4d616b4fb9efc1 100644 (file)
@@ -12,3 +12,4 @@ public/*
 .licenseignore
 .yarnrc
 .npmrc
+src/lib/cwl-svg/*
index 68d23bfaaab79b07b71fc077a0df18bb381a1b8c..a85fd9c6aaf552bbed89ff5288d245783a907050 100644 (file)
@@ -48,6 +48,7 @@
     "redux-thunk": "2.3.0",
     "reselect": "4.0.0",
     "shell-quote": "1.6.1",
+    "tslint-etc": "1.6.0",
     "unionize": "2.1.2",
     "uuid": "3.3.2"
   },
index 0ece937775d2527fc1881a198314f224be6840fa..dc8f09b96fb480e94e35877ec86f5d25d5279a47 100644 (file)
@@ -9,7 +9,6 @@ import { Typography, IconButton, StyleRulesCallback, withStyles, WithStyles, Too
 import { formatFileSize } from "~/common/formatters";
 import { ListItemTextIcon } from "../list-item-text-icon/list-item-text-icon";
 import { FileTreeData } from "./file-tree-data";
-import { FileThumbnail } from '~/components/file-tree/file-thumbnail';
 
 type CssRules = "root" | "spacer" | "sizeInfo" | "button" | "moreOptions";
 
index f2ec2d6439024c066eebb2a0b8a18a0ec4fba901..64ffc396923ce6d097e05fb89317070ff6470488 100644 (file)
@@ -58,7 +58,6 @@ export const SearchInput = withStyles(styles)(
         timeout: number;
 
         render() {
-            const { classes } = this.props;
             return <form onSubmit={this.handleSubmit}>
                 <FormControl>
                     <InputLabel>Search</InputLabel>
index 4a25ea7019f86bc7a9391f6c269e8d10a9c2e865..a0f61990808219900ab63170e8299492706f99ac 100644 (file)
@@ -5,7 +5,7 @@
 import * as React from 'react';
 import { WrappedFieldProps } from 'redux-form';
 import { ArvadosTheme } from '~/common/custom-theme';
-import { StyleRulesCallback, WithStyles, withStyles, FormControl, InputLabel, Select, MenuItem, FormHelperText } from '@material-ui/core';
+import { StyleRulesCallback, WithStyles, withStyles, FormControl, InputLabel, Select, FormHelperText } from '@material-ui/core';
 
 type CssRules = 'formControl' | 'selectWrapper' | 'select' | 'option';
 
index ee174b2c5325866878d6d7012552e64a1ae85478..f286b7be2ff96f1e26785464f0ae5f89e4f4b247 100644 (file)
@@ -40,8 +40,6 @@ import { setCurrentTokenDialogApiHost } from '~/store/current-token-dialog/curre
 import { processResourceActionSet } from '~/views-components/context-menu/action-sets/process-resource-action-set';
 import { progressIndicatorActions } from '~/store/progress-indicator/progress-indicator-actions';
 import { trashedCollectionActionSet } from '~/views-components/context-menu/action-sets/trashed-collection-action-set';
-import { ContainerRequestState } from '~/models/container-request';
-import { MountKind } from '~/models/mount-types';
 import { setBuildInfo } from '~/store/app-info/app-info-actions';
 import { getBuildInfo } from '~/common/app-info';
 import { DragDropContextProvider } from 'react-dnd';
@@ -153,181 +151,4 @@ const initListener = (history: History, store: RootStore, services: ServiceRepos
     };
 };
 
-const createDirectoriesArrayCollectorWorkflow = ({ workflowService }: ServiceRepository) => {
-    workflowService.create({
-        name: 'Directories array collector',
-        description: 'Workflow for collecting directories array',
-        definition: "cwlVersion: v1.0\n$graph:\n- class: CommandLineTool\n\n  requirements:\n  - listing:\n    - entryname: input_collector.log\n      entry: |\n        \"multiple_collections\":\n          $(inputs.multiple_collections)\n\n    class: InitialWorkDirRequirement\n  inputs:\n  - type:\n      type: array\n      items: Directory\n    id: '#input_collector.cwl/multiple_collections'\n  outputs:\n  - type: File\n    outputBinding:\n      glob: '*'\n    id: '#input_collector.cwl/output'\n\n  baseCommand: [echo]\n  id: '#input_collector.cwl'\n- class: Workflow\n  doc: This is the description of the workflow\n  inputs:\n  - type:\n      type: array\n      items: Directory\n    label: Multiple Collections\n    doc: This should allow for selecting multiple collections.\n    id: '#main/multiple_collections'\n    default:\n    - class: Directory\n      location: keep:1e1682585d576f031b2d8b4944f989ee+57\n      basename: 1e1682585d576f031b2d8b4944f989ee+57\n    - class: Directory\n      location: keep:326f692370e9e121fcbd013796f7352a+57\n      basename: 326f692370e9e121fcbd013796f7352a+57\n  \n  outputs:\n  - type: File\n    outputSource: '#main/input_collector/output'\n\n    id: '#main/log_file'\n  steps:\n  - run: '#input_collector.cwl'\n    in:\n    - source: '#main/multiple_collections'\n      id: '#main/input_collector/multiple_collections'\n    out: ['#main/input_collector/output']\n    id: '#main/input_collector'\n  id: '#main'\n",
-    });
-};
-
-const createPrimitiveArraysCollectorWorkflow = ({ workflowService }: ServiceRepository) => {
-    workflowService.create({
-        name: 'String, Int and Float arrays collector',
-        description: 'Workflow for collecting primitive data arrays',
-        definition: "cwlVersion: v1.0\n$graph:\n- class: CommandLineTool\n\n  requirements:\n  - listing:\n    - entryname: input_collector.log\n      entry: |\n        \"string array\":\n          $(inputs.example_string_array)\n        \"int array\":\n          $(inputs.example_int_array)\n        \"float array\":\n          $(inputs.example_float_array)\n\n    class: InitialWorkDirRequirement\n  inputs:\n  - type:\n      type: array\n      items: string\n    id: '#input_collector.cwl/example_string_array'\n  - type:\n      type: array\n      items: int\n    id: '#input_collector.cwl/example_int_array'\n  - type:\n      type: array\n      items: float\n    id: '#input_collector.cwl/example_float_array'\n  \n  outputs:\n  - type: File\n    outputBinding:\n      glob: '*'\n    id: '#input_collector.cwl/output'\n\n  baseCommand: [echo]\n  id: '#input_collector.cwl'\n- class: Workflow\n  doc: This is the description of the workflow\n  inputs:\n  - type:\n      type: array\n      items: string\n    label: Freetext Array\n    doc: This should allow for entering multiple strings.\n    id: '#main/example_string_array'\n    default:\n    - This is the first string\n    - This is the second string\n  - type:\n      type: array\n      items: int\n    label: Integer Array\n    doc: This should allow for entering multiple integers.\n    id: '#main/example_int_array'\n    default:\n    - 3\n    - 6\n  - type:\n      type: array\n      items: float\n    label: Float Array\n    doc: This should allow for entering multiple floats.\n    id: '#main/example_float_array'\n    default:\n    - 3.33\n    - 66.6\n\n  outputs:\n  - type: File\n    outputSource: '#main/input_collector/output'\n\n    id: '#main/log_file'\n  steps:\n  - run: '#input_collector.cwl'\n    in:\n    - source: '#main/example_string_array'\n      id: '#main/input_collector/example_string_array'\n    - source: '#main/example_int_array'\n      id: '#main/input_collector/example_int_array'\n    - source: '#main/example_float_array'\n      id: '#main/input_collector/example_float_array'\n    out: ['#main/input_collector/output']\n    id: '#main/input_collector'\n  id: '#main'\n",
-    });
-};
-
-const createFilesArrayCollectorWorkflow = ({ workflowService }: ServiceRepository) => {
-    workflowService.create({
-        name: 'Files array collector',
-        description: 'Workflow for collecting files array',
-        definition: "cwlVersion: v1.0\n$graph:\n- class: CommandLineTool\n\n  requirements:\n  - listing:\n    - entryname: input_collector.log\n      entry: |\n        \"multiple_files\":\n          $(inputs.multiple_files)\n\n    class: InitialWorkDirRequirement\n  inputs:\n  - type:\n      type: array\n      items: File\n    id: '#input_collector.cwl/multiple_files'\n  outputs:\n  - type: File\n    outputBinding:\n      glob: '*'\n    id: '#input_collector.cwl/output'\n\n  baseCommand: [cat]\n  id: '#input_collector.cwl'\n- class: Workflow\n  doc: This is the description of the workflow\n  inputs:\n  - type:\n      type: array\n      items: File\n    label: Multiple Files\n    doc: This should allow for selecting multiple files.\n    id: '#main/multiple_files'\n    default:\n      - class: File\n        location: keep:af831660d820bcbb98f473355e6e1b85+67/fileA\n        basename: fileA\n        nameroot: fileA\n        nameext: ''\n  outputs:\n  - type: File\n    outputSource: '#main/input_collector/output'\n\n    id: '#main/log_file'\n  steps:\n  - run: '#input_collector.cwl'\n    in:\n    - source: '#main/multiple_files'\n      id: '#main/input_collector/multiple_files'\n    out: ['#main/input_collector/output']\n    id: '#main/input_collector'\n  id: '#main'\n",
-    });
-};
-
-const createPrimitivesCollectorWorkflow = ({ workflowService }: ServiceRepository) => {
-    workflowService.create({
-        name: 'Primitive values collector',
-        description: 'Workflow for collecting primitive values',
-        definition: "cwlVersion: v1.0\n$graph:\n- class: CommandLineTool\n  requirements:\n  - listing:\n    - entryname: input_collector.log\n      entry: |\n        \"flag\":\n          $(inputs.example_flag)\n        \"string\":\n          $(inputs.example_string)\n        \"int\":\n          $(inputs.example_int)\n        \"long\":\n          $(inputs.example_long)\n        \"float\":\n          $(inputs.example_float)\n        \"double\":\n          $(inputs.example_double)\n    class: InitialWorkDirRequirement\n  inputs:\n  - type: double\n    id: '#input_collector.cwl/example_double'\n  - type: boolean\n    id: '#input_collector.cwl/example_flag'\n  - type: float\n    id: '#input_collector.cwl/example_float'\n  - type: int\n    id: '#input_collector.cwl/example_int'\n  - type: long\n    id: '#input_collector.cwl/example_long'\n  - type: string\n    id: '#input_collector.cwl/example_string'\n  outputs:\n  - type: File\n    outputBinding:\n      glob: '*'\n    id: '#input_collector.cwl/output'\n  baseCommand: [echo]\n  id: '#input_collector.cwl'\n- class: Workflow\n  doc: Workflw for collecting primitive values\n  inputs:\n  - type: double\n    label: Double value\n    doc: This should allow for entering a decimal number (64-bit).\n    id: '#main/example_double'\n    default: 0.3333333333333333\n  - type: boolean\n    label: Boolean Flag\n    doc: This should render as in checkbox.\n    id: '#main/example_flag'\n    default: true\n  - type: float\n    label: Float value\n    doc: This should allow for entering a decimal number (32-bit).\n    id: '#main/example_float'\n    default: 0.15625\n  - type: int\n    label: Integer Number\n    doc: This should allow for entering a number (32-bit signed).\n    id: '#main/example_int'\n    default: 2147483647\n  - type: long\n    label: Long Number\n    doc: This should allow for entering a number (64-bit signed).\n    id: '#main/example_long'\n    default: 9223372036854775807\n  - type: string\n    label: Freetext\n    doc: This should allow for entering an arbitrary char sequence.\n    id: '#main/example_string'\n    default: This is a string\n  outputs:\n  - type: File\n    outputSource: '#main/input_collector/output'\n    id: '#main/log_file'\n  steps:\n  - run: '#input_collector.cwl'\n    in:\n    - source: '#main/example_double'\n      id: '#main/input_collector/example_double'\n    - source: '#main/example_flag'\n      id: '#main/input_collector/example_flag'\n    - source: '#main/example_float'\n      id: '#main/input_collector/example_float'\n    - source: '#main/example_int'\n      id: '#main/input_collector/example_int'\n    - source: '#main/example_long'\n      id: '#main/input_collector/example_long'\n    - source: '#main/example_string'\n      id: '#main/input_collector/example_string'\n    out: ['#main/input_collector/output']\n    id: '#main/input_collector'\n  id: '#main'\n",
-    });
-};
-
-const createEnumCollectorWorkflow = ({ workflowService }: ServiceRepository) => {
-    workflowService.create({
-        name: 'Enum values collector',
-        description: 'Workflow for collecting enum values',
-        definition: "cwlVersion: v1.0\n$graph:\n- class: CommandLineTool\n  requirements:\n  - listing:\n    - entryname: input_collector.log\n      entry: |\n        \"enum_type\":\n          $(inputs.enum_type)\n\n    class: InitialWorkDirRequirement\n  inputs:\n  - type:\n      type: enum\n      symbols: ['#input_collector.cwl/enum_type/OTU table', '#input_collector.cwl/enum_type/Pathway\n          table', '#input_collector.cwl/enum_type/Function table', '#input_collector.cwl/enum_type/Ortholog\n          table']\n    id: '#input_collector.cwl/enum_type'\n  outputs:\n  - type: File\n    outputBinding:\n      glob: '*'\n    id: '#input_collector.cwl/output'\n  baseCommand: [echo]\n  id: '#input_collector.cwl'\n- class: Workflow\n  doc: This is the description of the workflow\n  inputs:\n  - type:\n      type: enum\n      symbols: ['#main/enum_type/OTU table', '#main/enum_type/Pathway table', '#main/enum_type/Function\n          table', '#main/enum_type/Ortholog table']\n      name: '#enum_typef4179c7f-45f9-482d-a5db-1abb86698384'\n    label: Enumeration Type\n    doc: This should render as a drop-down menu.\n    id: '#main/enum_type'\n    default: OTU table\n  outputs:\n  - type: File\n    outputSource: '#main/input_collector/output'\n    id: '#main/log_file'\n  steps:\n  - run: '#input_collector.cwl'\n    in:\n    - source: '#main/enum_type'\n      id: '#main/input_collector/enum_type'\n    out: ['#main/input_collector/output']\n    id: '#main/input_collector'\n  id: '#main'\n",
-    });
-};
-
-const createFilesCollectorWorkflow = ({ workflowService }: ServiceRepository) => {
-    workflowService.create({
-        name: 'File values collector',
-        description: 'Workflow for collecting file values',
-        definition: "cwlVersion: v1.0\n$graph:\n- class: CommandLineTool\n\n  requirements:\n  - listing:\n    - entryname: input_collector.log\n      entry: |\n        \"single_file\":\n          $(inputs.single_file.basename)\n        \"optional_file\":\n          $(inputs.optional_file.basename)\n\n    class: InitialWorkDirRequirement\n  inputs:\n  - type:\n    - 'null'\n    - File\n    id: '#input_collector.cwl/optional_file'\n  - type:\n    - 'null'\n    - File\n    id: '#input_collector.cwl/optional_file_missing_label'\n  - type: File\n    id: '#input_collector.cwl/single_file'\n  outputs:\n  - type: File\n    outputBinding:\n      glob: '*'\n    id: '#input_collector.cwl/output'\n\n  baseCommand: [echo]\n  id: '#input_collector.cwl'\n- class: Workflow\n  doc: This is the description of the workflow\n  inputs:\n  - type:\n    - 'null'\n    - File\n    label: Single File (Optional)\n    doc: This should allow for single File selection only. Input should be marked\n      as optional and not enforced by form validation.\n    id: '#main/optional_file'\n    default:\n      class: File\n      location: keep:af831660d820bcbb98f473355e6e1b85+67/fileA\n      basename: fileA\n      nameroot: fileA\n      nameext: ''\n  - type:\n    - 'null'\n    - File\n    doc: Label should be the input field name because of missing label.\n    id: '#main/optional_file_missing_label'\n  - type: File\n    label: Single File\n    doc: This should allow for single File selection only.\n    id: '#main/single_file'\n    default:\n      class: File\n      location: keep:af831660d820bcbb98f473355e6e1b85+67/fileA\n      basename: fileA\n      nameroot: fileA\n      nameext: ''\n  outputs:\n  - type: File\n    outputSource: '#main/input_collector/output'\n    id: '#main/log_file'\n  steps:\n  - run: '#input_collector.cwl'\n    in:\n    - source: '#main/optional_file'\n      id: '#main/input_collector/optional_file'\n    - source: '#main/single_file'\n      id: '#main/input_collector/single_file'\n    out: ['#main/input_collector/output']\n    id: '#main/input_collector'\n  id: '#main'\n",
-    });
-};
-
-const createCollectionCollectorWorkflow = ({ workflowService }: ServiceRepository) => {
-    workflowService.create({
-        name: 'Collection value collector',
-        description: 'Workflow for collecting a collecion',
-        definition: "cwlVersion: v1.0\n$graph:\n- class: CommandLineTool\n\n  requirements:\n  - listing:\n    - entryname: input_collector.log\n      entry: |\n        \"collection\":\n          $(inputs.collection.location)\n\n    class: InitialWorkDirRequirement\n  inputs:\n  - type: Directory\n    id: '#input_collector.cwl/collection'\n\n  outputs:\n  - type: File\n    outputBinding:\n      glob: '*'\n    id: '#input_collector.cwl/output'\n\n  baseCommand: [echo]\n  id: '#input_collector.cwl'\n- class: Workflow\n  doc: This is the description of the workflow\n  inputs:\n  - type: Directory\n    label: Single Collection\n    doc: This should allow for single Collection selection only.\n    id: '#main/collection'\n    default:\n      class: Directory\n      location: keep:af831660d820bcbb98f473355e6e1b85+67\n      basename: af831660d820bcbb98f473355e6e1b85+67\n  outputs:\n  - type: File\n    outputSource: '#main/input_collector/output'\n\n    id: '#main/log_file'\n  steps:\n  - run: '#input_collector.cwl'\n    in:\n    - source: '#main/collection'\n      id: '#main/input_collector/collection'\n    out: ['#main/input_collector/output']\n    id: '#main/input_collector'\n  id: '#main'\n",
-    });
-};
-
-const createSampleProcess = ({ containerRequestService }: ServiceRepository) => {
-    containerRequestService.create({
-        ownerUuid: 'c97qk-j7d0g-s3ngc1z0748hsmf',
-        name: 'Simple process 7',
-        state: ContainerRequestState.COMMITTED,
-        mounts: {
-            '/var/spool/cwl': {
-                kind: MountKind.COLLECTION,
-                writable: true,
-            },
-            'stdout': {
-                kind: MountKind.MOUNTED_FILE,
-                path: '/var/spool/cwl/cwl.output.json'
-            },
-            '/var/lib/cwl/workflow.json': {
-                kind: MountKind.JSON,
-                content: {
-                    "cwlVersion": "v1.0",
-                    "$graph": [
-                        {
-                            "class": "CommandLineTool",
-                            "requirements": [
-                                {
-                                    "listing": [
-                                        {
-                                            "entryname": "input_collector.log",
-                                            "entry": "$(inputs.single_file.basename)\n"
-                                        }
-                                    ],
-                                    "class": "InitialWorkDirRequirement"
-                                }
-                            ],
-                            "inputs": [
-                                {
-                                    "type": "File",
-                                    "id": "#input_collector.cwl/single_file"
-                                }
-                            ],
-                            "outputs": [
-                                {
-                                    "type": "File",
-                                    "outputBinding": {
-                                        "glob": "*"
-                                    },
-                                    "id": "#input_collector.cwl/output"
-                                }
-                            ],
-                            "baseCommand": [
-                                "echo"
-                            ],
-                            "id": "#input_collector.cwl"
-                        },
-                        {
-                            "class": "Workflow",
-                            "doc": "This is the description of the workflow",
-                            "inputs": [
-                                {
-                                    "type": "File",
-                                    "label": "Single File",
-                                    "doc": "This should allow for single File selection only.",
-                                    "id": "#main/single_file"
-                                }
-                            ],
-                            "outputs": [
-                                {
-                                    "type": "File",
-                                    "outputSource": "#main/input_collector/output",
-                                    "id": "#main/log_file"
-                                }
-                            ],
-                            "steps": [
-                                {
-                                    "run": "#input_collector.cwl",
-                                    "in": [
-                                        {
-                                            "source": "#main/single_file",
-                                            "id": "#main/input_collector/single_file"
-                                        }
-                                    ],
-                                    "out": [
-                                        "#main/input_collector/output"
-                                    ],
-                                    "id": "#main/input_collector"
-                                }
-                            ],
-                            "id": "#main"
-                        }
-                    ]
-                },
-            },
-            '/var/lib/cwl/cwl.input.json': {
-                kind: MountKind.JSON,
-                content: {
-                    "single_file": {
-                        "class": "File",
-                        "location": "keep:233454526794c0a2d56a305baeff3d30+145/1.txt",
-                        "basename": "fileA"
-                    }
-                },
-            }
-        },
-        runtimeConstraints: {
-            API: true,
-            vcpus: 1,
-            ram: 1073741824,
-        },
-        containerImage: 'arvados/jobs:1.1.4.20180618144723',
-        cwd: '/var/spool/cwl',
-        command: [
-            'arvados-cwl-runner',
-            '--local',
-            '--api=containers',
-            "--project-uuid=c97qk-j7d0g-s3ngc1z0748hsmf",
-            '/var/lib/cwl/workflow.json#main',
-            '/var/lib/cwl/cwl.input.json'
-        ],
-        outputPath: '/var/spool/cwl',
-        priority: 1,
-    });
-};
-
 // force build comment #1
index db5ac90be27547aaa3213dd80c52497c606b0c8b..4090278fcd575e20c97b1b4a3e9aa2b712ad8fdb 100644 (file)
@@ -5,9 +5,7 @@ import {GraphChange, SVGPlugin}                                     from '../plu
 import {
     StepModel,
     WorkflowInputParameterModel,
-    WorkflowOutputParameterModel,
-    WorkflowStepInputModel,
-    WorkflowStepOutputModel
+    WorkflowOutputParameterModel
 } from "cwlts/models";
 
 export class SVGArrangePlugin implements SVGPlugin {
index f34ede0afcddaaa5bdbd2e9279b881deb8bb8c8a..e18c8ecbb96c6b67652ee51f2245ba022eaddd17 100644 (file)
@@ -10,7 +10,7 @@ export interface GroupResource extends TrashableResource {
     groupClass: GroupClass | null;
     description: string;
     properties: any;
-    writeableBy: string[];
+    writableBy: string[];
     ensure_unique_name: boolean;
 }
 
index 22a94f166403d4b1c54c7b1e242c5f684d6e155c..1e1041a1d37f5ec9bc990efd87d98870dd1bc609 100644 (file)
@@ -23,7 +23,7 @@ export const mockGroupResource = (data: Partial<GroupResource> = {}): GroupResou
     properties: "",
     trashAt: "",
     uuid: "",
-    writeableBy: [],
+    writableBy: [],
     ensure_unique_name: true,
     ...data
 });
index 8d0b37de21cacbdac56e41202f71411f27e59d20..abc92c624d97ea72e84daef51d854af9f12d1009 100644 (file)
@@ -121,11 +121,18 @@ export const parseWorkflowDefinition = (workflow: WorkflowResource): WorkflowRes
     return definition;
 };
 
-export const getWorkflowInputs = (workflowDefinition: WorkflowResourceDefinition) => {
+export const getWorkflow = (workflowDefinition: WorkflowResourceDefinition) => {
     if (!workflowDefinition.$graph) { return undefined; }
     const mainWorkflow = workflowDefinition.$graph.find(item => item.class === 'Workflow' && item.id === '#main');
     return mainWorkflow
-        ? mainWorkflow.inputs
+        ? mainWorkflow
+        : undefined;
+};
+
+export const getWorkflowInputs = (workflowDefinition: WorkflowResourceDefinition) => {
+    if (!workflowDefinition) { return undefined; }
+    return getWorkflow(workflowDefinition)
+        ? getWorkflow(workflowDefinition)!.inputs
         : undefined;
 };
 
index 2b4894015fc70f68c0b22975c35da94aa7d44c1f..d362508d186dabbb1d2347f576cc60bb14791f88 100644 (file)
@@ -2,7 +2,6 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import { OrderBuilder } from "./order-builder";
 import { joinUrls } from "~/services/api/url-builder";
 
 describe("UrlBuilder", () => {
index 6f88a729aba7ebba03e73709fe5ca97189f64460..f8e7de9857c333d78fd08de5dc8425cf75789552 100644 (file)
@@ -5,8 +5,6 @@
 import { CollectionService } from "../collection-service/collection-service";
 import { parseKeepManifestText, stringifyKeepManifest } from "./collection-manifest-parser";
 import { mapManifestToCollectionFilesTree } from "./collection-manifest-mapper";
-import { CommonResourceService } from "~/services/common-service/common-resource-service";
-import * as _ from "lodash";
 
 export class CollectionFilesService {
 
@@ -40,8 +38,7 @@ export class CollectionFilesService {
                 : stream
         );
         const manifestText = stringifyKeepManifest(updatedManifest);
-        const data = { ...collection, manifestText };
-        return this.collectionService.update(collectionUuid, CommonResourceService.mapKeys(_.snakeCase)(data));
+        return this.collectionService.update(collectionUuid, { manifestText });
     }
 
     async deleteFile(collectionUuid: string, file: { name: string, path: string }) {
@@ -58,11 +55,4 @@ export class CollectionFilesService {
         const manifestText = stringifyKeepManifest(updatedManifest);
         return this.collectionService.update(collectionUuid, { manifestText });
     }
-
-    renameTest() {
-        const u = this.renameFile('qr1hi-4zz18-n0sx074erl4p0ph', {
-            name: 'extracted2.txt.png',
-            path: ''
-        }, 'extracted-new.txt.png');
-    }
 }
index 86b1aded7cf69ac280564a530eb5ebb8a0439f21..c787cf7b1a14da4c87f643d42facef5ca4409c59 100644 (file)
@@ -9,10 +9,8 @@ import { WebDAV } from "~/common/webdav";
 import { AuthService } from "../auth-service/auth-service";
 import { mapTreeValues } from "~/models/tree";
 import { parseFilesResponse } from "./collection-service-files-response";
-import { fileToArrayBuffer } from "~/common/file";
 import { TrashableResourceService } from "~/services/common-service/trashable-resource-service";
 import { ApiActions } from "~/services/api/api-actions";
-import { snakeCase } from 'lodash';
 
 export type UploadProgress = (fileId: number, loaded: number, total: number, currentTime: number) => void;
 
@@ -82,27 +80,4 @@ export class CollectionService extends TrashableResourceService<CollectionResour
         };
         return this.webdavClient.upload(fileURL, [file], requestConfig);
     }
-
-    update(uuid: string, data: Partial<CollectionResource>) {
-        if (uuid && data && data.properties) {
-            const { properties } = data;
-            const mappedData = {
-                ...TrashableResourceService.mapKeys(snakeCase)(data),
-                properties,
-            };
-            return TrashableResourceService
-                .defaultResponse(
-                    this.serverApi
-                        .put<CollectionResource>(this.resourceType + uuid, mappedData),
-                    this.actions,
-                    false
-                );
-        }
-        return TrashableResourceService
-            .defaultResponse(
-                this.serverApi
-                    .put<CollectionResource>(this.resourceType + uuid, data && TrashableResourceService.mapKeys(snakeCase)(data)),
-                this.actions
-            );
-    }
 }
index 2e2ccd1c851bdc031d0f3f0aba8b9badb5873b33..e035ed5328fbecfef416212daa1183cb5d51b748 100644 (file)
@@ -2,7 +2,6 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import { snakeCase } from 'lodash';
 import { CommonResourceService } from "~/services/common-service/common-resource-service";
 import { AxiosInstance } from "axios";
 import { ContainerRequestResource } from '~/models/container-request';
@@ -12,25 +11,4 @@ export class ContainerRequestService extends CommonResourceService<ContainerRequ
     constructor(serverApi: AxiosInstance, actions: ApiActions) {
         super(serverApi, "container_requests", actions);
     }
-
-    create(data?: Partial<ContainerRequestResource>) {
-        if (data) {
-            const { mounts } = data;
-            if (mounts) {
-                const mappedData = {
-                    ...CommonResourceService.mapKeys(snakeCase)(data),
-                    mounts,
-                };
-                return CommonResourceService
-                    .defaultResponse(
-                        this.serverApi.post<ContainerRequestResource>(this.resourceType, mappedData),
-                        this.actions);
-            }
-        }
-        return CommonResourceService
-            .defaultResponse(
-                this.serverApi
-                    .post<ContainerRequestResource>(this.resourceType, data && CommonResourceService.mapKeys(snakeCase)(data)),
-                this.actions);
-    }
 }
index a676557a78afd4e44c3b5c1ae771077b63541f49..9517e2cb3427dd462ef4b31ca5f822babca67e2c 100644 (file)
@@ -9,7 +9,6 @@ import { AxiosInstance, AxiosRequestConfig } from "axios";
 import { CollectionResource } from "~/models/collection";
 import { ProjectResource } from "~/models/project";
 import { ProcessResource } from "~/models/process";
-import { ResourceKind } from '~/models/resource';
 import { TrashableResourceService } from "~/services/common-service/trashable-resource-service";
 import { ApiActions } from "~/services/api/api-actions";
 import { GroupResource } from "~/models/group";
@@ -59,18 +58,7 @@ export class GroupsService<T extends GroupResource = GroupResource> extends Tras
             this.serverApi.get(this.resourceType + pathUrl, cfg), this.actions, false
         );
 
-        const { items, ...res } = response;
-        const mappedItems = (items || []).map((item: GroupContentsResource) => {
-            const mappedItem = TrashableResourceService.mapKeys(_.camelCase)(item);
-            if (item.kind === ResourceKind.COLLECTION || item.kind === ResourceKind.PROJECT) {
-                const { properties } = item;
-                return { ...mappedItem, properties };
-            } else {
-                return mappedItem;
-            }
-        });
-        const mappedResponse = { ...TrashableResourceService.mapKeys(_.camelCase)(res) };
-        return { ...mappedResponse, items: mappedItems, clusterId: session && session.clusterId };
+        return { ...TrashableResourceService.mapKeys(_.camelCase)(response), clusterId: session && session.clusterId };
     }
 
     shared(params: SharedArguments = {}): Promise<ListResults<GroupContentsResource>> {
index 5c686aae67fd5db06251071bacbc591b5c5f0f51..0665fa660bae0df9c91c04cbe8f7ef58d2978b84 100644 (file)
@@ -7,8 +7,6 @@ import { ProjectResource } from "~/models/project";
 import { GroupClass } from "~/models/group";
 import { ListArguments } from "~/services/common-service/common-service";
 import { FilterBuilder, joinFilters } from "~/services/api/filter-builder";
-import { TrashableResourceService } from '~/services/common-service/trashable-resource-service';
-import { snakeCase } from 'lodash';
 export class ProjectService extends GroupsService<ProjectResource> {
 
     create(data: Partial<ProjectResource>) {
@@ -16,29 +14,6 @@ export class ProjectService extends GroupsService<ProjectResource> {
         return super.create(projectData);
     }
 
-    update(uuid: string, data: Partial<ProjectResource>) {
-        if (uuid && data && data.properties) {
-            const { properties } = data;
-            const mappedData = {
-                ...TrashableResourceService.mapKeys(snakeCase)(data),
-                properties,
-            };
-            return TrashableResourceService
-                .defaultResponse(
-                    this.serverApi
-                        .put<ProjectResource>(this.resourceType + uuid, mappedData),
-                    this.actions,
-                    false
-                );
-        }
-        return TrashableResourceService
-            .defaultResponse(
-                this.serverApi
-                    .put<ProjectResource>(this.resourceType + uuid, data && TrashableResourceService.mapKeys(snakeCase)(data)),
-                this.actions
-            );
-    }
-
     list(args: ListArguments = {}) {
         return super.list({
             ...args,
index fc24ace02ed17189041661e5c75aefadfc6cfc9f..c7bb677aa3f98429d3ecdbe05bf74fbc760b23da 100644 (file)
@@ -465,7 +465,7 @@ const collectionApiResponse = (apiResponse: CollectionResource) => {
 };
 
 const groupRequestApiResponse = (apiResponse: ProjectResource) => {
-    const { uuid, ownerUuid, createdAt, modifiedAt, modifiedByClientUuid, modifiedByUserUuid, name, description, groupClass, trashAt, isTrashed, deleteAt, properties, writeableBy } = apiResponse;
+    const { uuid, ownerUuid, createdAt, modifiedAt, modifiedByClientUuid, modifiedByUserUuid, name, description, groupClass, trashAt, isTrashed, deleteAt, properties, writableBy } = apiResponse;
     const response = `
 "uuid": "${uuid}",
 "owner_uuid": "${ownerUuid}",
@@ -480,7 +480,7 @@ const groupRequestApiResponse = (apiResponse: ProjectResource) => {
 "is_trashed": ${stringify(isTrashed)},
 "delete_at": ${stringify(deleteAt)},
 "properties": ${stringifyObject(properties)},
-"witable_by": ${stringifyObject(writeableBy)}`;
+"writable_by": ${stringifyObject(writableBy)}`;
 
     return <span style={{ marginLeft: '-15px' }}>{'{'} {response} {'\n'} <span style={{ marginLeft: '-15px' }}>{'}'}</span></span>;
 };
index 926121e39a734d089b927d8915ad6e374c92038b..1ebc8db993be3fc3d82125f24a59ac54dce8bba4 100644 (file)
@@ -21,7 +21,7 @@ import 'jest-localstorage-mock';
 import { createServices } from "~/services/services";
 import { configureStore, RootStore } from "../store";
 import createBrowserHistory from "history/createBrowserHistory";
-import { Config, mockConfig } from '~/common/config';
+import { mockConfig } from '~/common/config';
 import { ApiActions } from "~/services/api/api-actions";
 import { ACCOUNT_LINK_STATUS_KEY} from '~/services/link-account-service/link-account-service';
 
index cb28fcea8ad6aa768b49e7b21cc42f83f1faaf1b..159fb27de8cd57ae25efb9f9caad1327b265949c 100644 (file)
@@ -45,11 +45,14 @@ export const createCollectionTag = (data: TagProperty) =>
         const uuid = item ? item.uuid : '';
         try {
             if (item) {
-                const d: Partial<CollectionResource> = {
-                    properties: JSON.parse(JSON.stringify(item.properties))
-                };
-                d.properties[data.key] = data.value;
-                const updatedCollection = await services.collectionService.update(uuid, d);
+                const updatedCollection = await services.collectionService.update(
+                    uuid, {
+                        properties: {
+                            ...JSON.parse(JSON.stringify(item.properties)),
+                            [data.key]: data.value
+                        }
+                    }
+                );
                 item.properties[data.key] = data.value;
                 dispatch(resourcesActions.SET_RESOURCES([updatedCollection]));
                 dispatch(snackbarActions.OPEN_SNACKBAR({ message: "Tag has been successfully added.", hideDuration: 2000, kind: SnackbarKind.SUCCESS }));
@@ -78,12 +81,12 @@ export const deleteCollectionTag = (key: string) =>
         const uuid = item ? item.uuid : '';
         try {
             if (item) {
-                const data: Partial<CollectionResource> = {
-                    properties: JSON.parse(JSON.stringify(item.properties))
-                };
-                delete data.properties[key];
-                const updatedCollection = await services.collectionService.update(uuid, data);
                 delete item.properties[key];
+                const updatedCollection = await services.collectionService.update(
+                    uuid, {
+                        properties: {...item.properties}
+                    }
+                );
                 dispatch(resourcesActions.SET_RESOURCES([updatedCollection]));
                 dispatch(snackbarActions.OPEN_SNACKBAR({ message: "Tag has been successfully deleted.", hideDuration: 2000, kind: SnackbarKind.SUCCESS }));
                 return updatedCollection;
index 534d70d480e2fcf263db814a1e46b539619ababd..c661d9f8b2d9c2ee8c95e90ca04953f8629e4f3e 100644 (file)
@@ -11,7 +11,7 @@ import { snackbarActions, SnackbarKind } from "../../snackbar/snackbar-actions";
 import { dialogActions } from '../../dialog/dialog-actions';
 import { getNodeValue } from "~/models/tree";
 import { filterCollectionFilesBySelection } from './collection-panel-files-state';
-import { startSubmit, stopSubmit, reset, initialize, FormErrors } from 'redux-form';
+import { startSubmit, stopSubmit, initialize, FormErrors } from 'redux-form';
 import { getDialog } from "~/store/dialog/dialog-reducer";
 import { getFileFullPath } from "~/services/collection-service/collection-service-files-response";
 import { resourcesDataActions } from "~/store/resources-data/resources-data-actions";
index dc73e5a515bdc9d07d34b1361ba656d98380ab6c..0351e746b3c8a334d0f950a7cc280f7cec40d96b 100644 (file)
@@ -30,8 +30,8 @@ export const moveCollection = (resource: MoveToFormDialogData) =>
         dispatch(startSubmit(COLLECTION_MOVE_FORM_NAME));
         try {
             dispatch(progressIndicatorActions.START_WORKING(COLLECTION_MOVE_FORM_NAME));
+            await services.collectionService.update(resource.uuid, { ownerUuid: resource.ownerUuid });
             const collection = await services.collectionService.get(resource.uuid);
-            await services.collectionService.update(resource.uuid, { ...collection, ownerUuid: resource.ownerUuid });
             dispatch(projectPanelActions.REQUEST_ITEMS());
             dispatch(dialogActions.CLOSE_DIALOG({ id: COLLECTION_MOVE_FORM_NAME }));
             dispatch(progressIndicatorActions.STOP_WORKING(COLLECTION_MOVE_FORM_NAME));
index 52ea0e785ebb1c15b32ff404fdf19dcb3aaa9f76..8083716e7adfc9f7138907fb40888b4b2fc46781 100644 (file)
@@ -43,7 +43,7 @@ export const deleteProjectProperty = (key: string) =>
         try {
             if (project) {
                 delete project.properties[key];
-                const updatedProject = await services.projectService.update(project.uuid, project);
+                const updatedProject = await services.projectService.update(project.uuid, { properties: project.properties });
                 dispatch(resourcesActions.SET_RESOURCES([updatedProject]));
                 dispatch(snackbarActions.OPEN_SNACKBAR({ message: "Property has been successfully deleted.", hideDuration: 2000, kind: SnackbarKind.SUCCESS }));
             }
@@ -61,7 +61,7 @@ export const createProjectProperty = (data: TagProperty) =>
         try {
             if (project) {
                 project.properties[data.key] = data.value;
-                const updatedProject = await services.projectService.update(project.uuid, project);
+                const updatedProject = await services.projectService.update(project.uuid, { properties: project.properties });
                 dispatch(resourcesActions.SET_RESOURCES([updatedProject]));
                 dispatch(snackbarActions.OPEN_SNACKBAR({ message: "Property has been successfully added.", hideDuration: 2000, kind: SnackbarKind.SUCCESS }));
                 dispatch(stopSubmit(PROJECT_PROPERTIES_FORM_NAME));
index b73c3bbea9399fb639b5117f45b916f1aa3511b9..55bfd5ae8d1cef4e22079923e6e156649c370675 100644 (file)
@@ -15,7 +15,6 @@ import { GroupResource } from '~/models/group';
 import { RootState } from '~/store/store';
 import { ServiceRepository } from '~/services/services';
 import { PermissionResource } from '~/models/permission';
-import { GroupDetailsPanel } from '~/views/group-details-panel/group-details-panel';
 import { snackbarActions, SnackbarKind } from '~/store/snackbar/snackbar-actions';
 import { UserResource, getUserFullname } from '~/models/user';
 
index b7cf48054531c3fb988ab19cc5071660e6fe258c..af48b25b3878e838bd95002441ffcddb00e2f5df 100644 (file)
@@ -13,7 +13,7 @@ import { getResource } from '~/store/resources/resources';
 import { GroupResource } from '~/models/group';
 import { getCommonResourceServiceError, CommonResourceServiceError } from '~/services/common-service/common-resource-service';
 import { snackbarActions, SnackbarKind } from '~/store/snackbar/snackbar-actions';
-import { PermissionLevel, PermissionResource } from '~/models/permission';
+import { PermissionLevel } from '~/models/permission';
 import { PermissionService } from '~/services/permission-service/permission-service';
 import { FilterBuilder } from '~/services/api/filter-builder';
 
index 7a5d93cc6e4ba1502f1efd01bd61bfa332f40196..b5ef51b765418904aad2d356deb47daf6dfea590 100644 (file)
@@ -7,7 +7,7 @@ import { DataExplorerMiddlewareService, listResultsToDataExplorerItemsMeta, data
 import { RootState } from "~/store/store";
 import { ServiceRepository } from "~/services/services";
 import { snackbarActions, SnackbarKind } from '~/store/snackbar/snackbar-actions';
-import { getDataExplorer, DataExplorer, getSortColumn } from "~/store/data-explorer/data-explorer-reducer";
+import { getDataExplorer, getSortColumn } from "~/store/data-explorer/data-explorer-reducer";
 import { GroupsPanelActions } from '~/store/groups-panel/groups-panel-actions';
 import { FilterBuilder } from '~/services/api/filter-builder';
 import { updateResources } from '~/store/resources/resources-actions';
index d1bd8dfd62ddd03b7c6d099e9c3d33b50e07b75b..15a9f18903993d40dfc58bbc60a19a4dfaa0e32a 100644 (file)
@@ -4,7 +4,6 @@
 
 import { linkAccountPanelReducer, LinkAccountPanelError, LinkAccountPanelStatus, OriginatingUser } from "~/store/link-account-panel/link-account-panel-reducer";
 import { linkAccountPanelActions } from "~/store/link-account-panel/link-account-panel-actions";
-import { UserResource } from "~/models/user";
 
 describe('link-account-panel-reducer', () => {
     const initialState = undefined;
index d93e9ab0a08da07096168d84bc8cbbea9d1c0121..f2f1cea661075b701d4d5069ca5cb749758770e9 100644 (file)
@@ -3,12 +3,10 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import { Dispatch, compose, AnyAction } from 'redux';
-import { push, RouterAction } from "react-router-redux";
+import { push } from "react-router-redux";
 import { ResourceKind, extractUuidKind } from '~/models/resource';
-import { getCollectionUrl } from "~/models/collection";
-import { getProjectUrl } from "~/models/project";
 import { SidePanelTreeCategory } from '../side-panel-tree/side-panel-tree-actions';
-import { Routes, getProcessUrl, getProcessLogUrl, getGroupUrl, getNavUrl } from '~/routes/routes';
+import { Routes, getProcessLogUrl, getGroupUrl, getNavUrl } from '~/routes/routes';
 import { RootState } from '~/store/store';
 import { ServiceRepository } from '~/services/services';
 import { GROUPS_PANEL_LABEL } from '~/store/breadcrumbs/breadcrumbs-actions';
index b65a22027352a3a94b33c26ca620ca861aa0e920..47d6824a3075ad153bee90de36b63f25adead642 100644 (file)
@@ -19,7 +19,7 @@ import { initialize } from "redux-form";
 import { RUN_PROCESS_BASIC_FORM, RunProcessBasicFormData } from "~/views/run-process-panel/run-process-basic-form";
 import { RunProcessAdvancedFormData, RUN_PROCESS_ADVANCED_FORM } from "~/views/run-process-panel/run-process-advanced-form";
 import { MOUNT_PATH_CWL_WORKFLOW, MOUNT_PATH_CWL_INPUT } from '~/models/process';
-import { getWorkflowInputs } from "~/models/workflow";
+import { getWorkflow, getWorkflowInputs } from "~/models/workflow";
 
 export const loadProcess = (containerRequestUuid: string) =>
     async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository): Promise<Process> => {
@@ -86,8 +86,8 @@ export const reRunProcess = (processUuid: string, workflowUuid: string) =>
         const workflows = getState().runProcessPanel.searchWorkflows;
         const workflow = workflows.find(workflow => workflow.uuid === workflowUuid);
         if (workflow && process) {
-            let inputs = getWorkflowInputs(process.mounts[MOUNT_PATH_CWL_WORKFLOW]);
-            inputs = getInputs(process);
+            const mainWf = getWorkflow(process.mounts[MOUNT_PATH_CWL_WORKFLOW]);
+            if (mainWf) { mainWf.inputs = getInputs(process); }
             const stringifiedDefinition = JSON.stringify(process.mounts[MOUNT_PATH_CWL_WORKFLOW].content);
             const newWorkflow = { ...workflow, definition: stringifiedDefinition };
 
index 8876be0f252afedd7e1dd0b752a6b4eba8981cf8..441b8a6c7d3b587b4c7c019da67e87b011038456 100644 (file)
@@ -29,8 +29,7 @@ export const moveProject = (resource: MoveToFormDialogData) =>
         const userUuid = getState().auth.user!.uuid;
         dispatch(startSubmit(PROJECT_MOVE_FORM_NAME));
         try {
-            const project = await services.projectService.get(resource.uuid);
-            const newProject = await services.projectService.update(resource.uuid, { ...project, ownerUuid: resource.ownerUuid });
+            const newProject = await services.projectService.update(resource.uuid, { ownerUuid: resource.ownerUuid });
             dispatch(projectPanelActions.REQUEST_ITEMS());
             dispatch(dialogActions.CLOSE_DIALOG({ id: PROJECT_MOVE_FORM_NAME }));
             await dispatch<any>(loadSidePanelTreeProjects(userUuid));
index f2a1c4b2d797f233504dedac9f511862f4b91ffa..6213c60a91e643559decbf8855c9351eb5a72b91 100644 (file)
@@ -2,9 +2,8 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import { Dispatch } from "redux";
 import { dialogActions } from "~/store/dialog/dialog-actions";
 
 export const RICH_TEXT_EDITOR_DIALOG_NAME = 'richTextEditorDialogName';
-export const openRichTextEditorDialog = (title: string, text: string) => 
+export const openRichTextEditorDialog = (title: string, text: string) =>
     dialogActions.OPEN_DIALOG({ id: RICH_TEXT_EDITOR_DIALOG_NAME, data: { title, text } });
\ No newline at end of file
index 68efb4e6f2f6b0651a8aa409f65fd5f2b4d72a61..e1551c23f89211876054cd1140457f1f3c7ef1fc 100644 (file)
@@ -10,12 +10,11 @@ import { RootState } from '~/store/store';
 import { initUserProject, treePickerActions } from '~/store/tree-picker/tree-picker-actions';
 import { ServiceRepository } from '~/services/services';
 import { FilterBuilder } from "~/services/api/filter-builder";
-import { ResourceKind, isResourceUuid, extractUuidKind, RESOURCE_UUID_REGEX, COLLECTION_PDH_REGEX } from '~/models/resource';
+import { ResourceKind, RESOURCE_UUID_REGEX, COLLECTION_PDH_REGEX } from '~/models/resource';
 import { SearchView } from '~/store/search-bar/search-bar-reducer';
 import { navigateTo, navigateToSearchResults } from '~/store/navigation/navigation-action';
 import { snackbarActions, SnackbarKind } from '~/store/snackbar/snackbar-actions';
 import { PropertyValue, SearchBarAdvanceFormData } from '~/models/search-bar';
-import { debounce } from 'debounce';
 import * as _ from "lodash";
 import { getModifiedKeysValues } from "~/common/objects";
 import { activateSearchBarProject } from "~/store/search-bar/search-bar-tree-actions";
@@ -203,12 +202,6 @@ export const submitData = (event: React.FormEvent<HTMLFormElement>) =>
     };
 
 
-const startSearch = () =>
-    (dispatch: Dispatch, getState: () => RootState) => {
-        const searchValue = getState().searchBar.searchValue;
-        dispatch<any>(searchData(searchValue));
-    };
-
 const searchGroups = (searchValue: string, limit: number) =>
     async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => {
         const currentView = getState().searchBar.currentView;
@@ -290,8 +283,6 @@ export const getQueryFromAdvancedData = (data: SearchBarAdvanceFormData, prevDat
         .forEach(p => keyMap.push([`has:"${p.key}"`, `prop-"${p.key}"`]));
 
     if (prevData) {
-        const fd = flatData(data);
-        const pfd = flatData(prevData);
         const obj = getModifiedKeysValues(flatData(data), flatData(prevData));
         value = buildQueryFromKeyMap({
             searchValue: data.searchValue,
index 9d7e3207f0973379b5ae5cdf4c66baea912c777e..3233525a15fa7ce47def6793b1018c4224496b18 100644 (file)
@@ -10,7 +10,6 @@ import { snackbarActions, SnackbarKind } from '~/store/snackbar/snackbar-actions
 import { DataExplorer, getDataExplorer } from '~/store/data-explorer/data-explorer-reducer';
 import { updateResources } from '~/store/resources/resources-actions';
 import { SortDirection } from '~/components/data-table/data-column';
-import { SearchResultsPanelColumnNames } from '~/views/search-results-panel/search-results-panel-view';
 import { OrderDirection, OrderBuilder } from '~/services/api/order-builder';
 import { GroupContentsResource, GroupContentsResourcePrefix } from "~/services/groups-service/groups-service";
 import { ListResults } from '~/services/common-service/common-service';
@@ -25,7 +24,6 @@ import { joinFilters } from '~/services/api/filter-builder';
 import { DataColumns } from '~/components/data-table/data-table';
 import { serializeResourceTypeFilters } from '~/store//resource-type-filters/resource-type-filters';
 import { ProjectPanelColumnNames } from '~/views/project-panel/project-panel';
-import * as _ from 'lodash';
 import { Resource } from '~/models/resource';
 
 export class SearchResultsMiddlewareService extends DataExplorerMiddlewareService {
index fb9bc50c7fbc8202399812cf26241065616a3045..a2f239764c62ceed06f231d4f50cece77525eb20 100644 (file)
@@ -2,7 +2,7 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import { createTree, TreeNode, setNode, Tree, TreeNodeStatus, setNodeStatus, expandNode, deactivateNode, deselectNode, selectNode, selectNodes, deselectNodes } from '~/models/tree';
+import { createTree, TreeNode, setNode, Tree, TreeNodeStatus, setNodeStatus, expandNode, deactivateNode, selectNodes, deselectNodes } from '~/models/tree';
 import { TreePicker } from "./tree-picker";
 import { treePickerActions, TreePickerAction } from "./tree-picker-actions";
 import { compose } from "redux";
index 1a567e9db08017ca227a3182848370b179fcae1b..44b2bad68d92cf1ac0a77d0f55ad90a3575e61a5 100644 (file)
@@ -109,7 +109,7 @@ export const toggleIsActive = (uuid: string) =>
         const { resources } = getState();
         const data = getResource<UserResource>(uuid)(resources);
         const isActive = data!.isActive;
-        const newActivity = await services.userService.update(uuid, { ...data, isActive: !isActive });
+        const newActivity = await services.userService.update(uuid, { isActive: !isActive });
         dispatch<any>(loadUsersPanel());
         return newActivity;
     };
@@ -119,7 +119,7 @@ export const toggleIsAdmin = (uuid: string) =>
         const { resources } = getState();
         const data = getResource<UserResource>(uuid)(resources);
         const isAdmin = data!.isAdmin;
-        const newActivity = await services.userService.update(uuid, { ...data, isAdmin: !isAdmin });
+        const newActivity = await services.userService.update(uuid, { isAdmin: !isAdmin });
         dispatch<any>(loadUsersPanel());
         return newActivity;
     };
index 868ed5ebfbf2732bebc10a7b0d41120d6bb775d1..dc638387bb6f7c4077e56a3de290a6dacb01db26 100644 (file)
@@ -19,7 +19,7 @@ import {
     loadSidePanelTreeProjects,
     SidePanelTreeCategory
 } from '~/store/side-panel-tree/side-panel-tree-actions';
-import { loadResource, updateResources } from '~/store/resources/resources-actions';
+import { updateResources } from '~/store/resources/resources-actions';
 import { projectPanelColumns } from '~/views/project-panel/project-panel';
 import { favoritePanelColumns } from '~/views/favorite-panel/favorite-panel';
 import { matchRootRoute } from '~/routes/routes';
index 9bde5f949e67b9be0c2b0d846098363a3bcbaa74..5cbfb8378b079bc54c85f63c289e7fcb07bcd093 100644 (file)
@@ -2,7 +2,7 @@
 //
 // SPDX-License-Identifier: AGPL-3.0
 
-import { isInteger, isNumber } from 'lodash';
+import { isNumber } from 'lodash';
 
 const ERROR_MESSAGE = 'This field must be a float';
 
index 922e3e52706093929f04a44641e3276187cdbf78..370aa4c3a2ac939dbe8d957c8e1d7df691c4f22a 100644 (file)
@@ -5,12 +5,6 @@
 export const ERROR_MESSAGE = 'Maximum string length of this field is: ';
 export const DEFAULT_MAX_VALUE = 60;
 
-interface MaxLengthProps {
-    maxLengthValue: number;  
-    defaultErrorMessage: string;
-}
-
-// TODO types for maxLength
 export const maxLength: any = (maxLengthValue = DEFAULT_MAX_VALUE, errorMessage = ERROR_MESSAGE) => {
     return (value: string) => {
         if (value) {
index f636850d5a9f0a13acfe909a3346cd3da2f3882b..fbba02aeb4d8e4127da10f58f12723d7672ef5ae 100644 (file)
@@ -4,11 +4,6 @@
 
 export const ERROR_MESSAGE = 'This field is required.';
 
-interface RequiredProps {
-    value: string;
-}
-
-// TODO types for require
 export const require: any = (value: string) => {
     return value && value.length > 0 ? undefined : ERROR_MESSAGE;
 };
index 7dc62552f9111ea3bf706cf7371d7f016d3bf114..0e66a66df796fcba1849fda286715ee53dc2bb69 100644 (file)
@@ -3,7 +3,7 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import * as React from "react";
-import { Dialog, DialogTitle, DialogContent, DialogActions, Button, Typography } from "@material-ui/core";
+import { Dialog, DialogTitle, DialogContent, DialogActions, Button } from "@material-ui/core";
 import { WithDialogProps } from "~/store/dialog/with-dialog";
 import { withDialog } from '~/store/dialog/with-dialog';
 import { DefaultCodeSnippet } from '~/components/default-code-snippet/default-code-snippet';
index fae099d5717b3f12bde13763746d26e3f4c9a944..0e90b720c378670e4c7291c8db04c9f59689f094 100644 (file)
@@ -5,7 +5,7 @@
 import { RouteProps } from "react-router";
 import * as React from "react";
 import { connect, DispatchProp } from "react-redux";
-import { authActions, getUserDetails, saveApiToken } from "~/store/auth/auth-action";
+import { getUserDetails, saveApiToken } from "~/store/auth/auth-action";
 import { getUrlParameter } from "~/common/url";
 import { AuthService } from "~/services/auth-service/auth-service";
 import { navigateToRootProject, navigateToLinkAccount } from "~/store/navigation/navigation-action";
index fe77b749226b4c44de2af1a32e2dad0f9650deb0..9629f028283f016fbece418e36e4df5529dc13e8 100644 (file)
@@ -5,7 +5,7 @@
 import { ContextMenuActionSet } from "../context-menu-action-set";
 import { ToggleFavoriteAction } from "../actions/favorite-action";
 import { toggleFavorite } from "~/store/favorites/favorites-actions";
-import { RenameIcon, ShareIcon, MoveToIcon, CopyIcon, DetailsIcon, ProvenanceGraphIcon, AdvancedIcon, RemoveIcon } from "~/components/icon/icon";
+import { RenameIcon, ShareIcon, MoveToIcon, CopyIcon, DetailsIcon, AdvancedIcon } from "~/components/icon/icon";
 import { openCollectionUpdateDialog } from "~/store/collections/collection-update-actions";
 import { favoritePanelActions } from "~/store/favorite-panel/favorite-panel-action";
 import { openMoveCollectionDialog } from '~/store/collections/collection-move-actions';
index 4b1d8fd84400697202efaeb6c0476ddba77e0d9b..5e367906cee3072c899e2d43bf15de16db9ab649 100644 (file)
@@ -6,13 +6,12 @@ import { ContextMenuActionSet } from "../context-menu-action-set";
 import { ToggleFavoriteAction } from "../actions/favorite-action";
 import { ToggleTrashAction } from "~/views-components/context-menu/actions/trash-action";
 import { toggleFavorite } from "~/store/favorites/favorites-actions";
-import { RenameIcon, ShareIcon, MoveToIcon, CopyIcon, DetailsIcon, RemoveIcon, AdvancedIcon } from '~/components/icon/icon';
+import { RenameIcon, ShareIcon, MoveToIcon, CopyIcon, DetailsIcon, AdvancedIcon } from '~/components/icon/icon';
 import { openCollectionUpdateDialog } from "~/store/collections/collection-update-actions";
 import { favoritePanelActions } from "~/store/favorite-panel/favorite-panel-action";
 import { openMoveCollectionDialog } from '~/store/collections/collection-move-actions';
 import { openCollectionCopyDialog } from '~/store/collections/collection-copy-actions';
 import { toggleCollectionTrashed } from "~/store/trash/trash-actions";
-import { detailsPanelActions } from '~/store/details-panel/details-panel-action';
 import { openSharingDialog } from "~/store/sharing-dialog/sharing-dialog-actions";
 import { openAdvancedTabDialog } from '~/store/advanced-tab/advanced-tab';
 import { toggleDetailsPanel } from '~/store/details-panel/details-panel-action';
index ed52696859210884b2cebaff37a525354a3e5b55..ae276094bdc50d3a07eea18a2456ed747d84328f 100644 (file)
@@ -6,7 +6,7 @@ import { ContextMenuActionSet } from "~/views-components/context-menu/context-me
 import { ToggleFavoriteAction } from "~/views-components/context-menu/actions/favorite-action";
 import { toggleFavorite } from "~/store/favorites/favorites-actions";
 import {
-    RenameIcon, ShareIcon, MoveToIcon, CopyIcon, DetailsIcon, ProvenanceGraphIcon,
+    RenameIcon, ShareIcon, MoveToIcon, CopyIcon, DetailsIcon,
     AdvancedIcon, RemoveIcon, ReRunProcessIcon, LogIcon, InputIcon, CommandIcon, OutputIcon
 } from "~/components/icon/icon";
 import { favoritePanelActions } from "~/store/favorite-panel/favorite-panel-action";
index 1ec1c60c04aae40b17ef2712486952c3fbdad8bb..8f03cc5d66c1355d3c84a0891893d555f18a143f 100644 (file)
@@ -3,7 +3,6 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import * as React from 'react';
-import { compose } from 'redux';
 import { connect } from 'react-redux';
 import { openProjectPropertiesDialog } from '~/store/details-panel/details-panel-action';
 import { ProjectIcon, RenameIcon } from '~/components/icon/icon';
index 1b8424c040b296b43db2b388c21368b8f76b7628..722180534469b1eebcc779b40d491408251ac4d7 100644 (file)
@@ -7,7 +7,6 @@ import { MenuItem, Divider } from "@material-ui/core";
 import { StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core/styles';
 import { User, getUserFullname } from "~/models/user";
 import { DropdownMenu } from "~/components/dropdown-menu/dropdown-menu";
-import { Link } from "react-router-dom";
 import { UserPanelIcon } from "~/components/icon/icon";
 import { DispatchProp, connect } from 'react-redux';
 import { logout } from '~/store/auth/auth-action';
index 9b94c064ed919dc3ed28755456ca729fb4508a27..549ab7ce34609c4040714450d75e1f5e1ca0d480 100644 (file)
@@ -8,7 +8,6 @@ import { User } from "~/models/user";
 import { DropdownMenu } from "~/components/dropdown-menu/dropdown-menu";
 import { AdminMenuIcon } from "~/components/icon/icon";
 import { DispatchProp, connect } from 'react-redux';
-import { logout } from '~/store/auth/auth-action';
 import { RootState } from "~/store/store";
 import { openRepositoriesPanel } from "~/store/repositories/repositories-actions";
 import * as NavigationAction from '~/store/navigation/navigation-action';
index fe808af5c7c3e7e7124dcd68fb77a46558568ac7..b615f5b5cb05ebcc3d87a23bce7d772afb47599e 100644 (file)
@@ -5,7 +5,7 @@
 import * as React from 'react';
 import { ReactElement } from 'react';
 import { StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core/styles';
-import { Tree, TreeItem, TreeItemStatus } from '~/components/tree/tree';
+import { Tree, TreeItem } from '~/components/tree/tree';
 import { ProjectResource } from '~/models/project';
 import { ProjectIcon } from '~/components/icon/icon';
 import { ArvadosTheme } from '~/common/custom-theme';
index f4969f5cf4e0de16fc3a804c4740f7fb2ac0bfd8..10bb5eb822c411a4236cd6b80cbb052612d555d5 100644 (file)
@@ -3,7 +3,7 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import * as React from 'react';
-import { values, memoize, pipe, pick } from 'lodash/fp';
+import { values, memoize, pipe } from 'lodash/fp';
 import { HomeTreePicker } from '~/views-components/projects-tree-picker/home-tree-picker';
 import { SharedTreePicker } from '~/views-components/projects-tree-picker/shared-tree-picker';
 import { FavoritesTreePicker } from '~/views-components/projects-tree-picker/favorites-tree-picker';
index b23a96a089e4c26099c6dbeb6cc3460d63c9c657..dd6028a6880545cbd8e979433c45fba7a2777209 100644 (file)
@@ -4,7 +4,6 @@
 
 import * as React from 'react';
 import { Paper, StyleRulesCallback, withStyles, WithStyles } from '@material-ui/core';
-import { SearchView } from '~/store/search-bar/search-bar-reducer';
 import {
     SearchBarRecentQueries,
     SearchBarRecentQueriesActionProps
index da5cd0124405c51c1d8476f68877beaeb247ed32..90b4f83d040139138807b3286f699e68b5523bff 100644 (file)
@@ -3,11 +3,10 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import * as React from 'react';
-import { MenuItem, Select, withStyles, StyleRulesCallback } from '@material-ui/core';
+import { MenuItem, Select } from '@material-ui/core';
 import RemoveRedEye from '@material-ui/icons/RemoveRedEye';
 import Edit from '@material-ui/icons/Edit';
 import Computer from '@material-ui/icons/Computer';
-import { WithStyles } from '@material-ui/core/styles';
 import { SelectProps } from '@material-ui/core/Select';
 import { SelectItem } from './select-item';
 import { PermissionLevel } from '../../models/permission';
index 62d9dc3532e2efc48605b261e99ddffaa20d7133..6599a3fc795a8ca3b1b03eedf42797b3b0c5fbc0 100644 (file)
@@ -6,7 +6,7 @@ import * as React from 'react';
 import { StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core/styles';
 import { ArvadosTheme } from '~/common/custom-theme';
 import { SidePanelTree, SidePanelTreeProps } from '~/views-components/side-panel-tree/side-panel-tree';
-import { compose, Dispatch } from 'redux';
+import { Dispatch } from 'redux';
 import { connect } from 'react-redux';
 import { navigateFromSidePanel } from '~/store/side-panel/side-panel-action';
 import { Grid } from '@material-ui/core';
index 5d799f0b27c8fd040ac23c1f90acc5cfa8648d8e..58dd940494d18e5654f005a9277f2ebf64ddb10e 100644 (file)
@@ -11,13 +11,12 @@ import { connect, DispatchProp } from "react-redux";
 import { RouteComponentProps } from 'react-router';
 import { ArvadosTheme } from '~/common/custom-theme';
 import { RootState } from '~/store/store';
-import { MoreOptionsIcon, CollectionIcon, CopyIcon } from '~/components/icon/icon';
+import { MoreOptionsIcon, CollectionIcon } from '~/components/icon/icon';
 import { DetailsAttribute } from '~/components/details-attribute/details-attribute';
 import { CollectionResource } from '~/models/collection';
 import { CollectionPanelFiles } from '~/views-components/collection-panel-files/collection-panel-files';
 import { CollectionTagForm } from './collection-tag-form';
 import { deleteCollectionTag, navigateToProcess } from '~/store/collection-panel/collection-panel-action';
-import { snackbarActions, SnackbarKind } from '~/store/snackbar/snackbar-actions';
 import { getResource } from '~/store/resources/resources';
 import { openContextMenu } from '~/store/context-menu/context-menu-actions';
 import { ContextMenuKind } from '~/views-components/context-menu/context-menu';
index 8c266b616016d8d48318364103c96274106c7722..f2a7ed1c5d5d42dcc3bd002c35ebec075407dff7 100644 (file)
@@ -3,7 +3,7 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import * as React from 'react';
-import { StyleRulesCallback, WithStyles, withStyles, Card, CardContent, Button, Typography, Grid, Table, TableHead, TableRow, TableCell, TableBody, Tooltip, IconButton, Checkbox } from '@material-ui/core';
+import { StyleRulesCallback, WithStyles, withStyles, Card, CardContent, Grid, Table, TableHead, TableRow, TableCell, TableBody, Tooltip, IconButton, Checkbox } from '@material-ui/core';
 import { ArvadosTheme } from '~/common/custom-theme';
 import { MoreOptionsIcon } from '~/components/icon/icon';
 import { KeepServiceResource } from '~/models/keep-services';
index 41a17bf9682c1b7fb86d5436097ac24673b19693..debede12faf4be7c9c0a5371e2fda6b95535791e 100644 (file)
@@ -4,7 +4,7 @@
 
 import * as React from 'react';
 import { connect, DispatchProp } from 'react-redux';
-import { Grid, Typography, Button, Select, FormControl } from '@material-ui/core';
+import { Grid, Typography, Button, Select } from '@material-ui/core';
 import { StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core/styles';
 import { login, authActions } from '~/store/auth/auth-action';
 import { ArvadosTheme } from '~/common/custom-theme';
index 43bc7fbc158ba6c891ff3d87b60dd0f8d5deca74..16fc7a1f05a41d5bd4604ce0943eb605da2a0670 100644 (file)
@@ -11,7 +11,6 @@ import { LoginPanel } from '~/views/login-panel/login-panel';
 import { InactivePanel } from '~/views/inactive-panel/inactive-panel';
 import { WorkbenchLoadingScreen } from '~/views/workbench/workbench-loading-screen';
 import { MainAppBar } from '~/views-components/main-app-bar/main-app-bar';
-import { LinkAccountPanel } from '~/views/link-account-panel/link-account-panel';
 
 type CssRules = 'root';
 
index a7d83daef57f82b9cbbd8bf5f70ca1088ae78f9e..7b238832b09139152d500f00a2671a6d602f85b1 100644 (file)
@@ -11,7 +11,7 @@ import {
 } from '~/models/workflow';
 import { Field } from 'redux-form';
 import { ERROR_MESSAGE } from '~/validators/require';
-import { Input, Dialog, DialogTitle, DialogContent, DialogActions, Button, Divider, Grid, WithStyles, Typography } from '@material-ui/core';
+import { Input, Dialog, DialogTitle, DialogContent, DialogActions, Button, Divider, WithStyles, Typography } from '@material-ui/core';
 import { GenericInputProps, GenericInput } from './generic-input';
 import { ProjectsTreePicker } from '~/views-components/projects-tree-picker/projects-tree-picker';
 import { connect, DispatchProp } from 'react-redux';
index c134548c734dee8270d4e36d4ba9793a5e065d98..88f8a00c1c496a534cc91c38fcd4e2fb83637b36 100644 (file)
@@ -11,7 +11,7 @@ import {
 } from '~/models/workflow';
 import { Field } from 'redux-form';
 import { ERROR_MESSAGE } from '~/validators/require';
-import { Input, Dialog, DialogTitle, DialogContent, DialogActions, Button, Divider, Grid, WithStyles, Typography } from '@material-ui/core';
+import { Input, Dialog, DialogTitle, DialogContent, DialogActions, Button, Divider, WithStyles, Typography } from '@material-ui/core';
 import { GenericInputProps, GenericInput } from './generic-input';
 import { ProjectsTreePicker } from '~/views-components/projects-tree-picker/projects-tree-picker';
 import { connect, DispatchProp } from 'react-redux';
index d63ff30ffb08cfa83787b35989e65fbac42f967c..0400b850a2b460ca2fe2d7d80ae98da6647c9fda 100644 (file)
@@ -9,7 +9,6 @@ import { Grid } from '@material-ui/core';
 import { TextField } from '~/components/text-field/text-field';
 import { ExpandIcon } from '~/components/icon/icon';
 import * as IntInput from './inputs/int-input';
-import { require } from '~/validators/require';
 import { min } from '~/validators/min';
 import { optional } from '~/validators/optional';
 import { SwitchField } from '~/components/switch-field/switch-field';
index 9b3379a385264d2edb58f5ad6da91e109577ae31..45b971179384671f6c3175e2544c19c60cec1fd9 100644 (file)
@@ -7,7 +7,7 @@ import { reduxForm, InjectedFormProps } from 'redux-form';
 import { CommandInputParameter, CWLType, IntCommandInputParameter, BooleanCommandInputParameter, FileCommandInputParameter, DirectoryCommandInputParameter, DirectoryArrayCommandInputParameter, FloatArrayCommandInputParameter, IntArrayCommandInputParameter } from '~/models/workflow';
 import { IntInput } from '~/views/run-process-panel/inputs/int-input';
 import { StringInput } from '~/views/run-process-panel/inputs/string-input';
-import { StringCommandInputParameter, FloatCommandInputParameter, isPrimitiveOfType, File, Directory, WorkflowInputsData, EnumCommandInputParameter, isArrayOfType, StringArrayCommandInputParameter, FileArrayCommandInputParameter } from '../../models/workflow';
+import { StringCommandInputParameter, FloatCommandInputParameter, isPrimitiveOfType, WorkflowInputsData, EnumCommandInputParameter, isArrayOfType, StringArrayCommandInputParameter, FileArrayCommandInputParameter } from '../../models/workflow';
 import { FloatInput } from '~/views/run-process-panel/inputs/float-input';
 import { BooleanInput } from './inputs/boolean-input';
 import { FileInput } from './inputs/file-input';
index 8e855ab395a95666e11d1f708315465bf5aff098..a2ed9a21f1474464b9e867423f2afe91e5bfbeca 100644 (file)
@@ -12,7 +12,7 @@ import { RootState } from '~/store/store';
 import { isValid } from 'redux-form';
 import { RUN_PROCESS_INPUTS_FORM } from './run-process-inputs-form';
 import { RunProcessAdvancedForm, RUN_PROCESS_ADVANCED_FORM } from './run-process-advanced-form';
-import { createSelector, createStructuredSelector } from 'reselect';
+import { createStructuredSelector } from 'reselect';
 import { WorkflowPresetSelect } from '~/views/run-process-panel/workflow-preset-select';
 import { selectPreset } from '~/store/run-process-panel/run-process-panel-actions';
 
index 18df96182d636c172370b76baef9a93d973a90d9..dec5af513f4d161a1e422aa591fcd48e730adb6c 100644 (file)
@@ -33,7 +33,6 @@ import { Dispatch } from "redux";
 import { DataTableDefaultView } from '~/components/data-table-default-view/data-table-default-view';
 import { createTree } from '~/models/tree';
 import {
-    getInitialResourceTypeFilters,
     getTrashPanelTypeFilters
 } from '~/store/resource-type-filters/resource-type-filters';
 
index 6c2fdafe337cec8b2ed8c2f046bce252e0905603..debc20825281cee5dbd900696bbbbcc66c247439 100644 (file)
@@ -3,7 +3,7 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import * as React from 'react';
-import { WithStyles, withStyles, Typography, Tabs, Tab, Paper, Button, Grid } from '@material-ui/core';
+import { WithStyles, withStyles, Tabs, Tab, Paper, Button, Grid } from '@material-ui/core';
 import { DataExplorer } from "~/views-components/data-explorer/data-explorer";
 import { connect, DispatchProp } from 'react-redux';
 import { DataColumns } from '~/components/data-table/data-table';
index c64778a3c805f203ba97a9bde63a720cab690540..829fe17a4de48b3f535036d6c34f3c1fc5ff2497 100644 (file)
@@ -5,7 +5,6 @@
 import * as React from 'react';
 import { connect } from 'react-redux';
 import { RootState } from '~/store/store';
-import { AuthState } from '~/store/auth/auth-reducer';
 import { User } from "~/models/user";
 import { getSaltedToken } from '~/store/auth/auth-action-session';
 import { Config } from '~/common/config';
index d015d4ec363255c5982ce3a8bb12af2393d1b2ec..8ab042d289650fb3ee3637f26d952a891229c3db 100644 (file)
@@ -3,7 +3,6 @@
 // SPDX-License-Identifier: AGPL-3.0
 
 import * as React from 'react';
-import { connect } from 'react-redux';
 import { StyleRulesCallback, WithStyles, withStyles } from '@material-ui/core/styles';
 import { Route, Switch } from "react-router";
 import { ProjectPanel } from "~/views/project-panel/project-panel";
index d8fa100e73d9d8f0061279c11407e6f2ead0a6fa..45f4423b219c8286a388275140c13095dcffaa64 100644 (file)
@@ -50,18 +50,19 @@ export enum ResourceStatus {
     SHARED = "Shared"
 }
 
-const resourceStatus = (type: string) => {
-    switch (type) {
-        case ResourceStatus.PUBLIC:
-            return "Public";
-        case ResourceStatus.PRIVATE:
-            return "Private";
-        case ResourceStatus.SHARED:
-            return "Shared";
-        default:
-            return "Unknown";
-    }
-};
+// TODO: restore filters
+// const resourceStatus = (type: string) => {
+//     switch (type) {
+//         case ResourceStatus.PUBLIC:
+//             return "Public";
+//         case ResourceStatus.PRIVATE:
+//             return "Private";
+//         case ResourceStatus.SHARED:
+//             return "Shared";
+//         default:
+//             return "Unknown";
+//     }
+// };
 
 export const workflowPanelColumns: DataColumns<string> = [
     {
index 8161f1935cd33b08d06cf75bd7324e8230f4b3c0..d10414616a359982c1e9d77d010e8327062fe620 100644 (file)
@@ -13,7 +13,6 @@ import { loadContainers } from '~/store/processes/processes-actions';
 import { LogEventType } from '~/models/log';
 import { addProcessLogsPanelItem } from '../store/process-logs-panel/process-logs-panel-actions';
 import { FilterBuilder } from "~/services/api/filter-builder";
-import { snackbarActions, SnackbarKind } from "~/store/snackbar/snackbar-actions";
 
 export const initWebSocket = (config: Config, authService: AuthService, store: RootStore) => {
     if (config.websocketUrl) {
index 003e9021cd6d3c6dd0d707165ec8eaf5746e3aaa..2a7c3c051c4b97168713136f0e825243ffc22ff6 100644 (file)
@@ -1,5 +1,5 @@
 {
-  "extends": ["tslint:recommended", "tslint-react", "tslint-config-prettier"],
+  "extends": ["tslint:recommended", "tslint-react", "tslint-config-prettier", "tslint-etc"],
   "rules": {
     "ordered-imports": false,
     "member-ordering": false,
     "interface-over-type-literal": false,
     "no-empty": false,
     "no-bitwise": false,
-    "ban-types": false
+    "ban-types": false,
+    "no-unused-declaration": true
   },
   "linterOptions": {
     "exclude": [
       "config/**/*.js",
       "node_modules/**/*.ts",
       "src/lib/**",
-      "coverage/lcov-report/*.js"
+      "src/**/*.test.ts",
+      "coverage/lcov-report/*.js",
+      "src/common/custom-theme.ts"
     ]
   }
 }
index 979441e1eb56c6ff8d3224964e3bd3f0d314f0b5..1028d12e98da4bafae3d8c42412cfa85c85b434d 100644 (file)
--- a/yarn.lock
+++ b/yarn.lock
     "@babel/runtime" "7.0.0"
     recompose "^0.29.0"
 
+"@phenomnomnominal/tsquery@^3.0.0":
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/@phenomnomnominal/tsquery/-/tsquery-3.0.0.tgz#6f2f4dbf6304ff52b12cc7a5b979f20c3794a22a"
+  integrity sha512-SW8lKitBHWJ9fAYkJ9kJivuctwNYCh3BUxLdH0+XiR1GPBiu+7qiZzh8p8jqlj1LgVC1TbvfNFroaEsmYlL8Iw==
+  dependencies:
+    esquery "^1.0.1"
+
 "@types/cheerio@*":
   version "0.22.9"
   resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.9.tgz#b5990152604c2ada749b7f88cab3476f21f39d7b"
@@ -2834,12 +2841,24 @@ esprima@^4.0.0:
   version "4.0.1"
   resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
 
+esquery@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
+  integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==
+  dependencies:
+    estraverse "^4.0.0"
+
 esrecurse@^4.1.0:
   version "4.2.1"
   resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
   dependencies:
     estraverse "^4.1.0"
 
+estraverse@^4.0.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
 estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
   version "4.2.0"
   resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
@@ -8077,6 +8096,16 @@ tslint-config-prettier@^1.10.0:
   version "1.15.0"
   resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.15.0.tgz#76b9714399004ab6831fdcf76d89b73691c812cf"
 
+tslint-etc@1.6.0:
+  version "1.6.0"
+  resolved "https://registry.yarnpkg.com/tslint-etc/-/tslint-etc-1.6.0.tgz#99d1ddf79dc5eaefa14ddbd94742197d0ba0ff45"
+  integrity sha512-+7YkUcHhRowg3odIKV8V4FtrHyf2q/jlabSvn4KjMV+Uansncdq10s0MhFPFCYrSv6Eyhh0vUyu3+T/PcuDO/g==
+  dependencies:
+    "@phenomnomnominal/tsquery" "^3.0.0"
+    tslib "^1.8.0"
+    tsutils "^3.0.0"
+    tsutils-etc "^1.0.0"
+
 tslint-react@^3.2.0:
   version "3.6.0"
   resolved "https://registry.yarnpkg.com/tslint-react/-/tslint-react-3.6.0.tgz#7f462c95c4a0afaae82507f06517ff02942196a1"
@@ -8100,12 +8129,24 @@ tslint@^5.7.0:
     tslib "^1.8.0"
     tsutils "^2.27.2"
 
+tsutils-etc@^1.0.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/tsutils-etc/-/tsutils-etc-1.1.0.tgz#82ce1c92da29e07d3cde95692d5c5e8dbdc92fd0"
+  integrity sha512-pJlLtLmQPUyGHqY/Pq6EGnpGmQCnnTDZetQ7eWkeQ5xaw4GtfcR1Zt7HMKFHGDDp53HzQfbqQ+7ps6iJbfa9Hw==
+
 tsutils@^2.13.1, tsutils@^2.27.2:
   version "2.29.0"
   resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99"
   dependencies:
     tslib "^1.8.1"
 
+tsutils@^3.0.0:
+  version "3.17.1"
+  resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759"
+  integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==
+  dependencies:
+    tslib "^1.8.1"
+
 tty-browserify@0.0.0:
   version "0.0.0"
   resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"