@entryscape/rdforms 10.7.1 → 10.7.2

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.
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "application profile",
9
9
  "linked data"
10
10
  ],
11
- "version": "10.7.1",
11
+ "version": "10.7.2",
12
12
  "main": "dist/rdforms.node.js",
13
13
  "browser": "dist/rdforms.react.js",
14
14
  "module": "main.js",
@@ -7,6 +7,7 @@ import FormControl from '@mui/material/FormControl';
7
7
  import { TextField } from '@mui/material';
8
8
  import Select from '@mui/material/Select';
9
9
  import moment from 'moment';
10
+ import CODES from '../../model/CODES';
10
11
  import renderingContext from '../renderingContext';
11
12
  import {
12
13
  getDate,
@@ -19,7 +20,13 @@ import {
19
20
  } from '../viewUtils';
20
21
  import { useNamedGraphId } from './hooks';
21
22
 
22
- const getDatatypeFromBinding = binding => getDatatype(binding.getDatatype()) || getDatatypeFromItem(binding.getItem());
23
+ const getDatatypeFromBinding = (binding, alternatives) => {
24
+ const currentDatatype = getDatatype(binding.getDatatype());
25
+ if (!alternatives[currentDatatype]) {
26
+ alternatives[currentDatatype] = 'error';
27
+ }
28
+ return currentDatatype || getDatatypeFromItem(binding.getItem());
29
+ };
23
30
 
24
31
  const datePresenter = (fieldDiv, binding, context) => {
25
32
  try {
@@ -89,13 +96,20 @@ const dateEditor = (fieldDiv, binding, context) => {
89
96
  const DateComp = () => {
90
97
  const value = binding.getGist();
91
98
  const alternatives = useMemo(() => getAllowedDateAlternatives(binding.getItem()), []);
92
- const onlyOneAlternative = Object.keys(alternatives).length === 1;
93
99
  const [selectedDate, setSelectedDate] = useState(value === '' ? null : getDate(value));
94
- const [selectedDatatype, setDatatype] = useState(getDatatypeFromBinding(binding));
100
+ const [selectedDatatype, setDatatype] = useState(getDatatypeFromBinding(binding, alternatives));
101
+ const onlyOneAlternative = Object.keys(alternatives).length === 1;
102
+ const [error, setError] = useState(binding.getMatchingCode() === CODES.WRONG_DATATYPE);
103
+
104
+ useEffect(() => {
105
+ fieldDiv.toggleClass('mismatchReport', error);
106
+ }, [error]);
107
+
95
108
  useEffect(() => {
96
109
  context.clear = () => {
97
110
  setSelectedDate(null);
98
- setDatatype(getDatatypeFromBinding(binding));
111
+ setDatatype(getDatatypeFromItem(binding.getItem()));
112
+ setError(false);
99
113
  };
100
114
  }, []);
101
115
 
@@ -113,6 +127,7 @@ const dateEditor = (fieldDiv, binding, context) => {
113
127
  binding.setDatatype(getDatatypeURI(event.target.value));
114
128
  binding.setValue(getDateValue(selectedDate, event.target.value));
115
129
  setDatatype(event.target.value);
130
+ setError(alternatives[event.target.value] === 'error');
116
131
  };
117
132
  const inputProps = {
118
133
  'aria-labelledby': context.view.getLabelIndex(binding),
@@ -124,6 +139,7 @@ const dateEditor = (fieldDiv, binding, context) => {
124
139
  const enabledDatePicker = !ngId && (selectedDatatype === 'DateTime' || selectedDatatype === 'Date'
125
140
  || selectedDatatype === 'Year' || selectedDatatype === 'YearMonth' || selectedDatatype === 'MonthDay');
126
141
  return (
142
+ <>
127
143
  <LocalizationProvider dateAdapter={DateAdapter}>
128
144
  <span className="rdformsDatePicker">
129
145
  {visibleDatePicker && (
@@ -162,34 +178,47 @@ const dateEditor = (fieldDiv, binding, context) => {
162
178
  <Select
163
179
  value={selectedDatatype}
164
180
  inputProps={inputProps}
181
+ error={alternatives[selectedDatatype] === 'error'}
165
182
  onChange={onDatatypeChange}
166
183
  disabled={!!ngId}
167
184
  >
168
185
  {alternatives.Year && (
169
- <MenuItem value="Year">{bundle.date_year}</MenuItem>
186
+ <MenuItem disabled={alternatives.Year === 'error'} className="rdformsDatatypeOption"
187
+ value="Year">{bundle.date_year}</MenuItem>
170
188
  )}
171
189
  {alternatives.Date && (
172
- <MenuItem value="Date">{bundle.date_date}</MenuItem>
190
+ <MenuItem disabled={alternatives.Date === 'error'} className="rdformsDatatypeOption"
191
+ value="Date">{bundle.date_date}</MenuItem>
173
192
  )}
174
193
  {alternatives.DateTime && (
175
- <MenuItem value="DateTime">
194
+ <MenuItem disabled={alternatives.DateTime === 'error'} className="rdformsDatatypeOption"
195
+ value="DateTime">
176
196
  {bundle.date_date_and_time}
177
197
  </MenuItem>
178
198
  )}
179
199
  {alternatives.YearMonth && (
180
- <MenuItem value="YearMonth">{bundle.date_year_and_month}</MenuItem>
200
+ <MenuItem disabled={alternatives.YearMonth === 'error'} className="rdformsDatatypeOption"
201
+ value="YearMonth">{bundle.date_year_and_month}</MenuItem>
181
202
  )}
182
203
  {alternatives.MonthDay && (
183
- <MenuItem value="MonthDay">{bundle.date_month_and_day}</MenuItem>
204
+ <MenuItem disabled={alternatives.MonthDay === 'error'} className="rdformsDatatypeOption"
205
+ value="MonthDay">{bundle.date_month_and_day}</MenuItem>
184
206
  )}
185
207
  {alternatives.Time && (
186
- <MenuItem value="Time">{bundle.date_time}</MenuItem>
208
+ <MenuItem disabled={alternatives.Time === 'error'} className="rdformsDatatypeOption"
209
+ value="Time">{bundle.date_time}</MenuItem>
187
210
  )}
188
211
  </Select>
189
212
  </FormControl>
190
213
  )}
191
214
  </span>
192
215
  </LocalizationProvider>
216
+ {error && (
217
+ <div key="warning" className="rdformsWarning">
218
+ {context.view.messages.wrongDatatypeField}
219
+ </div>
220
+ )}
221
+ </>
193
222
  );
194
223
  };
195
224
  fieldDiv.appendChild(<DateComp key={binding.getHash()}></DateComp>);
@@ -228,3 +228,7 @@ div.MuiTooltip-tooltip {
228
228
  .rdformsHeading>.rdformsDescription {
229
229
  margin: -20px 0 20px;
230
230
  }
231
+
232
+ .Mui-disabled.rdformsDatatypeOption {
233
+ color: red;
234
+ }
@@ -54,5 +54,6 @@
54
54
  "missingValueField": "This field is required, please provide a value.",
55
55
  "dependencyField": "This field depends on another field, please review the field it depends on or remove this value.",
56
56
  "wrongValueField": "This is an invalid value, please change or remove it.",
57
+ "wrongDatatypeField": "The value has an invalid datatype, please change or remove it.",
57
58
  "openLinkExternally": "Open link externally"
58
59
  }