@luomus/laji-form 15.1.30 → 15.1.31

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.
@@ -5,6 +5,9 @@ export const rulePropType: PropTypes.Requireable<string | PropTypes.InferProps<{
5
5
  valueIn: PropTypes.Requireable<(string | null | undefined)[]>;
6
6
  valueLengthLessThan: PropTypes.Requireable<number>;
7
7
  complement: PropTypes.Requireable<boolean>;
8
+ }> | PropTypes.InferProps<{
9
+ rule: PropTypes.Requireable<string>;
10
+ complement: PropTypes.Requireable<boolean>;
8
11
  }>>;
9
12
  export const operationPropType: PropTypes.Requireable<PropTypes.InferProps<{
10
13
  type: PropTypes.Requireable<string>;
@@ -17,6 +20,9 @@ export const rulesPropType: PropTypes.Requireable<string | PropTypes.InferProps<
17
20
  valueIn: PropTypes.Requireable<(string | null | undefined)[]>;
18
21
  valueLengthLessThan: PropTypes.Requireable<number>;
19
22
  complement: PropTypes.Requireable<boolean>;
23
+ }> | PropTypes.InferProps<{
24
+ rule: PropTypes.Requireable<string>;
25
+ complement: PropTypes.Requireable<boolean>;
20
26
  }> | (string | PropTypes.InferProps<{
21
27
  container: PropTypes.Requireable<string>;
22
28
  field: PropTypes.Validator<string>;
@@ -24,6 +30,9 @@ export const rulesPropType: PropTypes.Requireable<string | PropTypes.InferProps<
24
30
  valueIn: PropTypes.Requireable<(string | null | undefined)[]>;
25
31
  valueLengthLessThan: PropTypes.Requireable<number>;
26
32
  complement: PropTypes.Requireable<boolean>;
33
+ }> | PropTypes.InferProps<{
34
+ rule: PropTypes.Requireable<string>;
35
+ complement: PropTypes.Requireable<boolean>;
27
36
  }> | null | undefined)[]>;
