@entryscape/rdforms 10.7.0 → 10.8.0

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/main.js CHANGED
@@ -1,15 +1,9 @@
1
1
  import 'whatwg-fetch';
2
- import './loadViewOptions';
3
2
 
4
3
  export { default as renderingContext } from './src/view/renderingContext';
5
4
  export { default as ItemStore } from './src/template/ItemStore';
6
5
  export { default as bundleLoader } from './src/template/bundleLoader';
7
- export { default as Presenter } from './src/view/Presenter';
8
- export { default as Editor } from './src/view/Editor';
9
- export { default as LevelEditor } from './src/view/bootstrap/LevelEditor';
10
- export { default as ValidationPresenter } from './src/view/ValidationPresenter';
11
6
  export { default as utils } from './src/utils';
12
7
  export { default as system } from './src/model/system';
13
8
  export { default as engine } from './src/model/engine';
14
9
  export { default as validate } from './src/model/validate';
15
- export { Editor as EditorWrapper, Presenter as PresenterWrapper} from './src/view/react/Wrappers';
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "application profile",
9
9
  "linked data"
10
10
  ],
11
- "version": "10.7.0",
11
+ "version": "10.8.0",
12
12
  "main": "dist/rdforms.node.js",
13
13
  "browser": "dist/rdforms.react.js",
14
14
  "module": "main.js",
@@ -18,12 +18,12 @@
18
18
  "dependencies": {
19
19
  "@emotion/react": "^11.4.1",
20
20
  "@emotion/styled": "^11.3.0",
21
- "@entryscape/rdfjson": "^2.5.4",
21
+ "@entryscape/rdfjson": "^2.5.7",
22
22
  "@fortawesome/fontawesome-free": "^5.8.1",
23
23
  "@mui/icons-material": "^5.0.3",
24
- "@mui/lab": "^5.0.0-alpha.51",
25
24
  "@mui/material": "^5.0.3",
26
25
  "@mui/styles": "^5.0.1",
26
+ "@mui/x-date-pickers": "^5.0.0-beta.7",
27
27
  "@selectize/selectize": "^0.13.5",
28
28
  "arrive": "^2.4.1",
29
29
  "bootstrap": "^4.3.1",
@@ -31,7 +31,7 @@
31
31
  "bootstrap-material-datetimepicker": "https://bitbucket.org/metasolutions/bootstrap-material-datetimepicker.git#webpack",
32
32
  "bootstrap-material-design": "^4.1.1",
33
33
  "circular-dependency-plugin": "^5.2.2",
34
- "core-js": "^3.1.4",
34
+ "core-js": "^3.4.0",
35
35
  "ifdef-loader": "^2.1.1",
36
36
  "jquery": "^3.3.1",
37
37
  "jquery-mousewheel": "^3.1.13",
@@ -67,7 +67,7 @@
67
67
  "clean-webpack-plugin": "^0.1.18",
68
68
  "copy-webpack-plugin": "^5.0.5",
69
69
  "css-loader": "^3.5.3",
70
- "eslint": "^3.17.1",
70
+ "eslint": "^8.23.0",
71
71
  "eslint-config-airbnb-base": "^11.1.1",
72
72
  "eslint-plugin-import": "^2.2.0",
73
73
  "eslint-plugin-requirejs": "^3.1.1",
@@ -96,8 +96,7 @@
96
96
  "dist",
97
97
  "src",
98
98
  "main*",
99
- "index*",
100
- "loadViewOptions.js"
99
+ "renderers"
101
100
  ],
