@reltio/components 1.4.1381 → 1.4.1383

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -50,6 +50,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
50
50
  Object.defineProperty(exports, "__esModule", { value: true });
51
51
  exports.DEBOUNCE_INTERVAL = void 0;
52
52
  var react_1 = __importStar(require("react"));
53
+ var react_select_1 = require("react-select");
53
54
  var prop_types_1 = __importDefault(require("prop-types"));
54
55
  var mdm_sdk_1 = require("@reltio/mdm-sdk");
55
56
  var Select_1 = __importDefault(require("../../ReactSelect/Select"));
@@ -69,6 +70,7 @@ var useAutopopulation_1 = __importDefault(require("./useAutopopulation"));
69
70
  var useSavingFocus_1 = __importDefault(require("./useSavingFocus"));
70
71
  var LoadMoreButton_1 = __importDefault(require("../../commonReactSelectComponents/LoadMoreButton"));
71
72
  var hooks_1 = require("../../../hooks");
73
+ var Input = function (props) { return react_1.default.createElement(react_select_1.components.Input, __assign({}, props, { isHidden: false })); };
72
74
  var SelectComponents = {
73
75
  IndicatorSeparator: utils_1.EmptyStub,
74
76
  LoadingIndicator: utils_1.EmptyStub,
@@ -76,7 +78,8 @@ var SelectComponents = {
76
78
  DropdownIndicator: DropdownIndicator_1.default,
77
79
  Menu: MenuWithPopper_1.default,
78
80
  MenuList: MenuList_1.default,
79
- MultiValue: MultiValueChip_1.default
81
+ MultiValue: MultiValueChip_1.default,
82
+ Input: Input
80
83
  };
81
84
  exports.DEBOUNCE_INTERVAL = 400;
82
85
  var MAX_DEPENDENT_LOOKUP_VALUES = 50;
@@ -85,6 +88,10 @@ var DependentLookupEditor = function (_a) {
85
88
  var inputRef = (0, react_1.useRef)(null);
86
89
  var selectRef = (0, react_1.useRef)(null);
87
90
  var styles = (0, styles_1.useStyles)();
91
+ var _d = (0, react_1.useState)(''), inputValue = _d[0], setInputValue = _d[1];
92
+ var _e = (0, react_1.useState)([]), options = _e[0], setOptions = _e[1];
93
+ var _f = (0, react_1.useState)(1), pageNumber = _f[0], setPageNumber = _f[1];
94
+ var _g = (0, react_1.useState)(false), optionsAreLoading = _g[0], setOptionsAreLoading = _g[1];
88
95
  (0, useLookupsResolver_1.default)({
89
96
  lookups: value,
90
97
  resolvedValues: lookups[lookupTypeCode],
@@ -92,15 +99,55 @@ var DependentLookupEditor = function (_a) {
92
99
  onLookupsResolve: function (lookups) { return onChange(multiple ? lookups : lookups[0]); }
93
100
  });
94
101
  (0, useSavingFocus_1.default)(selectRef, inputRef, disabled);
95
- var _d = (0, react_1.useState)(''), inputValue = _d[0], setInputValue = _d[1];
96
- var _e = (0, react_1.useState)([]), options = _e[0], setOptions = _e[1];
97
- var _f = (0, react_1.useState)(1), pageNumber = _f[0], setPageNumber = _f[1];
98
- var _g = (0, react_1.useState)(false), optionsAreLoading = _g[0], setOptionsAreLoading = _g[1];
99
- var handleInputChange = function (value) {
100
- if (value !== inputValue) {
101
- setInputValue(value);
102
+ (0, react_1.useEffect)(function () {
103
+ if (!multiple) {
104
+ setInputValue((0, helpers_1.getOptionLabel)(value));
105
+ setOptions(defaultOptions);
102
106
  setPageNumber(1);
103
- debouncedLoadOptions(value, setOptions);
107
+ }
108
+ }, [value]);
109
+ var handleChange = function (value) {
110
+ markAsTouched();
111
+ onChange(value);
112
+ };
113
+ var handleFocus = function () {
114
+ value && selectRef.current.select.inputRef.select();
115
+ };
116
+ var resetOptions = function () {
117
+ setPageNumber(1);
118
+ debouncedLoadOptions('', setOptions);
119
+ };
120
+ var restoreSelectedOption = function () {
121
+ if (!multiple && inputValue && inputValue !== (0, helpers_1.getOptionLabel)(value)) {
122
+ setInputValue((0, helpers_1.getOptionLabel)(value));
123
+ resetOptions();
124
+ }
125
+ };
126
+ var handleInputChange = function (newValue, _a) {
127
+ var action = _a.action;
128
+ switch (action) {
129
+ case 'menu-close': {
130
+ restoreSelectedOption();
131
+ break;
132
+ }
133
+ case 'input-blur': {
134
+ if (multiple && inputValue) {
135
+ setInputValue('');
136
+ resetOptions();
137
+ break;
138
+ }
139
+ restoreSelectedOption();
140
+ break;
141
+ }
142
+ case 'input-change': {
143
+ setInputValue(newValue);
144
+ setPageNumber(1);
145
+ debouncedLoadOptions(newValue, setOptions);
146
+ if (!multiple && newValue === '') {
147
+ handleChange('');
148
+ }
149
+ break;
150
+ }
104
151
  }
105
152
  };
106
153
  var loadOptions = (0, react_1.useCallback)(function (value, pageNumber) {
@@ -120,7 +167,8 @@ var DependentLookupEditor = function (_a) {
120
167
  .finally(function () { return setOptionsAreLoading(false); });
121
168
  }, [max, lookupTypeCode, parents]);
122
169
  var loadMoreOptions = (0, react_1.useCallback)(function () {
123
- loadOptions(inputValue, pageNumber + 1).then(function (buildOptions) {
170
+ var filterValue = inputValue !== (0, helpers_1.getOptionLabel)(value) ? inputValue : '';
171
+ loadOptions(multiple ? inputValue : filterValue, pageNumber + 1).then(function (buildOptions) {
124
172
  setOptions(function (options) { return (0, ramda_1.concat)(options.slice(0, pageNumber * max), buildOptions); });
125
173
  setPageNumber(function (page) { return page + 1; });
126
174
  });
@@ -150,10 +198,7 @@ var DependentLookupEditor = function (_a) {
150
198
  container: function (base) { return (__assign(__assign({}, base), (fullWidth ? { width: '100%' } : {}))); }
151
199
  }, noOptionsMessage: function () {
152
200
  return optionsAreLoading && !showMoreButton ? ui_i18n_1.default.text('Loading...') : ui_i18n_1.default.text('No results found');
153
- }, components: SelectComponents, isClearable: true, isSearchable: true, inputValue: inputValue, onInputChange: handleInputChange, loadingMessage: function () { return ui_i18n_1.default.text('Loading...'); }, isLoading: !inputValue && isLoadingDefaultOptions, hideSelectedOptions: false, placeholder: placeholder || '', isDisabled: disabled, options: displayedOptions, getOptionValue: (0, ramda_1.either)((0, ramda_1.prop)('value'), (0, ramda_1.prop)('lookupCode')), getOptionLabel: helpers_1.getOptionLabel, onChange: function (value) {
154
- markAsTouched();
155
- onChange(value);
156
- }, value: (0, ramda_1.defaultTo)(multiple ? [] : null, value), menuListFooter: showMoreButton && react_1.default.createElement(LoadMoreButton_1.default, { loading: optionsAreLoading, onClick: loadMoreOptions }) })));
201
+ }, components: SelectComponents, isClearable: true, isSearchable: true, controlShouldRenderValue: multiple, inputValue: inputValue, filterOption: multiple ? undefined : ramda_1.T, onInputChange: handleInputChange, loadingMessage: function () { return ui_i18n_1.default.text('Loading...'); }, isLoading: !inputValue && isLoadingDefaultOptions, hideSelectedOptions: false, placeholder: placeholder || '', isDisabled: disabled, options: displayedOptions, getOptionValue: (0, ramda_1.either)((0, ramda_1.prop)('value'), (0, ramda_1.prop)('lookupCode')), getOptionLabel: helpers_1.getOptionLabel, onChange: handleChange, onFocus: multiple ? undefined : handleFocus, value: (0, ramda_1.defaultTo)(multiple ? [] : null, value), menuListFooter: showMoreButton && react_1.default.createElement(LoadMoreButton_1.default, { loading: optionsAreLoading, onClick: loadMoreOptions }) })));
157
202
  };