28
37
  /**
29
38
  * Transforms uiSchema according to conditional cases. Cases are not mutually exclusive.
@@ -64,6 +73,9 @@ export default class ConditionalUiSchemaField extends React.Component<any, any,
64
73
  valueIn: PropTypes.Requireable<(string | null | undefined)[]>;
65
74
  valueLengthLessThan: PropTypes.Requireable<number>;
66
75
  complement: PropTypes.Requireable<boolean>;
76
+ }> | PropTypes.InferProps<{
77
+ rule: PropTypes.Requireable<string>;
78
+ complement: PropTypes.Requireable<boolean>;
67
79
  }> | (string | PropTypes.InferProps<{
68
80
  container: PropTypes.Requireable<string>;
69
81
  field: PropTypes.Validator<string>;
@@ -71,6 +83,9 @@ export default class ConditionalUiSchemaField extends React.Component<any, any,
71
83
  valueIn: PropTypes.Requireable<(string | null | undefined)[]>;
72
84
  valueLengthLessThan: PropTypes.Requireable<number>;
73
85
  complement: PropTypes.Requireable<boolean>;
86
+ }> | PropTypes.InferProps<{
87
+ rule: PropTypes.Requireable<string>;
88
+ complement: PropTypes.Requireable<boolean>;
74
89
  }> | null | undefined)[]>;
75
90
  operations: PropTypes.Requireable<PropTypes.InferProps<{
76
91
  type: PropTypes.Requireable<string>;
@@ -87,6 +102,9 @@ export default class ConditionalUiSchemaField extends React.Component<any, any,
87
102
  valueIn: PropTypes.Requireable<(string | null | undefined)[]>;
88
103
  valueLengthLessThan: PropTypes.Requireable<number>;
89
104
  complement: PropTypes.Requireable<boolean>;
105
+ }> | PropTypes.InferProps<{
106
+ rule: PropTypes.Requireable<string>;
107
+ complement: PropTypes.Requireable<boolean>;
90
108
  }> | (string | PropTypes.InferProps<{
91
109
  container: PropTypes.Requireable<string>;
92
110
  field: PropTypes.Validator<string>;
@@ -94,6 +112,9 @@ export default class ConditionalUiSchemaField extends React.Component<any, any,
94
112
  valueIn: PropTypes.Requireable<(string | null | undefined)[]>;
95
113
  valueLengthLessThan: PropTypes.Requireable<number>;
96
114
  complement: PropTypes.Requireable<boolean>;
115
+ }> | PropTypes.InferProps<{
116
+ rule: PropTypes.Requireable<string>;
117
+ complement: PropTypes.Requireable<boolean>;
97
118
  }> | null | undefined)[]>;
98
119
  operations: PropTypes.Requireable<PropTypes.InferProps<{
99
120
  type: PropTypes.Requireable<string>;
@@ -21,6 +21,10 @@ exports.rulePropType = PropTypes.oneOfType([
21
21
  valueLengthLessThan: PropTypes.number,
22
22
  complement: PropTypes.bool
23
23
  }),
24
+ PropTypes.shape({
25
+ rule: PropTypes.oneOf(["isAdmin", "isEdit"]),
26
+ complement: PropTypes.bool
27
+ }),
24
28
  PropTypes.oneOf(["isAdmin", "isEdit"])
25
29
  ]);
26
30
  exports.operationPropType = PropTypes.shape({
@@ -5,6 +5,9 @@ export const arrayRulesPropType: PropTypes.Requireable<string | PropTypes.InferP
5
5
  valueIn: PropTypes.Requireable<(string | null | undefined)[]>;
6
6
  valueLengthLessThan: PropTypes.Requireable<number>;
7
7
  complement: PropTypes.Requireable<boolean>;
8
+ }> | PropTypes.InferProps<{
9
+ rule: PropTypes.Requireable<string>;
10
+ complement: PropTypes.Requireable<boolean>;
8
11
  }> | PropTypes.InferProps<{
9
12
  idx: PropTypes.Requireable<number>;
10
13
  isLast: PropTypes.Requireable<number>;
@@ -16,6 +19,9 @@ export const arrayRulesPropType: PropTypes.Requireable<string | PropTypes.InferP
16
19
  valueIn: PropTypes.Requireable<(string | null | undefined)[]>;
17
20
  valueLengthLessThan: PropTypes.Requireable<number>;
18
21
  complement: PropTypes.Requireable<boolean>;
22
+ }> | PropTypes.InferProps<{
23
+ rule: PropTypes.Requireable<string>;
24
+ complement: PropTypes.Requireable<boolean>;
19
25
  }> | PropTypes.InferProps<{
20
26
  idx: PropTypes.Requireable<number>;
21
27
  isLast: PropTypes.Requireable<number>;
@@ -32,6 +38,9 @@ export default class FilterArrayField extends React.Component<any, any, any> {
32
38
  valueIn: PropTypes.Requireable<(string | null | undefined)[]>;
33
39
  valueLengthLessThan: PropTypes.Requireable<number>;
34
40
  complement: PropTypes.Requireable<boolean>;
41
+ }> | PropTypes.InferProps<{
42
+ rule: PropTypes.Requireable<string>;
43
+ complement: PropTypes.Requireable<boolean>;
35
44
  }> | PropTypes.InferProps<{
36
45
  idx: PropTypes.Requireable<number>;
37
46
  isLast: PropTypes.Requireable<number>;
@@ -43,6 +52,9 @@ export default class FilterArrayField extends React.Component<any, any, any> {
43
52
  valueIn: PropTypes.Requireable<(string | null | undefined)[]>;
44
53
  valueLengthLessThan: PropTypes.Requireable<number>;
45
54
  complement: PropTypes.Requireable<boolean>;
55
+ }> | PropTypes.InferProps<{
56
+ rule: PropTypes.Requireable<string>;
57
+ complement: PropTypes.Requireable<boolean>;
46
58
  }> | PropTypes.InferProps<{
47
59
  idx: PropTypes.Requireable<number>;
48
60
  isLast: PropTypes.Requireable<number>;
@@ -9,6 +9,9 @@ export default class MultiArrayField extends React.Component<any, any, any> {
9
9
  valueIn: PropTypes.Requireable<(string | null | undefined)[]>;
10
10
  valueLengthLessThan: PropTypes.Requireable<number>;
11
11
  complement: PropTypes.Requireable<boolean>;
12
+ }> | PropTypes.InferProps<{
13
+ rule: PropTypes.Requireable<string>;
14
+ complement: PropTypes.Requireable<boolean>;
12
15
  }> | PropTypes.InferProps<{
13
16
  idx: PropTypes.Requireable<number>;
14
17
  isLast: PropTypes.Requireable<number>;
@@ -20,6 +23,9 @@ export default class MultiArrayField extends React.Component<any, any, any> {
20
23
  valueIn: PropTypes.Requireable<(string | null | undefined)[]>;
21
24
  valueLengthLessThan: PropTypes.Requireable<number>;
22
25
  complement: PropTypes.Requireable<boolean>;
26
+ }> | PropTypes.InferProps<{
27
+ rule: PropTypes.Requireable<string>;
28
+ complement: PropTypes.Requireable<boolean>;
23
29
  }> | PropTypes.InferProps<{
24
30
  idx: PropTypes.Requireable<number>;
25
31
  isLast: PropTypes.Requireable<number>;
@@ -48,6 +48,8 @@ class _AutosuggestWidget extends React.Component {
48
48
  return React.createElement(OrganizationAutosuggestWidget, Object.assign({}, this.props));
49
49
  case "collection":
50
50
  return React.createElement(CollectionAutosuggestWidget, Object.assign({}, this.props));
51
+ case "dataset":
52
+ return React.createElement(DatasetAutosuggestWidget, Object.assign({}, this.props));
51
53
  default:
52
54
  return React.createElement(RangeAutosuggestWidget, Object.assign({}, this.props));
53
55
  }
@@ -74,6 +76,9 @@ class _AutosuggestWidget extends React.Component {
74
76
  case "collection":
75
77
  component = CollectionAutosuggestWidget;
76
78
  break;
79
+ case "dataset":
80
+ component = DatasetAutosuggestWidget;
81
+ break;
77
82
  default:
78
83
  component = RangeAutosuggestWidget;
79
84
  }
@@ -314,46 +319,24 @@ class FriendsAutosuggestWidget extends React.Component {
314
319
  }
315
320
  FriendsAutosuggestWidget.contextType = ReactContext_1.default;
316
321
  class OrganizationAutosuggestWidget extends React.Component {
317
- constructor(props) {
318
- super(props);
319
- this.findExactMatch = (suggestions, inputValue) => {
320
- return suggestions.find(suggestion => (suggestion && suggestion.value.toLowerCase() === inputValue.trim().toLowerCase()));
321
- };
322
- this.getSuggestionFromValue = this.getSuggestionFromValue.bind(this);
323
- this.isValueSuggested = this.isValueSuggested.bind(this);
324
- }
325
- getSuggestionFromValue(value) {
326
- if (this.isValueSuggested(value)) {
327
- return this.props.formContext.apiClient.fetchCached(`/organization/by-id/${value}`).then(({ fullName }) => {
328
- if (fullName) {
329
- return {
330
- value: fullName,
331
- key: value
332
- };
333
- }
334
- });
335
- }
336
- else {
337
- return Promise.reject();
338
- }
339
- }
340
- isValueSuggested(value) {
341
- return !utils_1.isEmptyString(value) && value.match(/MOS\.\d+/);
342
- }
343
322
  render() {
344
- const _a = this.props, { options: propsOptions } = _a, propsWithoutOptions = __rest(_a, ["options"]);
345
- const options = {
346
- query: Object.assign({ includeSelf: true }, propsOptions.queryOptions),
347
- getSuggestionFromValue: this.getSuggestionFromValue,
348
- isValueSuggested: this.isValueSuggested,
349
- Wrapper: OrganizationWrapper,
350
- findExactMatch: this.findExactMatch
351
- };
352
- return React.createElement(Autosuggest, Object.assign({}, options, propsWithoutOptions, propsOptions));
323
+ return (React.createElement(BasicAutosuggestWidget, Object.assign({}, this.props, this.props.options, { nameField: "fullName", validValueRegexp: "MOS.\\d+", Wrapper: OrganizationWrapper })));
353
324
  }
354
325
  }
355
326
  OrganizationAutosuggestWidget.contextType = ReactContext_1.default;
356
327
  class CollectionAutosuggestWidget extends React.Component {
328
+ render() {
329
+ return (React.createElement(BasicAutosuggestWidget, Object.assign({}, this.props, this.props.options, { nameField: "collectionName", validValueRegexp: "HR.\\d+", Wrapper: CollectionWrapper })));
330
+ }
331
+ }
332
+ CollectionAutosuggestWidget.contextType = ReactContext_1.default;
333
+ class DatasetAutosuggestWidget extends React.Component {
334
+ render() {
335
+ return (React.createElement(BasicAutosuggestWidget, Object.assign({}, this.props, this.props.options, { nameField: "datasetName", validValueRegexp: "GX.\\d+", Wrapper: DatasetWrapper })));
336
+ }
337
+ }
338
+ DatasetAutosuggestWidget.contextType = ReactContext_1.default;
339
+ class BasicAutosuggestWidget extends React.Component {
357
340
  constructor(props) {
358
341
  super(props);
359
342
  this.findExactMatch = (suggestions, inputValue) => {
@@ -363,11 +346,12 @@ class CollectionAutosuggestWidget extends React.Component {
363
346
  this.isValueSuggested = this.isValueSuggested.bind(this);
364
347
  }
365
348
  getSuggestionFromValue(value) {
349
+ const { autosuggestField, nameField } = this.props;
366
350
  if (this.isValueSuggested(value)) {
367
- return this.props.formContext.apiClient.fetchCached(`/collection/by-id/${value}`).then(({ collectionName }) => {
368
- if (collectionName) {
351
+ return this.props.formContext.apiClient.fetchCached(`/${autosuggestField}/by-id/${value}`).then(result => {
352
+ if (result[nameField]) {
369
353
  return {
370
- value: collectionName,
354
+ value: result[nameField],
371
355
  key: value
372
356
  };
373
357
  }
@@ -378,21 +362,36 @@ class CollectionAutosuggestWidget extends React.Component {
378
362
  }
379
363
  }
380
364
  isValueSuggested(value) {
381
- return !utils_1.isEmptyString(value) && value.match(/HR\.\d+/);
365
+ const regexp = new RegExp(this.props.validValueRegexp);
366
+ return !utils_1.isEmptyString(value) && value.match(regexp);
382
367
  }
383
368
  render() {
384
- const _a = this.props, { options: propsOptions } = _a, propsWithoutOptions = __rest(_a, ["options"]);
385
369
  const options = {
386
- query: Object.assign({ includeSelf: true }, propsOptions.queryOptions),
370
+ query: Object.assign({ includeSelf: true }, this.props.queryOptions),
387
371
  getSuggestionFromValue: this.getSuggestionFromValue,
388
372
  isValueSuggested: this.isValueSuggested,
389
- Wrapper: CollectionWrapper,
373
+ Wrapper: this.props.Wrapper,
390
374
  findExactMatch: this.findExactMatch
391
375
  };
392
- return React.createElement(Autosuggest, Object.assign({}, options, propsWithoutOptions, propsOptions));
376
+ return React.createElement(Autosuggest, Object.assign({}, options, this.props));
393
377
  }
394
378
  }
395
- CollectionAutosuggestWidget.contextType = ReactContext_1.default;
379
+ BasicAutosuggestWidget.contextType = ReactContext_1.default;
380
+ BasicAutosuggestWidget.propTypes = {
381
+ autosuggestField: PropTypes.string.isRequired,
382
+ allowNonsuggestedValue: PropTypes.bool,
383
+ onSuggestionSelected: PropTypes.func,
384
+ onUnsuggestedSelected: PropTypes.func,
385
+ onInputChange: PropTypes.func,
386
+ uiSchema: PropTypes.object,
387
+ nameField: PropTypes.string,
388
+ validValueRegexp: PropTypes.string,
389
+ Wrapper: PropTypes.object
390
+ };
391
+ BasicAutosuggestWidget.defaultProps = {
392
+ nameField: "name",
393
+ validValueRegexp: ""
394
+ };
396
395
  class RangeAutosuggestWidget extends React.Component {
397
396
  render() {
398
397
  const _a = this.props, { options: propsOptions } = _a, propsWithoutOptions = __rest(_a, ["options"]);
@@ -1165,3 +1164,4 @@ const getWrapper = (unknownValueLabel) => React.forwardRef(({ formContext, child
1165
1164
  const FriendsWrapper = getWrapper("UnknownName");
1166
1165
  const OrganizationWrapper = getWrapper("UnknownOrganization");
1167
1166
  const CollectionWrapper = getWrapper("UnknownCollection");
1167
+ const DatasetWrapper = getWrapper("UnknownTag");
@@ -79,6 +79,11 @@
79
79
  "en": "Unknown collection",
80
80
  "sv": "Okänd samling"
81
81
  },
82
+ "unknownTag": {
83
+ "fi": "Tuntematon tagi",
84
+ "en": "Unknown tag",
85
+ "sv": "Okänd tagg"
86
+ },
82
87
  "fix": {
83
88
  "fi": "Korjaa",
84
89
  "en": "Fix",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luomus/laji-form",
3
- "version": "15.1.30",
3
+ "version": "15.1.31",
4
4
  "description": "React module capable of building dynamic forms from Laji form json schemas",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",