102
101
  "scripts": {
103
102
  "build:all": "webpack --display-modules --mode=production --config webpack.all.js",
@@ -0,0 +1,9 @@
1
+ import 'whatwg-fetch';
2
+ import '../src/view/bmd/all';
3
+ import '../src/view/bmd/style.css';
4
+
5
+ export { default as Editor } from '../src/view/Editor';
6
+ export { default as Presenter } from '../src/view/Presenter';
7
+ export { default as ValidationPresenter } from '../src/view/ValidationPresenter';
8
+ export { default as LevelEditor } from '../src/view/bootstrap/LevelEditor';
9
+ export * from '../main';
@@ -0,0 +1,8 @@
1
+ import '../src/view/bootstrap/all';
2
+
3
+ export { default as Editor } from '../src/view/Editor';
4
+ export { default as Presenter } from '../src/view/Presenter';
5
+ export { default as ValidationPresenter } from '../src/view/ValidationPresenter';
6
+ export { default as LevelEditor } from '../src/view/bootstrap/LevelEditor';
7
+
8
+ export * from '../main';
@@ -0,0 +1,4 @@
1
+ import '../src/view/jquery/all';
2
+
3
+ export { default as Presenter } from '../src/view/Presenter';
4
+ export * from '../main';
@@ -0,0 +1,5 @@
1
+ import 'regenerator-runtime/runtime';
2
+ import '../src/view/react/all';
3
+
4
+ export * from '../src/view/react/Wrappers';
5
+ export * from '../main';
@@ -230,15 +230,14 @@ export default class Editor extends Presenter {
230
230
  if (!match) {
231
231
  if (binding.isValid()) {
232
232
  renderingContext.domClassToggle(newNode, 'missingDepsWithValue', true);
233
- binding.getCardinalityTracker().setDepsOk(false);
234
233
  } else {
235
234
  renderingContext.domClassToggle(newNode, 'missingDeps', true);
236
235
  }
237
236
  } else {
238
237
  renderingContext.domClassToggle(newNode, 'missingDepsWithValue', false);
239
- binding.getCardinalityTracker().setDepsOk(true);
240
238
  renderingContext.domClassToggle(newNode, 'missingDeps', false);
241
239
  }
240
+ binding.getCardinalityTracker().setDepsOk(match);
242
241
  };
243
242
  const fromBinding = engine.findBindingRelativeToParentBinding(binding.getParent(), path);
244
243
  if (!engine.matchPathBelowBinding(fromBinding, path)) {
@@ -46,8 +46,10 @@ const addChangeListener = (inp, binding, regex, extLink, help) => {
46
46
  extLink.prop('href', binding.getValue());
47
47
  disableExtLink = false;
48
48
  }
49
- help.toggleClass('rdformsHelpActive', false);
50
- } else {
49
+ if (help) {
50
+ help.toggleClass('rdformsHelpActive', false);
51
+ }
52
+ } else if (help) {
51
53
  help.toggleClass('rdformsHelpActive', true);
52
54
  }
53
55
  if (extLink) {
@@ -10,7 +10,9 @@ renderingContext.renderPresenterLabel = (rowNode, binding, item, context, labelR
10
10
  label = '';
11
11
  }
12
12
 
13
- const $labelDiv = jquery('<div class="rdformsLabel" tabindex="0">').text(label).appendTo(rowNode);
13
+ const $labelDiv = item.hasStyle('heading') ?
14
+ jquery('<h2 class="rdformsLabel" tabindex="0">').text(label).appendTo(rowNode) :
15
+ jquery('<div class="rdformsLabel" tabindex="0">').text(label).appendTo(rowNode);
14
16
  if (binding) {
15
17
  $labelDiv.attr('id', context.view.createLabelIndex(binding));
16
18
  }
@@ -153,7 +153,7 @@ const newStruct = (Tag, parent, nodeId) => {
153
153
  };
154
154
  // -- END
155
155
  return (
156
- <Tag id={nodeId} className={clsSet.join(' ')}>
156
+ <Tag id={nodeId} className={Array.from(clsSet).join(' ')}>
157
157
  {childArr.map((child, index) => getReactComponent(child, index))}
158
158
  {text}
159
159
  </Tag>
@@ -1,12 +1,15 @@
1
1
  /* eslint-disable no-unused-vars */
2
2
  import React, { useState, useEffect, useMemo } from 'react';
3
- import { DatePicker, TimePicker, LocalizationProvider } from '@mui/lab';
4
- import DateAdapter from '@mui/lab/AdapterMoment';
3
+ import { DatePicker } from '@mui/x-date-pickers/DatePicker';
4
+ import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
5
+ import { TimePicker } from '@mui/x-date-pickers/TimePicker';
6
+ import { AdapterMoment } from '@mui/x-date-pickers/AdapterMoment';
5
7
  import MenuItem from '@mui/material/MenuItem';
6
8
  import FormControl from '@mui/material/FormControl';
7
9
  import { TextField } from '@mui/material';
8
10
  import Select from '@mui/material/Select';
9
11
  import moment from 'moment';
12
+ import CODES from '../../model/CODES';
10
13
  import renderingContext from '../renderingContext';
11
14
  import {
12
15
  getDate,
@@ -19,7 +22,13 @@ import {
19
22
  } from '../viewUtils';
20
23
  import { useNamedGraphId } from './hooks';
21
24
 
22
- const getDatatypeFromBinding = binding => getDatatype(binding.getDatatype()) || getDatatypeFromItem(binding.getItem());
25
+ const getDatatypeFromBinding = (binding, alternatives) => {
26
+ const currentDatatype = getDatatype(binding.getDatatype());
27
+ if (!alternatives[currentDatatype]) {
28
+ alternatives[currentDatatype] = 'error';
29
+ }
30
+ return currentDatatype || getDatatypeFromItem(binding.getItem());
31
+ };
23
32
 
24
33
  const datePresenter = (fieldDiv, binding, context) => {
25
34
  try {
@@ -89,13 +98,20 @@ const dateEditor = (fieldDiv, binding, context) => {
89
98
  const DateComp = () => {
90
99
  const value = binding.getGist();
91
100
  const alternatives = useMemo(() => getAllowedDateAlternatives(binding.getItem()), []);
92
- const onlyOneAlternative = Object.keys(alternatives).length === 1;
93
101
  const [selectedDate, setSelectedDate] = useState(value === '' ? null : getDate(value));
94
- const [selectedDatatype, setDatatype] = useState(getDatatypeFromBinding(binding));
102
+ const [selectedDatatype, setDatatype] = useState(getDatatypeFromBinding(binding, alternatives));
103
+ const onlyOneAlternative = Object.keys(alternatives).length === 1;
104
+ const [error, setError] = useState(binding.getMatchingCode() === CODES.WRONG_DATATYPE);
105
+
106
+ useEffect(() => {
107
+ fieldDiv.toggleClass('mismatchReport', error);
108
+ }, [error]);
109
+
95
110
  useEffect(() => {
96
111
  context.clear = () => {
97
112
  setSelectedDate(null);
98
- setDatatype(getDatatypeFromBinding(binding));
113
+ setDatatype(getDatatypeFromItem(binding.getItem()));
114
+ setError(false);
99
115
  };
100
116
  }, []);
101
117
 
@@ -113,6 +129,7 @@ const dateEditor = (fieldDiv, binding, context) => {
113
129
  binding.setDatatype(getDatatypeURI(event.target.value));
114
130
  binding.setValue(getDateValue(selectedDate, event.target.value));
115
131
  setDatatype(event.target.value);
132
+ setError(alternatives[event.target.value] === 'error');
116
133
  };
117
134
  const inputProps = {
118
135
  'aria-labelledby': context.view.getLabelIndex(binding),
@@ -124,7 +141,8 @@ const dateEditor = (fieldDiv, binding, context) => {
124
141
  const enabledDatePicker = !ngId && (selectedDatatype === 'DateTime' || selectedDatatype === 'Date'
125
142
  || selectedDatatype === 'Year' || selectedDatatype === 'YearMonth' || selectedDatatype === 'MonthDay');
126
143
  return (
127
- <LocalizationProvider dateAdapter={DateAdapter}>
144
+ <>
145
+ <LocalizationProvider dateAdapter={AdapterMoment}>
128
146
  <span className="rdformsDatePicker">
129
147
  {visibleDatePicker && (
130
148
  <DatePicker
@@ -162,34 +180,47 @@ const dateEditor = (fieldDiv, binding, context) => {
162
180
  <Select
163
181
  value={selectedDatatype}
164
182
  inputProps={inputProps}
183
+ error={alternatives[selectedDatatype] === 'error'}
165
184
  onChange={onDatatypeChange}
166
185
  disabled={!!ngId}
167
186
  >
168
187
  {alternatives.Year && (
169
- <MenuItem value="Year">{bundle.date_year}</MenuItem>
188
+ <MenuItem disabled={alternatives.Year === 'error'} className="rdformsDatatypeOption"
189
+ value="Year">{bundle.date_year}</MenuItem>
170
190
  )}
171
191
  {alternatives.Date && (
172
- <MenuItem value="Date">{bundle.date_date}</MenuItem>
192
+ <MenuItem disabled={alternatives.Date === 'error'} className="rdformsDatatypeOption"
193
+ value="Date">{bundle.date_date}</MenuItem>
173
194
  )}
174
195
  {alternatives.DateTime && (
175
- <MenuItem value="DateTime">
196
+ <MenuItem disabled={alternatives.DateTime === 'error'} className="rdformsDatatypeOption"
197
+ value="DateTime">
176
198
  {bundle.date_date_and_time}
177
199
  </MenuItem>
178
200
  )}
179
201
  {alternatives.YearMonth && (
180
- <MenuItem value="YearMonth">{bundle.date_year_and_month}</MenuItem>
202
+ <MenuItem disabled={alternatives.YearMonth === 'error'} className="rdformsDatatypeOption"
203
+ value="YearMonth">{bundle.date_year_and_month}</MenuItem>
181
204
  )}
182
205
  {alternatives.MonthDay && (
183
- <MenuItem value="MonthDay">{bundle.date_month_and_day}</MenuItem>
206
+ <MenuItem disabled={alternatives.MonthDay === 'error'} className="rdformsDatatypeOption"
207
+ value="MonthDay">{bundle.date_month_and_day}</MenuItem>
184
208
  )}
185
209
  {alternatives.Time && (
186
- <MenuItem value="Time">{bundle.date_time}</MenuItem>
210
+ <MenuItem disabled={alternatives.Time === 'error'} className="rdformsDatatypeOption"
211
+ value="Time">{bundle.date_time}</MenuItem>
187
212
  )}
188
213
  </Select>
189
214
  </FormControl>
190
215
  )}
191
216
  </span>
192
217
  </LocalizationProvider>
218
+ {error && (
219
+ <div key="warning" className="rdformsWarning">
220
+ {context.view.messages.wrongDatatypeField}
221
+ </div>
222
+ )}
223
+ </>
193
224
  );
194
225
  };
195
226
  fieldDiv.appendChild(<DateComp key={binding.getHash()}></DateComp>);
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable no-unused-vars */
2
- import React, { useState, useEffect, forwardRef } from 'react';
2
+ import React, { Fragment, useState, useEffect, forwardRef } from 'react';
3
3
  import Tooltip, { tooltipClasses } from '@mui/material/Tooltip';
4
4
  import { styled } from '@mui/material/styles';
5
5
  import ClickAwayListener from '@mui/material/ClickAwayListener';
@@ -96,8 +96,8 @@ renderingContext.renderPresenterLabel = (rowNode, binding, item, context) => {
96
96
  label = item.hasStyle('heading') ?
97
97
  <h2 tabIndex="0" id={labelId} className="rdformsLabelRow"><span className="rdformsLabel">{label}</span></h2> :
98
98
  <span tabIndex="0" id={labelId} className="rdformsLabelRow"><span className="rdformsLabel">{label}</span></span>;
99
- rowNode.appendChild(<><ItemTooltip key={`${binding ? binding.getHash() : item._internalId}_label` }
100
- context={context} item={item}>{label}</ItemTooltip>{description}</>);
99
+ rowNode.appendChild(<Fragment key={`${binding ? binding.getHash() : item._internalId}_label` }><ItemTooltip
100
+ context={context} item={item}>{label}</ItemTooltip>{description}</Fragment>);
101
101
  };
102
102
 
103
103
  renderingContext.renderEditorLabel = (rowNode, binding, item, context) => {
@@ -150,8 +150,8 @@ renderingContext.renderEditorLabel = (rowNode, binding, item, context) => {
150
150
  }
151
151
 
152
152
  const labelId = context.view.createLabelIndex(binding);
153
- rowNode.appendChild(<><div key={`${binding.getHash()}_label`} id={labelId} className="rdformsLabelRow">{
154
- label}{mark}{Button && <Button></Button>}</div>{description}</>);
153
+ rowNode.appendChild(<Fragment key={`${binding.getHash()}_label`}><div id={labelId} className="rdformsLabelRow">{
154
+ label}{mark}{Button && <Button></Button>}</div>{description}</Fragment>);
155
155
  }
156
156
  };
157
157
 
@@ -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
  }
package/index.bmd.js DELETED
@@ -1,16 +0,0 @@
1
- import 'whatwg-fetch';
2
- import 'core-js/stable';
3
- import 'regenerator-runtime/runtime';
4
- import bundleLoader from './src/template/bundleLoader';
5
- import ItemStore from './src/template/ItemStore';
6
-
7
- import './src/view/bmd/all';
8
- import './src/view/bmd/style.css';
9
-
10
- import Editor from './src/view/Editor';
11
- import Presenter from './src/view/Presenter';
12
- import renderingContext from './src/view/renderingContext';
13
- import ValidationPresenter from './src/view/ValidationPresenter';
14
- import LevelEditor from './src/view/bootstrap/LevelEditor';
15
-
16
- export { bundleLoader, ItemStore, Editor, Presenter, ValidationPresenter, LevelEditor, renderingContext };
@@ -1,12 +0,0 @@
1
- import 'core-js/stable';
2
- import 'regenerator-runtime/runtime';
3
- import bundleLoader from './src/template/bundleLoader';
4
- import ItemStore from './src/template/ItemStore';
5
- import './src/view/bootstrap/all';
6
- import Editor from './src/view/Editor';
7
- import Presenter from './src/view/Presenter';
8
- import renderingContext from './src/view/renderingContext';
9
- import ValidationPresenter from './src/view/ValidationPresenter';
10
- import LevelEditor from './src/view/bootstrap/LevelEditor';
11
-
12
- export { bundleLoader, ItemStore, Editor, Presenter, ValidationPresenter, LevelEditor, renderingContext };
package/index.jquery.js DELETED
@@ -1,9 +0,0 @@
1
- import 'core-js/stable';
2
- import 'regenerator-runtime/runtime';
3
- import bundleLoader from './src/template/bundleLoader';
4
- import ItemStore from './src/template/ItemStore';
5
- import './src/view/jquery/all';
6
- import Presenter from './src/view/Presenter';
7
- import renderingContext from './src/view/renderingContext';
8
-
9
- export { bundleLoader, ItemStore, Presenter, renderingContext };
package/index.react.js DELETED
@@ -1,9 +0,0 @@
1
- import 'core-js/stable';
2
- import 'regenerator-runtime/runtime';
3
- import bundleLoader from './src/template/bundleLoader';
4
- import ItemStore from './src/template/ItemStore';
5
- import './src/view/react/all';
6
- import { Editor, Presenter, ValidationPresenter } from './src/view/react/Wrappers';
7
- import renderingContext from './src/view/renderingContext';
8
-
9
- export { bundleLoader, ItemStore, Presenter, Editor, ValidationPresenter, renderingContext };
@@ -1,10 +0,0 @@
1
- /// #if BLOCKS
2
- import 'bootstrap';
3
- import './src/view/bootstrap/Select2';
4
- import './src/view/bootstrap/DateTimeBootstrapDatepicker';
5
- import 'select2/dist/css/select2.css';
6
- import './src/view/bootstrap/style.css';
7
- /// #else
8
- import './src/view/react/all'; // hard coded react
9
- /// #endif
10
-