158
203
  DependentLookupEditor.propTypes = {
159
204
  multiple: prop_types_1.default.bool,
@@ -1,7 +1,4 @@
1
- export function getOptionLabel({ lookupCode, value }: {
2
- lookupCode: any;
3
- value: any;
4
- }): any;
1
+ export function getOptionLabel(obj: any): any;
5
2
  export function buildLookupOptions(lookups: any): {
6
3
  lookupCode: string;
7
4
  value: any;
@@ -2,8 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.buildLookupOptions = exports.getOptionLabel = void 0;
4
4
  var mdm_sdk_1 = require("@reltio/mdm-sdk");
5
- var getOptionLabel = function (_a) {
6
- var lookupCode = _a.lookupCode, value = _a.value;
5
+ var getOptionLabel = function (obj) {
6
+ if (!obj)
7
+ return '';
8
+ var lookupCode = obj.lookupCode, value = obj.value;
7
9
  return (0, mdm_sdk_1.getLookupLabel)(lookupCode, value);
8
10
  };
9
11
  exports.getOptionLabel = getOptionLabel;
@@ -34,13 +34,13 @@ var WorkflowTasksContext_1 = require("../../../contexts/WorkflowTasksContext");
34
34
  var helpers_1 = require("../helpers");
35
35
  var useWorkflowActions = function (_a) {
36
36
  var possibleActions = _a.possibleActions, assignee = _a.assignee, taskId = _a.taskId, isOpen = _a.isOpen;
37
- var loadWorkflowTasks = ((0, react_1.useContext)(WorkflowTasksContext_1.WorkflowTasksContext) || {}).loadWorkflowTasks;
37
+ var _b = (0, react_1.useContext)(WorkflowTasksContext_1.WorkflowTasksContext) || {}, loadTasks = _b.loadTasks, onActionSuccess = _b.onActionSuccess;
38
38
  var workflowPath = (0, react_redux_1.useSelector)(mdm_module_1.default.selectors.getWorkflowPath);
39
39
  var environment = (0, react_redux_1.useSelector)(mdm_module_1.default.selectors.getWorkflowEnvironmentUrl);
40
40
  var tenant = (0, react_redux_1.useSelector)(mdm_module_1.default.selectors.getTenant);
41
41
  var username = (0, react_redux_1.useSelector)(mdm_module_1.default.selectors.getUserName);
42
42
  var entityUri = (0, react_redux_1.useSelector)(mdm_module_1.default.selectors.getEntityUri);
43
- var _b = (0, react_1.useState)(false), actionRequestIsInProgress = _b[0], setActionRequestIsInProgress = _b[1];
43
+ var _c = (0, react_1.useState)(false), actionRequestIsInProgress = _c[0], setActionRequestIsInProgress = _c[1];
44
44
  var viewId = (0, react_1.useContext)(ViewIdContext_1.ViewIdContext);
45
45
  var dispatch = (0, react_redux_1.useDispatch)();
46
46
  var performTaskAction = (0, react_1.useCallback)(function (action) { return function () {
@@ -60,15 +60,16 @@ var useWorkflowActions = function (_a) {
60
60
  else {
61
61
  // entity refreshing
62
62
  dispatch(mdm_module_1.profile.entity.actions.loadEntity({ viewId: viewId, uri: entityUri }));
63
- loadWorkflowTasks === null || loadWorkflowTasks === void 0 ? void 0 : loadWorkflowTasks();
63
+ loadTasks === null || loadTasks === void 0 ? void 0 : loadTasks();
64
64
  }
65
+ onActionSuccess === null || onActionSuccess === void 0 ? void 0 : onActionSuccess(action);
65
66
  })
66
67
  .catch(errors_1.showWorkflowError)
67
68
  .finally(function () {
68
69
  setActionRequestIsInProgress(false);
69
70
  });
70
71
  }
71
- }; }, [workflowPath, taskId, environment, tenant, dispatch, entityUri, viewId, loadWorkflowTasks]);
72
+ }; }, [workflowPath, taskId, environment, tenant, dispatch, entityUri, viewId, loadTasks]);
72
73
  var actions = (0, react_1.useMemo)(function () {
73
74
  return username === assignee && (0, helpers_1.isOpenTask)(isOpen)
74
75
  ? (possibleActions || []).map(function (_a) {
@@ -11,7 +11,7 @@ var mdm_sdk_1 = require("@reltio/mdm-sdk");
11
11
  var WorkflowTasksContext_1 = require("../../../contexts/WorkflowTasksContext");
12
12
  var errors_1 = require("../helpers/errors");
13
13
  var useWorkflowProcessInstance = function () {
14
- var loadWorkflowTasks = (0, react_1.useContext)(WorkflowTasksContext_1.WorkflowTasksContext).loadWorkflowTasks;
14
+ var loadTasks = (0, react_1.useContext)(WorkflowTasksContext_1.WorkflowTasksContext).loadTasks;
15
15
  var workflowPath = (0, react_redux_1.useSelector)(mdm_module_1.default.selectors.getWorkflowPath);
16
16
  var environment = (0, react_redux_1.useSelector)(mdm_module_1.default.selectors.getWorkflowEnvironmentUrl);
17
17
  var tenant = (0, react_redux_1.useSelector)(mdm_module_1.default.selectors.getTenant);
@@ -29,7 +29,7 @@ var useWorkflowProcessInstance = function () {
29
29
  objectURIs: [entityUri]
30
30
  })
31
31
  .then(function () {
32
- loadWorkflowTasks();
32
+ loadTasks();
33
33
  })
34
34
  .catch(function (error) {
35
35
  (0, errors_1.showWorkflowError)(error);
@@ -38,7 +38,7 @@ var useWorkflowProcessInstance = function () {
38
38
  .finally(function () {
39
39
  setLoading(false);
40
40
  });
41
- }, [entityUri, environment, loadWorkflowTasks, tenant, workflowPath]);
41
+ }, [entityUri, environment, loadTasks, tenant, workflowPath]);
42
42
  return { processInstance: processInstance, loading: loading };
43
43
  };
44
44
  exports.useWorkflowProcessInstance = useWorkflowProcessInstance;
@@ -9,6 +9,6 @@ export declare const useWorkflowTasks: (config?: Config) => {
9
9
  total: number;
10
10
  loading: boolean;
11
11
  updateTaskState: (taskId: WorkflowTaskData['taskId'], payload: Partial<WorkflowTaskData>) => void;
12
- loadWorkflowTasks: () => void;
12
+ loadTasks: () => void;
13
13
  };
14
14
  export {};
@@ -1,15 +1,4 @@
1
1
  "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
4
  };
@@ -37,7 +26,7 @@ var useWorkflowTasks = function (config) {
37
26
  var _b = (0, react_1.useState)(null), tasks = _b[0], setTasks = _b[1];
38
27
  var _c = (0, react_1.useState)(0), total = _c[0], setTotal = _c[1];
39
28
  var _d = (0, react_1.useState)(false), loading = _d[0], setLoading = _d[1];
40
- var loadWorkflowTasks = (0, react_1.useCallback)(function () {
29
+ var loadTasks = (0, react_1.useCallback)(function () {
41
30
  setLoading(true);
42
31
  var parsedProcessTypes = !Array.isArray(processTypes) || processTypes.includes('*') ? null : processTypes;
43
32
  var requests = (parsedProcessTypes || [null]).map(function (processType) {
@@ -65,22 +54,17 @@ var useWorkflowTasks = function (config) {
65
54
  }, [entityUri, environment, safePromise, tenant, workflowPath, assignee, showClosedTasks, processTypes]);
66
55
  (0, react_1.useEffect)(function () {
67
56
  if (entityUri && enabled && !(0, mdm_sdk_1.isTempUri)(entityUri)) {
68
- loadWorkflowTasks();
57
+ loadTasks();
69
58
  }
70
59
  else {
71
60
  setTasks(null);
72
61
  setTotal(0);
73
62
  }
74
- }, [enabled, entityUri, loadWorkflowTasks, isEditableMode]);
63
+ }, [enabled, entityUri, loadTasks, isEditableMode]);
75
64
  var updateTaskState = (0, react_1.useCallback)(function (taskId, payload) {
76
- setTasks(function (tasks) {
77
- return tasks.map(function (task) {
78
- return task.taskId === taskId
79
- ? __assign(__assign({}, task), payload) : task;
80
- });
81
- });
65
+ setTasks((0, ramda_1.map)((0, ramda_1.when)((0, ramda_1.propEq)('taskId', taskId), (0, ramda_1.mergeLeft)(payload))));
82
66
  }, []);
83
- return { tasks: tasks, total: total, loading: loading, updateTaskState: updateTaskState, loadWorkflowTasks: loadWorkflowTasks };
67
+ return { tasks: tasks, total: total, loading: loading, updateTaskState: updateTaskState, loadTasks: loadTasks };
84
68
  };
85
69
  exports.useWorkflowTasks = useWorkflowTasks;
86
70
  var isRequestedTask = function (processTypes, assignee) { return function (task) {
@@ -1,5 +1,7 @@
1
1
  export { WorkflowTaskCard } from './cards/WorkflowTaskCard';
2
2
  export { AddWorkflowButton } from './components/AddWorkflowButton/AddWorkflowButton';
3
+ export { default as TaskActions } from './components/TaskActions/TaskActions';
4
+ export { default as AssigneeSelector } from './components/AssigneeSelector/AssigneeSelector';
3
5
  export { default as WorkflowComments } from './components/WorkflowComments';
4
6
  export { useWorkflowAssignee } from './hooks/useWorkflowAssignee';
5
7
  export { useWorkflowComments } from './hooks/useWorkflowComments';
@@ -3,11 +3,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.useWorkflowTasks = exports.useWorkflowCheckPermission = exports.useWorkflowComments = exports.useWorkflowAssignee = exports.WorkflowComments = exports.AddWorkflowButton = exports.WorkflowTaskCard = void 0;
6
+ exports.useWorkflowTasks = exports.useWorkflowCheckPermission = exports.useWorkflowComments = exports.useWorkflowAssignee = exports.WorkflowComments = exports.AssigneeSelector = exports.TaskActions = exports.AddWorkflowButton = exports.WorkflowTaskCard = void 0;
7
7
  var WorkflowTaskCard_1 = require("./cards/WorkflowTaskCard");
8
8
  Object.defineProperty(exports, "WorkflowTaskCard", { enumerable: true, get: function () { return WorkflowTaskCard_1.WorkflowTaskCard; } });
9
9
  var AddWorkflowButton_1 = require("./components/AddWorkflowButton/AddWorkflowButton");
10
10
  Object.defineProperty(exports, "AddWorkflowButton", { enumerable: true, get: function () { return AddWorkflowButton_1.AddWorkflowButton; } });
11
+ var TaskActions_1 = require("./components/TaskActions/TaskActions");
12
+ Object.defineProperty(exports, "TaskActions", { enumerable: true, get: function () { return __importDefault(TaskActions_1).default; } });
13
+ var AssigneeSelector_1 = require("./components/AssigneeSelector/AssigneeSelector");
14
+ Object.defineProperty(exports, "AssigneeSelector", { enumerable: true, get: function () { return __importDefault(AssigneeSelector_1).default; } });
11
15
  var WorkflowComments_1 = require("./components/WorkflowComments");
12
16
  Object.defineProperty(exports, "WorkflowComments", { enumerable: true, get: function () { return __importDefault(WorkflowComments_1).default; } });
13
17
  var useWorkflowAssignee_1 = require("./hooks/useWorkflowAssignee");
@@ -5,5 +5,6 @@ export declare const WorkflowTasksContext: React.Context<{
5
5
  total: WorkflowTasksResponse['total'];
6
6
  loading: boolean;
7
7
  updateTaskState: (taskId: WorkflowTaskData['taskId'], payload: Partial<WorkflowTaskData>) => void;
8
- loadWorkflowTasks: () => void;
8
+ loadTasks: () => void;
9
+ onActionSuccess?: (action: string) => void;
9
10
  }>;
@@ -20,11 +20,12 @@ var __rest = (this && this.__rest) || function (s, e) {
20
20
  }
21
21
  return t;
22
22
  };
23
- import React, { useCallback, useRef, useState, useEffect, useMemo } from 'react';
23
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
24
+ import { components } from 'react-select';
24
25
  import PropTypes from 'prop-types';
25
26
  import { debounce, LookupValueType } from '@reltio/mdm-sdk';
26
27
  import Select from '../../ReactSelect/Select';
27
- import { concat, defaultTo, either, isEmpty, prop } from 'ramda';
28
+ import { concat, defaultTo, either, isEmpty, prop, T } from 'ramda';
28
29
  import { buildLookupOptions, getOptionLabel } from './helpers';
29
30
  import i18n from 'ui-i18n';
30
31
  import { EmptyStub } from '../../../core/utils';
@@ -40,6 +41,7 @@ import useAutopopulation from './useAutopopulation';
40
41
  import useSavingFocus from './useSavingFocus';
41
42
  import LoadMoreButton from '../../commonReactSelectComponents/LoadMoreButton';
42
43
  import { useDidUpdateEffect } from '../../../hooks';
44
+ var Input = function (props) { return React.createElement(components.Input, __assign({}, props, { isHidden: false })); };
43
45
  var SelectComponents = {
44
46
  IndicatorSeparator: EmptyStub,
45
47
  LoadingIndicator: EmptyStub,
@@ -47,7 +49,8 @@ var SelectComponents = {
47
49
  DropdownIndicator: DropdownIndicator,
48
50
  Menu: MenuWithPopper,
49
51
  MenuList: MenuList,
50
- MultiValue: MultiValueChip
52
+ MultiValue: MultiValueChip,
53
+ Input: Input
51
54
  };
52
55
  export var DEBOUNCE_INTERVAL = 400;
53
56
  var MAX_DEPENDENT_LOOKUP_VALUES = 50;
@@ -56,6 +59,10 @@ var DependentLookupEditor = function (_a) {
56
59
  var inputRef = useRef(null);
57
60
  var selectRef = useRef(null);
58
61
  var styles = useStyles();
62
+ var _d = useState(''), inputValue = _d[0], setInputValue = _d[1];
63
+ var _e = useState([]), options = _e[0], setOptions = _e[1];
64
+ var _f = useState(1), pageNumber = _f[0], setPageNumber = _f[1];
65
+ var _g = useState(false), optionsAreLoading = _g[0], setOptionsAreLoading = _g[1];
59
66
  useLookupsResolver({
60
67
  lookups: value,
61
68
  resolvedValues: lookups[lookupTypeCode],
@@ -63,15 +70,55 @@ var DependentLookupEditor = function (_a) {
63
70
  onLookupsResolve: function (lookups) { return onChange(multiple ? lookups : lookups[0]); }
64
71
  });
65
72
  useSavingFocus(selectRef, inputRef, disabled);
66
- var _d = useState(''), inputValue = _d[0], setInputValue = _d[1];
67
- var _e = useState([]), options = _e[0], setOptions = _e[1];
68
- var _f = useState(1), pageNumber = _f[0], setPageNumber = _f[1];
69
- var _g = useState(false), optionsAreLoading = _g[0], setOptionsAreLoading = _g[1];
70
- var handleInputChange = function (value) {
71
- if (value !== inputValue) {
72
- setInputValue(value);
73
+ useEffect(function () {
74
+ if (!multiple) {
75
+ setInputValue(getOptionLabel(value));
76
+ setOptions(defaultOptions);
73
77
  setPageNumber(1);
74
- debouncedLoadOptions(value, setOptions);
78
+ }
79
+ }, [value]);
80
+ var handleChange = function (value) {
81
+ markAsTouched();
82
+ onChange(value);
83
+ };
84
+ var handleFocus = function () {
85
+ value && selectRef.current.select.inputRef.select();
86
+ };
87
+ var resetOptions = function () {
88
+ setPageNumber(1);
89
+ debouncedLoadOptions('', setOptions);
90
+ };
91
+ var restoreSelectedOption = function () {
92
+ if (!multiple && inputValue && inputValue !== getOptionLabel(value)) {
93
+ setInputValue(getOptionLabel(value));
94
+ resetOptions();
95
+ }
96
+ };
97
+ var handleInputChange = function (newValue, _a) {
98
+ var action = _a.action;
99
+ switch (action) {
100
+ case 'menu-close': {
101
+ restoreSelectedOption();
102
+ break;
103
+ }
104
+ case 'input-blur': {
105
+ if (multiple && inputValue) {
106
+ setInputValue('');
107
+ resetOptions();
108
+ break;
109
+ }
110
+ restoreSelectedOption();
111
+ break;
112
+ }
113
+ case 'input-change': {
114
+ setInputValue(newValue);
115
+ setPageNumber(1);
116
+ debouncedLoadOptions(newValue, setOptions);
117
+ if (!multiple && newValue === '') {
118
+ handleChange('');
119
+ }
120
+ break;
121
+ }
75
122
  }
76
123
  };
77
124
  var loadOptions = useCallback(function (value, pageNumber) {
@@ -91,7 +138,8 @@ var DependentLookupEditor = function (_a) {
91
138
  .finally(function () { return setOptionsAreLoading(false); });
92
139
  }, [max, lookupTypeCode, parents]);
93
140
  var loadMoreOptions = useCallback(function () {
94
- loadOptions(inputValue, pageNumber + 1).then(function (buildOptions) {
141
+ var filterValue = inputValue !== getOptionLabel(value) ? inputValue : '';
142
+ loadOptions(multiple ? inputValue : filterValue, pageNumber + 1).then(function (buildOptions) {
95
143
  setOptions(function (options) { return concat(options.slice(0, pageNumber * max), buildOptions); });
96
144
  setPageNumber(function (page) { return page + 1; });
97
145
  });
@@ -121,10 +169,7 @@ var DependentLookupEditor = function (_a) {
121
169
  container: function (base) { return (__assign(__assign({}, base), (fullWidth ? { width: '100%' } : {}))); }
122
170
  }, noOptionsMessage: function () {
123
171
  return optionsAreLoading && !showMoreButton ? i18n.text('Loading...') : i18n.text('No results found');
124
- }, components: SelectComponents, isClearable: true, isSearchable: true, inputValue: inputValue, onInputChange: handleInputChange, loadingMessage: function () { return i18n.text('Loading...'); }, isLoading: !inputValue && isLoadingDefaultOptions, hideSelectedOptions: false, placeholder: placeholder || '', isDisabled: disabled, options: displayedOptions, getOptionValue: either(prop('value'), prop('lookupCode')), getOptionLabel: getOptionLabel, onChange: function (value) {
125
- markAsTouched();
126
- onChange(value);
127
- }, value: defaultTo(multiple ? [] : null, value), menuListFooter: showMoreButton && React.createElement(LoadMoreButton, { loading: optionsAreLoading, onClick: loadMoreOptions }) })));
172
+ }, components: SelectComponents, isClearable: true, isSearchable: true, controlShouldRenderValue: multiple, inputValue: inputValue, filterOption: multiple ? undefined : T, onInputChange: handleInputChange, loadingMessage: function () { return i18n.text('Loading...'); }, isLoading: !inputValue && isLoadingDefaultOptions, hideSelectedOptions: false, placeholder: placeholder || '', isDisabled: disabled, options: displayedOptions, getOptionValue: either(prop('value'), prop('lookupCode')), getOptionLabel: getOptionLabel, onChange: handleChange, onFocus: multiple ? undefined : handleFocus, value: defaultTo(multiple ? [] : null, value), menuListFooter: showMoreButton && React.createElement(LoadMoreButton, { loading: optionsAreLoading, onClick: loadMoreOptions }) })));
128
173
  };
129
174
  DependentLookupEditor.propTypes = {
130
175
  multiple: PropTypes.bool,
@@ -1,7 +1,4 @@
1
- export function getOptionLabel({ lookupCode, value }: {
2
- lookupCode: any;
3
- value: any;
4
- }): any;
1
+ export function getOptionLabel(obj: any): any;
5
2
  export function buildLookupOptions(lookups: any): {
6
3
  lookupCode: string;
7
4
  value: any;
@@ -1,6 +1,8 @@
1
1
  import { getLookupLabel, utils } from '@reltio/mdm-sdk';
2
- var getOptionLabel = function (_a) {
3
- var lookupCode = _a.lookupCode, value = _a.value;
2
+ var getOptionLabel = function (obj) {
3
+ if (!obj)
4
+ return '';
5
+ var lookupCode = obj.lookupCode, value = obj.value;
4
6
  return getLookupLabel(lookupCode, value);
5
7
  };
6
8
  var buildLookupOptions = function (lookups) {
@@ -8,13 +8,13 @@ import { WorkflowTasksContext } from '../../../contexts/WorkflowTasksContext';
8
8
  import { isOpenTask } from '../helpers';
9
9
  export var useWorkflowActions = function (_a) {
10
10
  var possibleActions = _a.possibleActions, assignee = _a.assignee, taskId = _a.taskId, isOpen = _a.isOpen;
11
- var loadWorkflowTasks = (useContext(WorkflowTasksContext) || {}).loadWorkflowTasks;
11
+ var _b = useContext(WorkflowTasksContext) || {}, loadTasks = _b.loadTasks, onActionSuccess = _b.onActionSuccess;
12
12
  var workflowPath = useSelector(mdmModule.selectors.getWorkflowPath);
13
13
  var environment = useSelector(mdmModule.selectors.getWorkflowEnvironmentUrl);
14
14
  var tenant = useSelector(mdmModule.selectors.getTenant);
15
15
  var username = useSelector(mdmModule.selectors.getUserName);
16
16
  var entityUri = useSelector(mdmModule.selectors.getEntityUri);
17
- var _b = useState(false), actionRequestIsInProgress = _b[0], setActionRequestIsInProgress = _b[1];
17
+ var _c = useState(false), actionRequestIsInProgress = _c[0], setActionRequestIsInProgress = _c[1];
18
18
  var viewId = useContext(ViewIdContext);
19
19
  var dispatch = useDispatch();
20
20
  var performTaskAction = useCallback(function (action) { return function () {
@@ -34,15 +34,16 @@ export var useWorkflowActions = function (_a) {
34
34
  else {
35
35
  // entity refreshing
36
36
  dispatch(profile.entity.actions.loadEntity({ viewId: viewId, uri: entityUri }));
37
- loadWorkflowTasks === null || loadWorkflowTasks === void 0 ? void 0 : loadWorkflowTasks();
37
+ loadTasks === null || loadTasks === void 0 ? void 0 : loadTasks();
38
38
  }
39
+ onActionSuccess === null || onActionSuccess === void 0 ? void 0 : onActionSuccess(action);
39
40
  })
40
41
  .catch(showWorkflowError)
41
42
  .finally(function () {
42
43
  setActionRequestIsInProgress(false);
43
44
  });
44
45
  }
45
- }; }, [workflowPath, taskId, environment, tenant, dispatch, entityUri, viewId, loadWorkflowTasks]);
46
+ }; }, [workflowPath, taskId, environment, tenant, dispatch, entityUri, viewId, loadTasks]);
46
47
  var actions = useMemo(function () {
47
48
  return username === assignee && isOpenTask(isOpen)
48
49
  ? (possibleActions || []).map(function (_a) {
@@ -5,7 +5,7 @@ import { startProcessInstance } from '@reltio/mdm-sdk';
5
5
  import { WorkflowTasksContext } from '../../../contexts/WorkflowTasksContext';
6
6
  import { showWorkflowError } from '../helpers/errors';
7
7
  export var useWorkflowProcessInstance = function () {
8
- var loadWorkflowTasks = useContext(WorkflowTasksContext).loadWorkflowTasks;
8
+ var loadTasks = useContext(WorkflowTasksContext).loadTasks;
9
9
  var workflowPath = useSelector(mdmModule.selectors.getWorkflowPath);
10
10
  var environment = useSelector(mdmModule.selectors.getWorkflowEnvironmentUrl);
11
11
  var tenant = useSelector(mdmModule.selectors.getTenant);
@@ -23,7 +23,7 @@ export var useWorkflowProcessInstance = function () {
23
23
  objectURIs: [entityUri]
24
24
  })
25
25
  .then(function () {
26
- loadWorkflowTasks();
26
+ loadTasks();
27
27
  })
28
28
  .catch(function (error) {
29
29
  showWorkflowError(error);
@@ -32,6 +32,6 @@ export var useWorkflowProcessInstance = function () {
32
32
  .finally(function () {
33
33
  setLoading(false);
34
34
  });
35
- }, [entityUri, environment, loadWorkflowTasks, tenant, workflowPath]);
35
+ }, [entityUri, environment, loadTasks, tenant, workflowPath]);
36
36
  return { processInstance: processInstance, loading: loading };
37
37
  };
@@ -9,6 +9,6 @@ export declare const useWorkflowTasks: (config?: Config) => {
9
9
  total: number;
10
10
  loading: boolean;
11
11
  updateTaskState: (taskId: WorkflowTaskData['taskId'], payload: Partial<WorkflowTaskData>) => void;
12
- loadWorkflowTasks: () => void;
12
+ loadTasks: () => void;
13
13
  };
14
14
  export {};
@@ -1,17 +1,6 @@
1
- var __assign = (this && this.__assign) || function () {
2
- __assign = Object.assign || function(t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
- t[p] = s[p];
7
- }
8
- return t;
9
- };
10
- return __assign.apply(this, arguments);
11
- };
12
1
  import { useCallback, useEffect, useState } from 'react';
13
2
  import { useSelector } from 'react-redux';
14
- import { filter, flatten, isNil, map, pipe, prop, reject, uniqBy } from 'ramda';
3
+ import { filter, flatten, isNil, map, mergeLeft, pipe, prop, propEq, reject, uniqBy, when } from 'ramda';
15
4
  import mdmModule from '@reltio/mdm-module';
16
5
  import { getTasksForEntity, isTempUri } from '@reltio/mdm-sdk';
17
6
  import { useSafePromise } from '../../../hooks/useSafePromise';
@@ -31,7 +20,7 @@ export var useWorkflowTasks = function (config) {
31
20
  var _b = useState(null), tasks = _b[0], setTasks = _b[1];
32
21
  var _c = useState(0), total = _c[0], setTotal = _c[1];
33
22
  var _d = useState(false), loading = _d[0], setLoading = _d[1];
34
- var loadWorkflowTasks = useCallback(function () {
23
+ var loadTasks = useCallback(function () {
35
24
  setLoading(true);
36
25
  var parsedProcessTypes = !Array.isArray(processTypes) || processTypes.includes('*') ? null : processTypes;
37
26
  var requests = (parsedProcessTypes || [null]).map(function (processType) {
@@ -59,22 +48,17 @@ export var useWorkflowTasks = function (config) {
59
48
  }, [entityUri, environment, safePromise, tenant, workflowPath, assignee, showClosedTasks, processTypes]);
60
49
  useEffect(function () {
61
50
  if (entityUri && enabled && !isTempUri(entityUri)) {
62
- loadWorkflowTasks();
51
+ loadTasks();
63
52
  }
64
53
  else {
65
54
  setTasks(null);
66
55
  setTotal(0);
67
56
  }
68
- }, [enabled, entityUri, loadWorkflowTasks, isEditableMode]);
57
+ }, [enabled, entityUri, loadTasks, isEditableMode]);
69
58
  var updateTaskState = useCallback(function (taskId, payload) {
70
- setTasks(function (tasks) {
71
- return tasks.map(function (task) {
72
- return task.taskId === taskId
73
- ? __assign(__assign({}, task), payload) : task;
74
- });
75
- });
59
+ setTasks(map(when(propEq('taskId', taskId), mergeLeft(payload))));
76
60
  }, []);
77
- return { tasks: tasks, total: total, loading: loading, updateTaskState: updateTaskState, loadWorkflowTasks: loadWorkflowTasks };
61
+ return { tasks: tasks, total: total, loading: loading, updateTaskState: updateTaskState, loadTasks: loadTasks };
78
62
  };
79
63
  var isRequestedTask = function (processTypes, assignee) { return function (task) {
80
64
  return (!processTypes || processTypes.includes(task.processType)) && (!assignee || assignee === task.assignee);
@@ -1,5 +1,7 @@
1
1
  export { WorkflowTaskCard } from './cards/WorkflowTaskCard';
2
2
  export { AddWorkflowButton } from './components/AddWorkflowButton/AddWorkflowButton';
3
+ export { default as TaskActions } from './components/TaskActions/TaskActions';
4
+ export { default as AssigneeSelector } from './components/AssigneeSelector/AssigneeSelector';
3
5
  export { default as WorkflowComments } from './components/WorkflowComments';
4
6
  export { useWorkflowAssignee } from './hooks/useWorkflowAssignee';
5
7
  export { useWorkflowComments } from './hooks/useWorkflowComments';
@@ -1,5 +1,7 @@
1
1
  export { WorkflowTaskCard } from './cards/WorkflowTaskCard';
2
2
  export { AddWorkflowButton } from './components/AddWorkflowButton/AddWorkflowButton';
3
+ export { default as TaskActions } from './components/TaskActions/TaskActions';
4
+ export { default as AssigneeSelector } from './components/AssigneeSelector/AssigneeSelector';
3
5
  export { default as WorkflowComments } from './components/WorkflowComments';
4
6
  export { useWorkflowAssignee } from './hooks/useWorkflowAssignee';
5
7
  export { useWorkflowComments } from './hooks/useWorkflowComments';
@@ -5,5 +5,6 @@ export declare const WorkflowTasksContext: React.Context<{
5
5
  total: WorkflowTasksResponse['total'];
6
6
  loading: boolean;
7
7
  updateTaskState: (taskId: WorkflowTaskData['taskId'], payload: Partial<WorkflowTaskData>) => void;
8
- loadWorkflowTasks: () => void;
8
+ loadTasks: () => void;
9
+ onActionSuccess?: (action: string) => void;
9
10
  }>;
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@reltio/components",
3
- "version": "1.4.1381",
3
+ "version": "1.4.1383",
4
4
  "license": "SEE LICENSE IN LICENSE FILE",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
7
7
  "dependencies": {
8
8
  "@date-io/moment": "^1.3.5",
9
9
  "@react-google-maps/api": "2.7.0",
10
- "@reltio/mdm-module": "^1.4.1381",
11
- "@reltio/mdm-sdk": "^1.4.1381",
10
+ "@reltio/mdm-module": "^1.4.1383",
11
+ "@reltio/mdm-sdk": "^1.4.1383",
12
12
  "classnames": "^2.2.5",
13
13
  "d3-cloud": "^1.2.5",
14
14
  "d3-geo": "^2.0.1",