@luomus/laji-form 15.1.112 → 15.1.114

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.
@@ -48,12 +48,11 @@ export default class MultiArrayField extends React.Component<any, any, any> {
48
48
  };
49
49
  constructor(props: any);
50
50
  constructor(props: any, context: any);
51
- itemIds: {};
52
- render(): any;
51
+ render(): JSX.Element[];
53
52
  cache: {}[] | undefined;
54
53
  arrayKeyFunctions: any[] | undefined;
55
54
  groupItemIds: {} | {}[] | undefined;
56
- groupedItems: any;
55
+ groupedItems: never[][] | undefined;
57
56
  onChange: ((idx: any) => (formData: any) => void) & memoize.Memoized<(idx: any) => (formData: any) => void>;
58
57
  }
59
58
  import * as React from "react";
@@ -47,7 +47,6 @@ const memoizee_1 = __importDefault(require("memoizee"));
47
47
  class MultiArrayField extends React.Component {
48
48
  constructor() {
49
49
  super(...arguments);
50
- this.itemIds = {};
51
50
  this.onChange = (0, memoizee_1.default)((idx) => (formData) => {
52
51
  let offset = 0;
53
52
  for (let i = 0; i < idx; i++) {
@@ -114,27 +113,24 @@ class MultiArrayField extends React.Component {
114
113
  this.groupItemIds = getGroupItemIds();
115
114
  }
116
115
  }
117
- const itemGroups = Array(groups.length + 1).fill(undefined).map(_ => []);
118
- const addToGroup = (idx, item) => {
116
+ const groupedItems = Array(groups.length + 1).fill(undefined).map(_ => []);
117
+ const addToGroup = (groupIdx, item) => {
119
118
  const id = (0, utils_1.getUUID)(item);
120
- itemGroups[idx].push(item);
121
- this.groupItemIds[idx][id] = true;
122
- this.itemIds[id] = true;
119
+ this.groupItemIds[groupIdx][id] = true;
120
+ groupedItems[groupIdx].push(item);
123
121
  return true;
124
122
  };
125
- (props.formData || []).forEach(item => {
126
- this.groupItemIds.forEach((_, groupIdx) => {
127
- if (this.groupItemIds[groupIdx][(0, utils_1.getUUID)(item)]) {
128
- addToGroup(groupIdx, item);
129
- }
130
- });
131
- });
132
123
  const nonGrouped = [];
133
- const groupedItems = (props.formData || []).reduce((itemGroups, item, idx) => {
134
- const addedToGroup = groups.some((group, groupIdx) => {
135
- if (this.itemIds[(0, utils_1.getUUID)(item)]) {
136
- return true;
124
+ (props.formData || []).forEach((item, idx) => {
125
+ const id = (0, utils_1.getUUID)(item);
126
+ // Restore persisted group
127
+ for (let g = 0; g < this.groupItemIds.length; g++) {
128
+ if (this.groupItemIds[g][id]) {
129
+ addToGroup(g, item);
130
+ return;
137
131
  }
132
+ }
133
+ const addedToGroup = groups.some((group, groupIdx) => {
138
134
  const { rules = [] } = group;
139
135
  let passes;
140
136
  if (cache) {
@@ -153,8 +149,7 @@ class MultiArrayField extends React.Component {
153
149
  if (!addedToGroup) {
154
150
  nonGrouped.push([item, idx]);
155
151
  }
156
- return itemGroups;
157
- }, itemGroups);
152
+ });
158
153
  nonGrouped.forEach(([item, idx]) => {
159
154
  const context = (0, Context_1.default)(`${persistenceKey}_MULTI`);
160
155
  const groupIdx = this.groupItemIds.length - 1;
@@ -48,5 +48,6 @@ export default class TaxonSetPopulatorField extends React.Component<FieldProps>
48
48
  };
49
49
  componentDidMount(): Promise<void>;
50
50
  onChange: (formData: any) => Promise<void>;
51
+ private sortByTaxonSet;
51
52
  private fetchTaxaFromSet;
52
53
  }
@@ -54,6 +54,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
54
54
  const React = __importStar(require("react"));
55
55
  const PropTypes = __importStar(require("prop-types"));
56
56
  const VirtualSchemaField_1 = __importDefault(require("../VirtualSchemaField"));
57
+ const utils_1 = require("../..//utils");
57
58
  const propsPropType = PropTypes.shape({
58
59
  from: PropTypes.string.isRequired,
59
60
  fromArrayKey: PropTypes.string,
@@ -99,16 +100,8 @@ let TaxonSetPopulatorField = class TaxonSetPopulatorField extends React.Componen
99
100
  return this.unitTaxonSets[unit.identifications[0].taxonID]
100
101
  && this.unitTaxonSets[unit.identifications[0].taxonID].includes(deletedTaxonSetId);
101
102
  });
102
- observationsExist = deletedTaxonSetUnits.some((unit) => {
103
- var _a, _b, _c, _d;
104
- return unit.maleIndividualCount ||
105
- unit.femaleIndividualCount ||
106
- unit.nestCount ||
107
- ((_a = unit.unitFact) === null || _a === void 0 ? void 0 : _a.destroyedNestCount) ||
108
- ((_b = unit.unitFact) === null || _b === void 0 ? void 0 : _b.broodCount) ||
109
- ((_c = unit.unitFact) === null || _c === void 0 ? void 0 : _c.femalesWithBroodsCount) ||
110
- ((_d = unit.unitFact) === null || _d === void 0 ? void 0 : _d.juvenileCount);
111
- });
103
+ observationsExist = deletedTaxonSetUnits.some((unit) => unit.observationStatus !== "MY.observationStatusIgnored" &&
104
+ unit.observationStatus !== "MY.observationStatusNotObserved");
112
105
  if (observationsExist) {
113
106
  window.alert(translations === null || translations === void 0 ? void 0 : translations.TaxonSetDeletionFailed);
114
107
  const restoredFormData = Object.assign(Object.assign({}, formData), { taxonCensus: [
@@ -126,7 +119,8 @@ let TaxonSetPopulatorField = class TaxonSetPopulatorField extends React.Componen
126
119
  return !this.unitTaxonSets[unit.identifications[0].taxonID]
127
120
  || !this.unitTaxonSets[unit.identifications[0].taxonID].includes(deletedTaxonSetId);
128
121
  });
129
- const updatedFormData = Object.assign(Object.assign({}, formData), { units: updatedUnits });
122
+ const sortedUnits = this.sortByTaxonSet(updatedUnits, currentTaxonSets);
123
+ const updatedFormData = Object.assign(Object.assign({}, formData), { units: sortedUnits });
130
124
  this.props.onChange(updatedFormData);
131
125
  });
132
126
  return;
@@ -142,32 +136,20 @@ let TaxonSetPopulatorField = class TaxonSetPopulatorField extends React.Componen
142
136
  return;
143
137
  }
144
138
  const results = yield this.fetchTaxaFromSet(this.props, addedTaxonSets);
145
- // sort results by taxon set (lowest index of result's taxon sets in addedTaxonSets)
146
- if (addedTaxonSets.length > 1) {
147
- results.sort((a, b) => {
148
- const aIndex = (a.taxonSets || []).reduce((min, taxonSet) => {
149
- const idx = addedTaxonSets.indexOf(taxonSet);
150
- return idx !== -1 && idx < min ? idx : min;
151
- }, addedTaxonSets.length);
152
- const bIndex = (b.taxonSets || []).reduce((min, taxonSet) => {
153
- const idx = addedTaxonSets.indexOf(taxonSet);
154
- return idx !== -1 && idx < min ? idx : min;
155
- }, addedTaxonSets.length);
156
- return aIndex - bIndex;
157
- });
158
- }
139
+ const tmpIdTree = this.props.formContext.services.ids.getRelativeTmpIdTree(this.props.idSchema.units.$id);
159
140
  const newUnits = results.map((result) => {
160
141
  this.unitTaxonSets[result.id] = result.taxonSets || [];
161
- return {
142
+ return (0, utils_1.addLajiFormIds)({
162
143
  identifications: [{
163
144
  taxon: result.scientificName,
164
145
  taxonID: result.id,
165
146
  taxonVerbatim: result.vernacularName
166
147
  }],
167
148
  informalTaxonGroups: result.informalTaxonGroups || []
168
- };
149
+ }, tmpIdTree, false)[0];
169
150
  });
170
- const updatedFormData = Object.assign(Object.assign({}, formData), { units: [...currentUnits, ...newUnits] });
151
+ const sortedUnits = this.sortByTaxonSet([...currentUnits, ...newUnits], currentTaxonSets);
152
+ const updatedFormData = Object.assign(Object.assign({}, formData), { units: sortedUnits });
171
153
  this.props.onChange(updatedFormData);
172
154
  return;
173
155
  }
@@ -204,6 +186,23 @@ let TaxonSetPopulatorField = class TaxonSetPopulatorField extends React.Componen
204
186
  });
205
187
  });
206
188
  }
189
+ // sort unit by taxon set (lowest index of unit's taxon sets in currentTaxonSets)
190
+ sortByTaxonSet(units, taxonSets) {
191
+ return units.sort((a, b) => {
192
+ var _a, _b, _c, _d;
193
+ const aTaxonSets = this.unitTaxonSets[(_b = (_a = a.identifications) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.taxonID] || [];
194
+ const bTaxonSets = this.unitTaxonSets[(_d = (_c = b.identifications) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.taxonID] || [];
195
+ const aIndex = aTaxonSets.reduce((min, taxonSet) => {
196
+ const idx = taxonSets.indexOf(taxonSet);
197
+ return idx !== -1 && idx < min ? idx : min;
198
+ }, taxonSets.length);
199
+ const bIndex = bTaxonSets.reduce((min, taxonSet) => {
200
+ const idx = taxonSets.indexOf(taxonSet);
201
+ return idx !== -1 && idx < min ? idx : min;
202
+ }, taxonSets.length);
203
+ return aIndex - bIndex;
204
+ });
205
+ }
207
206
  fetchTaxaFromSet(props, taxonSets) {
208
207
  return __awaiter(this, void 0, void 0, function* () {
209
208
  var _a;
@@ -894,6 +894,11 @@
894
894
  "en": "The same value may not be used more than once",
895
895
  "sv": "Samma värde får inte användas mer än en gång"
896
896
  },
897
+ "valueMustBe": {
898
+ "fi": "Arvon on oltava",
899
+ "en": "Value must be",
900
+ "sv": "Värdet måste vara"
901
+ },
897
902
  "taxonSetDeletionFailed": {
898
903
  "fi": "Tätä lajiryhmää ei voi poistaa, koska siihen on kirjattu havaintoja.",
899
904
  "en": "This taxon set cannot be removed because it contains observations.",
package/lib/validation.js CHANGED
@@ -74,6 +74,9 @@ function transformErrors(translations, errors) {
74
74
  else if (error.name === "uniqueItems") {
75
75
  error.message = translations.UniqueItems + ".";
76
76
  }
77
+ else if (error.name === "minimum") {
78
+ error.message = translations.ValueMustBe + " " + error.params.comparison + " " + error.params.limit + ".";
79
+ }
77
80
  return error;
78
81
  });
79
82
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luomus/laji-form",
3
- "version": "15.1.112",
3
+ "version": "15.1.114",
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",
@@ -41,7 +41,7 @@
41
41
  "license": "MIT",
42
42
  "dependencies": {
43
43
  "@luomus/laji-map": "^5.1.19",
44
- "@luomus/laji-validate": "^0.0.131",
44
+ "@luomus/laji-validate": "^0.0.132",
45
45
  "@rjsf/core": "~5.1.0",
46
46
  "@rjsf/utils": "~5.1.0",
47
47
  "@rjsf/validator-ajv6": "~5.1.0",